视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Oracleexpdp/impdp从高版本到低版本示例
2020-11-09 11:55:14 责编:小采
文档


公司的一个测试库原来的版本是Oracle 11gR2的。 有些语法10g的有些出入,老大说把测试库重建一下,用10g的版本。虽说可以停机,数

公司的一个测试库原来的版本是Oracle 11gR2的。 有些语法10g的有些出入,老大说把测试库重建一下,用10g的版本。

虽说可以停机,数据量也不大,不过白天研发的同事要使用测试库,所以只能晚上加班搞。 打算使用数据泵expdp/impdp 来做。 因为从高版本到低版本导需要加上version 参数,之前还没有测试过。 用这个机会测试一下。

数据泵的更多示例,参考我的Blog:

Oracle expdp/impdp 使用示例

步骤如下:

1. 把10g版本的库装好,并创建一个实例

2. 查看原用户对象总数

SQL> select count(*) from dba_objects where owner in ('WANGOU','SUP','QISHUN');

这样导完之后,就可以比较一下。

3. 创建目录,并用expdp导出数据

SQL>create directory backup as '/u01/backup';

#expdp /'/ as sysdba/' directory=backup full=y dumpfile=wgfullexp.dmp logfile=fullexp.log version=10.2.0.1 ;

-- 注意参数,我是从11gR2的库导的,我要导入10g的库,通过version指定版本信息。

4. 用Toad 导出原测试库 表空间用户等脚本。

5. 在新的测试库用之前导出的脚本把表空间创建好。

6. 创建dir,用impdp 导入数据

SQL>create directory backup as '/u01/backup';

#impdp /'/ as sysdba/' directory=backup full=y dumpfile=wgfullexp.dmp logfile=fullimp.log;

impdp 没有成功,最后的错误如下:

Processing object type DATABASE_EXPORT/SCHEMA/TABLE/STATISTICS/TABLE_STATISTICS

ORA-39112: Dependent object type TABLE_STATISTICS skipped, base object type TABLE:"ORDDATA"."ORDDCM_PREFS_LOOKUP" creation failed

ORA-39112: Dependent object type TABLE_STATISTICS skipped, base object type TABLE:"ORDDATA"."ORDDCM_PREFS_LOOKUP" creation failed

ORA-39112: Dependent object type TABLE_STATISTICS skipped, base object type TABLE:"ORDDATA"."ORDDCM_PREFS_LOOKUP" creation failed

ORA-39125: Worker unexpected fatal error in KUPW$WORKER.PUT_DDLS while calling DBMS_METADATA.CONVERT [TABLE_STATISTICS]

ORA-06502: PL/SQL: numeric or value error

LPX-00225: end-element tag "HIST_GRAM_LIST_ITEM" does not match start-element tag "EPVALUE"

ORA-06512: at "SYS.DBMS_SYS_ERROR", line 105

ORA-06512: at "SYS.KUPW$WORKER", line 6241

----- PL/SQL Call Stack -----

object line object

handle number name

0x4de6dba8 14916 package body SYS.KUPW$WORKER

0x4de6dba8 6300 package body SYS.KUPW$WORKER

0x4de6dba8 12279 package body SYS.KUPW$WORKER

0x4de6dba8 3279 package body SYS.KUPW$WORKER

0x4de6dba8 68 package body SYS.KUPW$WORKER

0x4de6dba8 1262 package body SYS.KUPW$WORKER

0x4de62824 2 anonymous block

Job "SYS"."SYS_IMPORT_FULL_01" stopped due to fatal error at 20:58:03#o b0d5j2u182013

因为这里的用户比较多,同事给我的是3个用户,但我连上去看了一下,明显不止三个用户。 所以就不想按用户导,直接full =y 全库导了。

impdp 的时候,如果用户不存在会自动创建。 所以在我impdp的时候,我没有去创建用户。 不过如果是生产环境,还是按部就班的来。 先建好表空间,用户,按用户来导。

imdp失败了,但之前导的表,索引等对象导入过了。 用:

SQL> select count(*) from dba_objects where owner in ('WANGOU','SUP','QISHUN');

查看了新测试库上这3个用户的对象,比原库少了20个。

把2个库对象的详细数据导出到txt,用UC 比较了一下,少的20个对象是触发器。 用Toad 在原库上把这20个触发器的sql导出来,在新库上执行一下。 最后检查了一下。 两遍对象一致。

因为impdp 在最后统计信息那块报错, 所以查看了一下统计信息,,已经导入了。 让开发的同事测试了一下,没有问题。

下载本文
显示全文
专题