PostgreSQL
La base de données la plus sophistiquée au monde.

Ouverture de session

Navigation

Contactez-nous

Administration du site :
"equipe chez postgresqlfr point org"

Contact presse :
"fr chez postgresql point org"

Contact association :
"bureau chez postgresqlfr point org"

Questions PostgreSQL :
 IRC :
  serveur irc.freenode.net
  canal #postgresqlfr

Recherche

Accéder aux archives

« Octobre 2008  
Lun Mar Mer Jeu Ven Sam Dim
  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  

Syndication

Flux XML

Sondage

Quelle est la version de PostgreSQL la plus répandue sur vos serveurs ?
8.3
10%
8.2
42%
8.1
40%
8.0
2%
7.4
6%
7.3 ou antérieure
0%
Nombre de votes: 48

TRACE de migration d'ORACLE vers POSTGRESQL

Technique - installation | TRACE de migration d'ORACLE vers POSTGRESQL

Par maouth le 26/06/2006 - 16:18

"voila mes traces sur la migration d'oracle vers postgres si ca peu aider ;) "

MIGRATION D’UNE BASE ORACLE VERS POSTGRES

Transfert de la structure de données

Un outil existe, ora2pg
ProblĂšme rencontrĂ©, l’outil a besoin d’une librairie d’oracle, ce qui nĂ©cessite une installation d’oracle. (L’accĂšs Ă  l’arborescence des fichiers sur l’ordinateur serveur, n’est pas autorisĂ©) .L’outil peu ĂȘtre intĂ©ressant si l’on a beaucoup de base Ă  transfĂ©rer.

Solution retenue,
RĂ©cupĂ©ration du code SQL oracle (on a utilisĂ© TOAD pour le faire) suivie d’une exĂ©cution du code SQL sur postgresql.

ProblÚmes rencontrés,
-Certain type de données définies dans Oracle ne sont pas à la norme SQL 92. Il faut appliquer les transformations suivantes
NUMBER ([p[,n]])  NUMERIC
VARCHAR2 (n BITE)  VARCHAR (n)
REMARQUE: postgresql traite de la mĂȘme façon VARCHAR (n) et VARCHAR ()
Mais pour rester conforme Ă  la norme il vaut mieux utiliser VARCHAR (n)

-Le code gĂ©nĂ©rĂ© par TOAD pour les clĂ©s primaires n’est pas Ă  la norme

Transfert des données

On a TransfĂ©rĂ© les donnĂ©es de la mĂȘme façon grĂące au code SQL, la mĂ©thode est dĂ©crite dans la documentation de postgresql plusieurs solutions sont possible :
-TransfĂ©rer directement avec l’outil PgAdminIII
-L’outil psql
- etc
 voir manuel

ProblÚmes rencontrés
-L’outil PgAdminIII marche trĂšs bien pour de petit fichier, mais pour des fichiers de donnĂ©es plus volumineux (+ de 33 Mo pour nous) l’outil a boguĂ© et le systĂšme d’exploitation (Windows) a perdu la main.
-L’outil PgAdminIII semble rencontrer quelques problĂšmes sur l’OS FĂ©dora – GNOME.

MĂ©thode Ă  suivre avec psql :

>psql –U [superuser] –H[hote] [base de donnĂ©es]
>>\i [file ]
>>\q

Transfert des fonctions et procédures PL/SQL vers PL/pgSQL

Cette partie est la moins compatible et la plus longue. L’outil ora2pg ne fait pas la conversion.

Solution retenue
RĂ©cupĂ©ration du code SQL oracle (on a utilisĂ© TOAD pour le faire) suivie d’une modification et d’une exĂ©cution du code sur postgresql.

ProblÚmes rencontrés :
-Les langages ne sont pas vraiment identiques.
-Les déclarations de fonction et de procédure ne sont pas identiques

(1) lors de la déclaration de fonction :

-Les types de données retournées sont déclarés par RETURNS
RETURN  RETURNS

-Les procĂ©dures n’existent pas en pl/pgsql, elles sont remplacĂ©es par des fonctions qui ont pour type de retour void
CREATE OR REPLACE PROCEDURE CALCUL_DONNEES

CREATE OR REPLACE FUNCTION CALCUL_DONNEES () RETURNS VOID

-Conversion des types de donnés oracles par des types normés SQL

-Le ‘IS’ d’oracle pour dĂ©clarer le corps de la fonction devient AS lors de la dĂ©claration du code pl/pgsql de la fonction

-Le corps du code pl/pgsql est défini entre deux doubles dollars
$$
[Corps]
$$

- Comme il existe d’autres langages gĂ©rĂ©s par postgresql on doit spĂ©cifier le langage utilisĂ© par une dĂ©claration LANGUAGE 'plpgsql' ; aprĂšs les deux doubles dollars de la fin du corps.
NB : j’ai pas rĂ©ussi a rĂ©cupĂ©rer les labels
On remplacera donc :
END [nom_de_la_fonction];/  END ;$$ LANGUAGE 'plpgsql';

(2) lors de la déclaration du corps de la fonction :

-toutes les variables utilisĂ©es doivent ĂȘtre dĂ©clarĂ©es avant le dĂ©but de BEGIN et doivent ĂȘtre prĂ©cĂ©dĂ©es par DECLARE

-les appels de fonctions ne sont pas implicite il faut les appeler avec le mot réservé PERFORM
Pour les procédures. (Pour les fonctions a voir)

-les fonctions de conversions prennent un deuxiĂšme paramĂštre, dĂ©finissent le format d’entrer.
Exemple : TO_NUMBER(text , ‘
’) ; -- (voir documentation sur les formats)

LES CURSEURS :

-Les curseurs ne doivent pas ĂȘtre dĂ©clarĂ© aprĂšs la balise DECLARE mais Ă  l’ouverture du curseur. Afin d’éviter lors d’appel successif de procĂ©dures de lancer une erreur si deux curseurs ont le mĂȘme nom.
Code pgsql :
On déclarera une référence à ce curseur.

DECLARE 

CURS_DONNEES REFCURSOR;

Lors de l’ouverture d’un curseur
BEGIN 

OPEN CURS_DONNEES FOR
‘Request’;

code oracle:
CURSOR Curs_Stations_Enreg IS
SELECT DISTINCT idst FROM DONNEES_QUOT WHERE ETAT='2';


BEGIN


OPEN Curs_Stations_Enreg;

-Les dĂ©clarations des variables d’enregistrement doivent ĂȘtre remplacĂ©es de la façon suivante :
enregStations Curs_Stations_Enreg%ROWTYPE;

enregStations RECORD;

LES FETCH s:
IL faut remplacer les %NOTFOUND par NOT FOUND
Attention FOUND est un Ă©tat utilisĂ© par plusieurs commandes, il faut faire le test de prĂ©fĂ©rence juste aprĂšs le FETCH pour Ă©viter des problĂšmes liĂ©s au changement d’état.
Exemple :
FETCH Curs_Stations_Enreg INTO enregStations;
EXIT WHEN Curs_Stations_Enreg%NOTFOUND;

FETCH Curs_Stations_Enreg INTO enregStations;
EXIT WHEN NOT FOUND;

Options d'affichage des commentaires

Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder les paramÚtres" pour activer vos changements.

Les versions

sparky/ = 27 Juin, 2006 - 12:08

J'aurais aimé savoir quelle version d'oracle vers quelle version de Postgresql.

Autre question pourquoi ne pas faire ceci pour executer les scripts ?

pqsl -U user -H host BASE_DE_DONNE -a -f script.sql -o script.log


les versions: Oracle : 9 P

maouth/ = 29 Juin, 2006 - 19:43

les versions:
Oracle : 9
Postgres : 8.1

pour pqsl : parceque ca marche lol
sinon ce n'est pas sur le transfert des données ou des tables
qu'il y a des pb ,
les vrai problémes ce sont les procedures stocker
trigger et compagnie avec pl/pgsql
et les oracleries :D

j'ai posté ces traces car je n'ai trouvé de thread sur le sujet des migrations et la doc est légére sur ce sujet .
et je pense qu'une grande parti des migrations viennent de Oracle ;)


Moi aussi, je cherche toujour

Bawttu/ = 16 Mars, 2007 - 17:04

Moi aussi, je cherche toujours comment transférer les procédures Oracle vers Postgre Oracle 817 PostgreSQL 8.2


Bonjour Je vous conseille

Christophe Chauvet/ = 16 Mars, 2007 - 17:57

Bonjour

Je vous conseille d'utiliser Ora2Pg, la partie requise pour oracle est la partie cliente, et peut ĂȘtre installer sur un autre poste que le serveur.

il faudra juste configurer le fichier TNSNAME.ORA pour qu'il pointe vers le serveur Oracle.

Cordialement.

Christophe Chauvet
KrysKool.org


© PostgreSQLFr, tous droits rĂ©servĂ©s.
Site déclaré à la CNIL sous le numéro 1074678, conformément à la Loi en vigueur.