aboutsummaryrefslogtreecommitdiff
path: root/contrib/oracle/README.ora2pg
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/oracle/README.ora2pg')
-rw-r--r--contrib/oracle/README.ora2pg530
1 files changed, 297 insertions, 233 deletions
diff --git a/contrib/oracle/README.ora2pg b/contrib/oracle/README.ora2pg
index 17e09e64a62..28be8e09176 100644
--- a/contrib/oracle/README.ora2pg
+++ b/contrib/oracle/README.ora2pg
@@ -1,233 +1,297 @@
- Ora2Pg - Oracle to PostgreSQL database schema converter
-
- _________________________________________________________________
-
- SYNOPSIS
-
- BEGIN {
- $ENV{ORACLE_HOME} = '/usr/local/oracle/oracle816';
- }
-
- use strict;
-
- use Ora2Pg;
-
- # Init the database connection
- my $dbsrc = 'dbi:Oracle:host=testdb.samse.fr;sid=TEST;port=1521';
- my $dbuser = 'system';
- my $dbpwd = 'manager';
-
- # Create an instance of the Ora2Pg perl module
- my $schema = new Ora2Pg (
- datasource => $dbsrc, # Database DBD datasource
- user => $dbuser, # Database user
- password => $dbpwd, # Database password
- );
-
- # Create the POSTGRESQL representation of all objects in the database
- $schema->export_schema("output.sql");
-
- exit(0);
- _________________________________________________________________
-
- DESCRIPTION
-
- 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.
-
- 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 only dump the database schema, with primary, unique and
- foreign keys. I've tried to excluded internal system tables but
- perhaps not enougt, please let me know.
- _________________________________________________________________
-
- 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.
-
- Features must include:
-
- - database schema export (done)
- - grant export (done)
- - predefined function/trigger export (todo)
- - data export (todo)
- - sql query converter (todo)
-
- 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 installed
- _________________________________________________________________
-
- PUBLIC METHODS
- _________________________________________________________________
-
-new HASH_OPTIONS
-
- Creates a new Ora2Pg object.
-
- Supported options are:
-
- - datasource : DBD datasource (required)
- - user : DBD user (optional with public access)
- - password : DBD password (optional with public access)
-
- Attempt that this list should grow a little more because all
- initialization is done by this way.
- _________________________________________________________________
-
-export_sql FILENAME
-
- Print SQL conversion output to a filename or to STDOUT if no file is
- given.
- _________________________________________________________________
-
- PUBLIC METHODS
- _________________________________________________________________
-
-_init HASH_OPTIONS
-
- Initialize a Ora2Pg object instance with a connexion to the Oracle
- database.
- _________________________________________________________________
-
-_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:
-
- $self->{tables}{$class_name}{table_info} = [(OWNER,TYPE)];
-
- TYPE Can be TABLE, VIEW, SYSTEM TABLE, GLOBAL TEMPORARY, LOCAL
- TEMPORARY, ALIAS, SYNONYM or a data source specific type identifier.
-
- 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 :
-
- @{$self->{tables}{$class_name}{column_info}} = &_column_info($self, $class_
-name);
- @{$self->{tables}{$class_name}{primary_key}} = &_primary_key($self, $class_
-name);
- @{$self->{tables}{$class_name}{unique_key}} = &_unique_key($self, $class_n
-ame);
- @{$self->{tables}{$class_name}{foreign_key}} = &_foreign_key($self, $class_
-name);
- _________________________________________________________________
-
-_get_sql_data
-
- Returns a string containing the entire SQL Schema definition
- compatible with PostgreSQL
- _________________________________________________________________
-
-_sql_type INTERNAL_TYPE LENGTH
-
- 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
-
- [( column name, column type, column length, nullable column, default
- value )]
- _________________________________________________________________
-
-_primary_key TABLE
-
- 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.
- _________________________________________________________________
-
-_unique_key TABLE
-
- 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.
- _________________________________________________________________
-
-_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.
-
- 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:
-
- @{$link{$fkey_name}{local}} = @local_columns;
- @{$link{$fkey_name}{remote}} = @remote_columns;
- _________________________________________________________________
-
-_get_privilege
-
- This function implements a Oracle-native tables grants information.
-
- Return a hash of all groups (roles) with associated users and a hash
- of arrays of all grants on related tables.
- _________________________________________________________________
-
- AUTHOR
-
- Gilles Darold <gilles@darold.net>
- _________________________________________________________________
-
- 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.
- _________________________________________________________________
-
- 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.
- _________________________________________________________________
-
- SEE ALSO
-
- DBI, DBD::Oracle
+NAME
+ Ora2Pg - Oracle to PostgreSQL database schema converter
+
+SYNOPSIS
+ BEGIN {
+ $ENV{ORACLE_HOME} = '/usr/local/oracle/oracle816';
+ }
+
+ use strict;
+
+ use Ora2Pg;
+
+ # Init the database connection
+ my $dbsrc = 'dbi:Oracle:host=testdb.samse.fr;sid=TEST;port=1521';
+ my $dbuser = 'system';
+ my $dbpwd = 'manager';
+
+ # Create an instance of the Ora2Pg perl module
+ my $schema = new Ora2Pg (
+ datasource => $dbsrc, # Database DBD datasource
+ user => $dbuser, # Database user
+ password => $dbpwd, # Database password
+ );
+
+ # Create the POSTGRESQL representation of all objects in the database
+ $schema->export_schema("output.sql");
+
+ exit(0);
+
+ or if you only want to extract some tables:
+
+ # Create an instance of the Ora2Pg perl module
+ my @tables = ('tab1', 'tab2', 'tab3');
+ my $schema = new Ora2Pg (
+ datasource => $dbsrc, # Database DBD datasource
+ user => $dbuser, # Database user
+ password => $dbpwd, # Database password
+ tables => \@tables, # Tables to extract
+ debug => 1 # To show somethings when running
+ );
+
+ or if you only want to extract the 10 first tables:
+
+ # Create an instance of the Ora2Pg perl module
+ my $schema = new Ora2Pg (
+ datasource => $dbsrc, # Database DBD datasource
+ user => $dbuser, # Database user
+ password => $dbpwd, # Database password
+ max => 10 # 10 first tables to extract
+ );
+
+ or if you only want to extract tables 10 to 20:
+
+ # Create an instance of the Ora2Pg perl module
+ my $schema = new Ora2Pg (
+ datasource => $dbsrc, # Database DBD datasource
+ user => $dbuser, # Database user
+ password => $dbpwd, # Database password
+ min => 10 # Begin extraction at indice 10
+ max => 20 # End extraction at indice 20
+ );
+
+ To know at which indices table can be found during extraction use the
+ option:
+
+ showtableid => 1
+
+ To extract all views set the option type as follow:
+
+ type => 'VIEW'
+
+ Default is table schema extraction
+
+DESCRIPTION
+ 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.
+
+ 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 only dump the database schema, with primary, unique and
+ foreign keys. I've tried to excluded internal system tables but perhaps
+ not enougt, please let me know.
+
+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.
+
+ Features must include:
+
+ - Database schema export, with unique, primary and foreign key.
+ - Grants/privileges export by user and group.
+ - Indexes and unique indexes export.
+ - Table or view selection (by name and max table) export.
+ - Predefined function/trigger export (todo)
+ - Data export (todo)
+ - Sql query converter (todo)
+
+ 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 installed
+
+PUBLIC METHODS
+ new HASH_OPTIONS
+
+ Creates a new Ora2Pg object.
+
+ Supported options are:
+
+ - datasource : DBD datasource (required)
+ - user : DBD user (optional with public access)
+ - password : DBD password (optional with public access)
+ - type : Type of data to extract, can be TABLE (default) or VIEW
+ - 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
+
+ Attempt that this list should grow a little more because all
+ initialization is done by this way.
+
+ export_sql FILENAME
+
+ Print SQL conversion output to a filename or to STDOUT if no file is
+ given.
+
+PUBLIC METHODS
+ _init HASH_OPTIONS
+
+ Initialize a Ora2Pg object instance with a connexion to the Oracle
+ database.
+
+ _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:
+
+ $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.
+
+ 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 :
+
+ @{$self->{tables}{$class_name}{column_info}} = &_column_info($self, $class_name);
+ @{$self->{tables}{$class_name}{primary_key}} = &_primary_key($self, $class_name);
+ @{$self->{tables}{$class_name}{unique_key}} = &_unique_key($self, $class_name);
+ @{$self->{tables}{$class_name}{foreign_key}} = &_foreign_key($self, $class_name);
+
+ _views
+
+ 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.
+
+ It then set the main hash as follow:
+
+ # Definition of the view
+ $self->{views}{$table}{text} = $view_infos{$table};
+ # Grants defined on the views
+ $self->{views}{$table}{grants} = when I find how...
+
+ _get_sql_data
+
+ Returns a string containing the entire SQL Schema definition compatible
+ with PostgreSQL
+
+ _sql_type INTERNAL_TYPE LENGTH
+
+ 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
+
+ [( column name, column type, column length, nullable column, default
+ value )]
+
+ _primary_key TABLE
+
+ 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.
+
+ _unique_key TABLE
+
+ 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.
+
+ _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.
+
+ 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:
+
+ @{$link{$fkey_name}{local}} = @local_columns;
+ @{$link{$fkey_name}{remote}} = @remote_columns;
+
+ _get_table_privilege TABLE
+
+ This function implements a Oracle-native table grants information.
+
+ Return a hash of array of all users and their grants on the given table.
+
+ _get_roles
+
+ This function implements a Oracle-native roles/users information.
+
+ Return a hash of all groups (roles) as an array of associated users.
+
+ _get_indexes TABLE
+
+ This function implements a Oracle-native indexes information.
+
+ Return an array of all indexes name which are not primary keys for the
+ given table.
+
+ Note: Indexes name must be created like this tablename_fieldname else
+ they will not be retrieved or if tablename false in the output
+ fieldname.
+
+ _get_sequences TABLE
+
+ This function implements a Oracle-native sequence information.
+
+ Return a hash of array of sequence name with MIN_VALUE, MAX_VALUE,
+ INCREMENT and LAST_NUMBER for the given table.
+
+ Not working yet.
+
+ _get_views
+
+ This function implements a Oracle-native views information.
+
+ Return a hash of array of sequence name with MIN_VALUE, MAX_VALUE,
+ INCREMENT and LAST_NUMBER for the given table.
+
+AUTHOR
+ Gilles Darold <gilles@darold.net>
+
+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.
+
+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.
+
+SEE ALSO
+ the DBI manpage, the DBD::Oracle manpage
+