zt 通过备份实现可传输表空间(TTS From Backup with RMAN)

作者 tomszrp 21:02 | Permalink 静态链接网址 | Comments 最新回复 (0) | Trackback 引用 (0) | 磨刀石[@more@]

前言

在Oracle 10g前,我们实现TTS,一般的处理步骤是:

1、在源数据库上将需要传输的表空间置为只读(read only)状态;
2、uses export utility to dump the tablespace metadata.
3、将数据文件复制到目的路径,文件使用FTP,裸设备用dd和FTP命令进行复制。
4、use the import utility(imp) to import the metadata from the dumpfile

5、在目标数据库上将该表空间设置读写(read write)状态.
 

在10g前,Transport TableSpace也同样有很多限制,比如

1)不能跨平台

2)不能跨版本

3)源库的表空间必须设置为read only状态

。。。

特别是对一个OLTP 数据库,这些条件往往是不太可能满足的,因此传输表空间也是不可能的。如果 OLTP数据库是数据仓库的数据源,则可能始终无法使用可传输表空间加载它。

 

这一系列的问题,在10gR2中得到的解决,比如跨平台表空间传输,利用RMAN从备份中TTS.本文是就10gR2的新特性:通过备份利用RMAN实现TTS。详细的技术背景可以参考官方资料b14191中《Create Transportable Tablespace Sets from Backup with Rman》一章。

说明概要

在 Oracle 数据库 10gR2中,可以传输表空间并从另一个数据源(即备份)中插入它。例如,如果要传输表空间 TRANS,则可以发出 RMAN 命令
RMAN> transport tablespace TRANS
TABLESPACE DESTINATION = 'd:oradatatrans_tbs'
auxiliary destination = 'd:oradatatnans_tbs';

该命令在位置d:oradatatrans_tbs下自动创建一个辅助实例,并从其中的备份恢复文件。此辅助实例的SID是随机生成的。创建实例后,该过程将基于目录创建一个目录对象,并恢复表空间 TRANS(正在传输的表空间)的文件 - 所有操作均自动完成,我们不必发出任何命令!


目录 d:oradatatrans_tbs将包含表空间 TRANS 的所有数据文件、表空间元数据的转储文件以及脚本 imp scrpt (最重要的)。该脚本包含将此表空间插入目标表空间所必需的所有命令。该表空间并非由 impdp 命令进行传输,而是通过对 dbms_streams_tablespace_adm.attach_tablespaces 程序包的调用进行传输。可以在该脚本中找到所有必要的命令。

如果中途出现错误,辅助实例将在 $ORACLE_HOME/rdbms/log 中创建警报日志文件,以便可以检查该日志以查明潜在的问题。其次,在提供 RMAN 命令时,可以通过发出 RMAN 命令(该命令将所有输出置于文件 tts.log 中)将命令和输出重定向到日志文件
rman target/ log=tts.log

然后,我们可以检查该文件来查明故障的确切原因。

最后,将把这些文件恢复到 d:oradatatrans_tbs下的 TSPITR__(我在本测试案例中,这个对应的目录是TSPITR_S(略有出入)) 目录中。例如,如果主数据库的 SID 为 STUDY,RMAN 创建的辅助实例的 SID 为 Bjpl,则目录名为 TSPITR_STUDY_BJPL。该目录还包含两个其他子目录:datafile(用于数据文件)和 onlinelog(用于重做日志)。在完成新表空间的创建之前,可以查看该目录以了解恢复了哪些文件。(这些文件在该过程结束时会被删除。)
 

步骤概要

 

1、用RMAN连接到源数据库和CATALOG数据库(如果有)

2、RMAN自动创建辅助实例(包含SYSTEM、UNDO和要传输的表空间)

3、RMAN通过辅助实例恢复到point in time

4、RMAN利用expdp工具生成dumpfile,dumpfile内容包含
-要传输的表空间对应的数据文件,

-要传输的表空间的metadata

-一个可以导入要传输的表空间的SQL脚本

5. 然后RMAN自动删除辅助实例。

步骤概要

 

1、用RMAN连接到源数据库和CATALOG数据库(如果有)

2、RMAN自动创建辅助实例(包含SYSTEM、UNDO和要传输的表空间)

3、RMAN通过辅助实例恢复到point in time

4、RMAN利用expdp工具生成dumpfile,dumpfile内容包含
-要传输的表空间对应的数据文件,

-要传输的表空间的metadata

-一个可以导入要传输的表空间的SQL脚本

5. 然后RMAN自动删除辅助实例。

 

测试过程

D:>rman target/ catalog rman/rman@px1a
恢复管理器: Release 10.2.0.3.0 - Production on 星期三 11月 28 17:00:15 2007
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

连接到目标数据库: STUDY (DBID=2656671914)
连接到恢复目录数据库

RMAN> run
2> {
3> TRANSPORT TABLESPACE 'TRANS'
4> TABLESPACE DESTINATION 'D:oradatatoms'
5> AUXILIARY DESTINATION 'D:oradatatoms'
6> DUMP FILE 'trans.dmp'
7> EXPORT LOG 'exp_trans.log'
8> IMPORT SCRIPT 'imp_trans.sql';
9> }

:这是整个过程中,我们唯一发出的RMAN COMMAND.

 

下面是这个命令的具体输出信息

使用 SID='Bjpl' 创建自动实例

供自动实例使用的初始化参数:
db_name=STUDY
compatible=10.2.0.3.0
db_block_size=8192
db_files=200
db_unique_name=tspitr_STUDY_Bjpl
large_pool_size=1M
shared_pool_size=110M
#No auxiliary parameter file used
db_create_file_dest=D:oradatatoms
control_files=D:oradatatoms/cntrl_tspitr_STUDY_Bjpl.f


启动自动实例 STUDY

Oracle 实例已启动

系统全局区域总计     201326592 字节

Fixed Size                     1289700 字节
Variable Size                146801180 字节
Database Buffers              50331648 字节
Redo Buffers                   2904064 字节
自动实例已创建

内存脚本的内容:
{
# set the until clause
set until  scn 1014548;
# 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;';
# resync catalog after controlfile restore
resync catalog;
}
正在执行内存脚本

正在执行命令: SET until clause

 于 28-11月-07
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=37 devtype=DISK

通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_AUX_DISK_1: 正在复原控制文件
通道 ORA_AUX_DISK_1: 正在读取备份段 D:ORADATABACKUPC-2656671914-20071128-0E
通道 ORA_AUX_DISK_1: 已恢复备份段 1
段句柄 = D:ORADATABACKUPC-2656671914-20071128-0E 标记 = TAG20071128T163432
通道 ORA_AUX_DISK_1: 恢复完成, 用时: 00:00:01
输出文件名=D:ORADATATOMSCNTRL_TSPITR_STUDY_BJPL.F
 于 28-11月-07

sql 语句: alter database mount clone database

sql 语句: alter system archive log current

sql 语句: begin dbms_backup_restore.AutoBackupFlag(FALSE); end;

正在启动全部恢复目录的 resync
完成全部 resync
释放的通道: ORA_AUX_DISK_1

内存脚本的内容:
{
# generated tablespace point-in-time recovery script
# set the until clause
set until  scn 1014548;
# set an omf destination filename for restore
set newname for clone datafile  1 to new;
# set an omf destination filename for restore
set newname for clone datafile  2 to new;
# set an omf destination filename for restore
set newname for clone datafile  3 to new;
# set an omf destination tempfile
set newname for clone tempfile  1 to new;
# set a destination filename for restore
set newname for datafile  6 to "D:oradatatomsTRANS.DBF";
# rename all tempfiles
switch clone tempfile all;
# restore the tablespaces in the recovery set plus the auxilliary tablespaces
restore clone datafile  1, 2, 3, 6;
switch clone datafile all;
#online the datafiles restored or flipped
sql clone "alter database datafile  1 online";
#online the datafiles restored or flipped
sql clone "alter database datafile  2 online";
#online the datafiles restored or flipped
sql clone "alter database datafile  3 online";
#online the datafiles restored or flipped
sql clone "alter database datafile  6 online";
# make the controlfile point at the restored datafiles, then recover them
recover clone database tablespace  "TRANS", "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
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME

临时文件 1 在控制文件中已重命名为 D:ORADATATOMSTSPITR_SDATAFILEO1_MF_TEMP_%U_.TMP

 于 28-11月-07
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=39 devtype=DISK

通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_AUX_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到D:ORADATATOMSTSPITR_SDATAFILEO1_MF_SYSTEM_%U_.DBF
通道 ORA_AUX_DISK_1: 正在读取备份段 D:ORADATABACKUP8EJ26N21_1_1
通道 ORA_AUX_DISK_1: 已恢复备份段 1
段句柄 = D:ORADATABACKUP8EJ26N21_1_1 标记 = TAG20071128T163305
通道 ORA_AUX_DISK_1: 恢复完成, 用时: 00:00:55
通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_AUX_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00003恢复到D:ORADATATOMSTSPITR_SDATAFILEO1_MF_SYSAUX_%U_.DBF
正将数据文件00006恢复到D:ORADATATOMSTRANS.DBF
通道 ORA_AUX_DISK_1: 正在读取备份段 D:ORADATABACKUP8FJ26N3F_1_1
通道 ORA_AUX_DISK_1: 已恢复备份段 1
段句柄 = D:ORADATABACKUP8FJ26N3F_1_1 标记 = TAG20071128T163305
通道 ORA_AUX_DISK_1: 恢复完成, 用时: 00:00:45
通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_AUX_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00002恢复到D:ORADATATOMSTSPITR_SDATAFILEO1_MF_UNDOTBS1_%U_.DBF
通道 ORA_AUX_DISK_1: 正在读取备份段 D:ORADATABACKUP8GJ26N48_1_1
通道 ORA_AUX_DISK_1: 已恢复备份段 1
段句柄 = D:ORADATABACKUP8GJ26N48_1_1 标记 = TAG20071128T163305
通道 ORA_AUX_DISK_1: 恢复完成, 用时: 00:00:07
 于 28-11月-07

数据文件 1 已转换成数据文件副本
输入数据文件副本 recid=37 stamp=639853422 
文件名=D:ORADATATOMSTSPITR_SDATAFILEO1_MF_SYSTEM_3NTCN26T_.DBF
数据文件 2 已转换成数据文件副本
输入数据文件副本 recid=38 stamp=639853422 
文件名=D:ORADATATOMSTSPITR_SDATAFILEO1_MF_UNDOTBS1_3NTCQ6Y8_.DBF
数据文件 3 已转换成数据文件副本
输入数据文件副本 recid=39 stamp=639853423 
文件名=D:ORADATATOMSTSPITR_SDATAFILEO1_MF_SYSAUX_3NTCOSSD_.DBF
数据文件 6 已转换成数据文件副本
输入数据文件副本 recid=40 stamp=639853423 
文件名=D:ORADATATOMSTRANS.DBF

sql 语句: alter database datafile  1 online

sql 语句: alter database datafile  2 online

sql 语句: alter database datafile  3 online

sql 语句: alter database datafile  6 online

 于 28-11月-07
使用通道 ORA_AUX_DISK_1

正在开始介质的恢复

存档日志线程 1 序列 41 已作为文件 D:ORADATASTUDYARCHARC00041_0639422393.001
存在于磁盘上
存档日志线程 1 序列 42 已作为文件 D:ORADATASTUDYARCHARC00042_0639422393.001
存在于磁盘上
存档日志线程 1 序列 43 已作为文件 D:ORADATASTUDYARCHARC00043_0639422393.001
存在于磁盘上
存档日志线程 1 序列 44 已作为文件 D:ORADATASTUDYARCHARC00044_0639422393.001
存在于磁盘上
存档日志线程 1 序列 45 已作为文件 D:ORADATASTUDYARCHARC00045_0639422393.001
存在于磁盘上
通道 ORA_AUX_DISK_1: 正在启动到默认目标的存档日志恢复
通道 ORA_AUX_DISK_1: 正在恢复存档日志
存档日志线程 =1 序列=40
通道 ORA_AUX_DISK_1: 正在读取备份段 D:ORADATABACKUP8HJ26N4K_1_1
通道 ORA_AUX_DISK_1: 已恢复备份段 1
段句柄 = D:ORADATABACKUP8HJ26N4K_1_1 标记 = TAG20071128T163427
通道 ORA_AUX_DISK_1: 恢复完成, 用时: 00:00:01
存档日志文件名 =D:ORACLE10RDBMSARC00040_0639422393.001 线程 =1 序列 =40
通道 clone_default: 正在删除存档日志
存档日志文件名 =D:ORACLE10RDBMSARC00040_0639422393.001 记录 ID=174 时间戳 =639853431
存档日志文件名 =D:ORADATASTUDYARCHARC00041_0639422393.001 线程 =1 序列 =41
存档日志文件名 =D:ORADATASTUDYARCHARC00042_0639422393.001 线程 =1 序列 =42
存档日志文件名 =D:ORADATASTUDYARCHARC00043_0639422393.001 线程 =1 序列 =43
存档日志文件名 =D:ORADATASTUDYARCHARC00044_0639422393.001 线程 =1 序列 =44
存档日志文件名 =D:ORADATASTUDYARCHARC00045_0639422393.001 线程 =1 序列 =45
介质恢复完成, 用时: 00:00:05
 于 28-11月-07

数据库已打开

内存脚本的内容:
{
#mark read only the tablespace that will be exported
sql clone "alter tablespace TRANS read only";
# create directory for datapump export
sql clone "create or replace directory STREAMS_DIROBJ_DPDIR as ''
D:oradatatoms''";
# export the tablespaces in the recovery set
host 'expdp userid="/@(DESCRIPTION=(ADDRESS=(PROTOCOL=beq)(PROGRAM=oracle)(ARGV
0=oracleBjpl)(ARGS=^'(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))^')(ENVS=^
'ORACLE_SID=Bjpl^'))(CONNECT_DATA=(SID=Bjpl))) as sysdba" transport_tablespaces
=TRANS dumpfile=trans.dmp directory=STREAMS_DIROBJ_DPDIR logfile=exp_trans.log';
}
正在执行内存脚本

sql 语句: alter tablespace TRANS read only

sql 语句: create or replace directory STREAMS_DIROBJ_DPDIR as ''D:oradatatoms''

Export: Release 10.2.0.3.0 - Production on 星期三, 28 11月, 2007 17:04:37

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

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
启动 "SYS"."SYS_EXPORT_TRANSPORTABLE_01":  userid="/********@(DESCRIPTION=(ADDRESS=(PROTOCOL=beq)
(PROGRAM=oracle)(ARGV0=oracleBjpl)(ARGS='(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))')
(ENVS='ORACLE_SID=Bjpl'))(CONNECT_DATA=(SID=Bjpl)))
 AS SYSDBA" transport_tablespaces= TRANS dumpfile=trans.dmp directory=STREAMS_DIROBJ_DPDIR 
 logfile=exp_trans.log
处理对象类型 TRANSPORTABLE_EXPORT/PLUGTS_BLK
处理对象类型 TRANSPORTABLE_EXPORT/TABLE
处理对象类型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
已成功加载/卸载了主表 "SYS"."SYS_EXPORT_TRANSPORTABLE_01"
******************************************************************************
SYS.SYS_EXPORT_TRANSPORTABLE_01 的转储文件集为:
  D:ORADATATOMSTRANS.DMP
作业 "SYS"."SYS_EXPORT_TRANSPORTABLE_01" 已于 17:05:49 成功完成

主机命令完成
/*
   The following command may be used to import the tablespaces.
   Substitute values for and .
   impdp  directory= dumpfile= 'trans.dmp' transport_datafiles= D:oradatatomsTRANS.DBF
*/
--------------------------------------------------------------
-- Start of sample PL/SQL script for importing the tablespaces
--------------------------------------------------------------
-- creating directory objects
CREATE DIRECTORY STREAMS$DIROBJ$1 AS  'D:oradatatoms';
CREATE DIRECTORY STREAMS$DIROBJ$DPDIR AS  'D:oradatatoms';
/* PL/SQL Script to import the exported tablespaces */
DECLARE
  -- the datafiles
  tbs_files     dbms_streams_tablespace_adm.file_set;
  cvt_files     dbms_streams_tablespace_adm.file_set;
  -- the dumpfile to import
  dump_file     dbms_streams_tablespace_adm.file;
  dp_job_name   VARCHAR2(30) := NULL;
  -- names of tablespaces that were imported
  ts_names       dbms_streams_tablespace_adm.tablespace_set;
BEGIN
  -- dump file name and location
  dump_file.file_name :=  'trans.dmp';
  dump_file.directory_object := 'STREAMS$DIROBJ$DPDIR';
  -- forming list of datafiles for import
  tbs_files( 1).file_name :=  'TRANS.DBF';
  tbs_files( 1).directory_object :=  'STREAMS$DIROBJ$1';
  -- import tablespaces
  dbms_streams_tablespace_adm.attach_tablespaces(
    datapump_job_name      => dp_job_name,
    dump_file              => dump_file,
    tablespace_files       => tbs_files,
    converted_files        => cvt_files,
    tablespace_names       => ts_names);
  -- output names of imported tablespaces
  IF ts_names IS NOT NULL AND ts_names.first IS NOT NULL THEN
    FOR i IN ts_names.first .. ts_names.last LOOP
      dbms_output.put_line('imported tablespace '|| ts_names(i));
    END LOOP;
  END IF;
END;
/
-- dropping directory objects
DROP DIRECTORY STREAMS$DIROBJ$1;
DROP DIRECTORY STREAMS$DIROBJ$DPDIR;
--------------------------------------------------------------
-- End of sample PL/SQL script
--------------------------------------------------------------

删除自动实例
关闭自动实例
Oracle 实例已关闭
自动实例已删除
已删除辅助实例文件 D:ORADATATOMSCNTRL_TSPITR_STUDY_BJPL.F
已删除辅助实例文件 D:ORADATATOMSTSPITR_SDATAFILEO1_MF_SYSTEM_3NTCN26T_.DBF
已删除辅助实例文件 D:ORADATATOMSTSPITR_SDATAFILEO1_MF_UNDOTBS1_3NTCQ6Y8_.DBF
已删除辅助实例文件 D:ORADATATOMSTSPITR_SDATAFILEO1_MF_SYSAUX_3NTCOSSD_.DBF
已删除辅助实例文件 D:ORADATATOMSTSPITR_SDATAFILEO1_MF_TEMP_3NTCRD1G_.TMP
已删除辅助实例文件 D:ORADATATOMSTSPITR_SONLINELOGO1_MF_1_3NTCQYC7_.LOG
已删除辅助实例文件 D:ORADATATOMSTSPITR_SONLINELOGO1_MF_2_3NTCR1VT_.LOG
已删除辅助实例文件 D:ORADATATOMSTSPITR_SONLINELOGO1_MF_3_3NTCR5CQ_.LOG

RMAN>
 
 
 
 

步骤概要

 

1、用RMAN连接到源数据库和CATALOG数据库(如果有)

2、RMAN自动创建辅助实例(包含SYSTEM、UNDO和要传输的表空间)

3、RMAN通过辅助实例恢复到point in time

4、RMAN利用expdp工具生成dumpfile,dumpfile内容包含
-要传输的表空间对应的数据文件,

-要传输的表空间的metadata

-一个可以导入要传输的表空间的SQL脚本

5. 然后RMAN自动删除辅助实例。

 

测试过程

D:>rman target/ catalog rman/rman@px1a
恢复管理器: Release 10.2.0.3.0 - Production on 星期三 11月 28 17:00:15 2007
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

连接到目标数据库: STUDY (DBID=2656671914)
连接到恢复目录数据库

RMAN> run
2> {
3> TRANSPORT TABLESPACE 'TRANS'
4> TABLESPACE DESTINATION 'D:oradatatoms'
5> AUXILIARY DESTINATION 'D:oradatatoms'
6> DUMP FILE 'trans.dmp'
7> EXPORT LOG 'exp_trans.log'
8> IMPORT SCRIPT 'imp_trans.sql';
9> }

:这是整个过程中,我们唯一发出的RMAN COMMAND.

 

下面是这个命令的具体输出信息

使用 SID='Bjpl' 创建自动实例

供自动实例使用的初始化参数:
db_name=STUDY
compatible=10.2.0.3.0
db_block_size=8192
db_files=200
db_unique_name=tspitr_STUDY_Bjpl
large_pool_size=1M
shared_pool_size=110M
#No auxiliary parameter file used
db_create_file_dest=D:oradatatoms
control_files=D:oradatatoms/cntrl_tspitr_STUDY_Bjpl.f


启动自动实例 STUDY

Oracle 实例已启动

系统全局区域总计     201326592 字节

Fixed Size                     1289700 字节
Variable Size                146801180 字节
Database Buffers              50331648 字节
Redo Buffers                   2904064 字节
自动实例已创建

内存脚本的内容:
{
# set the until clause
set until  scn 1014548;
# 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;';
# resync catalog after controlfile restore
resync catalog;
}
正在执行内存脚本

正在执行命令: SET until clause

 于 28-11月-07
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=37 devtype=DISK

通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_AUX_DISK_1: 正在复原控制文件
通道 ORA_AUX_DISK_1: 正在读取备份段 D:ORADATABACKUPC-2656671914-20071128-0E
通道 ORA_AUX_DISK_1: 已恢复备份段 1
段句柄 = D:ORADATABACKUPC-2656671914-20071128-0E 标记 = TAG20071128T163432
通道 ORA_AUX_DISK_1: 恢复完成, 用时: 00:00:01
输出文件名=D:ORADATATOMSCNTRL_TSPITR_STUDY_BJPL.F
 于 28-11月-07

sql 语句: alter database mount clone database

sql 语句: alter system archive log current

sql 语句: begin dbms_backup_restore.AutoBackupFlag(FALSE); end;

正在启动全部恢复目录的 resync
完成全部 resync
释放的通道: ORA_AUX_DISK_1

内存脚本的内容:
{
# generated tablespace point-in-time recovery script
# set the until clause
set until  scn 1014548;
# set an omf destination filename for restore
set newname for clone datafile  1 to new;
# set an omf destination filename for restore
set newname for clone datafile  2 to new;
# set an omf destination filename for restore
set newname for clone datafile  3 to new;
# set an omf destination tempfile
set newname for clone tempfile  1 to new;
# set a destination filename for restore
set newname for datafile  6 to "D:oradatatomsTRANS.DBF";
# rename all tempfiles
switch clone tempfile all;
# restore the tablespaces in the recovery set plus the auxilliary tablespaces
restore clone datafile  1, 2, 3, 6;
switch clone datafile all;
#online the datafiles restored or flipped
sql clone "alter database datafile  1 online";
#online the datafiles restored or flipped
sql clone "alter database datafile  2 online";
#online the datafiles restored or flipped
sql clone "alter database datafile  3 online";
#online the datafiles restored or flipped
sql clone "alter database datafile  6 online";
# make the controlfile point at the restored datafiles, then recover them
recover clone database tablespace  "TRANS", "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
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME

临时文件 1 在控制文件中已重命名为 D:ORADATATOMSTSPITR_SDATAFILEO1_MF_TEMP_%U_.TMP

 于 28-11月-07
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=39 devtype=DISK

通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_AUX_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到D:ORADATATOMSTSPITR_SDATAFILEO1_MF_SYSTEM_%U_.DBF
通道 ORA_AUX_DISK_1: 正在读取备份段 D:ORADATABACKUP8EJ26N21_1_1
通道 ORA_AUX_DISK_1: 已恢复备份段 1
段句柄 = D:ORADATABACKUP8EJ26N21_1_1 标记 = TAG20071128T163305
通道 ORA_AUX_DISK_1: 恢复完成, 用时: 00:00:55
通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_AUX_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00003恢复到D:ORADATATOMSTSPITR_SDATAFILEO1_MF_SYSAUX_%U_.DBF
正将数据文件00006恢复到D:ORADATATOMSTRANS.DBF
通道 ORA_AUX_DISK_1: 正在读取备份段 D:ORADATABACKUP8FJ26N3F_1_1
通道 ORA_AUX_DISK_1: 已恢复备份段 1
段句柄 = D:ORADATABACKUP8FJ26N3F_1_1 标记 = TAG20071128T163305
通道 ORA_AUX_DISK_1: 恢复完成, 用时: 00:00:45
通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_AUX_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00002恢复到D:ORADATATOMSTSPITR_SDATAFILEO1_MF_UNDOTBS1_%U_.DBF
通道 ORA_AUX_DISK_1: 正在读取备份段 D:ORADATABACKUP8GJ26N48_1_1
通道 ORA_AUX_DISK_1: 已恢复备份段 1
段句柄 = D:ORADATABACKUP8GJ26N48_1_1 标记 = TAG20071128T163305
通道 ORA_AUX_DISK_1: 恢复完成, 用时: 00:00:07
 于 28-11月-07

数据文件 1 已转换成数据文件副本
输入数据文件副本 recid=37 stamp=639853422 
文件名=D:ORADATATOMSTSPITR_SDATAFILEO1_MF_SYSTEM_3NTCN26T_.DBF
数据文件 2 已转换成数据文件副本
输入数据文件副本 recid=38 stamp=639853422 
文件名=D:ORADATATOMSTSPITR_SDATAFILEO1_MF_UNDOTBS1_3NTCQ6Y8_.DBF
数据文件 3 已转换成数据文件副本
输入数据文件副本 recid=39 stamp=639853423 
文件名=D:ORADATATOMSTSPITR_SDATAFILEO1_MF_SYSAUX_3NTCOSSD_.DBF
数据文件 6 已转换成数据文件副本
输入数据文件副本 recid=40 stamp=639853423 
文件名=D:ORADATATOMSTRANS.DBF

sql 语句: alter database datafile  1 online

sql 语句: alter database datafile  2 online

sql 语句: alter database datafile  3 online

sql 语句: alter database datafile  6 online

 于 28-11月-07
使用通道 ORA_AUX_DISK_1

正在开始介质的恢复

存档日志线程 1 序列 41 已作为文件 D:ORADATASTUDYARCHARC00041_0639422393.001
存在于磁盘上
存档日志线程 1 序列 42 已作为文件 D:ORADATASTUDYARCHARC00042_0639422393.001
存在于磁盘上
存档日志线程 1 序列 43 已作为文件 D:ORADATASTUDYARCHARC00043_0639422393.001
存在于磁盘上
存档日志线程 1 序列 44 已作为文件 D:ORADATASTUDYARCHARC00044_0639422393.001
存在于磁盘上
存档日志线程 1 序列 45 已作为文件 D:ORADATASTUDYARCHARC00045_0639422393.001
存在于磁盘上
通道 ORA_AUX_DISK_1: 正在启动到默认目标的存档日志恢复
通道 ORA_AUX_DISK_1: 正在恢复存档日志
存档日志线程 =1 序列=40
通道 ORA_AUX_DISK_1: 正在读取备份段 D:ORADATABACKUP8HJ26N4K_1_1
通道 ORA_AUX_DISK_1: 已恢复备份段 1
段句柄 = D:ORADATABACKUP8HJ26N4K_1_1 标记 = TAG20071128T163427
通道 ORA_AUX_DISK_1: 恢复完成, 用时: 00:00:01
存档日志文件名 =D:ORACLE10RDBMSARC00040_0639422393.001 线程 =1 序列 =40
通道 clone_default: 正在删除存档日志
存档日志文件名 =D:ORACLE10RDBMSARC00040_0639422393.001 记录 ID=174 时间戳 =639853431
存档日志文件名 =D:ORADATASTUDYARCHARC00041_0639422393.001 线程 =1 序列 =41
存档日志文件名 =D:ORADATASTUDYARCHARC00042_0639422393.001 线程 =1 序列 =42
存档日志文件名 =D:ORADATASTUDYARCHARC00043_0639422393.001 线程 =1 序列 =43
存档日志文件名 =D:ORADATASTUDYARCHARC00044_0639422393.001 线程 =1 序列 =44
存档日志文件名 =D:ORADATASTUDYARCHARC00045_0639422393.001 线程 =1 序列 =45
介质恢复完成, 用时: 00:00:05
 于 28-11月-07

数据库已打开

内存脚本的内容:
{
#mark read only the tablespace that will be exported
sql clone "alter tablespace TRANS read only";
# create directory for datapump export
sql clone "create or replace directory STREAMS_DIROBJ_DPDIR as ''
D:oradatatoms''";
# export the tablespaces in the recovery set
host 'expdp userid="/@(DESCRIPTION=(ADDRESS=(PROTOCOL=beq)(PROGRAM=oracle)(ARGV
0=oracleBjpl)(ARGS=^'(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))^')(ENVS=^
'ORACLE_SID=Bjpl^'))(CONNECT_DATA=(SID=Bjpl))) as sysdba" transport_tablespaces
=TRANS dumpfile=trans.dmp directory=STREAMS_DIROBJ_DPDIR logfile=exp_trans.log';
}
正在执行内存脚本

sql 语句: alter tablespace TRANS read only

sql 语句: create or replace directory STREAMS_DIROBJ_DPDIR as ''D:oradatatoms''

Export: Release 10.2.0.3.0 - Production on 星期三, 28 11月, 2007 17:04:37

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

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
启动 "SYS"."SYS_EXPORT_TRANSPORTABLE_01":  userid="/********@(DESCRIPTION=(ADDRESS=(PROTOCOL=beq)
(PROGRAM=oracle)(ARGV0=oracleBjpl)(ARGS='(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))')
(ENVS='ORACLE_SID=Bjpl'))(CONNECT_DATA=(SID=Bjpl)))
 AS SYSDBA" transport_tablespaces= TRANS dumpfile=trans.dmp directory=STREAMS_DIROBJ_DPDIR 
 logfile=exp_trans.log
处理对象类型 TRANSPORTABLE_EXPORT/PLUGTS_BLK
处理对象类型 TRANSPORTABLE_EXPORT/TABLE
处理对象类型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
已成功加载/卸载了主表 "SYS"."SYS_EXPORT_TRANSPORTABLE_01"
******************************************************************************
SYS.SYS_EXPORT_TRANSPORTABLE_01 的转储文件集为:
  D:ORADATATOMSTRANS.DMP
作业 "SYS"."SYS_EXPORT_TRANSPORTABLE_01" 已于 17:05:49 成功完成

主机命令完成
/*
   The following command may be used to import the tablespaces.
   Substitute values for and .
   impdp  directory= dumpfile= 'trans.dmp' transport_datafiles= D:oradatatomsTRANS.DBF
*/
--------------------------------------------------------------
-- Start of sample PL/SQL script for importing the tablespaces
--------------------------------------------------------------
-- creating directory objects
CREATE DIRECTORY STREAMS$DIROBJ$1 AS  'D:oradatatoms';
CREATE DIRECTORY STREAMS$DIROBJ$DPDIR AS  'D:oradatatoms';
/* PL/SQL Script to import the exported tablespaces */
DECLARE
  -- the datafiles
  tbs_files     dbms_streams_tablespace_adm.file_set;
  cvt_files     dbms_streams_tablespace_adm.file_set;
  -- the dumpfile to import
  dump_file     dbms_streams_tablespace_adm.file;
  dp_job_name   VARCHAR2(30) := NULL;
  -- names of tablespaces that were imported
  ts_names       dbms_streams_tablespace_adm.tablespace_set;
BEGIN
  -- dump file name and location
  dump_file.file_name :=  'trans.dmp';
  dump_file.directory_object := 'STREAMS$DIROBJ$DPDIR';
  -- forming list of datafiles for import
  tbs_files( 1).file_name :=  'TRANS.DBF';
  tbs_files( 1).directory_object :=  'STREAMS$DIROBJ$1';
  -- import tablespaces
  dbms_streams_tablespace_adm.attach_tablespaces(
    datapump_job_name      => dp_job_name,
    dump_file              => dump_file,
    tablespace_files       => tbs_files,
    converted_files        => cvt_files,
    tablespace_names       => ts_names);
  -- output names of imported tablespaces
  IF ts_names IS NOT NULL AND ts_names.first IS NOT NULL THEN
    FOR i IN ts_names.first .. ts_names.last LOOP
      dbms_output.put_line('imported tablespace '|| ts_names(i));
    END LOOP;
  END IF;
END;
/
-- dropping directory objects
DROP DIRECTORY STREAMS$DIROBJ$1;
DROP DIRECTORY STREAMS$DIROBJ$DPDIR;
--------------------------------------------------------------
-- End of sample PL/SQL script
--------------------------------------------------------------

删除自动实例
关闭自动实例
Oracle 实例已关闭
自动实例已删除
已删除辅助实例文件 D:ORADATATOMSCNTRL_TSPITR_STUDY_BJPL.F
已删除辅助实例文件 D:ORADATATOMSTSPITR_SDATAFILEO1_MF_SYSTEM_3NTCN26T_.DBF
已删除辅助实例文件 D:ORADATATOMSTSPITR_SDATAFILEO1_MF_UNDOTBS1_3NTCQ6Y8_.DBF
已删除辅助实例文件 D:ORADATATOMSTSPITR_SDATAFILEO1_MF_SYSAUX_3NTCOSSD_.DBF
已删除辅助实例文件 D:ORADATATOMSTSPITR_SDATAFILEO1_MF_TEMP_3NTCRD1G_.TMP
已删除辅助实例文件 D:ORADATATOMSTSPITR_SONLINELOGO1_MF_1_3NTCQYC7_.LOG
已删除辅助实例文件 D:ORADATATOMSTSPITR_SONLINELOGO1_MF_2_3NTCR1VT_.LOG
已删除辅助实例文件 D:ORADATATOMSTSPITR_SONLINELOGO1_MF_3_3NTCR5CQ_.LOG

RMAN>
 
 
 
 
通过备份实现可传输表空间(TTS From Backup with RMAN)(4)
作者 tomszrp 21:18 | Permalink静态链接网址 | Comments最新回复 (0) | Trackback引用 (0) | 磨刀石

到这里,RMAN的工作做完了,转到d:oradatatoms下,可以看到生成了我们需要的相应文件:


D:>cd oradatatoms

D:oradatatoms>dir
驱动器 D 中的卷是 应用盘
卷的序列号是 C4CF-9B46

D:oradatatoms 的目录
2007-11-28 17:05

TRANS.DBF
2007-11-28 17:05 106,496 TRANS.DMP
2007-11-28 17:01

 

最后我们打开目标数据库,利用impdp将TRANS表空间导入到目标数据库中:

D:oradatatoms>set oracle_sid=test

D:oradatatoms>sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.3.0 - Production on 星期四 11月 29 11:22:19 2007

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

已连接到空闲例程。

SQL> startup
ORACLE 例程已经启动。

Total System Global Area   83886080 bytes
Fixed Size                  1289028 bytes
Variable Size              67110076 bytes
Database Buffers           12582912 bytes
Redo Buffers                2904064 bytes
数据库装载完毕。
数据库已经打开。
SQL> create or replace directory trans_dir as 'D:oradatatoms';

目录已创建。

SQL> exit
从 Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options 断开

D:oradatatoms>


D:oradatatoms>copy D:oradatatomsTRANS.DBF D:oradatatestTRANS.DBF
已复制         1 个文件。

D:oradatatoms>

D:oradatatoms>impdp userid='sys/admin@test as sysdba' directory=trans_dir dumpfile= 'trans.dmp' 
transport_datafiles= 'D:oradatatestTRANS.DBF'

Import: Release 10.2.0.3.0 - Production on 星期四, 29 11月, 2007 11:31:26

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

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
已成功加载/卸载了主表 "SYS"."SYS_IMPORT_TRANSPORTABLE_02"
启动 "SYS"."SYS_IMPORT_TRANSPORTABLE_02":  userid='sys/********@test AS SYSDBA'
directory=trans_dir dumpfile= 'trans.dmp' transport_datafiles= 'D:oradatatest
TRANS.DBF'
处理对象类型 TRANSPORTABLE_EXPORT/PLUGTS_BLK
处理对象类型 TRANSPORTABLE_EXPORT/TABLE
处理对象类型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
作业 "SYS"."SYS_IMPORT_TRANSPORTABLE_02" 已于 11:35:48 成功完成


D:oradatatoms>
D:oradatatoms>

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 
Connected as SYS

SQL> select tablespace_name,file_name from dba_data_files where tablespace_name='TRANS';

TABLESPACE_NAME    FILE_NAME
------------------ ----------------------------


SQL> 
SQL> drop directory trans_dir;

Directory dropped

SQL> select count(*) from study.test;

  COUNT(*)
----------
      1569

SQL> 

好了,到这里表空间TRANS就被传输到了test这个数据库上了。需要注意的一点是,这个方法是从备份(而不是从联机表空间)中插入传输的表空间。因此,它将不是最新的.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/82387/viewspace-1016634/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/82387/viewspace-1016634/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值