一、检查平台是否支持

二、检查待传输表空间是否自包含

三、检查备份

四、生成可传输集

E:\oracleScript\backup>set oracle_sid=jssweb
E:\oracleScript\backup>rman target /

连接到目标数据库: JSSWEB (DBID=3402005373)

RMAN>transport tablespace jssweb
2>tablespace destination 'd:\backup\td'
3>auxiliary destination 'd:\backup\ad'
4>;

看,不需要太复杂,就是这么简单。

使用目标数据库控制文件替代恢复目录
RMAN-05026: 警告: 假定以下表空间集适用于指定的时间点
表空间列表要求具有UNDO 段
表空间SYSTEM
表空间UNDOTBS1
使用SID='gEDa' 创建自动实例

供自动实例使用的初始化参数:

db_name=JSSWEB
compatible=10.2.0.1.0
db_block_size=8192
db_files=200
db_unique_name=tspitr_JSSWEB_gEDa
large_pool_size=1M
shared_pool_size=110M
#No auxiliary parameter file used
db_create_file_dest=d:\backup\ad
control_files=d:\backup\ad/cntrl_tspitr_JSSWEB_gEDa.f
启动自动实例JSSWEB
...
...

内存脚本的内容:

{
# set the until clause
set until scn 1672677;
# restore the controlfile
restore clone controlfile;
# mount the controlfile
sql clone 'alter database mount clone database';
# archive current online log for tspitr to a resent until time
sql 'alter system archive log current';
# avoid unnecessary autobackups for structural changes during TSPITR
sql 'begin dbms_backup_restore.AutoBackupFlag(FALSE); end;';
}
正在执行内存脚本
正在执行命令: SET until clause
..
...
sql 语句: begin dbms_backup_restore.AutoBackupFlag(FALSE); end;
释放的通道: ORA_AUX_DISK_1

内存脚本的内容:

{
# generated tablespace point-in-time recovery script
# set the until clause
set until scn 1672677;
# set an omf destination filename for restore
set newname for clone datafile 1 to new;
...
...
# make the controlfile point at the restored datafiles, then recover them
recover clone database tablespace "JSSWEB", "SYSTEM", "UNDOTBS1", "SYSAUX" delete archivelog;
alter clone database open resetlogs;
# PLUG HERE the creation of a temporary tablespace if export fails due to lack
# of temporary space.
# For example in Unix these two lines would do that:
#sql clone "create tablespace aux_tspitr_tmp
# datafile ''/tmp/aux_tspitr_tmp.dbf'' size 500K";
}
正在执行内存脚本
正在执行命令: SET until clause
正在执行命令: SET NEWNAME
...
...
介质恢复完成, 用时: 00:00:10
完成recover 于19-11 月-07
数据库已打开

内存脚本的内容:

{
#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^'))(CON
NECT_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  and .
impdp  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。

Trackback

no comment untill now

Add your comment now

切换到手机版