summaryrefslogtreecommitdiff
path: root/contrib/oracle/README.ora2pg
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2002-04-04 05:55:57 +0000
committerBruce Momjian <bruce@momjian.us>2002-04-04 05:55:57 +0000
commitd61c7886e8ab700872cebee9e4bcf9dccc2925f8 (patch)
tree4877f916e1dd37ca71860c0de73c05d484c396f0 /contrib/oracle/README.ora2pg
parent958a1c2a0e866e5af21800deb33ce13ec0929dfa (diff)
downloadpostgresql-d61c7886e8ab700872cebee9e4bcf9dccc2925f8.tar.gz
Update to new version of Oracle conversion utility, version 1.8.
Gilles DAROLD
Diffstat (limited to 'contrib/oracle/README.ora2pg')
-rw-r--r--contrib/oracle/README.ora2pg295
1 files changed, 193 insertions, 102 deletions
diff --git a/contrib/oracle/README.ora2pg b/contrib/oracle/README.ora2pg
index 159ac038b1..2d23f816af 100644
--- a/contrib/oracle/README.ora2pg
+++ b/contrib/oracle/README.ora2pg
@@ -20,6 +20,11 @@ SYNOPSIS
datasource => $dbsrc, # Database DBD datasource
user => $dbuser, # Database user
password => $dbpwd, # Database password
+ {
+ PrintError => 0,
+ RaiseError => 1,
+ AutoCommit => 0
+ }
);
# Create the POSTGRESQL representation of all objects in the database
@@ -62,74 +67,116 @@ SYNOPSIS
max => 20 # End extraction at indice 20
);
- To choose a particular schema just set the following option to
- your schema name :
+ To choose a particular Oracle schema to export just set the following
+ option to your schema name:
schema => 'APPS'
- To know at which indices table can be found during extraction
- use the option:
+ This schema definition can also be needed when you want to export data.
+ If export failed and complain that the table doesn't exists use this to
+ prefix the table name by the schema name.
+
+ To know at which indices tables can be found during extraction use the
+ option:
showtableid => 1
- To extract all views set the option type as follow:
+ To extract all views set the type option as follow:
type => 'VIEW'
- To extract all grants set the option type as follow:
+ To extract all grants set the type option as follow:
type => 'GRANT'
- To extract all sequences set the option type as follow:
+ To extract all sequences set the type option as follow:
type => 'SEQUENCE'
- To extract all triggers set the option type as follow:
+ To extract all triggers set the type option as follow:
type => 'TRIGGER'
- To extract all functions set the option type as follow:
+ To extract all functions set the type option as follow:
type => 'FUNCTION'
- To extract all procedures set the option type as follow:
+ To extract all procedures set the type option as follow:
type => 'PROCEDURE'
- Default is table schema extraction
+ To extract all packages and body set the type option as follow:
+
+ type => 'PACKAGE'
+
+ Default is table extraction
type => 'TABLE'
+ To extract all data from table extraction as INSERT statement use:
+
+ type => 'DATA'
+
+ To extract all data from table extraction as COPY statement use:
+
+ type => 'COPY'
+
+ and data_limit => n to specify the max tuples to return. If you set this
+ options to 0 or nothing, no limitation are used. Additional option
+ 'table', 'min' and 'max' can also be used.
+
+ When use of COPY or DATA you can export data by calling method:
+
+ $schema->export_data("output.sql");
+
+ Data are dumped to the given filename or to STDOUT with no argument. You
+ can also send these data directly to a PostgreSQL backend using the
+ following method:
+
+ $schema->send_to_pgdb($destdatasrc,$destuser,$destpasswd);
+
+ In this case you must call export_data() without argument after the call
+ to method send_to_pgdb().
+
+ If you set type to COPY and you want to dump data directly to a PG
+ database, you must call method send_to_pgdb but data will not be sent
+ via DBD::Pg but they will be load to the database using the psql
+ command. Calling this method is istill required to be able to extract
+ database name, hostname and port information. Edit the $PSQL variable to
+ match the path of your psql command (nothing to edit if psql is in your
+ path).
+
DESCRIPTION
- Ora2Pg is a perl OO module used to export an Oracle database
- schema to a PostgreSQL compatible schema.
+ Ora2Pg is a perl OO module used to export an Oracle database schema to a
+ PostgreSQL compatible schema.
- It simply connect to your Oracle database, extract its structure
- and generate a SQL script that you can load into your PostgreSQL
- database.
+ It simply connect to your Oracle database, extract its structure and
+ generate a SQL script that you can load into your PostgreSQL database.
- I'm not a Oracle DBA so I don't really know something about its
- internal structure so you may find some incorrect things. Please
- tell me what is wrong and what can be better.
+ I'm not a Oracle DBA so I don't really know something about its internal
+ structure so you may find some incorrect things. Please tell me what is
+ wrong and what can be better.
It currently dump the database schema (tables, views, sequences,
- indexes, grants), with primary, unique and foreign keys into
- PostgreSQL syntax without editing the SQL code generated.
+ indexes, grants), with primary, unique and foreign keys into PostgreSQL
+ syntax without editing the SQL code generated.
+
+ It now can dump Oracle data into PostgreSQL DB as online process. You
+ can choose what columns can be exported for each table.
Functions, procedures and triggers PL/SQL code generated must be
- reviewed to match the PostgreSQL syntax. Some usefull
- recommandation on porting Oracle to PostgreSQL can be found at
+ reviewed to match the PostgreSQL syntax. Some usefull recommandation on
+ porting Oracle to PostgreSQL can be found at
http://techdocs.postgresql.org/ under the "Converting from other
- Databases to PostgreSQL" Oracle part. I just notice one thing
- more is that the trunc() function in Oracle is the same for
- number or date so be carefull when porting to PostgreSQL to use
- trunc() for number and date_trunc() for date.
+ Databases to PostgreSQL" Oracle part. I just notice one thing more is
+ that the trunc() function in Oracle is the same for number or date so be
+ carefull when porting to PostgreSQL to use trunc() for number and
+ date_trunc() for date.
ABSTRACT
- The goal of the Ora2Pg perl module is to cover all part needed
- to export an Oracle database to a PostgreSQL database without
- other thing that provide the connection parameters to the Oracle
- database.
+ The goal of the Ora2Pg perl module is to cover all part needed to export
+ an Oracle database to a PostgreSQL database without other thing that
+ provide the connection parameters to the Oracle database.
Features must include:
@@ -137,15 +184,15 @@ ABSTRACT
with unique, primary and foreign key.
- Grants/privileges export by user and group.
- Table selection (by name and max table) export.
- - Predefined functions/triggers/procedures export.
+ - Predefined functions/triggers/procedures/packages export.
+ - Data export.
- Sql query converter (todo)
- - Data export (todo)
- My knowledge regarding database is really poor especially for
- Oracle so contribution is welcome.
+ My knowledge regarding database is really poor especially for Oracle so
+ contribution is welcome.
REQUIREMENT
- You just need the DBI and DBD::Oracle perl module to be
+ You just need the DBI, DBD::Pg and DBD::Oracle perl module to be
installed
PUBLIC METHODS
@@ -159,36 +206,57 @@ PUBLIC METHODS
- user : DBD user (optional with public access)
- password : DBD password (optional with public access)
- schema : Oracle internal schema to extract
- - type : Type of data to extract, can be TABLE,VIEW,GRANT,SEQUENCE,TRIGGER,FUNCTION,PROCEDURE
+ - type : Type of data to extract, can be TABLE,VIEW,GRANT,SEQUENCE,
+ TRIGGER,FUNCTION,PROCEDURE,DATA,COPY,PACKAGE
- debug : Print the current state of the parsing
- tables : Extract only the given tables (arrayref)
- showtableid : Display only the table indice during extraction
- min : Indice to begin extraction. Default to 0
- max : Indice to end extraction. Default to 0 mean no limits
+ - data_limit : Number max of tuples to return during data extraction (default 10)
Attempt that this list should grow a little more because all
initialization is done by this way.
+ export_data FILENAME
+
+ Print SQL data output to a filename or to STDOUT if no file is given.
+
+ Must be used only if type option is set to DATA or COPY =cut
+
+ sub export_data { my ($self, $outfile) = @_;
+
+ $self->_get_sql_data($outfile);
+ }
+
export_sql FILENAME
- Print SQL conversion output to a filename or to STDOUT if no
- file is given.
+ Print SQL conversion output to a filename or simply return these data if
+ no file is given.
+
+ send_to_pgdb DEST_DATASRC DEST_USER DEST_PASSWD
+
+ Open a DB handle to a PostgreSQL database
+
+ modify_struct TABLE_NAME ARRAYOF_FIELDNAME
+
+ Modify a table structure during export. Only given fieldname will be
+ exported.
PRIVATE METHODS
_init HASH_OPTIONS
- Initialize a Ora2Pg object instance with a connexion to the
- Oracle database.
+ Initialize a Ora2Pg object instance with a connexion to the Oracle
+ database.
_grants
This function is used to retrieve all privilege information.
- It extract all Oracle's ROLES to convert them as Postgres groups
- and search all users associated to these roles.
+ It extract all Oracle's ROLES to convert them as Postgres groups and
+ search all users associated to these roles.
- Set the main hash $self->{groups}. Set the main hash $self-
- >{grantss}.
+ Set the main hash $self->{groups}. Set the main hash $self->{grantss}.
_sequences
@@ -208,29 +276,35 @@ PRIVATE METHODS
Set the main hash $self->{functions}.
+ _packages
+
+ This function is used to retrieve all packages information.
+
+ Set the main hash $self->{packages}.
+
_tables
This function is used to retrieve all table information.
- Set the main hash of the database structure $self->{tables}.
- Keys are the names of all tables retrieved from the current
- database. Each table information compose an array associated to
- the table_info key as array reference. In other way:
+ Set the main hash of the database structure $self->{tables}. Keys are
+ the names of all tables retrieved from the current database. Each table
+ information compose an array associated to the table_info key as array
+ reference. In other way:
$self->{tables}{$class_name}{table_info} = [(OWNER,TYPE)];
- DBI TYPE can be TABLE, VIEW, SYSTEM TABLE, GLOBAL TEMPORARY,
- LOCAL TEMPORARY, ALIAS, SYNONYM or a data source specific type
- identifier. This only extract TABLE type.
+ DBI TYPE can be TABLE, VIEW, SYSTEM TABLE, GLOBAL TEMPORARY, LOCAL
+ TEMPORARY, ALIAS, SYNONYM or a data source specific type identifier.
+ This only extract TABLE type.
- It also get the following informations in the DBI object to
- affect the main hash of the database structure :
+ It also get the following informations in the DBI object to affect the
+ main hash of the database structure :
$self->{tables}{$class_name}{field_name} = $sth->{NAME};
$self->{tables}{$class_name}{field_type} = $sth->{TYPE};
- It also call these other private subroutine to affect the main
- hash of the database structure :
+ It also call these other private subroutine to affect the main hash of
+ the database structure :
@{$self->{tables}{$class_name}{column_info}} = $self->_column_info($class_name);
@{$self->{tables}{$class_name}{primary_key}} = $self->_primary_key($class_name);
@@ -241,9 +315,9 @@ PRIVATE METHODS
This function is used to retrieve all views information.
- Set the main hash of the views definition $self->{views}. Keys
- are the names of all views retrieved from the current database
- values are the text definition of the views.
+ Set the main hash of the views definition $self->{views}. Keys are the
+ names of all views retrieved from the current database values are the
+ text definition of the views.
It then set the main hash as follow:
@@ -252,58 +326,62 @@ PRIVATE METHODS
_get_sql_data
- Returns a string containing the entire SQL Schema definition
- compatible with PostgreSQL
+ Returns a string containing the entire SQL Schema definition compatible
+ with PostgreSQL
+
+ _get_data TABLE
+
+ This function implements a Oracle-native data extraction.
- _sql_type INTERNAL_TYPE LENGTH
+ Return a list of array reference containing the data
- This function return the PostgreSQL datatype corresponding to
- the Oracle internal type.
+ _sql_type INTERNAL_TYPE LENGTH PRECISION SCALE
+
+ This function return the PostgreSQL datatype corresponding to the Oracle
+ internal type.
_column_info TABLE
This function implements a Oracle-native column information.
- Return a list of array reference containing the following
- informations for each column the given a table
+ Return a list of array reference containing the following informations
+ for each column the given a table
- [( column name, column type, column length, nullable column,
- default value )]
+ [( column name, column type, column length, nullable column, default
+ value )]
_primary_key TABLE
- This function implements a Oracle-native primary key column
- information.
+ This function implements a Oracle-native primary key column information.
- Return a list of all column name defined as primary key for the
- given table.
+ Return a list of all column name defined as primary key for the given
+ table.
_unique_key TABLE
- This function implements a Oracle-native unique key column
- information.
+ This function implements a Oracle-native unique key column information.
- Return a list of all column name defined as unique key for the
- given table.
+ Return a list of all column name defined as unique key for the given
+ table.
_foreign_key TABLE
This function implements a Oracle-native foreign key reference
information.
- Return a list of hash of hash of array reference. Ouuf! Nothing
- very difficult. The first hash is composed of all foreign key
- name. The second hash just have two key known as 'local' and
- remote' corresponding to the local table where the foreign key
- is defined and the remote table where the key refer.
+ Return a list of hash of hash of array reference. Ouuf! Nothing very
+ difficult. The first hash is composed of all foreign key name. The
+ second hash just have two key known as 'local' and remote' corresponding
+ to the local table where the foreign key is defined and the remote table
+ where the key refer.
The foreign key name is composed as follow:
'local_table_name->remote_table_name'
- Foreign key data consist in two array representing at the same
- indice the local field and the remote field where the first one
- refer to the second. Just like this:
+ Foreign key data consist in two array representing at the same indice
+ the local field and the remote field where the first one refer to the
+ second. Just like this:
@{$link{$fkey_name}{local}} = @local_columns;
@{$link{$fkey_name}{remote}} = @remote_columns;
@@ -318,31 +396,27 @@ PRIVATE METHODS
This function implements a Oracle-native roles information.
- Return a hash of all groups (roles) as an array of associated
- users.
+ Return a hash of all groups (roles) as an array of associated users.
_get_all_grants
- This function implements a Oracle-native user privilege
- information.
+ This function implements a Oracle-native user privilege information.
- Return a hash of all tables grants as an array of associated
- users.
+ Return a hash of all tables grants as an array of associated users.
_get_indexes TABLE
This function implements a Oracle-native indexes information.
- Return hash of array containing all unique index and a hash of
- array of all indexes name which are not primary keys for the
- given table.
+ Return hash of array containing all unique index and a hash of array of
+ all indexes name which are not primary keys for the given table.
_get_sequences
This function implements a Oracle-native sequences information.
- Return a hash of array of sequence name with MIN_VALUE,
- MAX_VALUE, INCREMENT and LAST_NUMBER for the given table.
+ Return a hash of array of sequence name with MIN_VALUE, MAX_VALUE,
+ INCREMENT and LAST_NUMBER for the given table.
_get_views
@@ -350,6 +424,15 @@ PRIVATE METHODS
Return a hash of view name with the SQL query it is based on.
+ _alias_info
+
+ This function implements a Oracle-native column information.
+
+ Return a list of array reference containing the following informations
+ for each alias of the given view
+
+ [( column name, column id )]
+
_get_triggers
This function implements a Oracle-native triggers information.
@@ -362,6 +445,12 @@ PRIVATE METHODS
Return a hash of all function name with their PLSQL code
+ _get_packages
+
+ This function implements a Oracle-native packages information.
+
+ Return a hash of all function name with their PLSQL code
+
_table_info
This function retrieve all Oracle-native tables information.
@@ -374,16 +463,18 @@ AUTHOR
COPYRIGHT
Copyright (c) 2001 Gilles Darold - All rights reserved.
- This program is free software; you can redistribute it and/or
- modify it under the same terms as Perl itself.
+ This program is free software; you can redistribute it and/or modify it
+ under the same terms as Perl itself.
BUGS
This perl module is in the same state as my knowledge regarding
- database, it can move and not be compatible with older version
- so I will do my best to give you official support for Ora2Pg.
- Your volontee to help construct it and your contribution are
- welcome.
+ database, it can move and not be compatible with older version so I will
+ do my best to give you official support for Ora2Pg. Your volontee to
+ help construct it and your contribution are welcome.
SEE ALSO
- the DBI manpage, the DBD::Oracle manpage
+ the DBI manpage, the DBD::Oracle manpage, the DBD::Pg manpage
+
+ACKNOWLEDGEMENTS
+ Thanks to Jason Servetar who decided me to implement data extraction.