前面提到的传输表空间是手动的,可以看到需要把表空间read only,如果使用rman则不需要,因为rman是利用的备份集。
OS | IP | SID | 存储方式 | 表空间 | 用户 | 表 | |
源数据库 | redhat5.4 | 10.10.10.7 | orcl | ASM | ttb1 | user1 | test |
目标数据库 | redhat5.4 | 10.10.10.8 | orcl | 文件系统 | —— | user1 | —— |
下面给出创建测试环境的脚本(源数据库上面执行的操作)
SQL> show user
USER 为 "SYS"
SQL> create tablespace ttb1 datafile '+datadg' size 10m;
表空间已创建。
SQL> create user user1 identified by user1 default tablespace ttb1;
用户已创建。
SQL> grant connect,resource to user1;
授权成功。
SQL> create table user1.test as select * from dba_objects where rownum < 100;
表已创建。
SQL> conn user1/user1
已连接。
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
TEST TABLE
SQL> select count(*) from test;
COUNT(*)
----------
99
可传输表空间实战
1.确认要传输表空间的平台是否兼容(源数据库和目标数据库上面都一样,因为都是redhat5.4的OS)
SQL> select tp.* from v$transportable_platform tp,v$database d where tp.PLATFORM_NAME = d.PLATFORM_NAME;
PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
----------- ---------------------------------------- --------------
10 Linux IA (32-bit) Little
2.确认传输的表空间是否自包含(源数据库上面执行的操作)
SQL> exec dbms_tts.transport_set_check('ttb1',true,true);
PL/SQL 过程已成功完成。
SQL> select * from transport_set_violations;
未选定行
3.备份数据库(源数据库上面执行的操作)
RMAN> sql "alter system checkpoint";
sql 语句: alter system checkpoint
RMAN> sql "alter system archive log current";
sql 语句: alter system archive log current
RMAN> sql "alter system switch logfile";
sql 语句: alter system switch logfile
RMAN> backup database;
启动 backup 于 07-10月-11
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00001 name=+DATADG/orcl/datafile/system.260.762322843
输入数据文件 fno=00002 name=+DATADG/orcl/datafile/undotbs1.261.762322855
输入数据文件 fno=00003 name=+DATADG/orcl/datafile/sysaux.262.762322857
输入数据文件 fno=00005 name=+DATADG/orcl/datafile/tb1.267.763910145
输入数据文件 fno=00006 name=+DATADG/orcl/datafile/tb2.268.763910201
输入数据文件 fno=00007 name=+DATADG/orcl/datafile/ttb1.269.763916007
输入数据文件 fno=00004 name=+DATADG/orcl/datafile/users.264.762322865
通道 ORA_DISK_1: 正在启动段 1 于 07-10月-11
通道 ORA_DISK_1: 已完成段 1 于 07-10月-11
段句柄=+FLSHDG/orcl/backupset/2011_10_07/nnndf0_tag20111007t154253_0.262.763918973 标记=TAG20111007T154253 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:35
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
备份集中包括当前控制文件
在备份集中包含当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 07-10月-11
通道 ORA_DISK_1: 已完成段 1 于 07-10月-11
段句柄=+FLSHDG/orcl/backupset/2011_10_07/ncsnf0_tag20111007t154253_0.266.763919011 标记=TAG20111007T154253 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:03
完成 backup 于 07-10月-11
RMAN> backup archivelog all;
启动 backup 于 07-10月-11
当前日志已存档
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在启动存档日志备份集
通道 ORA_DISK_1: 正在指定备份集中的存档日志
输入存档日志线程 =1 序列 =29 记录 ID=1 时间戳=762324929
输入存档日志线程 =1 序列 =30 记录 ID=2 时间戳=762374199
输入存档日志线程 =1 序列 =31 记录 ID=3 时间戳=762886152
输入存档日志线程 =1 序列 =32 记录 ID=4 时间戳=763918707
输入存档日志线程 =1 序列 =33 记录 ID=5 时间戳=763918939
输入存档日志线程 =1 序列 =34 记录 ID=6 时间戳=763918951
输入存档日志线程 =1 序列 =35 记录 ID=7 时间戳=763919033
通道 ORA_DISK_1: 正在启动段 1 于 07-10月-11
通道 ORA_DISK_1: 已完成段 1 于 07-10月-11
段句柄=+FLSHDG/orcl/backupset/2011_10_07/annnf0_tag20111007t154353_0.268.763919035 标记=TAG20111007T154353 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:04
完成 backup 于 07-10月-11
RMAN> backup current controlfile;
启动 backup 于 07-10月-11
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
备份集中包括当前控制文件
通道 ORA_DISK_1: 正在启动段 1 于 07-10月-11
通道 ORA_DISK_1: 已完成段 1 于 07-10月-11
段句柄=+FLSHDG/orcl/backupset/2011_10_07/ncnnf0_tag20111007t154419_0.269.763919061 标记=TAG20111007T154419 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:02
完成 backup 于 07-10月-11
说明:这里使用全库备份,因为除了目标表空间的备份以外,RMAN还需要SYSTEM、SYSAUX以及UNDO表空间的备份,如果任意一个表空间的备份不存在,则就会导致“RMAN-06019: 无法转换表空间名称"TTB1"”的错误。
4.生成传输集(源数据库上面执行的操作)
RMAN> transport tablespace ttb1 tablespace destination '/u01/td' auxiliary destination '/u01/ad';
RMAN-05026: 警告: 假定以下表空间集适用于指定的时间点
表空间列表要求具有 UNDO 段
表空间 SYSTEM
表空间 UNDOTBS1
使用 SID='hiEo' 创建自动实例
供自动实例使用的初始化参数:
db_name=ORCL
compatible=10.2.0.3.0
db_block_size=8192
db_files=200
db_unique_name=tspitr_ORCL_hiEo
large_pool_size=1M
shared_pool_size=110M
#No auxiliary parameter file used
db_create_file_dest=/u01/ad
control_files=/u01/ad/cntrl_tspitr_ORCL_hiEo.f
启动自动实例 ORCL
Oracle 实例已启动
系统全局区域总计 201326592 字节
Fixed Size 1266584 字节
Variable Size 146803816 字节
Database Buffers 50331648 字节
Redo Buffers 2924544 字节
自动实例已创建
内存脚本的内容:
{
# set the until clause
set until scn 973897;
# 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
启动 restore 于 07-10月-11
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=37 devtype=DISK
通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_AUX_DISK_1: 正在还原控制文件
通道 ORA_AUX_DISK_1: 正在读取备份片段 +FLSHDG/orcl/backupset/2011_10_07/ncsnf0_tag20111007t154253_0.266.763919011
通道 ORA_AUX_DISK_1: 已还原备份片段 1
段句柄 = +FLSHDG/orcl/backupset/2011_10_07/ncsnf0_tag20111007t154253_0.266.763919011 标记 = TAG20111007T154253
通道 ORA_AUX_DISK_1: 还原完成, 用时: 00:00:18
输出文件名=/u01/ad/cntrl_tspitr_ORCL_hiEo.f
完成 restore 于 07-10月-11
sql 语句: alter database mount clone database
sql 语句: alter system archive log current
sql 语句: begin dbms_backup_restore.AutoBackupFlag(FALSE); end;
释放的通道: ORA_DISK_1
释放的通道: ORA_AUX_DISK_1
内存脚本的内容:
{
# generated tablespace point-in-time recovery script
# set the until clause
set until scn 973897;
# 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 7 to
"/u01/td/ttb1.269.763916007";
# rename all tempfiles
switch clone tempfile all;
# restore the tablespaces in the recovery set plus the auxilliary tablespaces
restore clone datafile 1, 2, 3, 7;
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 7 online";
# make the controlfile point at the restored datafiles, then recover them
recover clone database tablespace "TTB1", "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 在控制文件中已重命名为 /u01/ad/TSPITR_ORCL_HIEO/datafile/o1_mf_temp_%u_.tmp
启动 restore 于 07-10月-11
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=39 devtype=DISK
通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_AUX_DISK_1: 正在指定从备份集还原的数据文件
正将数据文件00001还原到/u01/ad/TSPITR_ORCL_HIEO/datafile/o1_mf_system_%u_.dbf
正将数据文件00002还原到/u01/ad/TSPITR_ORCL_HIEO/datafile/o1_mf_undotbs1_%u_.dbf
正将数据文件00003还原到/u01/ad/TSPITR_ORCL_HIEO/datafile/o1_mf_sysaux_%u_.dbf
正将数据文件00007还原到/u01/td/ttb1.269.763916007
通道 ORA_AUX_DISK_1: 正在读取备份片段 +FLSHDG/orcl/backupset/2011_10_07/nnndf0_tag20111007t154253_0.262.763918973
通道 ORA_AUX_DISK_1: 已还原备份片段 1
段句柄 = +FLSHDG/orcl/backupset/2011_10_07/nnndf0_tag20111007t154253_0.262.763918973 标记 = TAG20111007T154253
通道 ORA_AUX_DISK_1: 还原完成, 用时: 00:00:36
完成 restore 于 07-10月-11
数据文件 1 已转换成数据文件副本
输入数据文件副本 recid=5 stamp=763919178 文件名=/u01/ad/TSPITR_ORCL_HIEO/datafile/o1_mf_system_78xck70k_.dbf
数据文件 2 已转换成数据文件副本
输入数据文件副本 recid=6 stamp=763919178 文件名=/u01/ad/TSPITR_ORCL_HIEO/datafile/o1_mf_undotbs1_78xck72r_.dbf
数据文件 3 已转换成数据文件副本
输入数据文件副本 recid=7 stamp=763919178 文件名=/u01/ad/TSPITR_ORCL_HIEO/datafile/o1_mf_sysaux_78xck73h_.dbf
数据文件 7 已转换成数据文件副本
输入数据文件副本 recid=8 stamp=763919178 文件名=/u01/td/ttb1.269.763916007
sql 语句: alter database datafile 1 online
sql 语句: alter database datafile 2 online
sql 语句: alter database datafile 3 online
sql 语句: alter database datafile 7 online
启动 recover 于 07-10月-11
使用通道 ORA_AUX_DISK_1
正在开始介质的恢复
存档日志线程 1 序列 35 已作为文件 +FLSHDG/orcl/archivelog/2011_10_07/thread_1_seq_35.267.763919033 存在于磁盘上
存档日志文件名 =+FLSHDG/orcl/archivelog/2011_10_07/thread_1_seq_35.267.763919033 线程 =1 序列 =35
介质恢复完成, 用时: 00:00:02
完成 recover 于 07-10月-11
数据库已打开
内存脚本的内容:
{
#mark read only the tablespace that will be exported
sql clone "alter tablespace TTB1 read only";
# create directory for datapump export
sql clone "create or replace directory STREAMS_DIROBJ_DPDIR as ''
/u01/td''";
# export the tablespaces in the recovery set
host 'expdp userid=\"/@\(DESCRIPTION=\(ADDRESS=\(PROTOCOL=beq\)\(PROGRAM=/u01/app/oracle/product/10.2.0/db_1/bin/oracle\)\(ARGV0=oraclehiEo\)\(ARGS=^'\(DESCRIPTION=\(LOCAL=YES\)\(ADDRESS=\(PROTOCOL=beq\)\)\)^'\)\(ENVS=^'ORACLE_SID=hiEo^'\)\)\(CONNECT_DATA=\(SID=hiEo\)\)\) as sysdba\" transport_tablespaces=
TTB1 dumpfile=
dmpfile.dmp directory=
STREAMS_DIROBJ_DPDIR logfile=
explog.log';
}
正在执行内存脚本
sql 语句: alter tablespace TTB1 read only
sql 语句: create or replace directory STREAMS_DIROBJ_DPDIR as ''/u01/td''
Export: Release 10.2.0.4.0 - Production on 星期五, 07 10月, 2011 15:46:44
Copyright (c) 2003, 2007, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
启动 "SYS"."SYS_EXPORT_TRANSPORTABLE_01": userid="/********@(DESCRIPTION=(ADDRESS=(PROTOCOL=beq)(PROGRAM=/u01/app/oracle/product/10.2.0/db_1/bin/oracle)(ARGV0=oraclehiEo)(ARGS=\(DESCRIPTION=\(LOCAL=YES\)\(ADDRESS=\(PROTOCOL=beq\)\)\))(ENVS=ORACLE_SID=hiEo))(CONNECT_DATA=(SID=hiEo))) AS SYSDBA" transport_tablespaces= TTB1 dumpfile=dmpfile.dmp directory=STREAMS_DIROBJ_DPDIR logfile=explog.log
处理对象类型 TRANSPORTABLE_EXPORT/PLUGTS_BLK
处理对象类型 TRANSPORTABLE_EXPORT/TABLE
处理对象类型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
已成功加载/卸载了主表 "SYS"."SYS_EXPORT_TRANSPORTABLE_01"
******************************************************************************
SYS.SYS_EXPORT_TRANSPORTABLE_01 的转储文件集为:
/u01/td/dmpfile.dmp
作业 "SYS"."SYS_EXPORT_TRANSPORTABLE_01" 已于 15:47:14 成功完成
主机命令完成
/*
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= /u01/td/ttb1.269.763916007
*/
--------------------------------------------------------------
-- Start of sample PL/SQL script for importing the tablespaces
--------------------------------------------------------------
-- creating directory objects
CREATE DIRECTORY STREAMS$DIROBJ$1 AS '/u01/td/';
CREATE DIRECTORY STREAMS$DIROBJ$DPDIR AS '/u01/td';
/* 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 := 'dmpfile.dmp';
dump_file.directory_object := 'STREAMS$DIROBJ$DPDIR';
-- forming list of datafiles for import
tbs_files( 1).file_name := 'ttb1.269.763916007';
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 实例已关闭
自动实例已删除
已删除辅助实例文件 /u01/ad/cntrl_tspitr_ORCL_hiEo.f
已删除辅助实例文件 /u01/ad/TSPITR_ORCL_HIEO/datafile/o1_mf_system_78xck70k_.dbf
已删除辅助实例文件 /u01/ad/TSPITR_ORCL_HIEO/datafile/o1_mf_undotbs1_78xck72r_.dbf
已删除辅助实例文件 /u01/ad/TSPITR_ORCL_HIEO/datafile/o1_mf_sysaux_78xck73h_.dbf
已删除辅助实例文件 /u01/ad/TSPITR_ORCL_HIEO/datafile/o1_mf_temp_78xclrd5_.tmp
已删除辅助实例文件 /u01/ad/TSPITR_ORCL_HIEO/onlinelog/o1_mf_1_78xclmkj_.log
已删除辅助实例文件 /u01/ad/TSPITR_ORCL_HIEO/onlinelog/o1_mf_2_78xclnjl_.log
已删除辅助实例文件 /u01/ad/TSPITR_ORCL_HIEO/onlinelog/o1_mf_3_78xclnxc_.log
说明:可以看见“/u01/ad/”目录下面的东西ramn最后自动删除了的,这个目录只是一个临时目录的作用。查看一下“/u01/td/”目录
[oracle@linux td]$ pwd
/u01/td
[oracle@linux td]$ ll
总计 10352
-rw-r----- 1 oracle oinstall 77824 10-07 15:47 dmpfile.dmp
-rw-r--r-- 1 oracle oinstall 1110 10-07 15:47 explog.log
-rw-r--r-- 1 oracle oinstall 2042 10-07 15:47 impscrpt.sql
-rw-r----- 1 oracle oinstall 10493952 10-07 15:46 ttb1.269.763916007
impscrpt.sql --元数据信息,目标数据库必须存在相应的对象属主,数据文件路径不一致还要修改脚本。
dmpfile.dmp --也是元数据信息,如果使用dump文件导入元数据信息则就没有上面的限制了。
ttb1.269.763916007 --数据文件,可以发现生成的数据文件和原来的数据文件一模一样。
explog.log --导出操作的日志文件。
5.转换字节顺序,如果两个平台的字节顺序不一样,中间需要一个转换过程,可以使用rman。(可选操作,这里并没有执行。)
RMAN> convert tablespace books to platform 'Microsoft Windows IA (32-bit)' format '/tmp/%N_%F';
RMAN> convert datafile '/tmp/BOOKS_5' db_file_name_convert '/tmp/BOOKS_5','/tmp/books01.dbf';
说明:这就是第一步检查的目的,虽然这里并不需要转换。这里给出的只是转换的方法。