10.2R2 rman transport tablespace特性測試!

warehouse發表於2007-01-12

10.2 rman transport tablespace最大的特點在於表空間不需要設定為read only了

這篇文章也值得參考:

http://luhartma.blogspot.com/2006/04/transportable-tablespaces-from-backup.html

RMAN> run {
2> TRANSPORT TABLESPACE 'TEST'
3> AUXILIARY DESTINATION 'E:oracletrans_tbs'
4> DUMP FILE 'test.dmp'
5> EXPORT LOG 'test.log'
6> IMPORT SCRIPT 'test_im.sql'
7> TABLESPACE DESTINATION 'E:oracletrans_tbs'
8> ;
9> }

RMAN-05026: 警告: 假定以下表空間集適用於指定的時間點

表空間列表要求具有 UNDO 段
表空間 SYSTEM
表空間 UNDOTBS1

使用 SID='zabp' 建立自動例項

供自動例項使用的初始化引數:
db_name=UTF
compatible=10.2.0.1.0
db_block_size=8192
db_files=200
db_unique_name=tspitr_UTF_zabp
large_pool_size=1M
shared_pool_size=110M
#No auxiliary parameter file used
db_create_file_dest=E:oracletrans_tbs
control_files=E:oracletrans_tbs/cntrl_tspitr_UTF_zabp.f


啟動自動例項 UTF

Oracle 例項已啟動

系統全域性區域總計 201326592 位元組

Fixed Size 1248092 位元組
Variable Size 146801828 位元組
Database Buffers 50331648 位元組
Redo Buffers 2945024 位元組
自動例項已建立

記憶體指令碼的內容:
{
# set the until clause
set until scn 768976;
# 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 於 12-1月 -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: 正在讀取備份段 E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREA
UTFAUTOBACKUP2007_01_12O1_MF_S_611692252_2TGRTY7B_.BKP
通道 ORA_AUX_DISK_1: 已恢復備份段 1
段控制程式碼 = E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAUTFAUTOBACKUP2007_01_12
O1_MF_S_611692252_2TGRTY7B_.BKP 標記 = TAG20070112T183052
通道 ORA_AUX_DISK_1: 恢復完成, 用時: 00:00:01
輸出檔名=E:ORACLETRANS_TBSCNTRL_TSPITR_UTF_ZABP.F
完成 restore 於 12-1月 -07

sql 語句: alter database mount clone database

sql 語句: alter system archive log current

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 768976;
# 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 an omf destination tempfile
set newname for clone tempfile 2 to new;
# set a destination filename for restore
set newname for datafile 5 to
"E:oracletrans_tbsTEST.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, 5;
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 5 online";
# make the controlfile point at the restored datafiles, then recover them
recover clone database tablespace "TEST", "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

正在執行命令: SET NEWNAME

臨時檔案 1 在控制檔案中已重新命名為 E:ORACLETRANS_TBSTSPITR_UDATAFILEO1_MF_TE
MP_%U_.TMP
臨時檔案 2 在控制檔案中已重新命名為 E:ORACLETRANS_TBSTSPITR_UDATAFILEO1_MF_TM
P_%U_.TMP

啟動 restore 於 12-1月 -07
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=39 devtype=DISK

通道 ORA_AUX_DISK_1: 正在開始恢復資料檔案備份集
通道 ORA_AUX_DISK_1: 正在指定從備份集恢復的資料檔案
正將資料檔案00001恢復到E:ORACLETRANS_TBSTSPITR_UDATAFILEO1_MF_SYSTEM_%U_.DB
F
正將資料檔案00002恢復到E:ORACLETRANS_TBSTSPITR_UDATAFILEO1_MF_UNDOTBS1_%U_.
DBF
正將資料檔案00003恢復到E:ORACLETRANS_TBSTSPITR_UDATAFILEO1_MF_SYSAUX_%U_.DB
F
正將資料檔案00005恢復到E:ORACLETRANS_TBSTEST.DBF
通道 ORA_AUX_DISK_1: 正在讀取備份段 E:TRANS_TBSBAKDB_FULL_19I7BBL4_1_1
通道 ORA_AUX_DISK_1: 已恢復備份段 1
段控制程式碼 = E:TRANS_TBSBAKDB_FULL_19I7BBL4_1_1 標記 = TAG20070112T182955
通道 ORA_AUX_DISK_1: 恢復完成, 用時: 00:01:05
完成 restore 於 12-1月 -07

資料檔案 1 已轉換成資料檔案副本
輸入資料檔案副本 recid=31 stamp=611702374 檔名=E:ORACLETRANS_TBSTSPITR_UDA
TAFILEO1_MF_SYSTEM_2TH2O4RF_.DBF
資料檔案 2 已轉換成資料檔案副本
輸入資料檔案副本 recid=32 stamp=611702374 檔名=E:ORACLETRANS_TBSTSPITR_UDA
TAFILEO1_MF_UNDOTBS1_2TH2O4SD_.DBF
資料檔案 3 已轉換成資料檔案副本
輸入資料檔案副本 recid=33 stamp=611702374 檔名=E:ORACLETRANS_TBSTSPITR_UDA
TAFILEO1_MF_SYSAUX_2TH2O4RW_.DBF
資料檔案 5 已轉換成資料檔案副本
輸入資料檔案副本 recid=34 stamp=611702374 檔名=E:ORACLETRANS_TBSTEST.DBF

sql 語句: alter database datafile 1 online

sql 語句: alter database datafile 2 online

sql 語句: alter database datafile 3 online

sql 語句: alter database datafile 5 online

啟動 recover 於 12-1月 -07
使用通道 ORA_AUX_DISK_1

正在開始介質的恢復

存檔日誌執行緒 1 序列 78 已作為檔案 E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAU
TFARCHIVELOG2007_01_12O1_MF_1_78_2TGV177T_.ARC 存在於磁碟上
存檔日誌執行緒 1 序列 79 已作為檔案 E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAU
TFARCHIVELOG2007_01_12O1_MF_1_79_2TGWLSG5_.ARC 存在於磁碟上
存檔日誌檔名 =E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAUTFARCHIVELOG2007
_01_12O1_MF_1_78_2TGV177T_.ARC 執行緒 =1 序列 =78
存檔日誌檔名 =E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAUTFARCHIVELOG2007
_01_12O1_MF_1_79_2TGWLSG5_.ARC 執行緒 =1 序列 =79
介質恢復完成, 用時: 00:00:06
完成 recover 於 12-1月 -07

資料庫已開啟

記憶體指令碼的內容:
{
#mark read only the tablespace that will be exported
sql clone "alter tablespace TEST read only";
# create directory for datapump export
sql clone "create or replace directory STREAMS_DIROBJ_DPDIR as ''
E:oracletrans_tbs''";
# export the tablespaces in the recovery set
host 'expdp userid="
0=oraclezabp)(ARGS=^'(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))^')(ENVS=^
'ORACLE_SID=zabp^'))(CONNECT_DATA=(SID=zabp))) as sysdba" transport_tablespaces
=
TEST dumpfile=
test.dmp directory=
STREAMS_DIROBJ_DPDIR logfile=
test.log';
}
正在執行記憶體指令碼

sql 語句: alter tablespace TEST read only

sql 語句: create or replace directory STREAMS_DIROBJ_DPDIR as ''E:oracletrans_
tbs''


Export: Release 10.2.0.1.0 - Production on 星期五, 12 1月, 2007 21:20:03

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
啟動 "SYS"."SYS_EXPORT_TRANSPORTABLE_01": userid="
SS=(PROTOCOL=beq)(PROGRAM=oracle)(ARGV0=oraclezabp)(ARGS='(DESCRIPTION=(LOCAL=YE
S)(ADDRESS=(PROTOCOL=beq)))')(ENVS='ORACLE_SID=zabp'))(CONNECT_DATA=(SID=zabp)))
AS SYSDBA" transport_tablespaces= TEST dumpfile=test.dmp directory=STREAMS_DIRO
BJ_DPDIR logfile=test.log
處理物件型別 TRANSPORTABLE_EXPORT/PLUGTS_BLK
處理物件型別 TRANSPORTABLE_EXPORT/TABLE
處理物件型別 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
已成功載入/解除安裝了主表 "SYS"."SYS_EXPORT_TRANSPORTABLE_01"
******************************************************************************
SYS.SYS_EXPORT_TRANSPORTABLE_01 的轉儲檔案集為:
E:ORACLETRANS_TBSTEST.DMP
作業 "SYS"."SYS_EXPORT_TRANSPORTABLE_01" 已於 21:20:36 成功完成

主機命令完成
/*
The following command may be used to import the tablespaces.
Substitute values for and .
impdp directory= dumpfile= 'test.dmp' transport_datafiles=
E:oracletrans_tbsTEST.DBF
*/
--------------------------------------------------------------
-- Start of sample PL/SQL script for importing the tablespaces
--------------------------------------------------------------
-- creating directory objects
CREATE DIRECTORY STREAMS$DIROBJ$1 AS 'E:oracletrans_tbs';
CREATE DIRECTORY STREAMS$DIROBJ$DPDIR AS 'E:oracletrans_tbs';
/* 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 := 'test.dmp';
dump_file.directory_object := 'STREAMS$DIROBJ$DPDIR';
-- forming list of datafiles for import
tbs_files( 1).file_name := 'TEST.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 例項已關閉
自動例項已刪除

刪除自動例項
自動例項已刪除
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: tranport tablespace 命令 (在 01/12/2007 21:20:44 上) 失敗
ORA-27056: 無法刪除檔案
OSD-04024: ???????????
O/S-Error: (OS 32) ???????????????????????????

遺憾的是這裡出現了錯誤,原因不祥,感覺不夠完美!

RMAN>

RMAN> exit


恢復管理器完成。

C:>e:

E:>cd oracle

E:oracle>cd trans_tbs

E:oracletrans_tbs>dir
驅動器 E 中的卷沒有標籤。
卷的序列號是 F6E5-4B31

E:oracletrans_tbs 的目錄

2007-01-12 21:23

.
2007-01-12 21:23 ..
2007-01-12 21:20 7,127,040 CNTRL_TSPITR_UTF_ZABP.F
2007-01-12 21:23 355 test.alg
2007-01-12 21:20 5,251,072 TEST.DBF
2007-01-12 21:20 73,728 TEST.DMP
2007-01-12 21:20 1,111 test.log
2007-01-12 21:20 2,101 test_im.sql
2007-01-12 21:18 TSPITR_U
6 個檔案 12,455,407 位元組
3 個目錄 22,051,143,680 可用位元組

E:oracletrans_tbs>
--============================================
在另一個例項上執行生成的指令碼E:oracletrans_tbstest_im.sql驗證表空間test是否可以成功,
驗證結果是成功,我們看到表空間test對應的資料檔案E:ORACLETRANS_TBSTEST.DBF已經是資料庫test
的一部分了,而且表空間test中的表t,tt也已經過來了!
C:>set oracle_sid=test

C:>sqlplus xys/manager

SQL*Plus: Release 10.2.0.1.0 - Production on 星期五 1月 12 21:10:58 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> SELECT FILE_NAME FROM DBA_DATA_FILES;

FILE_NAME
--------------------------------------------------------------------------------

E:ORACLEPRODUCT10.2.0ORADATATESTSYSTEM01.DBF
E:ORACLEPRODUCT10.2.0ORADATATESTUNDOTBS01.DBF
E:ORACLEPRODUCT10.2.0ORADATATESTSYSAUX01.DBF
E:ORACLEPRODUCT10.2.0ORADATATESTUSERS01.DBF

SQL> @E:oracletrans_tbstest_im.sql

目錄已建立。


目錄已建立。


PL/SQL 過程已成功完成。


目錄已刪除。


目錄已刪除。

SQL> SELECT FILE_NAME FROM DBA_DATA_FILES;

FILE_NAME
--------------------------------------------------------------------------------

E:ORACLEPRODUCT10.2.0ORADATATESTSYSTEM01.DBF
E:ORACLEPRODUCT10.2.0ORADATATESTUNDOTBS01.DBF
E:ORACLEPRODUCT10.2.0ORADATATESTSYSAUX01.DBF
E:ORACLEPRODUCT10.2.0ORADATATESTUSERS01.DBF
E:ORACLETRANS_TBSTEST.DBF

SQL> SELECT TABLE_NAME FROM USER_TABLES;

TABLE_NAME
------------------------------------------------------------
SYS_IMPORT_TRANSPORTABLE_01
SYS_IMPORT_TRANSPORTABLE_02
T
TT

SQL> select * from t;

ID
----------
1

SQL> select * from tt;

未選定行

SQL>

--==========================================

值得注意的是在target instance執行匯出指令碼時要以transport tablespace中的使用者相連線,如果該使用者不存在或者不以該使用者連線都會出現錯誤:

SQL> drop user xys;

使用者已刪除。

SQL> @ E:oracletrans_tbstest_im

目錄已建立。


目錄已建立。

DECLARE
*
第 1 行出現錯誤:
ORA-06512: 在 "SYS.DBMS_STREAMS_TABLESPACE_ADM", line 2006
ORA-06512: 在 line 18

目錄已刪除。


目錄已刪除。

SQL> create user xys identified by manager
2 ;

使用者已建立。

SQL> grant dba , connect, resource to xys;

授權成功。

SQL> show user
USER 為 "SYSTEM"
SQL> connect xys/manager
已連線。
SQL> @ E:oracletrans_tbstest_im

目錄已建立。


目錄已建立。


PL/SQL 過程已成功完成。


目錄已刪除。


目錄已刪除。

SQL>


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/19602/viewspace-61722/,如需轉載,請註明出處,否則將追究法律責任。

相關文章