Oracle DataPump(数据泵)是从10g版本推出的全新数据备份还原工具。作为经典Exp/Imp工具的替代品,Data Pump具有很多特殊的特性优点,在速度、稳定性、兼容性和功能上有了诸多的强化。
和传统Exp/Imp工具相比,服务端运行和后台作业运行时Data Pump的两个独特特性。Exp/Imp是在Oracle客户端运行的命令程序,通过远程(或者本地)连接数据库服务器,将数据进行抽取动作。由于依托是客户端的命令程序,只要两者连接网络中断,操作就会终止。而Data Pump是运行在服务器端,在服务器端进行激发执行的。创建Data Pump作业首先是在Oracle内部定义出一个Job,自动去进行调度执行。即使我们远程的连接会话中断,Oracle后台也会持续运行下去。另外,运行在服务器端,也客观减少了由于版本不匹配引起的潜在风险故障。
但是,Data Pump的运行基础是服务器端的数据字典。在实际工作场景中,如果存在数据字典损坏的情况,Data Pump会有报错或者工作不正常的情况。比较典型的就是Data Pump涉及包由于关联关系引发的失效故障。
对于这种情况,数据字段全局或者局部恢复是最常用的解决方法。本文主要介绍如何在10g和11g两个主流版本Oracle中进行Data Pump恢复。
1、11g Data Pump恢复
首先我们介绍11g环境下的Data Pump恢复,选择11.2.0.4版本。
SQL> conn / as sysdba
Connected.
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 – Production
11g下的数据字典重构比较简单,Data Pump和其他组件之间的关联关系比较紧密。对于我们来讲最可行的策略就是进行数据字段的全部重构。注意:强烈建议在服务器端进行脚本执行,避免由于版本差异造成的问题故障。
SQL> @?/rdbms/admin/catproc.sql
(长时间等待......)
5 dbms_registry.loaded('CATPROC');
6 dbms_registry_sys.validate_catproc;
7 dbms_registry_sys.validate_catalog;
8 END;
9 /
PL/SQL procedure successfully completed.
SQL>
SQL> SELECT dbms_registry_sys.time_stamp('CATPROC') AS timestamp FROM DUAL;
TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP CATPROC 2014-08-07 23:48:05
1 row selected.
在进行数据字典重构的过程中,由于是串行过程,可能会存在字典对象Invalid情况。之后利用utlrp.sql脚本重新进行编译。
SQL> @?/rdbms/admin/utlrp.sql
SQL> Rem
SQL> Rem $Header: utlrp.sql 24-jul-2003.10:06:51 gviswana Exp $
SQL> Rem
(篇幅原因,有省略……)
Rem ===========================================================================
SQL> Rem END utlrp.sql
SQL> Rem ===========================================================================
作为实验,可以测试一下Expdp工作。
[oracle@SimpleLinux ~]$ expdp \"/ as sysdba\" schemas=scott dumpfile=scott.dmp
Export: Release 11.2.0.4.0 - Production on Fri Aug 8 00:01:34 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYS"."SYS_EXPORT_SCHEMA_01": "/******** AS SYSDBA" schemas=scott dumpfile=scott.dmp
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 30.18 MB
(篇幅原因,有省略……)
Master table "SYS"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYS.SYS_EXPORT_SCHEMA_01 is:
/u01/app/admin/ora11g/dpdump/scott.dmp
Job "SYS"."SYS_EXPORT_SCHEMA_01" successfully completed at Fri Aug 8 00:03:08 2014 elapsed 0 00:00:51
恢复成功。
2、10g Data Pump恢复
下面聊聊10g版本,基于的版本是10.2.0.1。下面是环境变量信息。
[oracle@SimpleLinux ~]$ env | grep ORA
ORACLE_SID=ora10g
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
数据库版本信息:
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 – Production
10g版本下Data Pump重构过程比较零散,需要单独执行一系列的脚本程序。首先,重新安装Data Pump类型和视图对象。
SQL> @?/rdbms/admin/catdph.sql
Type dropped.
Type dropped.
Type dropped.
Library created.
Package created.
Grant succeeded.
Package created.
Grant succeeded.
第二部要看是否需要重建XML Database数据库,先在dba_registry视图中查看到组件是否安装。
SQL> select substr(comp_name,1,30) comp_name,
2 substr(comp_id,1,10) comp_id,
3 substr(version,1,12) version,
4 status
5 from dba_registry
6 where comp_name like '%XML Database%';
COMP_NAME COMP_ID VERSION STATUS
-------------------- ---------- ---------- ----------
Oracle XML Database XDB 10.2.0.1.0 VALID
如果需要安装,就调用脚本进行安装。
SQL> @?/rdbms/admin/catmetx.sql
View created.
Grant succeeded.
Procedure created.
System altered.
System altered.
System altered.
PL/SQL procedure successfully completed.
Procedure dropped.
重建TDE库,执行脚本。
SQL> @?/rdbms/admin/prvtdtde.plb
Library created.
No errors.
Package created.
Synonym created.
Package created.
重建Data Pump的Package对象。
SQL> @?/rdbms/admin/catdpb.sql
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
Package created.
Package body created.
PL/SQL procedure successfully completed.
重建Data Pump的对象。
SQL> @?/rdbms/admin/dbmspump.sql
Type created.
Type created.
Library created.
Type body created.
Type body created.
Grant succeeded.
Grant succeeded.
最后,也要将失效对象进行重新编译。
SQL> @?/rdbms/admin/utlrp.sql
TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP UTLRP_BGN 2014-08-08 00:31:18
(篇幅原因,有省略……)
ERRORS DURING RECOMPILATION
---------------------------
0
PL/SQL procedure successfully completed.
测试Expdp工作情况。
oracle@SimpleLinux ~]$ expdp \"/ as sysdba\" schemas=scott dumpfile=scott.dmp
Export: Release 10.2.0.1.0 - Production on Friday, 08 August, 2014 0:32:49
Copyright (c) 2003, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
(篇幅原因,有省略……)
Dump file set for SYS.SYS_EXPORT_SCHEMA_01 is:
/u01/app/oracle/product/10.2.0/db_1/rdbms/log/scott.dmp
Job "SYS"."SYS_EXPORT_SCHEMA_01" successfully completed at 00:33:17
重建成功。
3、结论
随着Oracle新版本的不断推出,传统Exp/Imp工具会逐渐的退出历史舞台。Data Pump会逐渐消除自身存在一些Bug和缺陷,成为主流数据备份还原工具。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17203031/viewspace-1247784/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17203031/viewspace-1247784/