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.
- Comment afficher l'espace disque occupé par les objets Oracle ?
- Comment positionner la valeur de certains paramètres à la connection?
- Comment créer un DBLink sans Tnsnames.ora ?
- Comment lire le fichier d'alert de Sql*Plus ?
- Comment lister les Directory ainsi que leurs caractéristiques principales ?
- Comment recompiler des objets en fonction de leurs dépendances ?
- Comment vider les caches Oracle ?
- Comment modifier le mot de passe de l'utilisateur sysman dans Enterprise Manager Grid Control ?
- Comment afficher les paramètres cachés d'Oracle ?
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). |
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 |
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 |
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 |
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; |
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 |
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) ) )' |
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 ; |
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 |
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; / |
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> |
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é. |
Code sql : | Sélectionner tout |
1 2 3 | SQL> alter system flush buffer_cache ; Système modifié. |
- 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
- sous Unix :
- 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
- sous Unix :
- 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';
- Vérifier le nouveau mot de passe :
Code sql : Sélectionner tout SQL> CONNECT sysman/nouveau_passe[@database_alias]
- Dans $ORACLE_HOME/sysman/config
- Sauvegarder le fichier emoms.properties dans emoms.properties.orig
- 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
- Rechercher la ligne commencant par: oracle.sysman.eml.mntr.emdRepPwd=
- 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
- sous Unix :
- Vérifier que oracle.sysman.eml.mntr.emdRepPwd est encrypté.
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 '/' ; |
La modification de certains paramètres cachés peuvent corrompre votre base. Il faut les utiliser avec précautions ! |
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 çaLes 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.