一、检查平台是否支持
跳过(如有不明请详见第三节示例)
二、检查待传输表空间是否自包含
跳过(如有不明请详见第三节示例)
三、检查备份
跳过(如有不明请详见"一步一步学RMAN"系列) :
一步一步学RMAN之进入RMAN ;
一步一步学RMAN之实战RMAN备份
四、生成可传输集
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^'))(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。