如何搭建一个 Data Guard 环境
?
?????? 在Blog里零零散散的講了一些DB 維護的東西,比較雜,也比較散。 這里就Oracle Data Guard 這塊做一個小結。 主要是流程上的東西。 做個參考,以后裝DG,照這個流程走就ok了。 ?
?
?
一. ?服務器設置
1.1 硬盤的規劃
?????? 根據自己的業務量來規劃硬盤。 我上周搭建的DG,用了4塊SAS 硬盤。 單盤300G,1.5w轉/s。 這個IOPS 大概在150M/s。 是個估算值。 做了RAID1.
不同的RAID 對IOPS 是有影響的。
?
1.2 將硬盤掛載到服務器上
?????? 這塊參考我的Blog:
?????? Linux 下掛載硬盤的 方法
?????? http://blog.csdn.net/tianlesoftware/archive/2010/06/02/5642883.aspx
?
二. 安裝DB
?????? 這部分包括2塊,安裝DB 軟件和升級。 如果是10g的話,可以先將DB升級到10.2.0.5。 升級的原因是為了避免某些bug。
?????? 先安裝軟件,升級,升級完在用DBCA 創建實例。 這樣比安裝DB 和創建實例之后升級要簡單點。
?
2.1 安裝DB 軟件
?????? 具體步驟參考BLog:
?????? 32 位系統,參考: linux平臺下oracle數據庫安裝
?????? http://blog.csdn.net/tianlesoftware/archive/2009/10/23/4718218.aspx
??????
?????? 64 位系統參考:64位 linux 平臺下Oracle 安裝文檔
?????? http://blog.csdn.net/tianlesoftware/archive/2010/12/08/6062816.aspx
?
2.2 升級DB 軟件
?????? 具體步驟參考Blog:
?????? linux平臺下oracle從10.2.0.1升級到10.2.0.4
?????? http://blog.csdn.net/tianlesoftware/archive/2009/10/27/4733475.aspx
?
?????? 其實,升級的步驟,在升級包的readme.html 里有詳細的說明,可以照那個步驟來。
?
2.3 ?在主庫DBCA創建實例
?????? 在我的Blog有說明:
?????? 如何搭建一個數據庫服務器平臺
?????? http://blog.csdn.net/tianlesoftware/archive/2010/05/17/5602291.aspx
?
在這里簡單的說一下:
(1)redo 文件默認是50M,改成100M
(2)每個redo group里改成2個 redo logfile。 大小100M
(3)檢查一下字符集:ZHS16GBK
(4)設置SGA,PGA 大小。
?????? OLTP 系統一般的規則是:
?????? ?????? SGA=內存*80%*80%
????????????? PGA=內存*80%*20%
?
三. 搭建DG 環境
?????? 這塊內容參考BLog:
?????? Oracle Data Guard 理論知識
?????? http://blog.csdn.net/tianlesoftware/archive/2010/04/22/5514082.aspx
?
?????? Oracle Data Guard Linux 平臺 Physical Standby 搭建實例
?????? http://blog.csdn.net/tianlesoftware/archive/2010/04/30/5547565.aspx
?
?????? 在這里補充一點, 在我裝的2套DG上都遇到一個問題。 就是主庫的sys 用戶密碼會改變。 懷疑和安裝過程中copy 密碼文件的過程有關。因為找不到其他原因了。 所以安裝之后,用原來的sys密碼連接一下。 如果不能使用,趕緊重新設置一下。然后在copy到備庫。 不然在客戶端就不能用sys用戶登陸了。 ?
?
?????? 如果是現在有DG,不知道sys用戶密碼。 我在測試環境下測試過,在不停DG的情況下,直接修改sys用戶密碼,然后copy到備庫。這樣是可以使用的。 生產庫上沒有做過。
?
?
四. 后續的調整
?????? 在這部分,主要是修改一些參數和數據文件的變動。
?
4.1 修改數據文件
?????? 用SQL 命令,或者用Toad 都可以。
(1)將SYSTEM,SYSAUX 這2個系統表空間增加到1G,并設置為自動增長,每次10M
(2)UNDO 表空間,設成32G(4*8G) 或者16G(2*8G)。關閉自動擴展。
(3)TEMP 表空間,設成32G(4*8G) 或者16G(2*8G)。關閉自動擴展。
?
4.2 參數修改
(1) 修改undo_retention
?????? undo_retention 只是指定undo 數據的過期時間,默認是900s,15分鐘。建議改成10800s,即3個小時。
?
SQL> alter system set undo_retention=10800 scope=both;
系統已更改。
?
(2)修改sessions 和 processes 參數
SQL> alter system set sessions=2000 scope=spfile;
系統已更改。
SQL> alter system set processes=1000 scope=spfile;
系統已更改。
?
(3)修改CONTROL_FILE_RECORD_KEEP_TIME 參數
?????? 該參數設置控制文件中存儲備份記錄的時間,在用RMAN的時候會涉及到這個參數。 備份記錄包括完全的數據庫備份記錄,以及指定的數據文件,控制文件,參數文件和歸檔目錄的備份記錄。數據庫參數CONTROL_FILE_RECORD_KEEP_TIME以天為單位(默認值為7天),因此在默認情況下,Oracle 會將RMAN備份和恢復記錄保存7天。 可以將該參數設置為0到365之間的任意值。
?
SQL> alter system set control_file_record_keep_time=14;
系統已更改。
?
(4)設置open_links_per_instance 和 open_links 參數
?????? 關于這2個參數的說明,參考Blog:
?????? open_links_per_instance 和 open_links 參數說明
?????? http://blog.csdn.net/tianlesoftware/archive/2010/12/22/6090729.aspx
?
?????? 這2個參數修改之后,需要重啟才能生效,所以,在安裝DB的時候,就把這個參數修改了。 默認值是4,如果用到話就太小了。 所以在安裝的時候,就給修改了。 修改建議值:100。
?
?????? SQL> alter system set open_links=100 scope=spfile;
?????? 系統已更改。
?
五. ?部署RMAN 備份
?????? 在部署腳本之前,記得修改2個參數:
?
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
配置DG主庫RMAN 歸檔文件的刪除策略:
RMAN> configure archivelog deletion policy to applied on standby;
?
參考:
Nocatalog 下的RMAN 增量備份 shell腳本
http://blog.csdn.net/tianlesoftware/archive/2011/01/26/6164931.aspx
?
Linux 平臺下 RMAN 全備 和 增量備份 shell 腳本
http://blog.csdn.net/tianlesoftware/archive/2010/07/16/5740630.aspx
?
如何 搭建 RMAN 備份平臺
http://blog.csdn.net/tianlesoftware/archive/2010/07/16/5740896.aspx
?
?
六. 在備庫部署刪除歸檔文件腳本
?????? DG 備庫的歸檔文件不能自動刪除。 需要使用腳本來刪除。
參考:
?????? Oracle Data Guard 備庫 歸檔文件 刪除腳本
?????? http://blog.csdn.net/tianlesoftware/archive/2011/02/19/6194498.aspx
?
?
七. 部署其他的監控腳本
?????? 這部分監控如CPU,磁盤空間,表空間使用率。 alert log 日志等。 以前有個shell 的腳本,可以監控這些。 最近在整理一個Python的監控腳本。
?
7.1 ?alert log 按天存放
?????? 這樣做主要還是方便查看alert log。 參考:
?????? Oracle alert log 按天 存放 腳本
?????? http://blog.csdn.net/tianlesoftware/archive/2011/02/20/6195742.aspx
?
7.2 以前弄的一個監控DG的批處理腳本
?????? 每天早上上班運行下,DG 的情況就能清楚的顯示出來了。 省事很多。 后來懶的運行批處理命令,改成每天定時發到郵箱了。
?
Check.sql
conn sys/PWD@SID as sysdba
host title 數據庫日常檢查
column dest_name format a30
column destination format a20
column MEMBER format a45
column 歸檔地 format a20
column TABLESPACE_NAME format a10
column FREE_RATE format a10
host cls
prompt **************************** 實 例 狀 態 ************************************;
select instance_name 實例名,version 版本,status 狀態,database_status 數據庫狀態 from v$instance;
prompt **************************** 數據庫狀態 *************************************;
select name,log_mode 歸檔模式,open_mode 打開模式 from v$database;
prompt **************************** 控制文件狀態 ***********************************;
column name format a40
select status,name from v$controlfile;
prompt **************************** 日志文件狀態 ***********************************;
select GROUP#,status,type,member from v$logfile;
?
prompt***************************** 歸檔目的地狀態 *********************************;
select dest_name ,status 狀態,database_mode 數據庫模式,destination 歸檔地 from v$archive_dest_status where dest_id in? ('1','2');
set heading off;
select '************數據庫已連續運行 '|| round(a.atime-b.startup_time)||' 天 '||'*******************************************' from(select sysdate atime from dual) a,v$instance b;
set heading on;
prompt***************************** 會? 話? 數 *************************************;
select sessions_current 當前會話數,sessions_highwater 實例最高值 from v$license;
prompt********************** 表空間監控(FREE_RATE小于10%為異常) ********************;
select a.tablespace_name, round(a.total_size) "total_size(MB)",
round(a.total_size)-round(b.free_size,3) "used_size(MB)",
round(b.free_size,3) "free_size(MB)", round(b.free_size/total_size*100,2)||'%' free_rate
from ( select tablespace_name, sum(bytes)/1024/1024 total_size
?????? from dba_data_files
?????? group by tablespace_name ) a,
?????? ( select tablespace_name, sum(bytes)/1024/1024 free_size
???????? from dba_free_space
???????? group by tablespace_name ) b
?????? where a.tablespace_name = b.tablespace_name(+);
prompt **************************** 表空間OFFLINE(顯示為空正常) ********************;
select tablespace_name 表空間名,status 狀態 from dba_tablespaces where status='OFFLINE';
prompt **************************** SEQUENCE同步數 *********************************;
select max(sequence#)from v$log_history;
CONN sys/PWD@SID_ST as sysdba;
prompt **************************** 備庫SEQUENCE同步數 *****************************;
select max(sequence#)from v$log_history;
prompt **************************** 備庫日志未應用(顯示為空正常) *******************;
select sequence#,applied from v$archived_log where applied='NO' and sequence#>2453;
prompt **************************** 備庫日志應用(顯示最近十個日志) *****************;
select * from(select sequence#,applied from v$archived_log order by sequence# desc) where rownum<=10;
set time on
disconnect
?
Check.bat
sqlplus /nolog @check.sql
?
?
7.3 其他監控腳本
參考:
8個DBA最常用的監控Oracle數據庫的常用shell腳本
http://blog.csdn.net/tianlesoftware/archive/2009/11/10/4792798.aspx
?
?
八. 導入數據
?????? 用邏輯導出導入就可以了。 在導入之前建好表空間,注意:數據和索引分別存放在不同的表空間。 在建用戶。最后導入數據。
?
?????? 對于某些系統(如移動的BOSS計費系統),在建sequence的時候,注意下sequence 的cache 大小。默認值是20. 一般是夠用的。
?????? Oracle Sequence Cache 參數說明
?????? http://blog.csdn.net/tianlesoftware/archive/2010/11/08/5995051.aspx
?
?????? 導入的過程也會產生歸檔文件,只需要在主庫導入即可。 備庫會自動同步。 如果數據量大的話,這個同步過程會比較慢。 因為imp 會產生大量的歸檔文件。
?
?
Oracle Data Guard 主庫 歸檔文件 刪除策略
http://blog.csdn.net/tianlesoftware/archive/2011/03/07/6227965.aspx
?
?
?????? DG 的東西就這么多了。 最后3句話:
?????? (1)備份重于一切
?????? (2)責任重于一切
?????? (3)DBA要膽大心細,遇事不慌
?
?
?
?
?
------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
網上資源: http://tianlesoftware.download.csdn.net
相關視頻:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
DBA1 群:62697716(滿); DBA2 群:62697977(滿)
DBA3 群:62697850?? DBA 超級群:63306533;????
聊天 群:40132017
--加群需要在備注說明Oracle表空間和數據文件的關系,否則拒絕申請
轉載于:https://www.cnblogs.com/tianlesoftware/archive/2011/02/20/3609796.html
總結
以上是生活随笔為你收集整理的如何搭建一个 Data Guard 环境的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从微软一站式代码库中学到的--跨域之间的
- 下一篇: hwnd = 0 各种粗心大意啊!