RMAN高階應用之Duplicate複製資料庫(5)補充
使用rman的duplicate命令複製資料庫系列,本系列可以視為一步一步學RMAN的姊妹篇~~~~
RMAN高階應用之Duplicate複製資料庫(2)輔助例項
RMAN高階應用之Duplicate複製資料庫(3)複製流程
一、跳過表空間(Skipping Tablespaces in RMAN DUPLICATE DATABASE)
有時候,並非資料庫的所有表空間都需要備份,比如你在建立副本資料庫時,想跳過那些read-only或OFFLINE的表空間,這個簡單,來來來,跟我一起做,左三圈右三圈脖子扭扭屁股扭扭,不是跳舞,是放鬆放鬆,你已經連續盯著螢幕這麼久,而且都是看些蝌蚪兒字,要注意保護眼睛啊,黑黑~~~~
要跳過只讀表空間,在執行duplicate命令時指定SKIP READONLY子句即可。而對於離線表空間,在執行duplicate命令之前將其置為OFFLINE NORMAL狀態即可,RMAN複製時會跳過只讀或離線表空間的資料檔案。如果某個表空間即不是readonly也並非offline,但你就是不想複製,表急,duplicate還有殺手鐗。在執行duplicate命令時通過SKIP TABLESPACE XXX子句指定你要跳過的表空間,想跳多少就跳多少,多個表空間的話,中間以,(逗號)分隔即是。
當複製完成之後,通過查詢副本資料庫的v$datafile或DBA_DATA_FILES、DBA_TABLESPACES可以獲取表空間以及資料檔案的狀態。
例如:
SQL> select status,enabled,name from v$datafile;
STATUS ENABLED NAME
------- ---------- --------------------------------------------------
SYSTEM READ WRITE F:ORACLEORADATAJSSDUPSYSTEM01.DBF
ONLINE READ WRITE F:ORACLEORADATAJSSDUPUNDOTBS01.DBF
ONLINE READ WRITE F:ORACLEORADATAJSSDUPSYSAUX01.DBF
ONLINE READ WRITE F:ORACLEORADATAJSSDUPJSSWEB.DBF
ONLINE READ WRITE F:ORACLEORADATAJSSDUPUSERS01.DBF
對於readonly表空間,v$datafile中STATUS列會顯示為OFFLINE,ENABLE列會顯示為READ ONLY ,Name列會顯示為MISSING xxx。
對於offline表空間,v$datafile中STATUS列會顯示為OFFLINE,ENABLE列會顯示為DISABLED ,Name列會顯示為MISSING xxx。
二、重新命名副本資料庫檔案(Renaming Database Files in RMAN Duplicate Database)
1、建立過程中重新命名控制檔案
建立控制檔案的語法與sql語句中的建立方法一致。如果手工選擇控制檔名稱的話,務必確認輔助例項的初始化引數中引數設定正確。
2、建立過程中重新命名線上日誌檔案
有多種方式可以重新命名線上日誌檔案,見下列諸條:
1). 執行duplicate命名時指定LOGFILE子句設定redo logs檔名。
2). 輔助例項初始化引數檔案中設定LOG_FILE_NAME_CONVERT引數。該引數語法如下:
LOG_FILE_NAME_CONVERT = 'string1' , 'string2' , 'string3' , 'string4' , ...
將string1替換為string2,string3替換為string4,幾乎無限組對。
3). 輔助例項中設定其它的初始化引數:DB_CREATE_FILE_DEST, DB_CREATE_ONLINE_DEST_n, or DB_RECOVERY_FILE_DEST。這些引數的作用類似於SQL語句:ALTER DATABASE ADD LOGFILE.
4). 如果副本資料庫與目標庫不在同一臺機器上,並且副本資料庫的線上日誌檔案路徑與目標庫相同,則執行duplicate命令時必須指定NOFILENAMECHECK引數以避免衝突提示。暈了吧,異機操作路徑相同還必需指定NOFILENAMECHECK。此處oracle表現的很傻,它不知道你要恢復的路徑是在另一臺機器上,它只是認為要恢復到的路徑怎麼跟目標資料庫表現的一樣呢?會不會是要覆蓋目標資料庫啊,為了避免這種情形,於是它就報錯。所以一旦異機恢復,並且路徑相同,那麼你必須通過指定NOFILENAMECHECK來避免oracle的自動識別。
提示:上述各方式是有優先順序的,按照順序序號最小的最先執行。如果你在操作過程中統統指定,則oracle會自動判斷並以優先順序最高的設定為準。
3、建立過程中重新命名資料檔案
這個方法也比較多:第三章第2節"不同路徑結構的複製"時已經耗費了不少筆墨(o,是按鍵次數)並輔以各種指令碼例項說明,什麼,沒看明白,拖出去關小黑屋反覆殺死100遍。
4、跳過檔名檢測NOFILENAMECHECK
這項操作主要是為了避免oracle錯誤的領會你的操作意圖。
例如:
a庫有兩個資料檔案:檔案號1的檔案f:oracleoradatafile1.dbf和檔案號2的檔案f:oracleoradatafile2.dbf,當你將其複製到另一臺伺服器的b庫時:
RUN
{
SET NEWNAME FOR DATAFILE 1 TO f:oracleoradatafile2.dbf;
SET NEWNAME FOR DATAFILE 2 TO f:oracleoradatafile1.dbf;
DUPLICATE TARGET DATABASE TO newdb;
}
執行上面的指令碼oracle會報錯。雖然你通過set newname命令已經將資料檔案重新命名,不會有檔名重複的問題,但是由於此項操作是異機的同路徑複製,oracle會以為file1.dbf和file2.dbf仍在使用(目標庫的確在使用,但oracle分不清你當前操作的已經不是同一臺伺服器)。於是oracle會提示報錯資訊,針對這種情況,你必須DUPLICATE TARGET DATABASE TO newdb NOFILENAMECHECK避免oracle的理解。
再與第2項中的第4小項結合理解,你就能完全掌握NOFILENAMECHECK的奧妙所在:)
5、建立過程中重新命名臨時檔案
與重新命名資料檔案極其相似,不過如果希望通過SET NAME方式重新命名臨時檔案路徑的話,需要指明:SET NEWNAME FOR TEMPFILE,其它皆與之同,不詳述。
三、同步副本資料庫(Using DUPLICATE DATABASE to Resynchronize a Duplicate Database)
實質上對於非standby方式的duplicate沒有同步的操作,所謂同步不過就是再執行一次建立罷了。當然它跟初次執行還是有黑大區別地,比如,你不需要再配置輔助例項,這可是省了很多功夫啊。
例如,刪除目標庫中jss*命名的表,然後執行同步:
F:oracle>rman target / auxiliary sys/verysafe:)@jssdup
恢復管理器: Release 10.2.0.1.0 - Production on 星期二 10月 23 16:54:43 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.
已連線到目標資料庫: JSSWEB (DBID=3402005373, 未開啟)
已連線到輔助資料庫: JSSDUP (未裝載)
RMAN> DUPLICATE TARGET DATABASE TO jssdup;
啟動 Duplicate Db 於 23-10月-07
使用目標資料庫控制檔案替代恢復目錄
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=38 devtype=DISK
記憶體指令碼的內容:
{
set newname for datafile 1 to
"F:ORACLEORADATAJSSDUPSYSTEM01.DBF";
set newname for datafile 2 to
"F:ORACLEORADATAJSSDUPUNDOTBS01.DBF";
set newname for datafile 3 to
"F:ORACLEORADATAJSSDUPSYSAUX01.DBF";
set newname for datafile 4 to
"F:ORACLEORADATAJSSDUPJSSWEB.DBF";
set newname for datafile 5 to
"F:ORACLEORADATAJSSDUPUSERS01.DBF";
restore
check readonly
clone database
;
}
正在執行記憶體指令碼
正在執行命令: SET NEWNAME
正在執行命令: SET NEWNAME
正在執行命令: SET NEWNAME
正在執行命令: SET NEWNAME
正在執行命令: SET NEWNAME
啟動 restore 於 23-10月-07
使用通道 ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: 正在開始恢復資料檔案備份集
通道 ORA_AUX_DISK_1: 正在指定從備份集恢復的資料檔案
正將資料檔案00001恢復到F:ORACLEORADATAJSSDUPSYSTEM01.DBF
正將資料檔案00002恢復到F:ORACLEORADATAJSSDUPUNDOTBS01.DBF
正將資料檔案00003恢復到F:ORACLEORADATAJSSDUPSYSAUX01.DBF
正將資料檔案00004恢復到F:ORACLEORADATAJSSDUPJSSWEB.DBF
正將資料檔案00005恢復到F:ORACLEORADATAJSSDUPUSERS01.DBF
通道 ORA_AUX_DISK_1: 正在讀取備份段 D:BACKUP8IV7NJE_1_1
通道 ORA_AUX_DISK_1: 已恢復備份段 1
段控制程式碼 = D:BACKUP8IV7NJE_1_1 標記 = TAG20071023T155942
通道 ORA_AUX_DISK_1: 恢復完成, 用時: 00:00:57
完成 restore 於 23-10月-07
sql 語句: CREATE CONTROLFILE REUSE SET DATABASE "JSSDUP" RESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 ( 'F:ORACLEORADATAJSSDUPREDO01.LOG' ) SIZE 20 M REUSE,
GROUP 2 ( 'F:ORACLEORADATAJSSDUPREDO02.LOG' ) SIZE 20 M REUSE,
GROUP 3 ( 'F:ORACLEORADATAJSSDUPREDO03.LOG' ) SIZE 20 M REUSE
DATAFILE
'F:ORACLEORADATAJSSDUPSYSTEM01.DBF'
CHARACTER SET ZHS16GBK
記憶體指令碼的內容:
{
switch clone datafile all;
}
正在執行記憶體指令碼
釋放的通道: ORA_AUX_DISK_1
資料檔案 2 已轉換成資料檔案副本
輸入資料檔案副本 recid=1 stamp=636742551 檔名=F:ORACLEORADATAJSSDUPUNDOTBS01.DBF
資料檔案 3 已轉換成資料檔案副本
輸入資料檔案副本 recid=2 stamp=636742551 檔名=F:ORACLEORADATAJSSDUPSYSAUX01.DBF
資料檔案 4 已轉換成資料檔案副本
輸入資料檔案副本 recid=3 stamp=636742551 檔名=F:ORACLEORADATAJSSDUPJSSWEB.DBF
資料檔案 5 已轉換成資料檔案副本
輸入資料檔案副本 recid=4 stamp=636742552 檔名=F:ORACLEORADATAJSSDUPUSERS01.DBF
記憶體指令碼的內容:
{
recover
clone database
noredo
,
delete archivelog
;
}
正在執行記憶體指令碼
啟動 recover 於 23-10月-07
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=38 devtype=DISK
完成 recover 於 23-10月-07
記憶體指令碼的內容:
{
shutdown clone;
startup clone nomount ;
}
正在執行記憶體指令碼
資料庫已解除安裝
Oracle 例項已關閉
已連線到輔助資料庫 (未啟動)
Oracle 例項已啟動
系統全域性區域總計 285212672 位元組
Fixed Size 1248552 位元組
Variable Size 226493144 位元組
Database Buffers 50331648 位元組
Redo Buffers 7139328 位元組
sql 語句: CREATE CONTROLFILE REUSE SET DATABASE "JSSDUP" RESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 ( 'F:ORACLEORADATAJSSDUPREDO01.LOG' ) SIZE 20 M REUSE,
GROUP 2 ( 'F:ORACLEORADATAJSSDUPREDO02.LOG' ) SIZE 20 M REUSE,
GROUP 3 ( 'F:ORACLEORADATAJSSDUPREDO03.LOG' ) SIZE 20 M REUSE
DATAFILE
'F:ORACLEORADATAJSSDUPSYSTEM01.DBF'
CHARACTER SET ZHS16GBK
記憶體指令碼的內容:
{
set newname for tempfile 1 to
"F:ORACLEORADATAJSSDUPTEMP01.DBF";
switch clone tempfile all;
catalog clone datafilecopy "F:ORACLEORADATAJSSDUPUNDOTBS01.DBF";
catalog clone datafilecopy "F:ORACLEORADATAJSSDUPSYSAUX01.DBF";
catalog clone datafilecopy "F:ORACLEORADATAJSSDUPJSSWEB.DBF";
catalog clone datafilecopy "F:ORACLEORADATAJSSDUPUSERS01.DBF";
switch clone datafile all;
}
正在執行記憶體指令碼
正在執行命令: SET NEWNAME
臨時檔案 1 在控制檔案中已重新命名為 F:ORACLEORADATAJSSDUPTEMP01.DBF
已將資料檔案副本列入目錄
資料檔案副本 filename=F:ORACLEORADATAJSSDUPUNDOTBS01.DBF recid=1 stamp=636742564
已將資料檔案副本列入目錄
資料檔案副本 filename=F:ORACLEORADATAJSSDUPSYSAUX01.DBF recid=2 stamp=636742564
已將資料檔案副本列入目錄
資料檔案副本 filename=F:ORACLEORADATAJSSDUPJSSWEB.DBF recid=3 stamp=636742564
已將資料檔案副本列入目錄
資料檔案副本 filename=F:ORACLEORADATAJSSDUPUSERS01.DBF recid=4 stamp=636742565
資料檔案 2 已轉換成資料檔案副本
輸入資料檔案副本 recid=1 stamp=636742564 檔名=F:ORACLEORADATAJSSDUPUNDOTBS01.DBF
資料檔案 3 已轉換成資料檔案副本
輸入資料檔案副本 recid=2 stamp=636742564 檔名=F:ORACLEORADATAJSSDUPSYSAUX01.DBF
資料檔案 4 已轉換成資料檔案副本
輸入資料檔案副本 recid=3 stamp=636742564 檔名=F:ORACLEORADATAJSSDUPJSSWEB.DBF
資料檔案 5 已轉換成資料檔案副本
輸入資料檔案副本 recid=4 stamp=636742565 檔名=F:ORACLEORADATAJSSDUPUSERS01.DBF
記憶體指令碼的內容:
{
Alter clone database open resetlogs;
}
正在執行記憶體指令碼
資料庫已開啟
完成 Duplicate Db 於 23-10月-07
RMAN>
連線到副本資料庫驗證一下資料:
F:oracle>set oracle_sid=jssdup
F:oracle>sqlplus jss/jss
SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 10月 23 16:56:32 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 *from tab where tname like 'JSS%' and rownum<9;
未選定行
SQL>
同步成功鳥:)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-22303/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用RMAN複製資料庫 active database資料庫Database
- MongoDB高階應用之資料轉存與恢復(5)MongoDB
- MongoDB高階應用之資料轉存與恢復MongoDB
- 資料庫複製(一)–複製介紹資料庫
- DM7資料複製之資料庫級複製資料庫
- postgresql高階應用之合併單元格SQL
- MySQL高可用之組複製技術(3):配置多主模型的組複製MySql模型
- MySQL高可用之組複製技術(2):配置單主模型的組複製MySql模型
- 資料庫主從複製資料庫
- Oracle 11G RAC複製備庫RMAN-03002 RMAN-05501 RMAN-03015 RMAN-03009 RMAN-10038Oracle
- mysql資料庫常用命令(補充)MySql資料庫
- RMAN Duplicate RAC to Single Instance
- 資料庫習題高階資料庫
- MongoDB高階應用之高可用方案實戰(4)MongoDB
- postgresql高階應用之行轉列&彙總求和SQL
- rman duplicate操作手冊
- Python高階 -- 07 MySQL資料庫PythonMySql資料庫
- MySQL 的主從複製(高階篇)MySql
- Mysql(Mariadb)資料庫主從複製MySql資料庫
- dimitri/pgcopydb:Postgres資料庫複製工具MITGC資料庫
- python資料庫-MySQL資料庫高階查詢操作(51)Python資料庫MySql
- 用rman遷移資料庫資料庫
- 使用RMAN備份資料庫資料庫
- Oracle rman duplicate遷移測試Oracle
- 【DG】備庫RMAN還原方式搭建DG(不使用duplicate命令)
- MySQL進階:主主複製+Keepalived高可用MySql
- Markdown高階使用之流程圖流程圖
- mysql資料庫的主從複製和主主複製實踐MySql資料庫
- [20181128]toad連線資料庫的問題(補充).txt資料庫
- Django筆記三十七之多資料庫操作(補充版)Django筆記資料庫
- [20211009]8K資料庫最大行號補充.txt資料庫
- mysql資料庫實現主從複製MySql資料庫
- 分散式資料庫的複製原理 - Quastor分散式資料庫AST
- 架構設計(二):資料庫複製架構資料庫
- 並推出了關係型資料庫功能來補充其核心NoSQL資料庫功能資料庫SQL
- 利用RMAN備份重建資料庫資料庫
- 3.1.1.2 使用RMAN啟動資料庫資料庫
- 資料庫高階查詢之子查詢資料庫
- 資料共享(淺複製)與資料獨立(深複製)