半自動化搭建Data Guard的想法和實踐(一)
一直以來搭建Data Guard是一件看起來還蠻有含量的工作,因為這其中涉及的工作比較瑣碎,比較細,況且手工搭建起來都會碰到各種各樣的問題,如果中途碰到一點兒小問題,那可能需要花點時間來排查,如果想要指令碼自動化,那簡直寸步難行。所以搭建Data Guard一方面會需要很多的提前準備和配置,另一方面這個工作自動化的驅動力不夠,畢竟環境不會像MySQL業務一樣動輒幾十成百上千的規模,所以由此而來,好像搭建一個套環境的成本也值了,如果嘗試自動化,半自動化,那花費的時間估計夠搭建10套環境了。所以目前來看,行業內也鮮有自動化搭建的案例。
當然如果一件事情本來你需要花2個小時搞定,結果花了10分鐘就能搞定,那麼對於工作來說,這就是一種福利了,另一方面從規範角度來看,自動化,半自動化,一個重要的基礎就是標準化,規範化。這些基礎做不好,那麼自動化,半自動化也是磕磕絆絆。所以我也是借這個機會來完善規範一些我們做的不好的地方。舉個例子來說明就具體多了。
我在備庫配置網路的時候,把主庫的listener.ora複製到備庫,修改了HOST資訊,就準備啟動監聽,但是奇怪的是監聽怎麼都啟動不了。錯誤資訊如下:
$ lsnrctl start LISTENER_1529
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 28-JUL-2016 16:37:17
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Starting /U01/app/oracle/product/11.2.0.4/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 11.2.0.4.0 - Production
System parameter file is /U01/app/oracle/product/11.2.0.4/network/admin/listener.ora
Log messages written to /U01/app/oracle/diag/tnslsnr/stest3/listener_1529/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=stest3.cyou.com)(PORT=1529)))
TNS-01201: Listener cannot find executable /U01/app/oracle/product/11.2.0.4/db_1/bin/oracle for SID test
Listener failed to start. See the error message(s) above...
對於網路監聽這塊,本身Oracle的解析就有些不是很健壯的地方,有些空格的約束問題,更多的細節,可以參考http://blog.itpub.net/23718752/viewspace-1061787/
所以根據錯誤,看起來和空格還沒有關係,但是我排除再三,排除了字符集,空格,DB資訊錯誤等,還是沒有找到問題的癥結。一籌莫展的時候,突然發現listener.ora中的ORACLE_HOME為/U01/app/oracle/product/11.2.0.4/db_1,在主庫則為/U01/app/oracle/product/11.2.0.4,最後發現是這樣一個問題,看起來著實讓人有些無奈。而這種問題說實在的解決了對自己的技術提高有多少,我看未必,但是又厄待解決。
所以這也更加堅定了我簡化Data Guard配置的一個決心。
而另外一個考慮就是基於安全和指令碼的健壯性,我決定使用半自動化搭建的方式,主庫就是主庫,容不得半點失誤,所以我不會考慮在主動自動化執行任何的指令碼,指令碼都需要確認稽核後執行,對於配置的新增和修改尤其需要注意,而對於備庫而言,自動化則大有可為,所以我需要在主庫中獲取一些基本的後設資料檔案(比如listener.ora之類的檔案),改進處理後放入備庫。大體的流程圖如下:
首先第1步就是從主庫中獲取這些後設資料檔案,只有抓取,沒有任何寫入。
第二步是在中控機器中進行後設資料檔案的處理,這大體涉及以下幾個方面:
1. 在tnsnames.ora中新增備庫的tns連線串,修改host
2.istener.ora修改host為備庫主機名
3. hosts中追加主機名的配置
4. 新增db_unique_name到引數檔案中
5. 新增local_listener
6. 新增dg_broker_start
7. 新增standby_file_management=auto
8. 新增db_file_name_convert
9. 新增log_file_name_convert
10.開通主備庫的防火牆許可權
第三步則是在主庫中進行配置,大體有如下的工作:
1.修改/etc/hosts,追加備庫的配置
10.127.133.190 stest2.cyou.com
2. 追加配置到tnsnames.ora,修改host為主機名
stest2=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = stest2.cyou.com)(PORT = 1529))) (CONNECT_DATA = (SERVICE_NAME = test)(server=dedicated)))
3.檢查主庫是否force logging,是否含有standby logfile,是否啟用spfile,是否啟用dg broker,是否設定local_listener
第四步則是把生成的檔案,指令碼複製到備庫端,在備庫執行部署。有下面的一些工作需要考慮。
1./sbin/ifconfig得到IP 根據db名改為主機名
生成類似下面的形式,
IP <db_unique_name><dg_number>.oracle.com
10.127.133.190 stest2.oracle.com
2.追加主庫的配置
10.127.xxxx test.oracle.com --參考主庫的/etc/hosts
3.hostname stest2.cyou.com
4.修改 /etc/sysconfig/network
5.建立必要的目錄結構,比如審計日誌的目錄(基於引數audit_file_dest)
6.啟動監聽
這些步驟做好了之後,80%的工作就完成了。我們就可以看看怎麼來搭建備庫了。一種方式是使用duplicate來線上從頭主庫同步資料到備庫,這種方式簡單快捷,也是推薦的方式。
兩個命令即可搞定。
rman target sys@test auxiliary sys/xxxx@stest2 nocatalog
duplicate target database for standby from active database nofilenamecheck;
這些工作都完成了,就完成了90%,還剩下最後一步,即配置DG Broker,這個是作為一個基本的標準規範,省時省力。
在主庫執行兩個命令即可搞定,這個步驟手動完成,因為是最後的收官階段,一旦有問題,這個階段一定會丟擲異常。
create configuration dg_test as
primary database is test
connect identifier is test;
add database stest2 as
connect identifier is test2
maintained as physical;
指令碼已經開始寫了,感覺越寫發現有很多的細節需要準備,越是這樣,越覺得這件事情還是值得去做的。
當然如果一件事情本來你需要花2個小時搞定,結果花了10分鐘就能搞定,那麼對於工作來說,這就是一種福利了,另一方面從規範角度來看,自動化,半自動化,一個重要的基礎就是標準化,規範化。這些基礎做不好,那麼自動化,半自動化也是磕磕絆絆。所以我也是借這個機會來完善規範一些我們做的不好的地方。舉個例子來說明就具體多了。
我在備庫配置網路的時候,把主庫的listener.ora複製到備庫,修改了HOST資訊,就準備啟動監聽,但是奇怪的是監聽怎麼都啟動不了。錯誤資訊如下:
$ lsnrctl start LISTENER_1529
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 28-JUL-2016 16:37:17
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Starting /U01/app/oracle/product/11.2.0.4/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 11.2.0.4.0 - Production
System parameter file is /U01/app/oracle/product/11.2.0.4/network/admin/listener.ora
Log messages written to /U01/app/oracle/diag/tnslsnr/stest3/listener_1529/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=stest3.cyou.com)(PORT=1529)))
TNS-01201: Listener cannot find executable /U01/app/oracle/product/11.2.0.4/db_1/bin/oracle for SID test
Listener failed to start. See the error message(s) above...
對於網路監聽這塊,本身Oracle的解析就有些不是很健壯的地方,有些空格的約束問題,更多的細節,可以參考http://blog.itpub.net/23718752/viewspace-1061787/
所以根據錯誤,看起來和空格還沒有關係,但是我排除再三,排除了字符集,空格,DB資訊錯誤等,還是沒有找到問題的癥結。一籌莫展的時候,突然發現listener.ora中的ORACLE_HOME為/U01/app/oracle/product/11.2.0.4/db_1,在主庫則為/U01/app/oracle/product/11.2.0.4,最後發現是這樣一個問題,看起來著實讓人有些無奈。而這種問題說實在的解決了對自己的技術提高有多少,我看未必,但是又厄待解決。
所以這也更加堅定了我簡化Data Guard配置的一個決心。
而另外一個考慮就是基於安全和指令碼的健壯性,我決定使用半自動化搭建的方式,主庫就是主庫,容不得半點失誤,所以我不會考慮在主動自動化執行任何的指令碼,指令碼都需要確認稽核後執行,對於配置的新增和修改尤其需要注意,而對於備庫而言,自動化則大有可為,所以我需要在主庫中獲取一些基本的後設資料檔案(比如listener.ora之類的檔案),改進處理後放入備庫。大體的流程圖如下:
首先第1步就是從主庫中獲取這些後設資料檔案,只有抓取,沒有任何寫入。
第二步是在中控機器中進行後設資料檔案的處理,這大體涉及以下幾個方面:
1. 在tnsnames.ora中新增備庫的tns連線串,修改host
2.istener.ora修改host為備庫主機名
3. hosts中追加主機名的配置
4. 新增db_unique_name到引數檔案中
5. 新增local_listener
6. 新增dg_broker_start
7. 新增standby_file_management=auto
8. 新增db_file_name_convert
9. 新增log_file_name_convert
10.開通主備庫的防火牆許可權
第三步則是在主庫中進行配置,大體有如下的工作:
1.修改/etc/hosts,追加備庫的配置
10.127.133.190 stest2.cyou.com
2. 追加配置到tnsnames.ora,修改host為主機名
stest2=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = stest2.cyou.com)(PORT = 1529))) (CONNECT_DATA = (SERVICE_NAME = test)(server=dedicated)))
3.檢查主庫是否force logging,是否含有standby logfile,是否啟用spfile,是否啟用dg broker,是否設定local_listener
第四步則是把生成的檔案,指令碼複製到備庫端,在備庫執行部署。有下面的一些工作需要考慮。
1./sbin/ifconfig得到IP 根據db名改為主機名
生成類似下面的形式,
IP <db_unique_name><dg_number>.oracle.com
10.127.133.190 stest2.oracle.com
2.追加主庫的配置
10.127.xxxx test.oracle.com --參考主庫的/etc/hosts
3.hostname stest2.cyou.com
4.修改 /etc/sysconfig/network
5.建立必要的目錄結構,比如審計日誌的目錄(基於引數audit_file_dest)
6.啟動監聽
這些步驟做好了之後,80%的工作就完成了。我們就可以看看怎麼來搭建備庫了。一種方式是使用duplicate來線上從頭主庫同步資料到備庫,這種方式簡單快捷,也是推薦的方式。
兩個命令即可搞定。
rman target sys@test auxiliary sys/xxxx@stest2 nocatalog
duplicate target database for standby from active database nofilenamecheck;
這些工作都完成了,就完成了90%,還剩下最後一步,即配置DG Broker,這個是作為一個基本的標準規範,省時省力。
在主庫執行兩個命令即可搞定,這個步驟手動完成,因為是最後的收官階段,一旦有問題,這個階段一定會丟擲異常。
create configuration dg_test as
primary database is test
connect identifier is test;
add database stest2 as
connect identifier is test2
maintained as physical;
指令碼已經開始寫了,感覺越寫發現有很多的細節需要準備,越是這樣,越覺得這件事情還是值得去做的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2122705/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 半自動化搭建Data Guard的想法和實踐(二)
- 半自動化搭建Data Guard的想法和實踐(四)
- 半自動化搭建Data Guard的想法和實踐(三)
- Data Guard故障自動切換的想法(r11筆記第40天)筆記
- Data guard搭建
- 容災半自動化的實現思路(一)
- Data Guard搭建困境突圍(一)
- Oracle 12c Data Guard搭建(一)Oracle
- 單機搭建Data Guard
- DATA GUARD部署模式——DATA GUARD概念和管理模式
- 【DG】Data Guard搭建(physical standby)
- RedHat搭建物理Data GuardRedhat
- 搭建Active Data Guard環境
- 介紹ORACLE DATA GUARD——DATA GUARD概念和管理Oracle
- 容災半自動化的實現思路(二)
- 視覺化搭建的一些思考和實踐視覺化
- 容災技術Data Guard搭建
- Oracle RAC + Data Guard 環境搭建Oracle
- 單機上快速搭建一個Data Guard環境
- gulp 前端自動化實踐前端
- 半抄半寫的自動化-知識儲備
- Data Guard Broker系列之二:Data Guard Broker配置實戰
- 自動化測試的最佳實踐
- 利用Python實現微信半自動化操作!Python
- Oracle10g Data Guard (Standby) 理論與實踐Oracle
- 搭建邏輯Data Guard 12c
- Active Data Guard初探(一)
- DATA GUARD架構(一)架構
- 一鍵實現自動化部署(灰度釋出)實踐
- API自動化測試實踐API
- [Data Guard]Oracle10g Data Guard學習筆記(一)Oracle筆記
- Oracle Data Guard和Broker概述Oracle
- Oracle10g Data Guard (Standby) 理論與實踐 2Oracle
- Data guard 配置之搭建物理備庫
- 介面自動化實戰之框架搭建框架
- Webpack自動化構建實踐指南Web
- fastlane 自動化打包工具實踐AST
- 自動化測試實踐總結