DBMS_DATAPUMP.OPEN ORA-31626 : job does not exist

Posted on mars 6th, 2009 in Oracle, Tips by David

Oracle : 10g

Environnement : HPUX ( mais peut arriver ailleurs je pense ).

Symptomes :

Dans mon bloc PL/SQL j’ai ces ligne :


h1 := dbms_datapump.open (operation => ‘EXPORT’, job_mode => ‘SCHEMA’, job_name => ‘EXPORT’ , version => ‘COMPATIBLE’);

dbms_datapump.set_parallel(handle => h1, degree => 1);

dbms_datapump.add_file(handle => h1, filename => ‘EXPDAT.LOG’, directory => ‘DATA_PUMP_DIR’, filetype => 3);

dbms_datapump.metadata_filter(handle => h1, name => ‘SCHEMA_EXPR’, value => ‘IN(’‘TOTO’‘,’TOTO2‘)’);

dbms_datapump.add_file(handle => h1, filename => ‘EXPDAT%U.DMP’, directory => ‘DATA_PUMP_DIR’, filetype => 1);

dbms_datapump.start_job(handle => h1, skip_current => 0, abort_step => 0);

dbms_datapump.detach(handle => h1);

Et ca me donne ceci :

ORA-12012: error on auto execute of job 2345167
ORA-31626: job does not exist

Frustrant non ? :)

La chose a savoir : les commandes datapump on besoin d’être dans leur propre transaction … c’est bête mais c’est comme ca !

La solution :

begin
h1 := dbms_datapump.open (operation => ‘EXPORT’, job_mode => ‘SCHEMA’, job_name => ‘EXPORT’ , version => ‘COMPATIBLE’);
end;

begin
dbms_datapump.set_parallel(handle => h1, degree => 1);
end;

begin
dbms_datapump.add_file(handle => h1, filename => ‘EXPDAT.LOG’, directory => ‘DATA_PUMP_DIR’, filetype => 3);
end;
dbms_datapump.metadata_filter(handle => h1, name => ‘SCHEMA_EXPR’, value => ‘IN(’‘TOTO’‘,”TOTO2‘)’);
begin
dbms_datapump.add_file(handle => h1, filename => ‘EXPDAT%U.DMP’, directory => ‘DATA_PUMP_DIR’, filetype => 1);
end;
dbms_datapump.start_job(handle => h1, skip_current => 0, abort_step => 0);
begin
dbms_datapump.detach(handle => h1);
end;

Pour les fanas de lecture Doc ID n° 459419.1

a+

Impossible de droper une QUEUE TABLE.

Posted on juin 11th, 2008 in Bug, DataBase, DataBase, Oracle, Tips by David

Humm.. encore un jour sans :)

Symptômes :

sys@TOTO.WORLD> exec DBMS_AQADM.DROP_QUEUE_TABLE(’TOTO.LAQUEUE’);
BEGIN DBMS_AQADM.DROP_QUEUE_TABLE(’TOTO.LAQUEUE’); END;

*
ERREUR à la ligne 1 :
ORA-24002: QUEUE_TABLE TOTO.LAQUEUE n’existe pas
ORA-06512: à “SYS.DBMS_AQADM_SYS”, ligne 3013
ORA-06512: à “SYS.DBMS_AQADM”, ligne 197
ORA-06512: à ligne 1

Cause :

La cause de tout ça, un import / export un peu buggé sur Oracle 9i pour ceux que ca intéresse.

Notre document de travail : Note:203225.1

Bien bien bien … en gros le dictionnaire est corrompu, soit la table n’existe plus mais la queue si, ou inversement.

Si la queue est restée mais que la table n’est plus la alors on peut tenter de forcer la suppression de la queue :

sys@TOTO.WORLD> exec DBMS_AQADM.DROP_QUEUE_TABLE(queue_table=> ‘TOTO.LAQUEUE’,FORCE => TRUE);

Mais en l’occurence mon problème est que la queue n’existe plus, mais la table si … alors ca se complique …

On commence par nettoyer tout ce qui a un rapport avec la queue :

SELECT object_name, object_type FROM user_objects WHERE object_name like ‘%TOTO%’;

.. aïe .. aucune ligne sélectionnée

si la requête renvoie des lignes, alors dropper les objets.

ALTER SESSION SET EVENTS ‘10851 trace name context forever, level 2′;

Attention , on passe au ménage sauvage, sauvegardez la base avant !

DROP TABLE TOTO CASCADE CONSTRAINTS;

DROP TABLE AQ$_TOTO_<X> CASCADE CONSTRAINTS; ( si les queues existent, vérifier dans dba_objects )

Et voili voila !

a+

Quelle ligne est lockée ?

Posted on avril 11th, 2008 in DataBase, Oracle, Tips by David

Ca peut arriver … deux sessions cherchent a verrouiller la même ligne … mais laquelle ?

 SID|USERNAME      |OSUSER        |TY|LKMODE       |DESCRIP                                           |       SEC|  Blocking|REQMODE
----|--------------|--------------|--|-------------|--------------------------------------------------|----------|----------|-------------
  20|David         |David         |TM|Row-X (SX)   |Table David      .TOTO                            |         3|         0|
  18|David         |David         |TM|Row-X (SX)   |Table David      .TOTO                            |         6|         0|
  20|David         |David         |TX|None         |RBS RS_1, Slot 41 Wrap# 791759                    |         3|         0|Exclusive (X)
  18|David         |David         |TX|Exclusive (X)|RBS RS_1, Slot 41 Wrap# 791759                    |         6|         1|

Voila c’est plutôt génant … maitenant imaginons que nous avons besoin de savoir sur quelle ligne le verrou est placé :

David      @REF.WORLD> r
  1  select do.object_name,row_wait_obj#, row_wait_file#, row_wait_block#, row_wait_row#,
     dbms_rowid.rowid_create ( 1, ROW_WAIT_OBJ#, ROW_WAIT_FILE#, ROW_WAIT_BLOCK#, ROW_WAIT_ROW# )
  2  from v$session s, dba_objects do
  3* where sid=20 and s.ROW_WAIT_OBJ# = do.OBJECT_ID
OBJECT_NAME|ROW_WAIT_OBJ#|ROW_WAIT_FILE#|ROW_WAIT_BLOCK#|ROW_WAIT_ROW#|DBMS_ROWID.ROWID_C
-----------|-------------|--------------|---------------|-------------|------------------
TOTO       |        16625|            13|         168237|           14|AAAEDxAANAAApEtAAO

Pas mal!

on n’a plus qu’a aller voir la ligne :

David      @REF.WORLD> select * from TOTO where ROWID = 'AAAEDxAANAAApEtAAO';
        ID|TEST
----------|----------
        11|TEST

 

Voir le plan d’éxécution d’une requête.

Posted on septembre 14th, 2007 in DataBase, Oracle, Tips by David

Un ptit rappel ne fait pas de mal :P

En premier, il fait créer une table ou les plans seront stockés ( PLAN_TABLE ) .

C’est pas compliqué :

system@DB.WORLD> @?/rdbms/admin/utlxplan.sql

Table créée.

Après rien de complexe non plus :

explain plan for <<le code SQL>>

Soit par exemple :

system@DB.WORLD> explain plan for select * from v$session;

Explicité.

La encore rien de transcendant … :)

Et pour finir :

system@DB.WORLD> @?/rdbms/admin/utlxpls.sql
PLAN_TABLE_OUTPUT
—————————————————————————————————-
Plan hash value: 319272779

——————————————————————————————–
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
——————————————————————————————–
| 0 | SELECT STATEMENT | | 1 | 1134 | 0 (0)| 00:00:01 |
| 1 | NESTED LOOPS | | 1 | 1134 | 0 (0)| 00:00:01 |
|* 2 | FIXED TABLE FULL | X$KSUSE | 1 | 925 | 0 (0)| 00:00:01 |
|* 3 | FIXED TABLE FIXED INDEX| X$KSLED (ind:2) | 1 | 209 | 0 (0)| 00:00:01 |
——————————————————————————————–

Predicate Information (identified by operation id):
—————————————————

2 - filter(”S”.”INST_ID”=USERENV(’INSTANCE’) AND BITAND(”S”.”KSSPAFLG”,1)<>0 AND
BITAND(”S”.”KSUSEFLG”,1)<>0)
3 - filter(”S”.”KSUSEOPC”=”E”.”INDX”)

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

Voili voilou !

a+

TNS : Lost contact - ORA-12547

Posted on juillet 30th, 2007 in DataBase, Oracle, Tips by David

Non non ce n’est pas le nouveau titre du dernier Star Trek…

Comme le bug de ce blog est quand même d’auto alimenter ma mémoire pour m’éviter de rechercher la même chose 100 fois, nous allons donc trouver une solution a ce problème déroutant.

[Oracle]/home/oracle>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.3.0 - Production on Mon Jul 30 14:22:08 2007

Copyright (c) 1982, 2006, Oracle. All Rights Reserved.

ERROR:
ORA-12547: TNS:lost contact

 

Enter user-name:webkins

 

Ne cherchez pas, aucun log nulle part, il faut aller se battre avec Metalink pour trouver que le problème est la :

[Oracle]/home/oracle>/usr/sbin/kmtune | grep maxd
maxdsiz 0×10000000 - 0×10000000
maxdsiz_64bit 0×40000000 - 0X40000000

 

Une verif sur les paramètres noyau de votre HPUX, et hop tout est résolu ! :)

Un ptit coup de MTS en douce pour la 10g …

Posted on juin 15th, 2007 in DataBase, Oracle, Tips by David

Petit détail amusant …

Tout d’habord il faut citer Tom Kyte :

“Unless you have a real reason to use MTS – don’t.” ( plagié sur http://www.dba-oracle.com )

Ensuite créer une base 10g avec DBCA et jeter un oeuil aux paramètres :

NAME |VALUE
dispatchers |(PROTOCOL=TCP) (SERVICE=SID01XDB)

shared_servers |1
shared_server_sessions |

max_shared_servers |

Nous avons donc, une instance avec le MTS activée … mais pas de limite sur le nombre de process..

Comment ne pas récuperer le beurre, ni l’argent du beurre.

a++

ORA-04042 Lors de la création du repository Grid Enterprise Manager.

Posted on mai 23rd, 2007 in DataBase, Oracle, Tips by David

Oracle : 10g

Produit : Oracle Enterprise Manager Grid Control.

Lors de l’installation du repository EM, sur une base existante, vous pouvez avoir ce message :

ORA-04042 - dbms_shared_pool’ Is Missing or Corrupt

1 une solution :

en tant que sys as sysdba : @?/rdbms/admin/dbmspool.sql

ensuite : grant execute on dbms_shared_pool to dba;

Voila ! a+

Générer du XML avec Oracle.

Posted on mai 10th, 2007 in DataBase, Oracle, Tips by David

Depuis la version 9i, Oracle donne la possibilité de générer et gérer du XML via le composant XML DB.

Pour générer un flux, on dispose des packages DBMS_XMLDOM et DBMS_XMLGEN.

Le seul problème c’est qu’il faut installer l’option complete pour pouvoir utiliser uniquement deux package … heureusement il existe une solution alternative : SYS_XMLGEN et SYS_XMLAGG , fournis en standard avec le moteur Oracle.

Petit exemple :

SELECT SYS_XMLGEN(email)
FROM employees
WHERE employee_id = 205;

SYS_XMLGEN(EMAIL)
——————————————————————-
<?xml version=”1.0”?>
<EMAIL>SHIGGINS</EMAIL>

Pas mal … mais peux mieux faire :)

Maintenant, on peut utiliser SYS_XMLAGG pour générer un ensemble de résultats :

SELECT SYS_XMLAGG(SYS_XMLGEN(last_name))
FROM employees
WHERE last_name LIKE ‘R%’;

SYS_XMLAGG(SYS_XMLGEN(LAST_NAME))
——————————————————————–
<ROWSET>
<LAST_NAME>Raphaely</LAST_NAME>
<LAST_NAME>Rogers</LAST_NAME>
<LAST_NAME>Rajs</LAST_NAME>
<LAST_NAME>Russell</LAST_NAME>
</ROWSET>

En suite il ne reste plus qu’a générer le fichier, avec un UTL_FILE par exemple…

a+ !

ORA-01595 - ORA-01594 - error freeing extent of rollback segment

Posted on avril 20th, 2007 in DataBase, Oracle, Tips by David

Symptomes :

ORA-01595: error freeing extent (1) of rollback segment (2))
ORA-01594: attempt to wrap into rollback segment (2) extent (1) which is being freed

OS : Tous

Version : Toutes ( si vous utilisez les rollback segment ).

Solution :

Vous manquez un peu de place sur vos rbs.

1 - Ajouter des rbs , même si vous n’augmentez pas le tablespace.

2 - Modifier les inital et next extend pour les augmenter.

3 - Eventuellement augmenter la taille du TBS en fonction des modifications 1 et 2

a++

Un bon article sur les nouveautés RMAN 10g

Posted on mars 20th, 2007 in DataBase, Oracle, Tips by David

Un article bref et concis sur les nouveautés RMAN en Oracle 10g est dispo sur Oracle-Base ,

Vous pouvez le trouver ici : RMAN 10g

David.

Page suivante »