Data Guard搭建困境突围(一)
生活随笔
收集整理的這篇文章主要介紹了
Data Guard搭建困境突围(一)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在Oracle 10g的中搭建Data Guard環境真是一個糾結,目前大體都是采用兩種方式,一種是rman備份,一種是duplicate的方式,但是這兩個地方不夠讓我滿意,一來是rman備份數據量不小,需要先在本地生成備份,然后拷貝到備庫去,這個搭建周期略長,另外一個就是推薦的方式duplicate,在10g中有些雞肋的味道,本地備份,然后拷貝到備庫,然后動用duplicate的方式,這樣的方式還不如手工rman的方式同步來得順心順意,所以在10g中我是不怎么喜歡duplicate方式。當然11g終于改進了一把,這種方式成了我搭建Data Guard的不可之選。
???? 最近碰到一個比較糾結的問題就是在主備庫空間資源不足的情況下,如何在10g版本中順利搭建Data Guard環境。大體的情況如下:
????主備庫的文件分布略有一些差別,數據庫數據量大概在800G左右,數據庫版本為10gR2.
這讓我很糾結,到底該怎么處理,一來是文件的路徑映射,至少Oracle的convert參數還處理不了這么智能,如何這么平均的分配空間和數據。所以哪怕備庫的空間總量夠,我還是懸著心,這個需求至少通過rman的異機恢復還是有難度。那么試試duplicate,當然我們知道文件路徑可以重新修改,所以主要的問題還是在于空間,10g的duplicate需要在主庫端生成備份集,然后在備庫開啟duplicate選項而已。所以實現起來還是有難度。
??? Oracle如何通過rman的方式實現遠程備份,這是個難題,如果是在11g可能這個問題就能夠大大化和,在10g上如何突圍呢。
假設數據庫主庫為primary,備庫為standby
則我在備庫嘗試使用下面的方式,我們在/home/oracle/下創建一個臨時目錄tmp,看看到底能夠在備庫環境生成。
rman target sys/oracle@primary
COPY DATAFILE 1 to '/home/oracle/tmp/system01.dbf';
運行時提示文件無法創建,因為在服務器主庫環境沒有這個目錄。所以初戰失敗。
然后嘗試使用duplicate的方式。
rman target sys/oracle@primaryauxiliary sys/oracle@standby nocatalog
這種方式是我們一直使用的方式,當然這種方式沒有給我帶來任何驚喜,依舊是在當前環境不大適合。
在備庫端我們可以這么試試。
rman target sys/oracle@standby auxiliary sys/oracle@primary? nocatalog
COPY DATAFILE 1 to '/home/oracle/tmp/system01.dbf';
這種方式就可以順利在備庫端生成系統表空間的數據文件了。
所以我們的改進方式就是參考這個主要的 解決思路。
當然我們可以在主庫生成相應的命令,直接批量執行即可。假設我們存在下面的數據文件。
?select 'copy datafile '||file_id ||' to '||chr(39)||file_name ||chr(39)||';'from dba_data_files;
copy datafile 4 to '/U01/app/oracle/oradata/newtest2/users01.dbf';
copy datafile 3 to '/U01/app/oracle/oradata/newtest2/undotbs01.dbf';
copy datafile 2 to '/U01/app/oracle/oradata/newtest2/sysaux01.dbf';
copy datafile 1 to '/U01/app/oracle/oradata/newtest2/system01.dbf';
copy datafile 5 to '/U01/app/oracle/oradata/newtest2/users2.dbf';
copy datafile 6 to '/U01/app/oracle/oradata/newtest2/fbarch01.dbf';
以其中的兩個數據文件為例,日志如下:
RMAN> copy datafile 5 to '/home/oracle/tmp/users2.dbf';
Starting backup at 2016-09-09 22:46:30
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00005 name=/U01/app/oracle/oradata/newtest2/users2.dbf
output file name=/home/oracle/tmp/users2.dbf tag=TAG20160909T224630 RECID=28 STAMP=922142791
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 2016-09-09 22:46:32
RMAN> copy datafile 6 to '/home/oracle/tmp/fbarch01.dbf';
Starting backup at 2016-09-09 22:46:39
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00006 name=/U01/app/oracle/oradata/newtest2/fbarch01.dbf
output file name=/home/oracle/tmp/fbarch01.dbf tag=TAG20160909T224639 RECID=29 STAMP=922142800
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 2016-09-09 22:46:40
在主備庫數據文件路徑的情況下,就批量生成一個文件就可以立刻在備庫使用。如果確認生成沒有問題,直接拷貝覆蓋原來備庫文件,或者直接替換已有的備庫數據文件即可。
DGMGRL> show configuration;
Configuration - dg_newtest2
? Protection Mode: MaxPerformance
? Databases:
??? primaryxx- Primary database
??? standbyxx- Physical standby database
Fast-Start Failover: DISABLED
Configuration Status
SUCCESS
在10g中其實已經可以這樣使用duplicate的方式來,但是Oracle卻沒有建議這么用,我覺得主要的考慮還是安全吧。
10g中這樣用: Duplicate target database for standby nofilenamecheck ;
11g中這樣用:Duplicate target database for standby from active database nofilenamecheck
可以看出主要的差別還是一個active的字樣,我看到有很多人搭建Data Guard在主庫端duplicate,這樣在10g就很不規范而且有一定的風險。
盡管在11g做了這樣的改進,但是還是很容易混淆關系,這也是我猜測的原因,當然手頭的工作就是嘗試在這種情況下盡快使用新方案搭建Data Guard環境。
當然對于很多老司機來說,這已經不是什么新方法了。
???? 最近碰到一個比較糾結的問題就是在主備庫空間資源不足的情況下,如何在10g版本中順利搭建Data Guard環境。大體的情況如下:
????主備庫的文件分布略有一些差別,數據庫數據量大概在800G左右,數據庫版本為10gR2.
這讓我很糾結,到底該怎么處理,一來是文件的路徑映射,至少Oracle的convert參數還處理不了這么智能,如何這么平均的分配空間和數據。所以哪怕備庫的空間總量夠,我還是懸著心,這個需求至少通過rman的異機恢復還是有難度。那么試試duplicate,當然我們知道文件路徑可以重新修改,所以主要的問題還是在于空間,10g的duplicate需要在主庫端生成備份集,然后在備庫開啟duplicate選項而已。所以實現起來還是有難度。
??? Oracle如何通過rman的方式實現遠程備份,這是個難題,如果是在11g可能這個問題就能夠大大化和,在10g上如何突圍呢。
假設數據庫主庫為primary,備庫為standby
則我在備庫嘗試使用下面的方式,我們在/home/oracle/下創建一個臨時目錄tmp,看看到底能夠在備庫環境生成。
rman target sys/oracle@primary
COPY DATAFILE 1 to '/home/oracle/tmp/system01.dbf';
運行時提示文件無法創建,因為在服務器主庫環境沒有這個目錄。所以初戰失敗。
然后嘗試使用duplicate的方式。
rman target sys/oracle@primaryauxiliary sys/oracle@standby nocatalog
這種方式是我們一直使用的方式,當然這種方式沒有給我帶來任何驚喜,依舊是在當前環境不大適合。
在備庫端我們可以這么試試。
rman target sys/oracle@standby auxiliary sys/oracle@primary? nocatalog
COPY DATAFILE 1 to '/home/oracle/tmp/system01.dbf';
這種方式就可以順利在備庫端生成系統表空間的數據文件了。
所以我們的改進方式就是參考這個主要的 解決思路。
當然我們可以在主庫生成相應的命令,直接批量執行即可。假設我們存在下面的數據文件。
?select 'copy datafile '||file_id ||' to '||chr(39)||file_name ||chr(39)||';'from dba_data_files;
copy datafile 4 to '/U01/app/oracle/oradata/newtest2/users01.dbf';
copy datafile 3 to '/U01/app/oracle/oradata/newtest2/undotbs01.dbf';
copy datafile 2 to '/U01/app/oracle/oradata/newtest2/sysaux01.dbf';
copy datafile 1 to '/U01/app/oracle/oradata/newtest2/system01.dbf';
copy datafile 5 to '/U01/app/oracle/oradata/newtest2/users2.dbf';
copy datafile 6 to '/U01/app/oracle/oradata/newtest2/fbarch01.dbf';
以其中的兩個數據文件為例,日志如下:
RMAN> copy datafile 5 to '/home/oracle/tmp/users2.dbf';
Starting backup at 2016-09-09 22:46:30
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00005 name=/U01/app/oracle/oradata/newtest2/users2.dbf
output file name=/home/oracle/tmp/users2.dbf tag=TAG20160909T224630 RECID=28 STAMP=922142791
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 2016-09-09 22:46:32
RMAN> copy datafile 6 to '/home/oracle/tmp/fbarch01.dbf';
Starting backup at 2016-09-09 22:46:39
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00006 name=/U01/app/oracle/oradata/newtest2/fbarch01.dbf
output file name=/home/oracle/tmp/fbarch01.dbf tag=TAG20160909T224639 RECID=29 STAMP=922142800
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 2016-09-09 22:46:40
在主備庫數據文件路徑的情況下,就批量生成一個文件就可以立刻在備庫使用。如果確認生成沒有問題,直接拷貝覆蓋原來備庫文件,或者直接替換已有的備庫數據文件即可。
DGMGRL> show configuration;
Configuration - dg_newtest2
? Protection Mode: MaxPerformance
? Databases:
??? primaryxx- Primary database
??? standbyxx- Physical standby database
Fast-Start Failover: DISABLED
Configuration Status
SUCCESS
在10g中其實已經可以這樣使用duplicate的方式來,但是Oracle卻沒有建議這么用,我覺得主要的考慮還是安全吧。
10g中這樣用: Duplicate target database for standby nofilenamecheck ;
11g中這樣用:Duplicate target database for standby from active database nofilenamecheck
可以看出主要的差別還是一個active的字樣,我看到有很多人搭建Data Guard在主庫端duplicate,這樣在10g就很不規范而且有一定的風險。
盡管在11g做了這樣的改進,但是還是很容易混淆關系,這也是我猜測的原因,當然手頭的工作就是嘗試在這種情況下盡快使用新方案搭建Data Guard環境。
當然對于很多老司機來說,這已經不是什么新方法了。
總結
以上是生活随笔為你收集整理的Data Guard搭建困境突围(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring学习总结(18)——Spri
- 下一篇: Swift 3 新特性