Overblog Suivre ce blog
Administration Créer mon blog
26 juillet 2012 4 26 /07 /juillet /2012 22:25

 

Compiler les objets Invalides.

Comment compiler les objets invalides dans une base Oracle.
Comment lister les objets invalides d'un schéma utilisateur.
Pourquoi compiler ces objets.
Pourquoi sont-ils invalides.

Nous allons voir ici les principales méthodes qui permettent de compiler les objets invalides dans Oracle 10g.
Principalement les objets de type Trigger, Procédure, Fonction, View, Package sont invalidés par exemple suite à un changement opéré par une commande DDL sur une table, laquelle est utilisée dans une vue ou un trigger, le passage d'un patch ou un Upgrade de la base de données.
Il faut savoir qu'Oracle recompile les objets qui ont le statut INVALID lorsqu'ils sont appelés et les passe donc en statut VALID si et seulement si il n'y a pas d'erreurs de recompilation. Si vous supprimez une table qui est utilisée dans une procédure, cette procédure restera INVALID tant que le code PLSQL de celle-ci restera en l'état.
Pourquoi les compiler alors si oracle le fait comme un grand ? Simplement pour éviter une compilation online qui prends des ressources cpu et provoque des événements d'attentes en pleine production c'est dire au moment ou une transaction utilisateur fait appel à cet objet invalide.




Lister les objets invalides de la base Oracle.

 SQL> SELECT owner, object_type, object_name, status FROM dba_objects WHERE status = 'INVALID'; 



Compilation niveau Objet.

 

Trigger.

Commande SQL

 SQL> ALTER TRIGGER nom_trigger COMPILE; 

Package

 EXECUTE DBMS_DDL.ALTER_COMPILE('TRIGGER', 'nom_schéma', 'nom_trigger'); 

Fonction.

Commande SQL

 SQL> ALTER FUNCTION nom_fonction COMPILE; 

Package

 EXECUTE DBMS_DDL.ALTER_COMPILE('FUNCTION', 'nom_schéma', 'nom_fonction'); 

Procédure.

Commande SQL

 SQL> ALTER PROCEDURE nom_procedure COMPILE; 

Package

 EXECUTE DBMS_DDL.ALTER_COMPILE('PROCEDURE', 'nom_schéma', 'nom_procedure'); 

Package et Body.

Commande SQL

 SQL> ALTER PACKAGE nom_package COMPILE; SQL> ALTER PACKAGE nom_package COMPILE BODY; 

Package

 EXECUTE DBMS_DDL.ALTER_COMPILE('PACKAGE', 'nom_schéma', 'nom_package'); - EXECUTE DBMS_DDL.ALTER_COMPILE('PACKAGE BODY', 'nom_schéma', 'nom_package'); 

View.

Commande SQL

 SQL> ALTER VIEW nom_view COMPILE; 



Compilation niveau Schéma.

Executer en AS SYSDBA

 EXECUTE DBMS_UTILITY.COMPILE_SCHEMA(schema => 'nom_schéma'); 
 EXECUTE UTL_RECOMP.RECOMP_SERIAL('nom_schéma'); 



Compilation niveau Database.

Executer en AS SYSDBA

 EXECUTE UTL_RECOMP.RECOMP_SERIAL(); 

Commande SQL*PLUS

 SQL> @?/rdbms/admin/utlrp.sql; 

Haut de Page www.dba-ora.fr

Repost 0
Published by Oracle SQL - dans PLSQL Packages
commenter cet article
26 juin 2012 2 26 /06 /juin /2012 22:30

 

Supprimer un job Oracle avec DBMS_JOB.

Comment supprimer un job dans Oracle.
Comment utiliser la procédure REMOVE du package DBMS_JOB.

supprimer un job oracle avec dbms_job

Syntaxe DBMS_JOB.REMOVE

 
 DBMS_JOB.REMOVE (job IN BINARY_INTEGER ); 

Comment supprimer un job avec DBMS_JOB dans Oracle.

La procédure de suppression d'un job dans Oracle est simple avec le package DBMS_JOB, il suffit de récupérer le numéro de job en interrogeant la vue USER_JOBS, puis d'utiliser la procédure REMOVE du package DBMS_JOB.
• On remarquera l'utilisation obligatoire d'une validation de transaction avec COMMIT.

 
 SQL> COL what FORMAT A50 SQL> SELECT job, what FROM user_jobs ORDER BY 1; JOB WHAT ---------- -------------------------------------------------- 120 SCOTT.PURGE_TABLE; 143 SCOTT.ENVOI_STAT_MAIL; 230 SCOTT.CALCUL_STAT; 3 ligne(s) sélectionnée(s). SQL> 

 

Nous supprimons le job 143 avec DBMS_JOB.REMOVE.
La suppression du job ne le stoppe pas si celui-ci est en cours d'exécution.

 
 SQL> BEGIN DBMS_JOB.REMOVE(143); COMMIT; END; / Procédure PL/SQL terminée avec succès. SQL> 

 

Haut de Page www.dba-ora.fr

 

Liens en rapport avec l'article qui sont susceptibles de vous intéresser
• JOBS DATA PUMP
• SET JOB_QUEUE_PROCESSES
Repost 0
Published by Oracle SQL - dans PLSQL Packages
commenter cet article
10 juillet 2011 7 10 /07 /juillet /2011 16:26

 

Voir le Plan d'Exécution SQL dans SQLPLUS avec DBMS_XPLAN.

Comment voir le Plan d’exécution SQL de mes requetes ?.

Le Package Oracle DBMS_XPLAN fournit un moyen facile d'afficher la sortie de la commande EXPLAIN PLAN FOR dans SQLPLUS.

 

Création de la table PLAN_TABLE avec UTLXPLAN.SQL

 
 SQL> connect / as sysdba Connected. SQL> SQL> @C:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\utlxplan.sql Table created. SQL> CREATE OR REPLACE PUBLIC SYNONYM plan_table FOR sys.plan_table; Synonym created. SQL> SQL> GRANT ALL ON sys.plan_table TO public; Grant succeeded. SQL> 

 

Afficher le plan d’exécution d'une requête SQL.

 
 SQL> EXPLAIN PLAN FOR SELECT ename, job, dname 2 FROM EMP,DEPT 3 WHERE dept.deptno = 10 4 AND emp.deptno = dept.deptno; Explained. SQL> SQL> SELECT * FROM table(dbms_xplan.display); PLAN_TABLE_OUTPUT ---------------------------------------------------------------------------------------- Plan hash value: 568005898 ---------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ---------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 3 | 90 | 4 (0)| 00:00:01 | | 1 | NESTED LOOPS | | 3 | 90 | 4 (0)| 00:00:01 | | 2 | TABLE ACCESS BY INDEX ROWID| DEPT | 1 | 13 | 1 (0)| 00:00:01 | |* 3 | INDEX UNIQUE SCAN | PK_DEPT | 1 | | 0 (0)| 00:00:01 | |* 4 | TABLE ACCESS FULL | EMP | 3 | 51 | 3 (0)| 00:00:01 | ---------------------------------------------------------------------------------------- PLAN_TABLE_OUTPUT ---------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 3 - access("DEPT"."DEPTNO"=10) 4 - filter("EMP"."DEPTNO"=10) 

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• PL/SQL Packages
Repost 0
Published by Daniel Roesch - dans PLSQL Packages
commenter cet article
31 octobre 2010 7 31 /10 /octobre /2010 18:27

 

Journaliser les erreurs DML / LMD avec DBMS_ERRLOG.CREATE_ERROR_LOG.

Comment insérer des données dans une table tout en journalisant les erreurs sans bloquer le traitement ?.
En utilisant le Package DBMS_ERRLOG. La procédure CREATE_ERROR_LOG va créer une table d'Erreurs.

Il est intéressant de positionner sur un traitement batch lourd (des milliers d'insertions), une table d'erreur, afin que la journalisation permette de poursuivre le traitement sans abandon, et ainsi consigner les erreurs dans une table.

Le Package DBMS_ERRLOG s’exécute 1 seule fois pour une table, ensuite pour chaque traitement sur cette table on choisit ou non d'utiliser la journalisation d'erreurs.

 

Création de la table d'erreurs societe_errlog sur la table societe.

 

SQL > EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('societe', 'societe_errlog');

 

Insertion enregistrements déclenchant volontairement des erreurs avec journalisation.

 

SQL> INSERT INTO societe (SELECT * FROM societe)
         LOG ERRORS INTO societe_errlog ('mon_insertion') REJECT LIMIT 1000;

Cette instruction ne déclenche aucun message d'erreur, le traitement a pu se terminer.

 

Interroger la table d'erreurs societe_errlog.

 

SQL > SELECT ORA_ERR_MESG$, ORA_ERR_TAG$ FROM societe_errlog;

 

Supprimer la table d'erreurs societe_errlog.

 

SQL> DROP TABLE societe_errlog;



Repost 0
Published by Daniel Roesch - dans PLSQL Packages
commenter cet article
29 août 2010 7 29 /08 /août /2010 23:31


Tracer une session avec le Package DBMS_SUPPORT.

Génère un fichier trace dans UDUMP avec les informations sur les requêtes, statistiques, événements d'attentes, variables BIND. 

Le package DBMS_SUPPORT n'est pas installé par défaut.
Il faut exécuter sous SYS le script @$ORACLE_HOME/rdbms/admin/dbmssupp.sql

 

Syntax DBMS_SUPPORT

 

SQL> exec DBMS_SUPPORT.START_TRACE_IN_SESSION(SID, SERIAL#, waits, binds)

Utilisez la vue V$SESSION pour récuperer le SID et SERIAL#

 

Nous activons le traçage Event 10046 level 4.

 

SQL> exec DBMS_SUPPORT.START_TRACE_IN_SESSION(sid=>34, serial=>40, binds=>TRUE);

 

Nous activons le traçage Event 10046 level 8.

 

SQL> exec DBMS_SUPPORT.START_TRACE_IN_SESSION(sid=>34, serial=>40, waits=>TRUE);

 

Nous activons le traçage Event 10046 level 12.

 

SQL> exec DBMS_SUPPORT.START_TRACE_IN_SESSION(sid=>34, serial=>40, waits=>TRUE, binds=>TRUE);

 

Désactivation de la trace.

 

SQL> exec DBMS_SUPPORT.STOP_TRACE_IN_SESSION(sid=>34, serial=>40);

 

Exemple de trace WAIT.

 

WAIT #25: nam='db file scattered read' ela= 28381 file#=5 block#=492301 blocks=124 obj#=52822
WAIT #25: nam='db file scattered read' ela= 30666 file#=5 block#=492427 blocks=126 obj#=52822
WAIT #25: nam='db file scattered read' ela= 26819 file#=5 block#=492555 blocks=126 obj#=52822
WAIT #25: nam='db file scattered read' ela= 29500 file#=5 block#=492683 blocks=126 obj#=52822

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Tracer une session avec DBMS_MONITOR
Repost 0
Published by Daniel Roesch - dans PLSQL Packages
commenter cet article
29 août 2010 7 29 /08 /août /2010 22:59

 

Tracer une session avec le Package DBMS_MONITOR.

Génère un fichier trace dans UDUMP avec les informations sur les requêtes, statistiques, événements d'attentes, variables BIND.

 

Syntax DBMS_MONITOR

 

SQL> exec DBMS_MONITOR.SESSION_TRACE_ENABLE(session_id, serial_num, waits, binds)

Utilisez la vue V$SESSION pour récuperer le SID et SERIAL#

 

Nous activons la trace avec WAITS EVENTS TRUE.

 

SQL> exec DBMS_MONITOR.SESSION_TRACE_ENABLE(session_id =>34, serial_num =>40, waits => TRUE, binds => FALSE);

Un fichier trace avec les waits events sera généré dans le dossier UDUMP.(show parameter user_dump_dest)

Désactivation de la trace.

 

SQL> exec DBMS_MONITOR.SESSION_TRACE_DISABLE(session_id =>34, serial_num =>40);

 

Exemple de trace WAIT.

 

WAIT #25: nam='db file scattered read' ela= 28381 file#=5 block#=492301 blocks=124 obj#=52822
WAIT #25: nam='db file scattered read' ela= 30666 file#=5 block#=492427 blocks=126 obj#=52822
WAIT #25: nam='db file scattered read' ela= 26819 file#=5 block#=492555 blocks=126 obj#=52822
WAIT #25: nam='db file scattered read' ela= 29500 file#=5 block#=492683 blocks=126 obj#=52822

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Tracer une session avec DBMS_SUPPORT
• Audit et trace dans Oracle
Repost 0
Published by Oracle SQL - dans PLSQL Packages
commenter cet article
1 mars 2010 1 01 /03 /mars /2010 00:30


Connaitre l'adresse IP et Hostname avec le package oracle UTL_INADDR

Le package UTL_INADDR fournit une API pour récupérer des noms d'hôte et adresses IP en local et distants.

Les deux fonctions sont :
GET_HOST_ADDRESS()  - Retourne l'adresse IP locale ou distante à partir du Host
GET_HOST_NAME()     - Retourne le nom d'hôte local ou distant à partir de l'IP

SQL> SELECT sid,
            machine,
            username,
           utl_inaddr.get_host_address (substr(machine,instr(machine,'\')+1))HOST_ADDR
     FROM   v$session
     WHERE  type='USER'
     AND    username is not null
     ORDER BY sid;


SID MACHINE USERNAME HOST_ADDR
151 NT_DOMAIN\PC-00121 USER_FINANCE 10.120.25.10
162 NT_DOMAIN\PC-00147 USER_FINANCE 10.120.25.54
180 NT_DOMAIN\PC-00174 USER_SALE 10.120.25.98
210 NT_DOMAIN\PC-DBA USER_ADM 10.120.25.101


Retourne l'adresse IP distante du Host dba-ora.fr
SQL> SELECT utl_inaddr.get_host_address('dba-ora.fr') HOST_ADDR FROM dual;

Retourne l'adresse IP locale Host
SQL> SELECT utl_inaddr.get_host_address LOCAL_HOST_ADDR FROM dual;


Retourne le nom d'hôte distant à partir de l'adresse IP
SQL> SELECT utl_inaddr.get_host_name('10.120.25.10') HOST_NAME FROM dual;

Retourne le nom d'hôte local
SQL> SELECT utl_inaddr.get_host_name LOCAL_HOST_ADDR FROM dual;


Vous avez la fonction SYS_CONTEXT qui permet d'obtenir des informations de sessions.

IP ADDRESS
SQL> SELECT sys_context('USERENV','IP_ADDRESS') IP FROM dual;

PROTOCOL
SQL> SELECT sys_context('USERENV','NETWORK_PROTOCOL') "PROTOCOL" FROM dual;



Repost 0
Published by Daniel Roesch - dans PLSQL Packages
commenter cet article