IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo

FAQ OracleConsultez toutes les FAQ

Nombre d'auteurs : 17, nombre de questions : 139, dernière mise à jour : 30 mai 2016  Ajouter une question

 

Cette F.A.Q. a été réalisée à partir des questions fréquemment posées sur le forum Oracle de www.developpez.com et de l'expérience personnelle des auteurs. Elle pourra traiter de tout type de questions portant sur les technologies Oracle.

Nous espérons que cette F.A.Q. saura répondre à un maximum de vos questions. Nous vous souhaitons une bonne lecture.

L'équipe Oracle de Developpez.

SommaireAdministrationAutres (9)
précédent sommaire suivant
 

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

En interrogeant la vue DBA_SEGMENTS :

Code sql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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 :

Code sql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
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 :

Code sql : Sélectionner tout
1
2
3
4
5
6
7
8
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 :

Code sql : Sélectionner tout
1
2
3
4
5
6
7
SQL> SELECT SUM(BYTES) /1024 /1024 || 'Mo' "Taille"  
  2      , SUM(blocks) "Blocs"  
  3  FROM   dba_segments ;  
  
Taille               Blocs  
--------------- ----------  
647,484375Mo         82878

Mis à jour le 30 novembre 2004 SheikYerbouti

Pour fixer la valeur de certains paramètres de sessions automatiquement à chaque connexion 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.

Code sql : Sélectionner tout
1
2
3
4
5
6
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 :

Code sql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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, ...).

Mis à jour le 30 novembre 2004 lalystar

Code sql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
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) 
    ) 
)'

Mis à jour le 18 septembre 2006 Jaouad

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

Code sql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
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 ;

Mis à jour le 18 septembre 2006 Jaouad

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

  • Schéma
  • Nom
  • Chemin

Code sql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
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

Mis à jour le 18 septembre 2006 laurentschneider

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:

Code sql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 :

Code sql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
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>

Mis à jour le 15 octobre 2006 pifor

Voici la commande pour la Shared Pool :

Code sql : Sélectionner tout
1
2
3
4
SQL> alter system flush shared_pool  
  2  ; 
  
Système modifié.
Et celle pour vider le cache de données (10g) :

Code sql : Sélectionner tout
1
2
3
SQL> alter system flush buffer_cache ; 
  
Système modifié.
elle peut également recevoir les paramétres suivant : GLOBAL et CONTEXT

Mis à jour le 15 octobre 2006 Jaouad

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

      Code : Sélectionner tout
      $ emctl stop oms
    • sous Windows :
      Arrêter le service windows Oracle{oracle_home_name}ProcessManger ou, sous la ligne de commande Dos :

      Code : Sélectionner tout
      C> emctl stop oms
  2. Vérifier que OMS est arrêté :
    • sous Unix :

      Code : Sélectionner tout
      $ emctl status oms
    • sous Windows :
      Vérifier la status du service Windows Oracle{oracle_home_name}ProcessManager ou, sous la ligne de commande Dos :

      Code : Sélectionner tout
      C> emctl status oms
  3. Se connecter à la base avec un privilège DBA, puis tapez la commande suivante :

    Code sql : Sélectionner tout
    SQL> ALTER USER sysman IDENTIFIED BY 'new_password';
  4. Vérifier le nouveau mot de passe :

    Code sql : Sélectionner tout
    SQL> CONNECT sysman/nouveau_passe[@database_alias]
  5. Dans $ORACLE_HOME/sysman/config
    1. Sauvegarder le fichier emoms.properties dans emoms.properties.orig
    2. Editer le fichier emoms.properties
      • Rechercher la ligne commencant par: oracle.sysman.eml.mntr.emdRepPwd=

        Remplacer la valeur encrypté par le nouveau mot de passe
      • Rechercher la ligne : oracle.sysman.eml.mntr.emdRepPwdEncrypted=TRUE

        Remplacer TRUE par FALSE

  6. Redémarrer OMS
    • sous Unix :

      Code : Sélectionner tout
      $ emctl start oms
    • sous Windows :
      Démarrer le service Oracle{oracle_home_name}ProcessManager ou, sous la ligne de commande Dos :

      Code : Sélectionner tout
      C> emctl start oms
  7. Vérifier que oracle.sysman.eml.mntr.emdRepPwd est encrypté.

Mis à jour le 15 octobre 2006 bouyao

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

Code sql : Sélectionner tout
1
2
3
4
5
6
7
8
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 ('__').

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

Mis à jour le 15 octobre 2006 bouyao orafrance

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

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 © 2024 Developpez 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.