技术开发 频道

实战RMAN备份传输表空间


内存脚本的内容:
{
#mark read only the tablespace that will be exported
sql clone "alter tablespace JSSWEB read only";
# create directory for datapump export
sql clone "create or replace directory STREAMS_DIROBJ_DPDIR as ''
d:\backup\td''";
# export the tablespaces in the recovery set
host 'expdp userid=\"/@(DESCRIPTION=(ADDRESS=(PROTOCOL=beq)(PROGRAM=oracle)(ARGV0=oraclegEDa)(ARGS=^
'(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))^')(ENVS=^'ORACLE_SID=gEDa^'))(CONNECT_DATA=(SID=g
EDa))) as sysdba\" transport_tablespaces=
JSSWEB dumpfile=
dmpfile.dmp directory=
STREAMS_DIROBJ_DPDIR logfile=
explog.log';
}
正在执行内存脚本

sql 语句: alter tablespace JSSWEB read only
...
...
主机命令完成
/*
The following command may be used to import the tablespaces.
Substitute values for <logon> and <directory>.
impdp <logon> directory=<directory> dumpfile= 'dmpfile.dmp' transport_datafiles= d:\backup\td\JSS
WEB.DBF
*/
--------------------------------------------------------------
-- Start of sample PL/SQL script for importing the tablespaces
--------------------------------------------------------------
-- creating directory objects
CREATE DIRECTORY STREAMS$DIROBJ$1 AS 'd:\backup\td\';
...
...
DROP DIRECTORY STREAMS$DIROBJ$DPDIR;

删除自动实例
关闭自动实例
Oracle 实例已关闭
自动实例已删除
已删除辅助实例文件 D:\backup\ad\CNTRL_TSPITR_JSSWEB_GEDA.F
已删除辅助实例文件 D:\backup\ad\TSPITR_J\DATAFILE\O1_MF_SYSAUX_3N2GF31G_.DBF
已删除辅助实例文件 D:\backup\ad\TSPITR_J\DATAFILE\O1_MF_SYSTEM_3N2GF2YR_.DBF
已删除辅助实例文件 D:\backup\ad\TSPITR_J\DATAFILE\O1_MF_TEMP_3N2GH1H4_.TMP
已删除辅助实例文件 D:\backup\ad\TSPITR_J\DATAFILE\O1_MF_UNDOTBS1_3N2GF30H_.DBF
已删除辅助实例文件 D:\backup\ad\TSPITR_J\ONLINELOG\O1_MF_1_3N2GGXJM_.LOG
已删除辅助实例文件 D:\backup\ad\TSPITR_J\ONLINELOG\O1_MF_2_3N2GGY0Z_.LOG
已删除辅助实例文件 D:\backup\ad\TSPITR_J\ONLINELOG\O1_MF_3_3N2GGYNZ_.LOG

执行成功,文件被生成在tablespace destination参数指定路径下。

五、复制文件到目标平台
方式方法太多,没啥技术含量,跳过。

六、执行导入脚本
注意,导入表空间在源平台所属的用户必须存在,另外一旦复制到目标库后文件路径如果发生变化,一定要修改impscript.sql文件中相应的路径。

[oracle@jsslinux ~]$ sqlplus "/ as sysdba"

SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 11月 20 10:45:53 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.


连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> @/opt/oratmp/oradata/impscript.sql

目录已创建。

目录已创建。

PL/SQL 过程已成功完成。

目录已删除。

目录已删除。

SQL>

自古华山一条路,但这不是华山,这是导入元数据,除了用脚本导入之外,你还可以直接通过impdp命令导入(实际dbms_streams_tablespace_adm.attach_tablespaces函数就是调用的impdp),例如:

[oracle@jsslinux dpdump]$ impdp system/verysafe DUMPFILE=dmpfile.dmp DIRECTORY=DATA_PUMP_DIR TRANSPORT_DATAFILES=/opt/oratmp/oradata/JSSWEB.DBF

Import: Release 10.2.0.1.0 - Production on 星期一, 19 11月, 2007 19:13:21

Copyright (c) 2003, 2005, Oracle. All rights reserved.

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
已成功加载/卸载了主表 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01"
启动 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01": system/******** DUMPFILE=dmpfile.dmp DIRECTORY=DATA_PUMP_DIR TRANSPORT_DATAFILES=/opt/oratmp/oradata/JSSWEB.DBF REMAP_SCHEMA=(jss:jss)
处理对象类型 TRANSPORTABLE_EXPORT/PLUGTS_BLK
处理对象类型 TRANSPORTABLE_EXPORT/TABLE
处理对象类型 TRANSPORTABLE_EXPORT/TABLE_STATISTICS
处理对象类型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
作业 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" 已于 19:13:26 成功完成

[oracle@jsslinux dpdump]$ sqlplus jss/jss

SQL> select * from tab;

TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
EMP TABLE
DEPT TABLE

已选择2行。

    其实如果你注意看屏蔽输出的话,你会在impscript.sql脚本处发现人家其它也提示你可以直接使用impdp命令导入,这也是俺之前无数次提醒你重视输出日志的原因。

    另外通过impdp导入还有一个好处,可以通过REMAP_SCHEMA参数指定表空间所属的schema,而不用创建表空间在源库中对应的用户(关于此处的更多说明也请详见第三节示例)。
    最后,友情提醒,做事情要严谨,表忘记打扫战场,最起码要记的将导入表空间的状态更改为read-write。


0
相关文章