Module N2
Dalibo SCOP
24.12
18 décembre 2024
Cette formation est sous licence CC-BY-NC-SA. Vous êtes libre de la redistribuer et/ou modifier aux conditions suivantes :
PostgreSQL® Postgres® et le logo Slonik sont des marques déposées par PostgreSQL Community Association of Canada.
Ce document ne couvre que les versions supportées de PostgreSQL au moment de sa rédaction, soit les versions 13 à 17.
Ce module est organisé en trois parties :
Étapes de la configuration :
Structure
#
0
1
IMPORT fichier.conf
ORACLE_HOME /path/.../
DEBUG [0|1]
LOGFILE /path/.../migration.log
ORACLE_DSN
dbi:Oracle:host=serveur;sid=INSTANCE
dbi:Oracle:TNSNAME
dbi:Oracle://serveur:1521/service
ORACLE_USER
system
ORACLE_PWD
manager
SCHEMA
NOM_SCHEMA
SYSUSERS
USER_GRANTS [0|1]
Cette étape d’exploration permet d’obtenir des informations sur la base Oracle :
Certaines informations sont disponibles immédiatement, sans plus de configuration :
SHOW_VERSION
SHOW_SCHEMA
SHOW_TABLE
SHOW_COLUMN
Recherche de l’encodage utilisé par l’instance Oracle :
SHOW_ENCODING
NLS_LANG
CLIENT_ENCODING
AMERICAN_AMERICA.AL32UTF8
French_France.WE8ISO8895P1
NLS_NCHAR
AL32UTF8
utf8
latin1
latin9
BINMODE
raw
Le but du fichier de configuration générique est multiple :
Utilisation de fichiers de sortie dédiés
FILE_PER_CONSTRAINT
FILE_PER_INDEX
FILE_PER_FKEYS
FILE_PER_TABLE
FILE_PER_FUNCTION
DISABLE_TRIGGERS
TRUNCATE_TABLE
DISABLE_SEQUENCE
COMPILE_SCHEMA
PLSQL_PGSQL
Utilisation d’un schéma sous PostgreSQL ?
EXPORT_SCHEMA
PG_SCHEMA
CREATE_SCHEMA
PG_VERSION
BITMAP_AS_GIN
btree_gin
STANDARD_CONFORMING_STRINGS
La base contient des champs de type SDO_GEOMETRY.
SDO_GEOMETRY
AUTODETECT_SPATIAL_TYPE
DEFAULT_SRID
CONVERT_SRID
POSTGIS_SCHEMA
GEOMETRY_EXTRACT_TYPE
L’export des champs CLOB et BLOB sont contrôlés par :
LONGREADLEN
LONGTRUNCOK
NO_LOB_LOCATOR
BLOB_LIMIT
Étapes :
ora2pg --init_project dirname --project_base dirname
ora2pg.conf
ora2pg
-t
-b
-o
-p
ora2pg -p -t TABLE -o table.sql -b schema/tables -c config/ora2pg.conf
ora2pg -t SEQUENCE -o sequences.sql -b schema/sequences -c config/ora2pg.conf
ora2pg -p -t VIEW -o views.sql -b schema/views -c config/ora2pg.conf
USE_TABLESPACE
REPLACE_TABLES ORIG_TABLE1:DEST_TABLE1
REPLACE_COLS TABLE1(ORIG_COL1:DEST_COL1, [..])
INDEXES_SUFFIX _idx
INDEXES_RENAMING
DATA_TYPE NUMBER(*\,0):bigint
MODIFY_TYPE TABLE1:COL1:integer TABLE1:COL2:timestamptz
REPLACE_AS_BOOLEAN TABLE1:COL1 [..]
ora2pg -t GRANT -o users.sql -b schema/users -c config/ora2pg.conf
ora2pg -t TABLESPACE -o tablespaces.sql -b schema/tablespaces \ -c config/ora2pg.conf
ora2pg -p -t TYPE -o types.sql -b schema/types -c config/ora2pg.conf
ora2pg -p -t TRIGGER -o triggers.sql -b schema/triggers -c config/ora2pg.conf ora2pg -p -t FUNCTION -o functions.sql -b schema/functions -c config/ora2pg.conf ora2pg -p -t PROCEDURE -o procedures.sql -bschema/procedures -c config/ora2pg.conf ora2pg -p -t PACKAGE -o packages.sql -b schema/packages -c config/ora2pg.conf
ora2pg -t TYPE -o types.sql -b sources/types -c config/ora2pg.conf ora2pg -t VIEW -o views.sql -b sources/views -c config/ora2pg.conf ora2pg -t MVIEW -o mviews.sql -b sources/mviews -c config/ora2pg.conf ora2pg -t TRIGGER -o triggers.sql -b sources/triggers -c config/ora2pg.conf ora2pg -t FUNCTION -o functions.sql -b sources/functions -c config/ora2pg.conf ora2pg -t PROCEDURE -o procedures.sql -b sources/procedures -c config/ora2pg.conf ora2pg -t PACKAGE -o packages.sql -b sources/packages -c config/ora2pg.conf
range
list
hash
ora2pg -t PARTITION -o partitions.sql -b schema/partitions -c config/ora2pg.conf
DISABLE_PARTITION
PG_SUPPORTS_PARTITION
ora2pg -t MVIEW -o mviews.sql -b schema/mviews -c config/ora2pg.conf
PostgreSQL ne possède pas d’objet de type SYNONYM
SYNONYM
search_path
ora2pg -t SYNONYM -o synonyms.sql -b schema/synonyms -c config/ora2pg.conf
PostgreSQL ne possède pas d’objets de type DIRECTORY ni de tables EXTERNAL
DIRECTORY
EXTERNAL
file_fdw
COPY
ora2pg -t DIRECTORY -o directories.sql -b schema/directories -c config/ora2pg.conf
PostgreSQL ne possède pas d’objets de type DATABASE LINK
DATABASE LINK
oracle_fdw
ora2pg -t DBLINK -o dblinks.sql -b schema/dblinks -c config/ora2pg.conf
BFILE
bytea
TEXT
external_file
EFILE
(directory_name, filename)
DATA_TYPE
Oracle Index Texte
CONTAINS
CATSEARCH
PostgreSQL : Full Text Search/Recherche Plein Texte
@@
SELECT to_tsvector('fat cats ate fat rats') @@ to_tsquery('fat & rat');
pg_trgm
LIKE '%mot%mot%
Création des objets du schéma :
psql -U myuser -f schema/tables/tables.sql mydb >> create_mydb.log 2>&1 psql -U myuser -f schema/partitions/partitions.sql mydb >> create_mydb.log 2>&1 psql -U myuser -f schema/views/views.sql mydb >> create_mydb.log 2>&1 psql -U myuser -f schema/tablespaces/tablespaces.sql mydb >> create_mydb.log 2>&1
Chargement différé de certains objets :
Bilan de l’export/import du schéma :
CHECK
CHECK (WYEAR between 0 and 9);
CHECK (wyear::integer between 0 and 9);
ora2pg -t COPY -o datas.sql -b data/ -c config/ora2pg.conf ora2pg -t INSERT -o datas.sql -b data/ -c config/ora2pg.conf
BLOB
CLOB
LOB
SRID
GEOMETRY_EXTRACT_TYPE [WKT|WKB|INTERNAL]
psql -U myuser -f data/datas.sql mydb >> data_mydb.log 2>&1 gunzip -c data/datas.sql.gz | psql -U myuser mydb >> data_mydb.log 2>&1 bunzip2 -c data/datas.sql.bz2 | psql -U myuser mydb >> data_mydb.log 2>&1
Restauration des contraintes, triggers, séquences et index
psql -U myuser -f schema/tables/CONSTRAINTS_tables.sql mygdb >> create_mydb.log 2>&1 psql -U myuser -f schema/tables/INDEXES_tables.sql mygdb >> create_mydb.log 2>&1 psql -U myuser -f schema/sequences/sequences.sql mygdb >> create_mydb.log 2>&1 psql -U myuser -f schema/triggers/triggers.sql mygdb >> create_mydb.log 2>&1
Action :
LOAD
ora2pg -c config/ora2pg -t LOAD -j 4 -i schema/tables/INDEXES_tables.sql
ora2pg -c config/ora2pg -t LOAD -j 4 -i schema/tables/CONSTRAINTS_tables.sql
DEFAULT_NUMERIC
ALTER TABLE
XML
PG_DSN dbi:Pg:dbname=test_db;host=localhost;port=5432 PG_USER [nom_utilisateur] PG_PWD [mot_de_passe]
DATA_LIMIT
JOBS Ncores
ORACLE_COPIES Ncores
DEFINED_PKEY EMPLOYEE:ID
PARALLEL_TABLES Ncores
JOBS
ORACLE_COPIES | PARALLEL_TABLES
ALLOW TABLE1 TABLE2 [..] TABLEN
EXCLUDE TABLE1 TABLE2 [..] TABLEN
WHERE TABLE[condition valide] GLOBAL_CONDITION
WHERE TABLE_TEST[ID1='001']
WHERE DATE_CREATION > '2001-01-01
REPLACE_QUERY TABLENAME[SQL_QUERY]
VACUUM FREEZE
N’hésitez pas, c’est le moment !
https://dali.bo/n2_quiz