一、檢查平台是否支持
跳過(如有不明請詳見第三節示例)
二、檢查待傳輸表空間是否自包含
跳過(如有不明請詳見第三節示例)
三、檢查備份
跳過(如有不明請詳見"一步一步學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
啟動自動實例 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=
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
其實如果你注意看屏蔽輸出的話,你會在impscript.sql腳本處發現人家其它也提示你可以直接使用impdp命令導入,這也是俺之前無數次提醒你重視輸出日志的原因。
另外通過impdp導入還有一個好處,可以通過REMAP_SCHEMA參數指定表空間所屬的schema,而不用創建表空間在源庫中對應的用戶(關於此處的更多說明也請詳見第三節示例)。
最後,友情提醒,做事情要嚴謹,表忘記打掃戰場,最起碼要記的將導入表空間的狀態更改為read-write。