程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 使用Oracle可傳輸表空間的特性復制數據(7)實戰RMAN備份傳輸表空間

使用Oracle可傳輸表空間的特性復制數據(7)實戰RMAN備份傳輸表空間

編輯:Oracle數據庫基礎

一、檢查平台是否支持

跳過(如有不明請詳見第三節示例)

二、檢查待傳輸表空間是否自包含

跳過(如有不明請詳見第三節示例)

三、檢查備份

跳過(如有不明請詳見"一步一步學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。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved