dataguard備庫的資料檔案的遷移實戰
在前幾天也花了一點時間測試了一下關於備庫資料檔案的遷移,這部分的工作看起來還是比較常規的,當然方法也很多。但是在實際工作中就更不能掉以輕心,所有的操作都要有理有據。都要經過一些嚴格的測試,如果測試不當,很可能在後期就會出現一些看似奇怪的問題,造成一些不必要的麻煩和影響。
所以在開始之前,做了下面的準備工作。
1.在zabbix中設定了維護視窗,這樣在維護操作中就不會報警。
2.檢查目前的備庫引數設定,是否開啟了閃回區,目前的檔案路徑設定情況和歸檔情況
3.檢查目標檔案路徑的情況,涉及許可權,資料夾屬主,大小等
4.準備完整的指令碼,估算時間。
第一步中,設定維護視窗的方式如下,加入對應的機器就萬事大吉了。
第二步中備庫沒有設定db_file_name_convert和log_file_name_convert,所以說是預設按照主庫的路徑來生成的。
檢查閃回區竟然沒有開啟,還是不太規範,都是指定使用了歸檔路徑。
SQL> show parameter recovery
NAME TYPE VALUE
------------------------------------ ----------- ------
db_recovery_file_dest string
db_recovery_file_dest_size big integer 0
SQL> show parameter log_archive_dest
NAME TYPE VALUE
------------------------------------ ----------- ----------
log_archive_dest string
log_archive_dest_1 string location="/U01/app/oracle/admin/testdb/arch", valid_for=(ALL_LOGFILES,ALL_ROLES)
對此的產出指令碼如下:
alter system set db_recovery_file_dest='/U01/app/oracle/admin/testdb/arch' scope=spfile;
alter system set db_recovery_file_dest_size=100G;
alter system log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST' scope=spfile;
對於資料檔案和日誌檔案的路徑切換
alter system set db_file_name_convert='/U01/app/oracle/oradata/testdb','/DATA/testdb' scope=spfile;
alter system set log_file_name_convert='/U01/app/oracle/oradata/testdb,/Redo/testdb' scope=spfile;
第三步中
磁碟空間情況如下,許可權屬主都沒有問題。
$ df -h
Filesystem Size Used Avail Use% Mounted on
。。。
/dev/sda6 510G 393G 92G 82% /U01
/dev/sdc1 733G 197M 696G 1% /DATA
/dev/sdb2 534G 198M 506G 1% /Redo
。。。
第四步中,如果採用rman的方式遷移資料檔案就需要提前準備指令碼。可以使用如下的方式生成動態指令碼。
select 'COPY DATAFILE '||file#||' to '||chr(39)||name||chr(39)||';'||chr(10)
||' switch datafile '||file#||' to copy;'||chr(10)
||' sql '||chr(39)||'alter database datafile '||file#||' online;' from v$datafile;
生成內容如下:
COPY DATAFILE 5 to '/DATA/testdb/acc_data01.dbf';
switch datafile 5 to copy;
sql 'alter database datafile 5 online;
。。。
準備好指令碼就開始實踐了。
因為這個操作有些引數需要重啟生效,而且這套環境是一主兩備,所以重啟暫時沒有什麼風險。因為考慮到修改convert引數會導致dg broker檢查失敗,需要修改dg broker的引數,如此一來還不如直接做remove操作,遷移完成直接再add database即可,也就免去了更多的屬性修改設定。
所以部署指令碼如下:
remove database stestdb2; --在dg broker中操作
alter system set db_recovery_file_dest='/U01/app/oracle/admin/testdb/arch' scope=spfile;
alter system set db_recovery_file_dest_size=100G;
alter system set log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST' scope=spfile;
alter system set db_file_name_convert='/U01/app/oracle/oradata/testdb','/DATA/testdb' scope=spfile;
alter system set log_file_name_convert='/U01/app/oracle/oradata/testdb','/Redo/testdb' scope=spfile;
重啟資料庫例項至mount階段
然後就準備開始rman遷移檔案了。
但是剛開始就碰到一些意料之外的事情。遷移的時候竟然提示找不到檔案。
RMAN> COPY DATAFILE 1 to '/DATA/testdb/system01.dbf';
Starting backup at 2016-02-29 10:47:21
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=6596 devtype=DISK
could not read file header for datafile 1 error reason 4
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup command at 02/29/2016 10:47:21
RMAN-06056: could not access datafile 1
經過一番排查發現原來在v$datafile裡,檔案路徑已經根據db_file_name_convert變成了最新的路徑了。
即原來的路徑
FILE_NAME
------------------------------------------------------------
/U01/app/oracle/oradata/testdb/users01.dbf
/U01/app/oracle/oradata/testdb/sysaux01.dbf
/U01/app/oracle/oradata/testdb/undotbs01.dbf
在重啟之後v$datafile裡面已經變成了下面的樣子。
FILE_NAME
------------------------------------------------------------
/DATA/testdb/users01.dbf
/DATA/testdb/sysaux01.dbf
/DATA/testdb/undotbs01.dbf
當然這部分資訊在官方文件中也是有出處的。可以參考http://www.di.unipi.it/~ghelli/didattica/bdldoc/B19306_01/backup.102/b14191/rcmdupdb002.htm
對於這部分內容,還是會有一個優先順序設定。按理說這部分資訊是寫在控制檔案中的。沒想到通過convert的資料看引數應優先生成了。
那麼我們需要做的事情就更簡單了。只需要作業系統級拷貝資料檔案即可。
拷貝完成之後,在dg broker中新增這個例項即可。
add database stestdb2 as
connect identifier is stestdb2
maintained as physical;
enable database stestdb2;
看似一個略帶複雜的遷移就這麼輕鬆完成了,感覺做什麼技術含量的事情,前期準備充足,在碰到問題的時候才會更加從容。
所以在開始之前,做了下面的準備工作。
1.在zabbix中設定了維護視窗,這樣在維護操作中就不會報警。
2.檢查目前的備庫引數設定,是否開啟了閃回區,目前的檔案路徑設定情況和歸檔情況
3.檢查目標檔案路徑的情況,涉及許可權,資料夾屬主,大小等
4.準備完整的指令碼,估算時間。
第一步中,設定維護視窗的方式如下,加入對應的機器就萬事大吉了。
第二步中備庫沒有設定db_file_name_convert和log_file_name_convert,所以說是預設按照主庫的路徑來生成的。
檢查閃回區竟然沒有開啟,還是不太規範,都是指定使用了歸檔路徑。
SQL> show parameter recovery
NAME TYPE VALUE
------------------------------------ ----------- ------
db_recovery_file_dest string
db_recovery_file_dest_size big integer 0
SQL> show parameter log_archive_dest
NAME TYPE VALUE
------------------------------------ ----------- ----------
log_archive_dest string
log_archive_dest_1 string location="/U01/app/oracle/admin/testdb/arch", valid_for=(ALL_LOGFILES,ALL_ROLES)
對此的產出指令碼如下:
alter system set db_recovery_file_dest='/U01/app/oracle/admin/testdb/arch' scope=spfile;
alter system set db_recovery_file_dest_size=100G;
alter system log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST' scope=spfile;
對於資料檔案和日誌檔案的路徑切換
alter system set db_file_name_convert='/U01/app/oracle/oradata/testdb','/DATA/testdb' scope=spfile;
alter system set log_file_name_convert='/U01/app/oracle/oradata/testdb,/Redo/testdb' scope=spfile;
第三步中
磁碟空間情況如下,許可權屬主都沒有問題。
$ df -h
Filesystem Size Used Avail Use% Mounted on
。。。
/dev/sda6 510G 393G 92G 82% /U01
/dev/sdc1 733G 197M 696G 1% /DATA
/dev/sdb2 534G 198M 506G 1% /Redo
。。。
第四步中,如果採用rman的方式遷移資料檔案就需要提前準備指令碼。可以使用如下的方式生成動態指令碼。
select 'COPY DATAFILE '||file#||' to '||chr(39)||name||chr(39)||';'||chr(10)
||' switch datafile '||file#||' to copy;'||chr(10)
||' sql '||chr(39)||'alter database datafile '||file#||' online;' from v$datafile;
生成內容如下:
COPY DATAFILE 5 to '/DATA/testdb/acc_data01.dbf';
switch datafile 5 to copy;
sql 'alter database datafile 5 online;
。。。
準備好指令碼就開始實踐了。
因為這個操作有些引數需要重啟生效,而且這套環境是一主兩備,所以重啟暫時沒有什麼風險。因為考慮到修改convert引數會導致dg broker檢查失敗,需要修改dg broker的引數,如此一來還不如直接做remove操作,遷移完成直接再add database即可,也就免去了更多的屬性修改設定。
所以部署指令碼如下:
remove database stestdb2; --在dg broker中操作
alter system set db_recovery_file_dest='/U01/app/oracle/admin/testdb/arch' scope=spfile;
alter system set db_recovery_file_dest_size=100G;
alter system set log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST' scope=spfile;
alter system set db_file_name_convert='/U01/app/oracle/oradata/testdb','/DATA/testdb' scope=spfile;
alter system set log_file_name_convert='/U01/app/oracle/oradata/testdb','/Redo/testdb' scope=spfile;
重啟資料庫例項至mount階段
然後就準備開始rman遷移檔案了。
但是剛開始就碰到一些意料之外的事情。遷移的時候竟然提示找不到檔案。
RMAN> COPY DATAFILE 1 to '/DATA/testdb/system01.dbf';
Starting backup at 2016-02-29 10:47:21
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=6596 devtype=DISK
could not read file header for datafile 1 error reason 4
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup command at 02/29/2016 10:47:21
RMAN-06056: could not access datafile 1
經過一番排查發現原來在v$datafile裡,檔案路徑已經根據db_file_name_convert變成了最新的路徑了。
即原來的路徑
FILE_NAME
------------------------------------------------------------
/U01/app/oracle/oradata/testdb/users01.dbf
/U01/app/oracle/oradata/testdb/sysaux01.dbf
/U01/app/oracle/oradata/testdb/undotbs01.dbf
在重啟之後v$datafile裡面已經變成了下面的樣子。
FILE_NAME
------------------------------------------------------------
/DATA/testdb/users01.dbf
/DATA/testdb/sysaux01.dbf
/DATA/testdb/undotbs01.dbf
當然這部分資訊在官方文件中也是有出處的。可以參考http://www.di.unipi.it/~ghelli/didattica/bdldoc/B19306_01/backup.102/b14191/rcmdupdb002.htm
對於這部分內容,還是會有一個優先順序設定。按理說這部分資訊是寫在控制檔案中的。沒想到通過convert的資料看引數應優先生成了。
那麼我們需要做的事情就更簡單了。只需要作業系統級拷貝資料檔案即可。
拷貝完成之後,在dg broker中新增這個例項即可。
add database stestdb2 as
connect identifier is stestdb2
maintained as physical;
enable database stestdb2;
看似一個略帶複雜的遷移就這麼輕鬆完成了,感覺做什麼技術含量的事情,前期準備充足,在碰到問題的時候才會更加從容。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2017314/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- dataguard備庫的資料檔案的遷移
- 資料庫檔案的遷移資料庫
- dataguard之邏輯備庫移動資料檔案
- 使用資料庫冷備份方式進行資料庫遷移,資料庫檔案遷移到不同的目錄資料庫
- 資料檔案的遷移
- Oracle資料庫(DataGuard)遷移方案(上)Oracle資料庫
- Oracle資料庫(DataGuard)遷移方案(中)Oracle資料庫
- Oracle資料庫(DataGuard)遷移方案(下)Oracle資料庫
- 資料庫的冷備份遷移資料庫
- 遷移資料庫檔案到ASM資料庫ASM
- dataguard之物理備庫丟失資料檔案
- 資料檔案遷移
- 遷移資料庫的檔案到不同路徑(轉)資料庫
- 達夢資料庫資料檔案遷移過程資料庫
- dataguard之主庫增加資料檔案--物理備庫相應的調整(一)
- 【資料遷移】RMAN遷移資料庫到ASM(二)切換資料檔案到ASM資料庫ASM
- oracle 資料檔案遷移Oracle
- oracle資料檔案遷移Oracle
- dataguard之主庫增加資料檔案--邏輯備庫相應的調整(二)
- 一、rman 資料庫遷移--從檔案系統到檔案系統用預設的備份路徑資料庫
- Oracle_遷移資料檔案Oracle
- 利用拷貝data目錄檔案的方式遷移mysql資料庫MySql資料庫
- 使用RMAN遷移檔案系統資料庫到ASM資料庫ASM
- mongodb資料庫備份與恢復(資料庫資料遷移)MongoDB資料庫
- 透過rman全庫備份遷移資料庫資料庫
- 資料庫課程作業筆記 - 編寫資料庫遷移檔案資料庫筆記
- 【遷移】使用rman遷移資料庫資料庫
- dataguard利用從庫的檔案恢復主庫發生異常的資料檔案。
- 用rman建立dataguard備用資料庫繼續(無法找到備份檔案)資料庫
- 資料庫遷移資料庫
- Mysql百萬級資料遷移,怎麼遷移?實戰過沒?MySql
- 用rman從檔案系統遷移資料庫到asm資料庫ASM
- 資料庫遷移之資料泵實驗資料庫
- 如何遷移ASM資料檔案到檔案系統ASM
- Datapump資料遷移前的準備工作
- windows下oracle資料檔案的遷移和規範WindowsOracle
- ORM實操之資料庫遷移ORM資料庫
- 線上遷移表空間資料檔案