1、搭建dataguard
結構規劃
主庫:ipemsdb 備庫:standby 實例:ipemsdb
1.主庫打開Forced Logging模式和歸檔模式
alter database [no] force logging;
select log_mode,force_logging from v$database;
2.查詢redo,增長standby日誌(主庫增長,拷貝至備庫,均增長方便主備切換,默認比redo多一組,大小同樣)
select member from v$logfile;
Alter database add standby logfile Group 10 '/u01/app/oracle/oradata/ipemsdb/onlinelog/redo10.log' size 50M;
Alter database add standby logfile Group 11 '/u01/app/oracle/oradata/ipemsdb/onlinelog/redo11.log' size 50M;
Alter database add standby logfile Group 12 '/u01/app/oracle/oradata/ipemsdb/onlinelog/redo12.log' size 50M;
Alter database add standby logfile Group 13 '/u01/app/oracle/oradata/ipemsdb/onlinelog/redo13.log' size 50M;
select group#, type, member from v$logfile where type = 'STANDBY';
SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
3.建立備庫控制文件
alter database create standby controlfile as '/u01/app/oracle/standby.ctl';
4.建立密碼文件(在$ORACLE_HOME/dbs目錄下建立)
orapwd file=orapwipemsdb password=oracle entries=3 force=y
5.修改主庫參數文件,主要關注如下內容
create pfile from spfile;
*.remote_login_passwordfile='EXCLUSIVE' #保證相同Data Guard配置中全部db服務器sys密碼相同,默認便可
*.db_name='ipemsdb' #同一個dg中全部的db_name要相同
*.DB_UNIQUE_NAME='ipemsdb' #主備不一樣,惟一標識各庫
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=( ipemsdb, standby)' #經過DG_CONFIG屬性羅列同一個DG中全部DB_UNIQUE_NAME,以逗號分隔
*.log_archive_dest_1='LOCATION=/u01/arc_dir DB_UNIQUE_NAME=ipemsdb' #設置傳輸日誌
*.log_archive_dest_2='SERVICE=standby lgwr async noaffirm DB_UNIQUE_NAME=standby'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE #數值爲ENABLE,標識對應的LOG_ARCHIVE_DEST_n參數是否有效
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.FAL_CLIENT='ipemsdb' #指定本機的鏈接服務名
*.FAL_SERVER='standby' #指定鏈接備庫的鏈接服務名
*.service_names='ipemsdb'
*.STANDBY_FILE_MANAGEMENT='AUTO' #自動管理主備庫數據文件的修改html
lgwr async noaffirm 參數下主庫的模式保護級別爲 RESYNCHRONIZATION 推薦方式
lgwr sync affirm 參數下主庫的模式保護級別爲 MAXIMUMAVAILABILITY
6.修改主庫監聽listener.ora,修改主庫網絡服務tnsnames.ora
listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME =ipemsdb)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
( SID_NAME = ipemsdb)
)
(SID_DESC =
(GLOBAL_DBNAME =standby)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
( SID_NAME = standby)
)
)sql
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1521))
)
)
tnsnames.ora
standby =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.200)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ipemsdb)
)
)數據庫
ipemsdb =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ipemsdb)
)
)服務器
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)網絡
7.拷貝主庫參數文件,密碼文件,生成的備庫控制文件,監聽及網絡文件至備庫
scp initipemsdb.ora orapwipemsdb 192.168.0.200:/u01/app/oracle/product/10.2.0/db_1/dbs
scp standby.ctl 192.168.0.200:/u01/app/oracle/
scp tnsnames.ora listener.ora 192.168.0.200:/u01/app/oracle/product/10.2.0/db_1/network/admin/
8.修改備庫參數文件(控制文件能夠修改路徑,也能夠複製多份,放到指定路徑)
*.control_files='/u01/app/oracle/oradata/ipemsdb/controlfile/controlfile_standby.ctl'#Restore Controlfile
*.db_name='ipemsdb'
*.DB_UNIQUE_NAME='standby'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=( ipemsdb, standby)'
*.log_archive_dest_1='LOCATION=/u01/arc_dir DB_UNIQUE_NAME=standby'
*.log_archive_dest_2='SERVICE=ipemsdb DB_UNIQUE_NAME=ipemsdb'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.FAL_CLIENT='standby'
*.FAL_SERVER='ipemsdb'
*.service_names='standby'
*.STANDBY_FILE_MANAGEMENT='AUTO'
9.參照參數文件,在備庫建立必要目錄,將主庫數據文件,日誌文件拷貝至備庫
mkdir -p /u01/app/oracle/admin/ipemsdb/adump
scp -r oradata 192.168.0.200:/u01/app/oracle
10.修改備庫的listener.ora主機IP,測試主備網絡互連
啓動主備監聽
lsnrctl stop
lsnrctl start
tnsping ipemsdb
tnsping standby
11.主備分別經過pfile建立spfile
create spfile from pfile;
主庫:
startup mount;
alter database archivelog;
alter database open;
備庫:
startup mount;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
12.測試
a.主庫歸檔日誌,查詢確認主從庫的歸檔目錄是否更新
alter system archive log current;
select max(sequence#) from v$archived_log;
select * from (select RECID,NAME,SEQUENCE#,APPLIED from v$archived_log order by RECID desc) where rownum<5;
b.若是從庫未更新
alter database recover managed standby database cancel;
alter database recover managed standby database disconnect from session;
c.DML操做對象,確認主備是否一致(主庫建立表,插入數據,提交,歸檔,從庫read only打開,查看確認一致性)
insert into scott.dg2(3);
alter system archive log current;
alter database recover managed standby database cancel;
alter database open read only;
再次開啓日誌同步redo模式
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;session
參考資料:
http://www.cnblogs.com/tippoint/archive/2013/04/18/3029019.html
http://www.5ienet.com/note/html/dg/index.shtmloracle
2、dataguard相關理論
一、用於構建高可用的企業數據庫應用環境。同一個Data Guard配置包含一個 Primary 數據庫和最多九個 Standby 數據庫。
Standby數據庫初始能夠經過primary數據庫的備份建立。建立並配置成standby後,dg負責傳輸primary數據庫redo data到
standby數據庫,standby數據庫經過RFS進程接收primary數據庫的redo,保存在本地,就是Standby redo logs保持與primary
數據庫的事務一致。
二、同步的機制:
邏輯standby是經過接收primary數據庫的redo log並轉換成sql語句,而後在standby數據庫上執行SQL語句(SQL Apply)實現同步;
物理standby是經過接收並應用primary數據庫的redo log以介質恢復的方式(Redo Apply)實現同步。
三、dg的服務
a、REDO 傳輸服務(Redo Transport Services):控制redo數據的傳輸到一個或多個歸檔目的地。
b、Log 應用服務(Log Apply Services):應用redo數據到standby數據庫,以保持與primary數據庫的事務一致。redo數據便可以
從standby數據庫的歸檔文件讀取,也可直接應用standby redo log文件(若是實時應用打開了的話)。
c、角色轉換服務(Role Transitions):Dg 中只有兩種角色:primary和standby。所謂角色轉換就是讓數據庫在這兩個角色中切
換,切換也分兩種:switchover和failover
switchover :轉換primary數據庫與standby數據庫。switchover能夠確保不會丟失數據。
failover:當primary數據庫出現故障而且不能被及時恢復時,會調用failover將一個standby數據庫轉換爲新的primary數據庫。
四、DG的保護模式
DG默認是最大性能模式(maximize performance),主庫的redo只有歸檔後纔會傳輸到備庫,若是主庫歸檔前down掉會丟失
未歸檔數據,備庫的日誌不可達不會影響主庫的可用性。
最大保護模式(maximize protection),備庫一旦沒法接收日誌,主庫的全部操做都會被掛起,備庫日誌恢復時纔會恢
復,不會丟失數據,須要standby redo文件,生產庫不多使用;
最大可用模式(maximize availability),當與備庫的日誌傳輸斷開時,主庫會自動切換到最大性能模式,正常不會丟失數據
除非剛降至最大性能模式,在standby不可用時主庫會自動降爲最大性能模式,standby恢復後會自動切換回最大可用模式,須要
standby redo file。app
3、平常維護
一、正確打開,先開備庫再開主庫
備庫:
startup nomount;
alter database mount standby database;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; #啓動備用模式
主庫:
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
二、正確關閉順序(先關主庫,再管備庫)
主庫
SHUTDOWN IMMEDIATE;
備庫:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; #中止日誌恢復模式
SHUTDOWN IMMEDIATE;
三、DG啓動後主備信息狀態查詢
查出日誌歸檔路徑
select DEST_NAME,STATUS,DESTINATION,error from v$archive_dest;
查詢主備庫歸檔日誌歸檔狀況(主庫每組有兩條)
select name,SEQUENCE#,APPLIED from v$archived_log order by recid asc;
在備庫檢查是否有日誌缺失
select * from v$archive_gap;
丟失日誌的手動註冊
將主庫歸檔文件拷貝至備庫(10G拷貝後會自動註冊)
alter database register physical logfile '/u01/arc_dir/1_12_895613678.dbf';
alter database recover automatic standby database;
查詢主備庫上的進程信息
select process,status from v$managed_standby;
查看dataguard的狀態信息
select message_num,message from v$dataguard_status;
查詢主備狀態
select database_role,PROTECTION_MODE,PROTECTION_LEVEL from v$database;
主:PRIMARY SESSIONS ACTIVE
備:PHYSICAL STANDBY NOT ALLOWED
查詢備庫進程信息,RFS - 遠程文件接收進程,MRP0 -日誌應用進程
select process,status from v$managed_standby;async
4、模式切換
一、切換保護模式
根據切換模式須要給主備庫增長standby redo files,修改pfile中日誌同步方式
在主庫處於mount狀態下切換保護模式
ALTER DATABASE SET STANDBY DATABASE TO maximize protection[|maximize performance|maximize availability];
最大可用或最大保護模式下的實時同步
alter database recover managed standby database using current logfile disconnect from session;
二、switchover主備人工切換,先主後從
主庫:
select DATABASE_ROLE from v$database; --PRIMARY
select SWITCHOVER_STATUS from v$database;
若是是to standby表能夠正常切換.直接執行
alter database commit to switchover to physical standby;
不然執行
alter database commit to switchover to physical standby with session shutdown;
shutdown immediate;
startup nomount;
alter database mount standby database;
alter database recover managed standby database disconnect from session;
select DATABASE_ROLE from v$database; --PHYSICAL STANDBY
select SWITCHOVER_STATUS from v$database; --TO PRIMARY
備庫
select DATABASE_ROLE from v$database; --PHYSICAL STANDBY
select switchover_status from v$database;
若是是to_primary表能夠正常切換.執行
alter database commit to switchover to primary;
不然執行
alter database commit to switchover to primary with session shutdown;
shutdown immediate;
startup;
三、failover切換
判斷主數據庫確實出現嚴重的硬件故障或其餘緣由致使主數據庫沒法啓動。
SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
消除archive redo log gaps從主數據庫上或其餘備份的地方把沒有傳到物理備用數據庫的archive redo log傳到物理備
用數據庫上,並註冊到物理備用數據庫的controlfile中。重複2,3步驟直到V$ARCHIVE_GAP視圖無記錄存在。
ALTER DATABASE REGISTER PHYSICAL LOGFILE 'archive redo log文件名稱';
在物理備用數據庫上發起failover操做
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;
把物理備用數據庫轉化成主用角色
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
把新的主用數據庫從新啓動
SHUTDOWN IMMEDIATE;
STARTUP;
對新的主用數據庫作全備份性能
參考資料: http://blog.csdn.net/lenovouser/article/details/7516582 http://blog.163.com/scott_guo/blog/static/18102608320121111113518691/