1

我正在使用 ora2pg 将模式和数据从 oracle 迁移到 postgres 数据库。

conf文件有如下修改:

  1. 提供 ORACLE_HOME 和 DSN
  2. 将导出类型设置为:(已TYPE, TABLE, PACKAGE, COPY, VIEW, GRANT, SEQUENCE, TRIGGER, FUNCTION, PROCEDURE, TABLESPACE, TYPE, PARTITION, MVIEW, QUERY 删除 FDW)

当我运行该工具时,出现以下错误:

DBD::Oracle::db 准备失败:ORA-01741: 非法零长度标识符 (DBD E RROR: OCIStmtPrepare) [for Statement "SELECT FROM ""."GT_LAYER_ENTITIES" a"] at D:/Dwimperl/perl/site /lib/Ora2Pg.pm 第 8808 行。致命:ORA-01741:非法零长度标识符(DBD 错误:OCIStmtPrepare)正在中止导出...

我提供的用户具有 DBA 特权。

如果您对此有任何解决方案,请告诉我。

谢谢

4

2 回答 2

0

遗憾的是,使用 ora2pg 无法同时导出多个内容

只能同时执行一种类型的导出,因此 TYPE 指令必须是唯一的。如果您有多个,则仅注册文件中最后找到的一个。

在此处输入图像描述

于 2021-10-14T17:56:06.340 回答
0

您确实安装了正确版本的DBD-Oracle. 你可以用 来证明DBD-Oracle-1.74
我的建议,您不要将配置文件用于提取表、查看等。
但首先创建一个新项目:

ora2pg --project_base /home/user/ --init_project project_name

cd project_name/

ora2pg -c ora2pg.conf -t TABLE -o tables.sql -b schema/tables/

ora2pg -c ora2pg.conf -t SEQUENCE -o sequence.sql -b schema/sequences/

ora2pg -c ora2pg.conf -t TRIGGER -o trigger.sql -b schema/triggers/

ora2pg -c ora2pg.conf -t PROCEDURE -o procedure.sql -b schema/procedures

ora2pg -c ora2pg.conf -t VIEW -o view.sql -b schema/views/

ora2pg -c ora2pg.conf -t GRANT -o grant.sql -b schema/grants/

并在 db postgres 表、序列等上导入后...最后,在 db 上导入数据。

ora2pg -c ora2pg.conf -t INSERT -o data.sql -b data/

最重要的是首先为导入创建 psql 数据库和用户。

于 2016-11-08T14:40:15.707 回答