半自動化搭建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
- 【DG】Data Guard搭建(physical standby)
- 自動化測試的另外一個想法
- (想法 2)此貼討論一下 UI 自動化個人的一個想法UI
- Oracle Data Guard和Broker概述Oracle
- 視覺化搭建的一些思考和實踐視覺化
- 12c data guard 使用 sqlplus 主備切換最佳實踐SQL
- 自動化測試的最佳實踐
- 2 開始實用 Oracle Data GuardOracle
- 主備庫記憶體不一致的Data Guard環境搭建記憶體
- 一鍵實現自動化部署(灰度釋出)實踐
- DevOps 自動化實踐:提升效率的 Botdev
- 自動化運維工具ansible的實踐運維
- API自動化測試實踐API
- A Oracle Data Guard Broker 升級和降級Oracle
- 利用Python實現微信半自動化操作!Python
- 需要了解的Data Guard理論知識(一)
- Oracle Data Guard Broker元件Oracle元件
- Oracle Data Guard簡介Oracle
- dom xss->半自動化
- Android手機QQ的UI自動化實踐AndroidUI
- 測試自動化中遵循的最佳實踐
- 介面自動化實戰之框架搭建框架
- Webpack自動化構建實踐指南Web
- fastlane 自動化打包工具實踐AST
- 前端自動化混沌測試實踐前端
- UI自動化測試工程實踐UI
- 自動化測試實踐總結
- Selenium 自動化最佳實踐技巧 (中)
- 自動化測試框架選型和落地實踐路徑框架
- 微眾銀行 TiDB HTAP 和自動化運維實踐TiDB運維
- 活動運營自動化平臺實踐
- 【小程式自動化Minium】一、框架介紹和環境搭建框架
- Oracle Data Guard Feature 12cR2系列(一)Oracle
- 【ASK_ORACLE】Oracle Data Guard(一)DG架構Oracle架構
- 介面自動化測試的最佳工程實踐(ApiTestEngine)API
- 基於postman的api自動化測試實踐PostmanAPI
- UI自動化技術在高德的實踐UI
- 降本增效下的自動化測試實踐