1. 准备工作
1.1 基础环境
Oracle 源数据库
数据库: oracle 12c
IP地址:192.168.1.10
端口:1521
数据库名称:ORADB
管理员用户名:sys
密码:Orapass
PostgreSQL
数据库:postgresql 13
IP地址:192.168.1.20
端口:5432
数据库名称:POSTDB
管理员用户名:postgres
Ora2Pg 工具
确保在迁移主机上安装了 ora2pg 工具,以及 Perl 解释器和必要的 Perl 模块(如 DBD::Oracle 和 DBI)。
1.2 配置 Oracle 客户端
确保迁移主机上安装了 Oracle Instant Client 或完整的 Oracle 客户端,并配置好 tnsnames.ora 文件以连接到 Oracle 数据库。
2. 数据迁移
2.1 连接 Oracle 数据库
首先,我们需要使用 ora2pg 工具连接到 Oracle 数据库。在迁移主机上,执行以下命令:
ora2pg --connect "dsn=ORADB;uid=SYS;pwd=Orapass" --dump all --out /data/pgbak/tmp/
此命令将连接到 Oracle 数据库,扫描并导出所有对象至 /data/pgbak/tmp/ 目录下的 SQL 脚本。
2.2 数据库结构转换
接下来,我们需要转换 Oracle 的数据库结构,使其兼容 PostgreSQL。这一步骤通常自动由 ora2pg 完成,但它也可能需要手动调整,例如修改数据类型或存储过程语法。
ora2pg --connect "dsn=ORADB;uid=SYS;pwd=Orapass" --dump schema --out /data/pgbak/tmp/schema.sql
生成的 schema.sql 文件包含了 PostgreSQL 可以理解的 SQL 语句。
2.3 数据导出
使用 ora2pg 导出数据到 CSV 文件,以便之后导入到 PostgreSQL 中。
ora2pg --connect "dsn=ORADB;uid=SYS;pwd=Orapass" --dump data --out /data/pgbak/tmp/data.csv
2.4 创建 PostgreSQL 数据库
在 PostgreSQL 主机上,创建一个新的数据库用于迁移:
createdb POSTDB
2.5 导入数据库结构
使用 psql 工具将转换后的数据库结构导入到 PostgreSQL 中:
psql POSTDB < /data/pgbak/tmp/schema.sql
2.6 导入数据
最后,使用 psql 或者其他 PostgreSQL 数据导入工具,将 CSV 数据导入到新创建的数据库中:
psql POSTDB < /data/pgbak/tmp/data.csv\
注意:CSV 导入可能需要使用 \copy 命令或 pgloader 等工具。
3. 验证与测试
完成迁移后,务必进行详细的验证和测试,确保数据完整性和应用兼容性。这包括但不限于数据一致性检查、查询性能对比和应用功能测试
4. ora2pg 相关命令
ora2pg 的基础语法如下:
ora2pg [options] [command]
其中 options 是配置参数,而 command 则是你想要执行的操作。
--connect: 用于指定连接到 Oracle 数据库的字符串。通常包含 dsn, uid 和 pwd。
dsn: 数据源名。
uid: 用户ID。
pwd: 密码。
示例:--connect "dsn=oradb;uid=sys;pwd=secret"
--out: 指定输出目录,用于保存导出的 SQL 文件或 CSV 文件。
--pguser: 指定 PostgreSQL 的用户名称。
--pgdb: 指定 PostgreSQL 的数据库名称。
--pgpass: 指定 PostgreSQL 的密码。
--pgport: PostgreSQL 的端口号。
--pghost: PostgreSQL 的主机地址。
常用命令
--dump: 执行数据库对象的导出。可以与 all, schema, data, sequence, function 等子命令结合使用。
all: 导出所有数据库对象。
schema: 仅导出表、索引、视图等模式定义。
data: 仅导出数据,通常与 --format=csv 结合使用以导出为 CSV 格式。
sequence: 导出序列。
function: 导出函数和存储过程。
示例:ora2pg --connect "dsn=oradb;uid=sys;pwd=secret" --dump all --out /data/ora2pg_dump
--load: 将之前导出的 SQL 文件加载到 PostgreSQL 中。 示例:ora2pg --connect "dsn=oradb;uid=sys;pwd=secret" --load /data/ora2pg_dump/schema.sql
--convert: 将 Oracle 的 SQL 语句转换为 PostgreSQL 的 SQL 语句。
特殊命令
--help: 显示帮助信息。
--version: 显示版本信息。
|