oracle dataguard+rman

 

一.    容災配置
 
本文檔中紅色標註部分爲需要在原文件中添加的文字,藍色標註部分爲需要依據個人實際配置數據庫情況加以修改文字,綠色標註爲註釋
 
1.     安裝數據庫,建實例。本例中數據庫DB_NAME=ora INSTANCE_SID= ora
Primary IP 192.168.100.1   數據文件路徑 /ORACLEapp/oracle/product/10.2.0/db_1
Standby IP 192.168.100.2 數據文件路徑/ORACLEapp/oracle/product/10.2.0/db_1
操作系統爲centos,ORACLE版本10.2.0
2.     在主庫上執行
SQL>archive log list; 
查看是否爲歸檔模式,如果不是,需要執行如下SQL
SQL>startup mount;
SQL>alter database archivelog;
SQL>alter database open
3.     若是歸檔模式,設置歸檔路徑和歸檔格式
SQL>alter system set log_archive_dest_1=’location=/arch’ scope=spfile;
存放歸檔日誌SQL>alter system set log_archive_format=’arch_%t_%s_%r.arc’ scope=spfile;
4.     修改數據庫爲強制歸檔模式,這樣某些不寫日誌的操作也會寫日誌歸檔,備庫數據更安全,恢復數據更全面,不至於丟數據
SQL>alter database force logging;
SQL>shutdown immediate
5.     主庫創建參數文件,standby控制文件
SQL>startup mount
SQL>create pfile from spfile;
SQL>alter database create standby controlfile as ‘/arch/111.ctl’;
6.     rman備份
   SQL>create tablespace rmantablespace datafile ‘/ORACLE/app/oracle/rmantable
Space.dat’ size 30m;
SQL> create user rman identified by rman123 default tablespace rmantablespace
Temporary temp;
SQL>grant resource,connect,recovery_catalog_owner to rman;
SQL>grant create table to rman;
$rman target /
RMAN>backup database plus archiveslog;
SQL>shutdown immediate
7.     修改主庫的pfile文件,添加以下各行參數
*.log_archive_dest_2='SERVICE=standby' <指向第2個歸檔日誌存放位置,至備機>
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.FAL_SERVER=standby   <作爲備庫時主庫的網絡名>
*.FAL_CLIENT=primary   <作爲備庫時備庫的網絡名>
*.STANDBY_FILE_MANAGEMENT=AUTO
*.STANDBY_ARCHIVE_DEST='/arch' <作爲備庫時歸檔日誌存放位置>
*.DB_FILE_NAME_CONVERT=('/ORACLE/app/oracle/oradata/ora/','/ORACLE/app/oracle/oradata/ora/')
<當主庫和備庫數據文件存放位置不一致時的路徑轉換,一致時可不加,前爲主庫數據文件路徑,後爲備庫數據文件路徑>
*.LOG_FILE_NAME_CONVERT=('/ORACLE/app/oracle/oradata/ora/','/ORACLE/app/oracle/oradata/ora/')
<當主庫和備庫在線日誌文件(redo log)存放位置不一致時的路徑轉換,一致時可不加,前爲主庫在線日誌文件路徑,後爲備庫在線日誌文件路徑>
8.     修改備庫的參數文件,添加以下各行參數
*.log_archive_dest_2='SERVICE=primary'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.FAL_SERVER=primary
*.FAL_CLIENT=standby
*.STANDBY_ARCHIVE_DEST='/arch'
*.STANDBY_FILE_MANAGEMENT=AUTO
*.DB_FILE_NAME_CONVERT=('/ORACLE/app/oracle/oradata/ora/','/ORACLE/app/oracle/oradata/ora/')
*.LOG_FILE_NAME_CONVERT=('/ORACLE/app/oracle/oradata/ora/','/ORACLE/app/oracle/oradata/ora/')
同時修改參數文件中各個路徑同備庫實際情況一致
9.     備庫將剛纔新建的standby控制文件 111.ctl 複製到數據文件存放目錄,並再複製3份,分別改名覆蓋原控制文件control01.ctlcontrol02.ctlcontrol03.ctl
 將rman備份文件也拷貝過去
10. 配置主備庫的監聽文件 (如果備庫只安裝了oracle軟件,需要netca配置監聽)
SID_LIST_LISTENER =
       (SID_LIST =
             (SID_DESC =
                 (SID_NAME = PLSExtProc)
                 (ORACLE_HOME = /ORACLE/app/oracle/product/10.2.0/db_1/)
                 (PROGRAM = extproc)
            )
             (SID_DESC =
                 (GLOBAL_DBNAME= ora)
                 (ORACLE_HOME = /ORACLE/app/oracle/product/10.2.0/db_1/)
                 (SID_NAME = ora)
             )
       )
 
LISTENER =
       (DESCRIPTION_LIST =
             (DESCRIPTION =
                 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.1)(PORT = 1521))
                 (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
             )
    )
 
此爲主庫監聽文件配置,備庫同理,紅色爲需要添加部分,藍色爲本機IP地址
 
11. 配置主備庫的tnsnames.ora,主備庫皆在tnsnames.ora中添加以下內容
PRIMARY =
       (DESCRIPTION =
             (ADDRESS_LIST =
                 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.1)(PORT = 1521))
             )
             (CONNECT_DATA =
                 (SERVICE_NAME = ora)
            )
       )
 
STANDBY =
       (DESCRIPTION =
             (ADDRESS_LIST =
                 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.2)(PORT = 1521))
             )
             (CONNECT_DATA =
                 (SERVICE_NAME = or)
             )
)
12. 主庫備庫分別重新打開監聽,tnsping primary ,tnsping standby 看能否ping通,ping通即可進入下一步,不通的話可檢查防火牆是否關閉,配置是否有問題。
13. 啓動備庫
SQL>create spfile from pfile=’ /ORACLE/app/oracle/product/10.2.0/db_1/dbs/
initora.ora’; <此處pfile文件爲修改過的備庫參數文件>
SQL>startup nomount (不可以直接startup,否則不能shutdown,解決方法:重啓)
$$ORACLE_HOME/bin/orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle force=y (建立密碼文件,也可以拷貝過來)
$rman target /
RMAN>restore database;
SQl>alter database mount standby database;
SQL>alter database recover managed standby database disconnect from session;
14. 啓動主庫
SQL>shutdown immediate
SQL>create spfile from pfile=’ /ORACLE/app/oracle/product/10.2.0/db_1/dbs/
initora.ora’ <此處pfile文件爲修改過的主庫參數文件>
SQL>startup
15. 主庫上做幾次日誌切換
SQL>alter system switch logfile;
SQL>archive log list;
16. 備庫查詢日誌應用情況
SQL>archive log list;
(日誌不同步主要有2大原因,一是監聽,二是/arch文件夾權限,還有可能就是看看你啓動是否應用的是修改後的pfile)
17. 此時查詢到的日誌情況應是除中間一項爲0外,其他同主庫一致
SQL> select sequence#,applied from v$archived_log order by sequence#;
查詢備機日誌應用情況,若都爲YES且日誌數字比主庫當前日誌號小1即爲正常
在primary機查詢
SQL>select switchover_status from v$database;
查詢結果應爲 TO STANDBY
在standby機查詢
SQL>select switchover_status from v$database;
查詢結果應爲 NOT ALLOWED 
<因爲必須主庫先切到備庫,備庫才能切到主庫,所以主庫正常運行的時候是不允許備庫切到主庫的,當主庫關閉後,備庫再查詢此SQL會顯示TO PRIMARY>
如果有錯,請檢查配置
 
至此,容災配置正常完成.
 
二.容災測試
主庫上:
SQL>create user test identified by test;
SQL>grant connect,resource to test;
SQL>conn test/test@primary
SQL>create table test(name varchar2(20));
SQL>insert into test.test values('this is a test');
SQL>commit;
SQL>conn /as sysdba
SQL>alter system switch logfile;
將備庫切換到只讀查詢模式,查看修改是否已經生效:
 
備庫上:
SQL>conn /as sysdba
SQL>alter database recover managed standby database cancel;
SQL>alter database open read only;(我這步不能打開,只有切換到最大可用戶之後才能打開,自己也是新手,具體原因還不明)
SQL>conn test/test
SQL>select * from test;
結果應該是:
NAME
--------------
This is a test
說明同步正常。
 
再次將備庫切換至恢復狀態:
SQL>alter database recover managed standby database disconnect from session;
 
強制主機歸檔,在備機查看歸檔日誌應用情況
select sequence#,applied from v$archived_log order by sequence#;
應用情況爲YES.
 
如果要強制主庫每10分鐘歸檔一次,如下設置:(任意時間都可以設置)
Alter system set archive_lag_target=600 scope=both;
 
 
三.容災關閉
 
關閉數據庫一定要先關閉主庫再關閉備庫。
 
主庫:   SQL>shutdown immediate
 
備庫:   SQL>alter database recover managed standby database cancel;
SQL>shutdown immediate
 
四.             主備機切換
 
主備機切換必須先主切備,在備切主
 
primary 切換到standby database
1.   SQL>alter system switch logfile; <主切備前最好做一次歸檔>
2.   SQL>alter database commit to switchover to standby with session shutdown;
3.  SQL>shutdowm immediate
4.  SQL>startup nomount
5.  SQL>alter database mount standby database;
6.  SQL>alter database recover managed standby database disconnect from session;
 
standby 切換到primary
1.  SQL>alter database commit to switchover to primary with session shutdown;
2.  SQL>shutdown immediate;
3.  SQL>startup  
 
四.切換到最大可用模式
 
1.首先應當在standby庫創建standby redolog
SQL>alter database recover managed standby database cancel;
SQL>alter database add standby logfile
group 4 (‘/ORACLE/app/oracle/oradata/ora/redo04.log’) size 50m,
group 5 (‘/ORACLE/app/oracle/oradata/ora/redo05.log’) size 50m,
group 6 (‘/ORACLE/app/oracle/oradata/ora/redo06.log’) size 50m,
group 7 (‘/ORACLE/app/oracle/oradata/ora/redo07.log’) size 50m;
 
standby redolog的組數參考公式:(online redolog組數 + 1) * 數據庫線程數;
單機線程數爲1,RAC一般爲2。
 
standby redolog的組成員數和大小也儘量和online redolog一樣。
 
檢查standby redolog是否已經添加:
SQL>select group#, thread#,sequence#,archived, status from v$standby_log;
 
    GROUP#    THREAD# SEQUENCE# ARC STATUS
---------- ---------- ---------- --- ----------
         4          0          0 YES UNASSIGNED
         5          0          0 YES UNASSIGNED
             6          0          0 YES UNASSIGNED
             7          0          0 YES UNASSIGNED
 
2. standby數據庫重新啓動恢復管理模式
SQL>alter database recover managed standby database disconnect from session;
3.修改primary數據庫參數,設置備庫爲最大性能模式(primary庫執行)
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=STANDBY SYNC LGWR AFFIRM NET_TIMEOUT=10' SCOPE=SPFILE;
SQL>shutdown immediate
SQL>startup mount
SQL>alter database set standby database to maximize availability;
<maximize 後可跟{PROTECTION | AVAILABILITY | PERFORMANCE},分別對應最大保護,最高可用性及最高性能>
SQL>alter database open
4.    查看保護模式狀態
SQL> select protection_mode,protection_level from v$database;
 
   
PROTECTION_MODE PROTECTION_LEVEL
-------------------- --------------------
MAXIMUM AVAILABILITY MAXIMUMAVAILABILITY
 
顯示目前爲最大可用模式
 
配置成功,順便再測試一下停掉standby 數據庫,再查看primary 數據庫狀態
SQL> select protection_mode,protection_level from v$database;
 
PROTECTION_MODE PROTECTION_LEVEL
-------------------- --------------------
MAXIMUM AVAILABILITY RESYNCHRONIZATION
 
Standby 數據庫shutdown 後,primary 數據庫保護級別切換爲待同步。
 
5.    如果要使得主備庫可以切換,則應如1-4步驟同理在主備庫做相應修改
 
錯誤一:ORA-03113: end-of-file on communication channel錯誤
SQL> conn / as sysdba
Connected to an idle instance.
SQL> startup mount pfile=?/dbs/initjhcqcnc.ora
ORACLE instance started.
Total System Global Area    235999352 bytes
Fixed Size                     450680 bytes
Variable Size               201326592 bytes
Database Buffers             33554432 bytes
Redo Buffers                   667648 bytes
Database mounted.
SQL> select protection_mode from v$database;
PROTECTION_MODE
--------------------
MAXIMUM PROTECTION
SQL> alter database set standby database to maximize PERFORMANCE ;
Database altered.
SQL> alter database open;
Database altered.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章