PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 21/06/2012 17:46:36

ptipauloo
Membre

Migration oracle -> postgresql : ora2pg

Bonjour,
J'essaye de faire un export d'un schéma avec tous les types d'objets en utilisant la commande suivante :
for i in TABLE PACKAGE COPY VIEW GRANT SEQUENCE TRIGGER FUNCTION PROCEDURE TABLESPACE ; do perl -p -i -e "s/^TYPE\s+.*/TYPE $i/; s/^OUTPUT\s+.*/OUTPUT $i.sql/" /etc/ora2pg/ora2pg.conf; /usr/local/bin/ora2pg /etc/ora2pg/ora2pg.conf; done

J'ai l'erreur ci-dessous :
DBD::Oracle::db prepare failed: ORA-00942: Table ou vue inexistante (DBD ERROR: error possibly near <*> indicator at char 100 in 'SELECT partition_id,partition_name,to_char(partition_last_purge_time, 'YYYY-MM-DD HH24:MI:SS') FROM <*>MDS_PARTITIONS a') [for Statement "SELECT partition_id,partition_name,to_char(partition_last_purge_time, 'YYYY-MM-DD HH24:MI:SS') FROM MDS_PARTITIONS a"] at /usr/lib/perl5/site_perl/5.8.8/Ora2Pg.pm line 3141.
FATAL: ORA-00942: Table ou vue inexistante (DBD ERROR: error possibly near <*> indicator at char 100 in 'SELECT partition_id,partition_name,to_char(partition_last_purge_time, 'YYYY-MM-DD HH24:MI:SS') FROM <*>MDS_PARTITIONS a')

Je ne sais pourquoi ça insère le caractère <*> et comment le corriger.

Hors ligne

#2 22/06/2012 17:00:39

gilles
Membre

Re : Migration oracle -> postgresql : ora2pg

Bonjour,

Il y a plus simple pour ce que vous voulez faire :

for export_type in TABLE PACKAGE COPY VIEW GRANT SEQUENCE TRIGGER FUNCTION PROCEDURE TABLESPACE ; do
    /usr/local/bin/ora2pg -t $export_type -o $export_type.sql -c /etc/ora2pg/ora2pg.conf
done

Je vous conseille la lecture de la présentation que j'ai fait au PgConf l'année dernière ou les bonnes manières d'utiliser les options et le fichier de configuration : http://ora2pg.darold.net/ora2pg-bonnes-pratiques.pdf

Concernant l'erreur, tout d'abord le <*> n'est pas un caractère inséré, c'est Oracle qui signale la position de l'erreur dans la requête. Sinon je ne comprend pas ce que vient faire MDS_PARTITIONS ici c'est probablement une table ou une vue à laquelle l'utilisateur n'a pas accès. Essayez avec un superutilisateur vu que de toute façon vous voulez exporter les droits (type GRANTS) vous aurez donc besoin des privilèges superutilisateur d'Oracle. J'entend par là un utilisateur qui a les droits DBA sous Oracle.

Hors ligne

#3 27/06/2012 15:53:05

ptipauloo
Membre

Re : Migration oracle -> postgresql : ora2pg

Bonjour,
Merci pour le document.
J'ai parmétré le fichier de configuration en suivant les préconistations du PDF et j'ai donné le role DBA à mon user de connexion  à oracle.
J'ai eu des erreurs "ORA-29275: partial multibyte character" lors de l'export que j'ai réglé en positionnant le charset dans le fichier de config à "NLS_LANG AMERICAN_AMERICA.AL32UTF8".
Par contre la commande /usr/local/bin/ora2pg -t SHOW_ENCODING ne ramène pas le database charset de la base oracle mais celui de l'OS(os en LANG french et base en american).
J'ai relancé l'export et j'ai juste le message ci-dessous mais je ne sais pas à quoi il correspond au juste :
Malformed UTF-8 character (fatal) at /usr/lib/perl5/site_perl/5.8.8/Ora2Pg.pm line 4186

Hors ligne

#4 29/06/2012 09:31:37

Marc Cousin
Membre

Re : Migration oracle -> postgresql : ora2pg

ce message est un message perl. Ça veut dire qu'il n'a pas reconnu le caractère fourni par Oracle comme de l'UTF-8 valide.


Marc.

Hors ligne

#5 06/07/2012 10:10:25

ptipauloo
Membre

Re : Migration oracle -> postgresql : ora2pg

Comment il ne reconnait pas les caractères qu'ils sont en AL32UTF8 dans la base? C'est un bug du perl? Y a t il un moyen de corriger ca?

Hors ligne

#6 06/07/2012 11:46:13

flo
Membre

Re : Migration oracle -> postgresql : ora2pg

Ce n'est pas un bug de Perl a priori, c'est que vous avez un caractère qui ne fait pas partie du jeu de caractères UTF-8.
Vous êtes certains que la base Oracle est en AL32UTF8?
Si vous faites la requête :
SELECT value$ FROM sys.props$ WHERE name = 'NLS_CHARACTERSET' ;
Cela donne quoi?

Hors ligne

Pied de page des forums