1.安装依赖
[root@localhost ~]# yum install perl-DBI perl-DBD-Pg perl-ExtUtils-MakeMaker perl-ExtUtils-CBuilder gcc
2.在root下配置环境变量
配置root用户下 Oracle环境变量,因为准备将ora2pg在root下执行
[root@mdw opt]# vim ~/.bashrc
#增加
export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
[root@mdw ~]# source ~/.bashrc
3.安装 DBD-Oracle
介质下载路径:
DBI:http://www.cpan.org/modules/by-module/DBI/
DBD:http://www.cpan.org/modules/by-module/DBD/
[root@localhost opt]# tar -zxvf DBD-Oracle-1.83.tar.gz
[root@localhost opt]# cd DBD-Oracle-1.83
[root@localhost DBD-Oracle-1.83]# perl Makefile.PL -l
[root@localhost DBD-Oracle-1.83]# make install
4.ora2pg安装
下载地址:
https://sourceforge.net/projects/ora2pg/
#解压安装包
[root@localhost opt]# tar -jxvf ora2pg-23.2.tar.bz2
[root@localhost opt]# cd ora2pg-23.2
[root@localhost ora2pg-23.2]# perl Makefile.PL
[root@localhost ora2pg-23.2]# make
[root@localhost ora2pg-23.2]# make install
5.检查是否安装成功
[root@localhost opt]# cd /opt
[root@localhost opt]# vim check.pl
### 写入以下内容
use strict;use ExtUtils::Installed;my $inst= ExtUtils::Installed->new();my @modules = $inst->modules();foreach(@modules){ my $ver = $inst->version($_) || "???"; printf("%-12s -- %s\n", $_, $ver);}exit;
[root@localhost opt]# perl check.pl
DBD::Oracle -- 1.83
Ora2Pg -- 23.2
Perl -- 5.16.3
6.写配置
导出表结构
[root@localhost ora2pg-23.2]# vim ora2pg.conf
#racle client 安装地址
ORACLE_HOME /home/oracle/app/oracle/product/11.2.0/dbhome_1
# oracle connent info
ORACLE_DSN dbi:Oracle:host=****;sid=orcl;port=1521
ORACLE_USER smwb_support
ORACLE_PWD *****
# oracle schema
SCHEMA smwb_support
# oracle type
TYPE TABLE
# 输出的文件名字
OUTPUT 20230426output.sql
# 输出的路径(本地路径)
OUTPUT_DIR /opt
[root@localhost ora2pg-23.2]# ora2pg -c ora2pg.conf -d > import.log &
# 这里会报一个警告说必须设置pg的版本啥的,应该不影响
导出表数据
ORACLE_HOME /home/oracle/app/oracle/product/11.2.0/dbhome_1
ORACLE_DSN dbi:Oracle:host=ipaddress;sid=orcl;port=1521
ORACLE_USER tool
ORACLE_PWD tool
SCHEMA tool
# 作为COPY语句从表中导出数据,INSERT也可以
TYPE COPY
PG_NUMERIC_TYPE 0
PG_INTEGER_TYPE 1
DEFAULT_NUMERIC float
NLS_LANG AMERICAN_AMERICA.AL32UTF8
OUTPUT data.sql
[root@localhost ora2pg-23.2]# ora2pg -c ora2pg.conf -d > import.log &
7.ora2pg命令参数
-a | --allow str : 配置允许导出的对象列表,通过逗号分隔不同对象。可与SHOW_COLUMN一起使用
-b | --basedir dir: 设置默认输出目录,用于存储导出的文件
-c | --conf file : 指定配置文件,默认为/etc/ora2pg/ora2pg.conf.
-d | --debug : 开启更详细的输出
-D | --data_type STR : 允许自定义类型转换
-e | --exclude str: 配置禁止导出的对象列表,通过逗号分隔不同对信息。可与SHOW_COLUMN一起使用
-h | --help : 打印简短的帮助信息
-g | --grant_object type : 导出指定类型的对象的权限,默认是导出全部类型的对象权限
-i | --input file : 指定要导入的Oracle PL/SQL代码文件,里面不包含oracle的数据库的连接信息
-j | --jobs num : 设置向Postgresql写入数据的并行进程数
-J | --copies num : 设置向oracle抽取数据的并行进程数
-l | --log file : 设置日志文件。默认是控制台输出。
-L | --limit num : 设置每次从oracle提取的记录行数
-m | --mysql : 说明导出的是mysql数据库,而不是oracle
-n | --namespace schema : 指定oracle的schema
-N | --pg_schema schema : 指定postgresql的search_path
-o | --out file : 指定输出文件及其路径,默认为当前目录下的out.sql
-p | --plsql : 启用PLSQL代码转换为PL/PGSQL代码
-P | --parallel num: 设置每次能并行抽取的表数量
-q | --quiet : 关闭进度条
-s | --source DSN : 设置oracle数据库源
-t | --type export: 设置导出的数据库类型,使用该配置会覆盖配置文件中对类型的设置。
-T | --temp_dir DIR: 设置缓存路径,当同时运行多个ora2pg时需配置该项
-u | --user name : 设置oracle源端用户名
-v | --version : 打印ora2pg版本
-w | --password pwd : 配置oracle源端密码
--forceowner : 指定在oracle数据库中表和序列的拥有者。默认值为连接postgresql的用户名
--nls_lang code: 指定oracle客户端编码
--client_encoding code: 指定postgresql客户端编码
--view_as_table str: 指定视图列表,其将以表的形式导出。不同对象通过逗号分隔
--estimate_cost : 通过SHOW_PEPORT显示迁移成本
--cost_unit_value minutes: 配置迁移成本的分钟值。默认为5分钟。如果是第一次迁移,应将其配置为10分钟
--dump_as_html : 指定迁移报告格式为html
--dump_as_csv : 指定迁移报告格式为csv
--dump_as_sheet : 指定迁移报告格式为sheet
--init_project NAME: 初始化一个ora2pg项目
--project_base DIR : 指定ora2pg项目目录,默认为当前目录
--print_header : 与--dump_as_sheet一起使用,打印出CSV头部在第一次运行ora2pg时
--human_days_limit num : 设定迁移时限制的人日数,默认为5人/日
--audit_user LIST : 要筛选的用户列表,不同用户通过逗号分隔。
--pg_dsn DSN : 设置PostgreSQL数据源
--pg_user name : 设置PostgreSQL用户
--pg_pwd password : 设置the PostgreSQ密码
--count_rows : 指定ora2pg在进行准确行数计算,在Type 为TEST时
--no_header : 输出文件中不包含ora2pg的信息头部
--oracle_speed : 用于获取oracle发送数据的速度,该参数不会产生真的数据写入或发送
--ora2pg_speed : 用于获取ora2pg转换数据的速度,该参数不会产生真的数据写入或发送