【新(xīn)東網技(jì )術大咖帶您走進ADG】Oracle Active Data Guard(ADG)實現數據層讀寫分(fēn)離
發布時間: 2016-12-30 14:53:39
文(wén)/唐香龍 華西研發
新(xīn)東網自2001年成立以來,掌握大數據、雲計算、通信、物(wù)聯網及區(qū)塊鏈等信息技(jì )術,擁有(yǒu)一支逾16年經驗的強大IT團隊。為(wèi)沉澱企業技(jì )術實力,繼續發揮行業優勢,《東網快訊》特邀新(xīn)東網技(jì )術大咖帶您走進這些先進信息技(jì )術,揭秘新(xīn)東網16年來的技(jì )術成果,每周五發布。
資源劃分(fēn):
虛拟機 |
劃分(fēn)資源 |
IP_DB1(192.168.1.10) |
12C/32G/1.2T硬盤 |
IP_DB2(192.168.1.20) |
12C/32G/1.2T硬盤 |
系統結構
容災系統主要包括數據保護和應用(yòng)切換兩大方面,其中(zhōng)最為(wèi)重要的是數據保護部分(fēn)。除了要将這些數據存放在高可(kě)用(yòng)的存儲設備上之外,最重要的是這些關鍵數據應該在異地之間保持一緻,以使災難發生後,系統可(kě)以盡快恢複。下面是幾種主要的數據保護技(jì )術。
實現數據的異地複制,有(yǒu)軟件方式和硬件方式兩種途徑。軟件方式,是通過主機端軟件來實現,如第三方軟件或者數據庫廠家提供的遠(yuǎn)程數據容災工(gōng)具(jù)來實現業務(wù)數據的遠(yuǎn)程複制。硬件方式,是基于智能(néng)存儲系統的控制器的遠(yuǎn)程拷貝,可(kě)以在主、備存儲系統之間通過硬件實現複制。
在實際的容災系統中(zhōng),由于系統的環境不同,安(ān)全性要求不同以及采用(yòng)的軟硬件産(chǎn)品不同,數據複制過程中(zhōng)的工(gōng)作(zuò)機制也不盡相同。概括地講,數據複制的工(gōng)作(zuò)機制主要包括同步和異步兩種。同步遠(yuǎn)程鏡像(同步複制技(jì )術)是指通過遠(yuǎn)程鏡像軟件,将本地數據以完全同步的方式複制到異地,每一本地的I/O事務(wù)均需等待遠(yuǎn)程複制的完成确認信息,方予以釋放。異步遠(yuǎn)程鏡像(異步複制技(jì )術)保證在更新(xīn)遠(yuǎn)程存儲視圖前完成向本地存儲系統的基本I/O操作(zuò),而由本地存儲系統提供給請求鏡像主機的I/O操作(zuò)完成确認信息,遠(yuǎn)程的數據複制以後台同步的方式進行。因為(wèi)帶寬等因素限制,本次容災方案僅包括了異步複制的方式的讨論。
ADG實現原理(lǐ)
Oracle Active Data Guard 是當今保護企業核心資産(chǎn)(數據)的最有(yǒu)效解決方案,它能(néng)夠使數據在 24x7 的基礎上可(kě)用(yòng),而無論是否發生災難或其它中(zhōng)斷。
Oracle Active Data Guard 是管理(lǐ)、監控和自動化軟件的基礎架構,它創建、維護和監控一個或多(duō)個備用(yòng)數據庫,以保護企業數據結構不受故障、災難、錯誤和崩潰的影響。
Oracle Active Data Guard 使備用(yòng)數據庫保持為(wèi)與生産(chǎn)數據庫在事務(wù)上一緻的副本。這些備用(yòng)數據庫可(kě)能(néng)位于距生産(chǎn)數據中(zhōng)心數千公(gōng)裏的遠(yuǎn)程災難恢複站點,或者可(kě)能(néng)位于同一城市、同一校園乃至同一建築物(wù)内。當生産(chǎn)數據庫由于計劃中(zhōng)斷或意外中(zhōng)斷而變得不可(kě)用(yòng)時,Oracle Active Data Guard 可(kě)以将任意備用(yòng)數據庫切換到生産(chǎn)角色,從而使與中(zhōng)斷相關的停機時間減到最少,并防止任何數據丢失。
作(zuò)為(wèi) Oracle 數據庫企業版的一個特性推出的 Oracle Active Data Guard 能(néng)夠與其它的 Oracle 高可(kě)用(yòng)性 (HA) 解決方案(如真正應用(yòng)集群 (RAC) 和恢複管理(lǐ)器 (RMAN))結合使用(yòng),以提供業内前所未有(yǒu)的高水平數據保護和數據可(kě)用(yòng)性。
Oracle Active Data Guard 包括一個生産(chǎn)數據庫,也稱為(wèi)主數據庫,以及一個或多(duō)個備用(yòng)數據庫,這些備用(yòng)數據庫是與主數據庫在事務(wù)上一緻的副本。Data Guard 利用(yòng)重做數據保持這種事務(wù)一緻性。當主數據庫中(zhōng)發生事務(wù)時,則生成重做數據并将其寫入本地重做日志(zhì)文(wén)件中(zhōng)。通過 Oracle Active Data Guard,還将重做數據傳輸到備用(yòng)站點上,并應用(yòng)到備用(yòng)數據庫中(zhōng),從而使備用(yòng)數據庫與主數據庫保持同步。Oracle Active Data Guard 允許管理(lǐ)員選擇将重做數據同步還是異步地發送到備用(yòng)站點上。
備用(yòng)數據庫的底層技(jì )術是 Oracle Active Data Guard 重做應用(yòng)(物(wù)理(lǐ)備用(yòng)數據庫)。物(wù)理(lǐ)備用(yòng)數據庫在磁盤上擁有(yǒu)和主數據庫逐塊相同的數據庫結構,并且使用(yòng) Oracle 介質(zhì)恢複進行更新(xīn)。
Oracle Active Data Guard 簡化了主數據庫和選定的備用(yòng)數據庫之間的轉換和故障切換,從而減少了由計劃停機和計劃外故障所導緻的總停機時間。
實現前準備工(gōng)作(zuò)
a. 參數文(wén)件/etc/sysctl.conf中(zhōng)添加:
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應用(yòng)修改内核參數。
b. 在文(wén)件/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的環境變量,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應用(yòng)環境變量
d. 創建oracle用(yòng)戶和組:
Groupadd oinstall
Groupadd dba
Useradd -g oinstall -G dba oracle
開始安(ān)裝(zhuāng)數據庫
1) Grid安(ān)裝(zhuāng):
解壓grid安(ān)裝(zhuāng)包,進入解壓目錄執行:./runInstaller,根據提示安(ān)裝(zhuāng)好grid。
2) Database安(ān)裝(zhuāng):
解壓database安(ān)裝(zhuāng)包,進入解壓目錄執行:./runInstaller,根據提示安(ān)裝(zhuāng)好database并建好主庫。
開始配置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
主備的實例名(míng):prim(環境變量裏面的ORACLE_SID)
b. 主庫啓動force logging
c. 主庫啓動歸檔模式
d. 在主庫添加standby redo logfile
添加主庫redo個數+1個standby redo logfile:
查看主庫redo個數:
SQL>select member from v$logfile;
添加standby redo logfile:
SQL>Alter database add standby logfile '和主庫redo路徑一樣' size 50M;
e. 分(fēn)别在主備和備庫配置監聽并啓動
f. 在備庫創建必要目錄
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. 在主庫創建pfile文(wén)件并修改怕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. 用(yòng)新(xīn)參數重啓數據庫
i. 将主庫的口令文(wén)件copy到備庫
j. 将主庫的參數文(wén)件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. 用(yòng)spfile将備庫啓動到nomount狀态
l. 開始建立dg備庫
rman target sys/oracle auxiliary sys/oracle@stan
RMAN>duplicate target database for standby from active database nofilenamecheck dorecover;
10、打開備庫并啓動apply
m. 打開備庫并啓動apply
duplicate 完成之後,備庫是mount的。
SQL> alter database open;
SQL> alter pluggable database primpdb open;
備庫:--啓動real-time apply:
SQL> alter database recover managed standby database using current logfile disconnect from session;
主庫是事物(wù)庫,平時操作(zuò)默認都是使用(yòng)主庫,當需要查詢大量數據或則數據導出備份時可(kě)以切換到備庫(查詢庫)操作(zuò)。(如:分(fēn)查詢庫和事物(wù)庫,應用(yòng)通過spring攔截器攔截到查詢操作(zuò),使用(yòng)查詢庫,默認使用(yòng)事物(wù)庫)。