lundi 16 février 2009

ORA-06502 lors d’import via DB Link (IMPDP)

Lors d’un import, je devais exclure plusieurs tables. J’ai alors procédé de la façon habituelle, c’est-à-dire, en déclarant le paramètre TABLES puis une condition dans mon fichier de paramètres :

TABLES = 'NOT IN (''NomSchema.NomTable'', ''NomSchema.NomTable'', ''NomSchema.NomTable''…

Lors de l’exécution de l’import, j’ai reçu l’erreur suivante :

ORA-06502 (PL/SQL: numeric or value error: character string buffer too small

C’est à ce moment que j’ai constaté qu’il y avait une limite de caractères que l’on pouvait passer au paramètre.

L’alternative à cette limite est d’utiliser une table dans laquelle nous y insérons le nom des tables que nous désirons exclure et, par la suite, nous effectuerons une condition sous forme de requêtes.

Pour débuter, j’ai créé une nouvelle table et j’ai inséré le nom des tables à exclure :

CREATE TABLE impdp_t_objet
(
NomPropr VARCHAR2(30),
TypeObjet VARCHAR2(30),
NomObjet VARCHAR2(30)
);

INSERT INTO impdp_t_objet (NomPropr, TypeObjet, NomObjet)
VALUES ('NomSchema','TABLE','NomTable');
INSERT INTO impdp_t_objet (NomPropr, TypeObjet, NomObjet)
VALUES ('NomSchema','TABLE','NomTable');

Commit;


Ensuite, j’ai ajouté la ligne suivante dans le fichier de paramètre qui a été utilisé lors de l’import :

TABLES='NOT IN (SELECT NomObjet FROM impdp.impdp_t_objet WHERE NomPropr=''NomSchema'' AND TypeObjet =''TABLE'')'

Et, là, je suis prêt à exécuter l’import.

J’aime bien cette façon de procéder car dans ma situation, je dois rafraichir les données de plusieurs systèmes sous plusieurs environnements et je dois fréquemment exclure des objets. Ça me permet de conserver les objets à exclure d'une fois à l'autre.

Aucun commentaire:

Publier un commentaire