diff options
| author | Bruce Momjian <bruce@momjian.us> | 2002-04-04 05:55:57 +0000 |
|---|---|---|
| committer | Bruce Momjian <bruce@momjian.us> | 2002-04-04 05:55:57 +0000 |
| commit | d61c7886e8ab700872cebee9e4bcf9dccc2925f8 (patch) | |
| tree | 4877f916e1dd37ca71860c0de73c05d484c396f0 /contrib/oracle/README.ora2pg | |
| parent | 958a1c2a0e866e5af21800deb33ce13ec0929dfa (diff) | |
| download | postgresql-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.ora2pg | 295 |
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. |
