【新東網(wǎng)技術(shù)大咖帶您走進(jìn)ADG】Oracle Active Data Guard(ADG)實(shí)現數據層讀寫(xiě)分離
發(fā)布時(shí)間: 2016-12-30 14:53:39
文/唐香龍 華西研發(fā)
新東網(wǎng)自2001年成立以來(lái),掌握大數據、云計算、通信、物聯(lián)網(wǎng)及區塊鏈等信息技術(shù),擁有一支逾16年經(jīng)驗的強大IT團隊。為沉淀企業(yè)技術(shù)實(shí)力,繼續發(fā)揮行業(yè)優(yōu)勢,《東網(wǎng)快訊》特邀新東網(wǎng)技術(shù)大咖帶您走進(jìn)這些先進(jìn)信息技術(shù),揭秘新東網(wǎng)16年來(lái)的技術(shù)成果,每周五發(fā)布。
資源劃分:
虛擬機 |
劃分資源 |
IP_DB1(192.168.1.10) |
12C/32G/1.2T硬盤(pán) |
IP_DB2(192.168.1.20) |
12C/32G/1.2T硬盤(pán) |
系統結構
容災系統主要包括數據保護和應用切換兩大方面,其中最為重要的是數據保護部分。除了要將這些數據存放在高可用的存儲設備上之外,最重要的是這些關(guān)鍵數據應該在異地之間保持一致,以使災難發(fā)生后,系統可以盡快恢復。下面是幾種主要的數據保護技術(shù)。
實(shí)現數據的異地復制,有軟件方式和硬件方式兩種途徑。軟件方式,是通過(guò)主機端軟件來(lái)實(shí)現,如第三方軟件或者數據庫廠(chǎng)家提供的遠程數據容災工具來(lái)實(shí)現業(yè)務(wù)數據的遠程復制。硬件方式,是基于智能存儲系統的控制器的遠程拷貝,可以在主、備存儲系統之間通過(guò)硬件實(shí)現復制。
在實(shí)際的容災系統中,由于系統的環(huán)境不同,安全性要求不同以及采用的軟硬件產(chǎn)品不同,數據復制過(guò)程中的工作機制也不盡相同。概括地講,數據復制的工作機制主要包括同步和異步兩種。同步遠程鏡像(同步復制技術(shù))是指通過(guò)遠程鏡像軟件,將本地數據以完全同步的方式復制到異地,每一本地的I/O事務(wù)均需等待遠程復制的完成確認信息,方予以釋放。異步遠程鏡像(異步復制技術(shù))保證在更新遠程存儲視圖前完成向本地存儲系統的基本I/O操作,而由本地存儲系統提供給請求鏡像主機的I/O操作完成確認信息,遠程的數據復制以后臺同步的方式進(jìn)行。因為帶寬等因素限制,本次容災方案僅包括了異步復制的方式的討論。
ADG實(shí)現原理
Oracle Active Data Guard 是當今保護企業(yè)核心資產(chǎn)(數據)的最有效解決方案,它能夠使數據在 24x7 的基礎上可用,而無(wú)論是否發(fā)生災難或其它中斷。
Oracle Active Data Guard 是管理、監控和自動(dòng)化軟件的基礎架構,它創(chuàng )建、維護和監控一個(gè)或多個(gè)備用數據庫,以保護企業(yè)數據結構不受故障、災難、錯誤和崩潰的影響。
Oracle Active Data Guard 使備用數據庫保持為與生產(chǎn)數據庫在事務(wù)上一致的副本。這些備用數據庫可能位于距生產(chǎn)數據中心數千公里的遠程災難恢復站點(diǎn),或者可能位于同一城市、同一校園乃至同一建筑物內。當生產(chǎn)數據庫由于計劃中斷或意外中斷而變得不可用時(shí),Oracle Active Data Guard 可以將任意備用數據庫切換到生產(chǎn)角色,從而使與中斷相關(guān)的停機時(shí)間減到最少,并防止任何數據丟失。
作為 Oracle 數據庫企業(yè)版的一個(gè)特性推出的 Oracle Active Data Guard 能夠與其它的 Oracle 高可用性 (HA) 解決方案(如真正應用集群 (RAC) 和恢復管理器 (RMAN))結合使用,以提供業(yè)內前所未有的高水平數據保護和數據可用性。
Oracle Active Data Guard 包括一個(gè)生產(chǎn)數據庫,也稱(chēng)為主數據庫,以及一個(gè)或多個(gè)備用數據庫,這些備用數據庫是與主數據庫在事務(wù)上一致的副本。Data Guard 利用重做數據保持這種事務(wù)一致性。當主數據庫中發(fā)生事務(wù)時(shí),則生成重做數據并將其寫(xiě)入本地重做日志文件中。通過(guò) Oracle Active Data Guard,還將重做數據傳輸到備用站點(diǎn)上,并應用到備用數據庫中,從而使備用數據庫與主數據庫保持同步。Oracle Active Data Guard 允許管理員選擇將重做數據同步還是異步地發(fā)送到備用站點(diǎn)上。
備用數據庫的底層技術(shù)是 Oracle Active Data Guard 重做應用(物理備用數據庫)。物理備用數據庫在磁盤(pán)上擁有和主數據庫逐塊相同的數據庫結構,并且使用 Oracle 介質(zhì)恢復進(jìn)行更新。
Oracle Active Data Guard 簡(jiǎn)化了主數據庫和選定的備用數據庫之間的轉換和故障切換,從而減少了由計劃停機和計劃外故障所導致的總停機時(shí)間。
實(shí)現前準備工作
a. 參數文件/etc/sysctl.conf中添加:
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
kernel.panic_on_oops = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
執行sysctl -p應用修改內核參數。
b. 在文件/etc/security/limits.conf末尾添加:
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
c. 修改oracle的環(huán)境變量,Oracle家目錄/.bash_profile下添加一下變量:
export ORACLE_BASE=/home/oracle/app/oracle
export ORACLE_HOME=/home/oracle/app/oracle/datadb
export ORACLE_SID=prim
export PATH=$ORACLE_HOME/bin:$PATH
執行:source .bash_profile應用環(huán)境變量
d. 創(chuàng )建oracle用戶(hù)和組:
Groupadd oinstall
Groupadd dba
Useradd -g oinstall -G dba oracle
開(kāi)始安裝數據庫
1) Grid安裝:
解壓grid安裝包,進(jìn)入解壓目錄執行:./runInstaller,根據提示安裝好grid。
2) Database安裝:
解壓database安裝包,進(jìn)入解壓目錄執行:./runInstaller,根據提示安裝好database并建好主庫。
開(kāi)始配置dg
a. 配置前準備:
主庫:192.168.1.10
備庫:192.168.1.20
主備在/etc/hosts添加:
192.168.1.10 primary.com primary
192.168.1.20 standby.com standby
主備的實(shí)例名:prim(環(huán)境變量里面的ORACLE_SID)
b. 主庫啟動(dòng)force logging
c. 主庫啟動(dòng)歸檔模式
d. 在主庫添加standby redo logfile
添加主庫redo個(gè)數+1個(gè)standby redo logfile:
查看主庫redo個(gè)數:
SQL>select member from v$logfile;
添加standby redo logfile:
SQL>Alter database add standby logfile '和主庫redo路徑一樣' size 50M;
e. 分別在主備和備庫配置監聽(tīng)并啟動(dòng)
f. 在備庫創(chuàng )建必要目錄
mkdir -p /home/oracle/app/oracle/oradata/
mkdir -p /home/oracle/app/oracle/fast_recovery_area/
mkdir -p /home/oracle/app/oracle/admin/prim/adump
g. 在主庫創(chuàng )建pfile文件并修改怕file內容
*.db_unique_name='prim'
*.log_archive_config='dg_config=(prim,stan)'
*.log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name=prim'
*.log_archive_dest_2='service=stan valid_for=(online_logfiles,primary_role) lgwr sync affirm db_unique_name=stan'
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
*.standby_file_management='auto'
*.fal_server='stan'
h. 用新參數重啟數據庫
i. 將主庫的口令文件copy到備庫
j. 將主庫的參數文件copy到備庫并修改
*.db_unique_name='stan'
*.log_archive_config='dg_config=(prim,stan)'
*.log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name=stan'
*.log_archive_dest_2='service=prim valid_for=(online_logfiles,primary_role) lgwr sync affirm db_unique_name=prim'
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
*.standby_file_management='auto'
*.fal_server='stan'
k. 用spfile將備庫啟動(dòng)到nomount狀態(tài)
l. 開(kāi)始建立dg備庫
rman target sys/oracle auxiliary sys/oracle@stan
RMAN>duplicate target database for standby from active database nofilenamecheck dorecover;
10、打開(kāi)備庫并啟動(dòng)apply
m. 打開(kāi)備庫并啟動(dòng)apply
duplicate 完成之后,備庫是mount的。
SQL> alter database open;
SQL> alter pluggable database primpdb open;
備庫:--啟動(dòng)real-time apply:
SQL> alter database recover managed standby database using current logfile disconnect from session;
主庫是事物庫,平時(shí)操作默認都是使用主庫,當需要查詢(xún)大量數據或則數據導出備份時(shí)可以切換到備庫(查詢(xún)庫)操作。(如:分查詢(xún)庫和事物庫,應用通過(guò)spring攔截器攔截到查詢(xún)操作,使用查詢(xún)庫,默認使用事物庫)。