使用ORA2PG迁移数据库

 

首先需要安装 Perl 和 PostgreSQL数据库,还需要安装Oracle的客户端。我都是在本机 Windows 系统上测试的,对应的文件名:

ActivePerl-5.26.3.2603-MSWin32-x64-a95bce075.exe
postgresql-10.6-1-windows-x64-binaries.zip

软件装完进入Perl 的bin目录,命令安装Perl 的 Oracle驱动,命令有两个:

C:\Perl64\bin>cpan
Loading internal null logger. Install Log::Log4perl for logging messages

cpan shell -- CPAN exploration and modules installation (v2.18)
Enter 'h' for help.

cpan> get DBD::Oracle
Fetching with LWP:
http://ppm.activestate.com/CPAN/authors/01mailrc.txt.gz
...

cpan> install DBD::Oracle
Running install for module 'DBD::Oracle'
  ZARQUON/DBD-Oracle-1.76.tar.gz
....

完了参考 Windows下Postgresql数据库的下载与配置方法 配置PG数据库。

再就是安装 ora2pg,这个只需要下载解压即可。剩下的就是数据库导出的脚本文件。由于 TYPE 一次只支持一个值,所以如果有多个数据库对象导出,就要写多个这样的脚本文件。比如我导出存储过程的脚本:

ORACLE_HOME F:\app\client\Lenovo\product\12.1.0\client_1
ORACLE_DSN dbi:Oracle:host=192.168.1.222;sid=VINCI;port=1521
ORACLE_USER TEST_CURIE
ORACLE_PWD TEST_CURIE
SCHEMA TEST_CURIE
USER_GRANTS 0
DEBUG 0
ORA_INITIAL_COMMAND
EXPORT_SCHEMA 0
CREATE_SCHEMA 1
COMPILE_SCHEMA 0
TYPE PROCEDURE
PG_VERSION 10.6-1
OUTPUT F:\software\export\output_proc.sql

如果需要导出整个数据库表数据,那么将 TYPE 的值改为 DATA 即可(不可有ALLOW属性)。如果像我遇到的情况一样,就是数据库的记录非常多,那么可以写多个脚本文件,每个文件只导出指定的表记录,则需要把 TYPE 的值改为 INSERT(或 COPY),然后增加一个 ALLOW 属性,它的值可以是若干个表以逗号或者空格隔开的表名。如下面这个只导出一个 DRUG_EXPOSURE 的表记录到 output_data_drug_exposure0.sql 文件。多个这样的脚本可以同时在多个 dos 窗口执行。

ORACLE_HOME F:\app\client\Lenovo\product\12.1.0\client_1
ORACLE_DSN dbi:Oracle:host=192.168.1.222;sid=VINCI;port=1521
ORACLE_USER TEST_CURIE
ORACLE_PWD TEST_CURIE
SCHEMA TEST_CURIE
USER_GRANTS 0
DEBUG 0
ORA_INITIAL_COMMAND
EXPORT_SCHEMA 0
CREATE_SCHEMA 1
COMPILE_SCHEMA 0
TYPE INSERT
ALLOW DRUG_EXPOSURE
PG_VERSION 10.6-1
OUTPUT F:\software\export\output_data_drug_exposure0.sql
# 编码是处理表数据中的中文,不设置则中文可能会显示乱码
CLIENT_ENCODING UTF8
NLS_LANG AMERICAN_AMERICA.AL32UTF8

而导入生成的SQL文件到 PG 数据库,用PGAdmin感觉没有 Navicat 快和方便,可能是我还不熟悉PGAdmin的使用吧。 

  • 碰到的问题:
  1. 数据库的导出脚本所执行的机器需要有 ORACLE_HOME 环境变量,可以本地装一个客户端,然后配置该环境变量
  2. 数据库的对象和数据必须分开导出,所以需要写很多脚本,如果数据库比较大,还需要多写几个数据导出脚本文件,每个导出部分表数据(ALLOW属性可以以逗号或空格分隔多个表名),这样数据文件小一点,导入PG库也快点,排错也容易点
  3. 如果导出数据,脚本文件里的TYPE 不管是INSERT还是 COPY, 生成的sql文件尾部都会有重置所有SEQUENCE的restart值,如果整体导出没什么问题,但是分批导出数据的话,则每个sql文件里都需要删除这些语句,可写程序处理掉(如果文件太大Notepad打不开)
  4. 如果数据里有中文,则强烈建议在脚本里设置编码方式,否则中文大概率上不能正确导出,会有乱码,PG导入时会报错。设置了UTF8编码后就没有问题了
  5. 我这边先是写一个脚本模板,写程序复制多个导出表数据的脚本,每个脚本负责一个表的数据导出,然后对应生成等量的bat文件,再通过程序批量执行bat文件(都是简单的Java流操作)
你好!关于ora2pg使用教程,我可以给你一些基本的指导。 ora2pg是一个用于将Oracle数据库迁移到PostgreSQL的工具。它可以将Oracle数据库对象(如表、视图、索引等)以及数据转换为相应的PostgreSQL对象。 下面是ora2pg使用步骤: 1. 安装ora2pg:你可以从ora2pg的官方网站(http://ora2pg.darold.net/)下载并安装ora2pg。根据你的操作系统选择相应的安装包,并按照指示进行安装。 2. 配置ora2pg:安装完成后,你需要配置ora2pg以连接到Oracle数据库并指定要迁移的对象和数据。配置文件位于ora2pg安装目录下的ora2pg.conf文件中。你需要编辑该文件,并根据注释设置数据库连接信息、迁移设置等。 3. 执行迁移:配置完成后,你可以使用以下命令执行迁移: `ora2pg -t SHOW_VERSION` 这将显示ora2pg的版本信息,以确保安装正确。 `ora2pg -t INIT` 这将创建一个用于存储迁移信息的PostgreSQL模式。 `ora2pg -t EXPORT` 这将导出Oracle数据库对象结构到PostgreSQL。 `ora2pg -t SCHEMA` 这将导出Oracle数据库对象和数据到PostgreSQL。 `ora2pg -t DATA` 这将仅导出Oracle数据库数据到PostgreSQL。 4. 验证迁移结果:完成迁移后,你可以使用PostgreSQL客户端连接到目标数据库,验证迁移的结果是否符合预期。 这只是ora2pg的基本使用教程,你可以根据你的具体需求进一步定制和配置迁移过程。请注意,在进行任何数据库迁移之前,请务必备份你的数据以防止意外情况发生。 希望这些信息能对你有所帮助!如果你有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值