公司的一个测试库原来的版本是Oracle 11gR2的。有些语法和10g的有些出入,测试库重建一下,用10g的版本。
虽说可以停机,数据量也不大,不过白天研发的同事要使用测试库,所以只能晚上加班搞。打算使用数据泵expdp/impdp来做。
因为从高版本到低版本导需要加上version参数,之前还没有测试过。用这个机会测试一下。
数据泵的更多示例,参考我的Blog:
Oracle expdp/impdp使用示例
http://blog.csdn.net/xujinyang/article/details/6831273
步骤如下:
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=backupfull=ydumpfile=wgfullexp.dmp logfile=fullexp.logversion=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 -----
objectlineobject
handlenumbername
0x4de6dba814916package body SYS.KUPW$WORKER
0x4de6dba86300package body SYS.KUPW$WORKER
0x4de6dba812279package body SYS.KUPW$WORKER
0x4de6dba83279package body SYS.KUPW$WORKER
0x4de6dba86889package body SYS.KUPW$WORKER
0x4de6dba81262package body SYS.KUPW$WORKER
0x4de628242anonymous block
Job "SYS"."SYS_IMPORT_FULL_01" stopped due to fatal error at 20:58:03#o b0d5j2u18982013
因为这里的用户比较多,同事给我的是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在最后统计信息那块报错,所以查看了一下统计信息,已经导入了。让开发的同事测试了一下,没有问题。
-------------------------------------------------------------------------------------------------------