FAQ OracleConsultez toutes les FAQ

Nombre d'auteurs : 16, nombre de questions : 138, dernière mise à jour : 16 février 2013 

 
OuvrirSommaireAdministrationAutres

Comment calculer l'espace disque occupé par les objets Oracle

En interrogeant la vue DBA_SEGMENTS :

 
Sélectionnez

SQL> COLUMN TABLE FORMAT A30 
SQL> COLUMN Taille FORMAT A15 
SQL> COLUMN TABLESPACE FORMAT A20 
SQL> 
SQL> SELECT segment_name "TABLE" 
  2      , SUM(BYTES) /1024 || 'Ko' "Taille" 
  3      , blocks "Blocs" 
  4      , tablespace_name "TABLESPACE" 
  5  FROM   dba_segments 
  6  WHERE  segment_type = 'TABLE' 
  7  AND    OWNER = 'FD' 
  8  GROUP BY segment_name, tablespace_name, blocks 
  9  ORDER BY segment_name ; 

TABLE                          Taille               Blocs TABLESPACE 
------------------------------ --------------- ---------- -------------------- 
ADRESSE                        64Ko                     8 USERS 
CONTACT                        64Ko                     8 USERS 
DEPT                           64Ko                     8 USERS 
EMP                            128Ko                   16 USERS 
EMPLOYE                        64Ko                     8 USERS 
FACTURE                        64Ko                     8 USERS 
LOV_BLOCK                      64Ko                     8 USERS 
LOV_COLONNE                    64Ko                     8 USERS 
LOV_ELEMENT_COLONNE            64Ko                     8 USERS 
LOV_ITEM                       64Ko                     8 USERS 
LOV_LOV                        64Ko                     8 USERS 
LOV_MODULE                     64Ko                     8 USERS 
NOMBRES                        64Ko                     8 USERS 
TELEPHONE                      64Ko                     8 USERS 
TEST                           2048Ko                 256 USERS 
TEST_LOV                       4096Ko                 512 USERS 
TEST_TYPES                     64Ko                     8 USERS 
TRACE                          64Ko                     8 SYSTEM 
UTIL_PREFS                     64Ko                     8 USERS 
UTIL_PREFS_ORDER               64Ko                     8 USERS 
UTIL_PREFS_RECORD_ORDER        64Ko                     8 USERS 

21 ligne(s) sélectionnée(s).

Afficher la place occupée par toutes les tables d'un schéma particulier :

 
Sélectionnez

SQL> SELECT SUM(BYTES) /1024 /1024 || 'Mo' "Taille" 
  2      , SUM(blocks) "Blocs" 
  3  FROM   dba_segments 
  4  WHERE  segment_type = 'TABLE' 
  5  AND    OWNER = 'FD' 
  6  GROUP BY OWNER ; 

Taille               Blocs 
--------------- ---------- 
7,25Mo                 928

Afficher le cumul de volumétrie de tous les objets d'un schéma particulier :

 
Sélectionnez

SQL> SELECT SUM(BYTES) /1024 /1024 || 'Mo' "Taille" 
  2      , SUM(blocks) "Blocs" 
  3  FROM   dba_segments 
  4  WHERE  OWNER = 'FD' ; 

Taille               Blocs 
--------------- ---------- 
12,625Mo              1616 

Afficher l'espace occupé par l'ensemble des schémas :

 
Sélectionnez

SQL> SELECT SUM(BYTES) /1024 /1024 || 'Mo' "Taille" 
  2      , SUM(blocks) "Blocs" 
  3  FROM   dba_segments ; 

Taille               Blocs 
--------------- ---------- 
647,484375Mo         82878 
Créé le 2004-11-30  par SheikYerbouti

Pour fixer la valeur de certains paramètres de sessions automatiquement à chaque connection d'un utilisateur donné, le plus simple est d'utiliser un trigger au niveau de la base.
Le trigger doit être créé en tant que SYS ou bien par un utilisateur ayant le privilège ADMINISTER DATABASE TRIGGER.

 
Sélectionnez

create or replace trigger TG_DB_AFTER_LOGON after logon on database
begin
   if user = 'SCOTT' then
      execute immediate 'alter session set sort_area_size=100000';
   end if;
end;

Exemple d'utilisation :

 
Sélectionnez

SQL> connect sys/... as sysdba
Connected.
SQL> create or replace trigger TG_DB_AFTER_LOGON after logon on database
  2  begin
  3   if user = 'SCOTT' then
  4    execute immediate 'alter session set sort_area_size=100000';
  5   end if;
  6  end;
  7
  8  /

Trigger created.

SQL> show parameter sort_area_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------------------------
sort_area_size                       integer     65536
SQL> connect scott/...
Connected.
SQL> show parameter sort_area_size;

NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------------------------
sort_area_size                       integer     100000

Ce genre de trigger est utile en particulier pour fixer les paramètres régionaux (séparateur décimal, séparateur de milliers...) indépendamment de la plateforme (Windows, Unix...) et de l'outil utilisé pour la connection (SQL*Plus, SQL*Loader, ...).

Créé le 2004-11-30  par lalystar
 
Sélectionnez

Create database link dblink_name
connect to user identified by password
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = host)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = SID)
)
)'
Créé le 2006-09-18  par Jaouad

Ici il s'agit d'utiliser les tables externes, fonctionnalité disponible à partir de la 9i :

 
Sélectionnez

create directory BDUMP as 'background_dump_dest'
create table alert_log(text varchar2(80))
organization external
(
type oracle_loader
default directory BDUMP
access parameters (records delimited by newline)
location ('alert_SID.log')
)
reject limit 1000;


SQL>  select * from alert_log ;
Créé le 2006-09-18  par Jaouad

La requête suivante permet d'afficher les directory, avec les propriétés suivantes :

  • Schéma
  • Nom
  • Chemin
 
Sélectionnez

select OWNER,
       DIRECTORY_NAME,
       DIRECTORY_PATH
  from DBA_DIRECTORIES
 order by OWNER,
    DIRECTORY_NAME;
    
OWNER DIRECTORY_NAME  DIRECTORY_PATH
----- --------------- ----------------------------------------
SYS   WORK_DIR        /app/oracle/product/10.2.0.2/work
SYS   TMP             /tmp
SYS   DATA_PUMP_DIR   /app/oracle/product/10.2.0.2/rdbms/log/
SYS   ADMIN_DIR       /app/oracle/product/10.2.0.2/md/admin
Créé le 2006-09-18  par Laurent Schneider

Grâce au mécanisme de compilation automatique à l'exécution d'un objet invalide, Oracle va compiler toutes les vues dépendantes pour les exécuter lors de l'exécution d'une vue.

La procédure suivante qui exécute "à vide" toutes les vues du schéma courant qui ne sont pas référencées dans d'autres vues va donc compiler toutes les vues du schéma courant:

 
Sélectionnez

create or replace procedure ev
is
comm varchar2(100);
res int;
begin
for lv in (select view_name from user_views where not exists 
                (select referenced_name from user_dependencies where referenced_name = view_name))
    loop
        comm := 'SELECT COUNT(*) FROM  ' || lv.view_name || ' WHERE 1=0';
        dbms_output.put_line(comm || ' ...');
        execute immediate comm into res;
        dbms_output.put_line('... OK.');
    end loop;
end;
/

Voici un exemple :

 
Sélectionnez

SQL> create table t(x int, y int);

Table created.

SQL> create view v1 as select x,y from t;

View created.

SQL> create view v2 as select x,y from v1 where x >= 0;

View created.

SQL> create view v3 as select x,y from v2 where y >= 0;

View created.

SQL> 
SQL> create view v4 as select x from t;

View created.

SQL> 
SQL> --
SQL> -- compiler toutes les vues
SQL> --
SQL> create or replace procedure ctv
  2  is
  3  comm varchar2(100);
  4  begin
  5  for lv in (select view_name from user_views)
  6  	 loop
  7  	     comm := 'ALTER VIEW ' || lv.view_name || ' COMPILE';
  8  	     dbms_output.put_line(comm || ' ...');
  9  	     execute immediate comm;
 10  	     dbms_output.put_line('... OK.');
 11  	 end loop;
 12  end;
 13  /

Procedure created.

SQL> show errors
No errors.
SQL> 
SQL> --
SQL> -- lister status des vues
SQL> --
SQL> 
SQL> create or replace procedure lsv(cv out sys_refcursor)
  2  is
  3  begin
  4  open cv for
  5  	     'select object_name, status from user_objects where object_type = ''VIEW'' ';
  6  end;
  7  /

Procedure created.

SQL> show errors
No errors.
SQL> 
SQL> 
SQL> --
SQL> -- executer les vues dont aucune autre vue ne dépend
SQL> --
SQL> 
SQL> create or replace procedure ev
  2  is
  3  comm varchar2(100);
  4  res int;
  5  begin
  6  for lv in (select view_name from user_views where not exists
  7  		     (select referenced_name from user_dependencies where referenced_name = view_name))
  8  	 loop
  9  	     comm := 'SELECT COUNT(*) FROM  ' || lv.view_name || ' WHERE 1=0';
 10  	     dbms_output.put_line(comm || ' ...');
 11  	     execute immediate comm into res;
 12  	     dbms_output.put_line('... OK.');
 13  	 end loop;
 14  end;
 15  /

Procedure created.

SQL> show errors
No errors.
SQL> 
SQL> 
SQL> var rc refcursor;
SQL> column object_name format a15
SQL> 
SQL> --
SQL> -- execute v1, v4
SQL> --
SQL> set serveroutput on;
SQL> alter table t add (z char(3));

Table altered.

SQL> exec lsv(:rc);

PL/SQL procedure successfully completed.

SQL> print :rc

OBJECT_NAME     STATUS                                                          
--------------- -------                                                         
V1              INVALID                                                         
V2              INVALID                                                         
V3              INVALID                                                         
V4              INVALID                                                         

SQL> exec ev;
SELECT COUNT(*) FROM  V4 WHERE 1=0 ...                                          
... OK.                                                                         
SELECT COUNT(*) FROM  V3 WHERE 1=0 ...                                          
... OK.                                                                         

PL/SQL procedure successfully completed.

SQL> exec lsv(:rc);

PL/SQL procedure successfully completed.

SQL> print :rc

OBJECT_NAME     STATUS                                                          
--------------- -------                                                         
V1              VALID                                                           
V2              VALID                                                           
V3              VALID                                                           
V4              VALID                                                           

SQL> 
Créé le 2006-10-15  par Pierre Forstmann

Voici la commande pour la Shared Pool :

 
Sélectionnez

SQL> alter system flush shared_pool 
  2  ;

Système modifié.

Et celle pour vider le cache de données (10g) :

 
Sélectionnez

SQL> alter system flush buffer_cache ;

Système modifié.

elle peut également recevoir les paramétres suivant : GLOBAL et CONTEXT

Créé le 2006-10-15  par Jaouad

1. Il faut tout d'abord arrêter OMS : - sous Unix :

 
Sélectionnez

$ emctl stop oms

- sous Windows :
Arrêter le service windows Oracle{oracle_home_name}ProcessManger
ou, sous la ligne de commande Dos :

 
Sélectionnez

C> emctl stop oms

2. Vérifier que OMS est arrêté :

- sous Unix :

 
Sélectionnez

$ emctl status oms

- sous Windows :
Vérifier la status du service Windows Oracle{oracle_home_name}ProcessManager
ou, sous la ligne de commande Dos :

 
Sélectionnez

C> emctl status oms

3. Se connecter à la base avec un privilège DBA, puis tapez la commande suivante :

 
Sélectionnez

SQL> ALTER USER sysman IDENTIFIED BY 'new_password';

4. Vérifier le nouveau mot de passe :

 
Sélectionnez

SQL> CONNECT sysman/nouveau_passe[@database_alias]

5. Dans $ORACLE_HOME/sysman/config

5.1. Sauvegarder le fichier emoms.properties dans emoms.properties.orig

5.2. Editer le fichier emoms.properties

a. Rechercher la ligne commencant par: oracle.sysman.eml.mntr.emdRepPwd=

Remplacer la valeur encrypté par le nouveau mot de passe

b. Rechercher la ligne : oracle.sysman.eml.mntr.emdRepPwdEncrypted=TRUE

Remplacer TRUE par FALSE

6. Redémarrer OMS - sous Unix :

 
Sélectionnez

$ emctl start oms

- sous Windows :
Démarrer le service Oracle{oracle_home_name}ProcessManager
ou, sous la ligne de commande Dos :

 
Sélectionnez

C> emctl start oms

7. Vérifier que oracle.sysman.eml.mntr.emdRepPwd est encrypté.

Créé le 2006-10-15  par bouyao

Pour exécuter cette requête, il faut avoir le privilège DBA :

 
Sélectionnez

SELECT a.ksppinm Parametre,
       c.ksppstvl Valeur
  FROM x$ksppi a,
       x$ksppcv b,
       x$ksppsv c
 WHERE a.indx = b.indx
   AND a.indx = c.indx
   AND a.ksppinm LIKE '/_%' escape '/' ;

Normalement, les paramètres cachés commencent par un underscore ('_'), et dans la 10g, on a en plus les paramètres cachés qui commencent par deux underscore ('__').

Attention :
la modification de certains paramètres cachés peuvent corrompre votre base. Il faut les utiliser avec précautions !

Créé le 2006-10-15  par bouyao, Fred_D
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée.