王宜明 趙兵
摘 要 介紹了創(chuàng)建基于DataGuard技術(shù)的數(shù)據(jù)庫(kù)系統(tǒng)的基本過程,并實(shí)現(xiàn)原有數(shù)據(jù)向新建數(shù)據(jù)庫(kù)的平滑遷移,最終將現(xiàn)有數(shù)據(jù)業(yè)務(wù)轉(zhuǎn)至DataGuard數(shù)據(jù)庫(kù)系統(tǒng),提高業(yè)務(wù)數(shù)據(jù)的安全性和穩(wěn)定性。
關(guān)鍵詞 DataGuard建設(shè);數(shù)據(jù)遷移
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1671-7597(2014)06-0046-02
氣象中的各項(xiàng)業(yè)務(wù)和科研活動(dòng)都離不開數(shù)據(jù)支持。隨著氣象現(xiàn)代化的深入發(fā)展,如何構(gòu)建一個(gè)高效的數(shù)據(jù)庫(kù)來(lái)儲(chǔ)存數(shù)據(jù)管理數(shù)據(jù)便成了一個(gè)重要的工作內(nèi)容。尤其重要的是如何使數(shù)據(jù)庫(kù)能穩(wěn)定持續(xù)的提供數(shù)據(jù)服務(wù),盡量減少宕機(jī)等故障帶來(lái)的業(yè)停滯便成了重中之重。
青島市氣象局近年來(lái)不斷積累了大量的數(shù)據(jù)。數(shù)據(jù)管理先后經(jīng)歷了從使用Excel、Access等儲(chǔ)存手段到后來(lái)使用大型數(shù)據(jù)庫(kù)來(lái)管理數(shù)據(jù)。這期間,青島市氣象局先后為2008年奧帆賽、殘奧帆賽以及每年各種大型活動(dòng)提供了良好的氣象服務(wù)。在日常業(yè)務(wù)和研發(fā)中,各種科研平臺(tái)、業(yè)務(wù)平臺(tái)、自研課題等也均依托數(shù)據(jù)庫(kù)進(jìn)行。數(shù)據(jù)庫(kù)隨各項(xiàng)服務(wù)活動(dòng)經(jīng)歷了嚴(yán)峻的考驗(yàn)。目前現(xiàn)狀是數(shù)據(jù)庫(kù)運(yùn)行在一臺(tái)高性能PC服務(wù)器上,配合有Oracle RMAN的備份策略,提供數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)查詢服務(wù)??梢韵胂螅窈髸?huì)有越來(lái)越多的業(yè)務(wù)平臺(tái)通過B/S架構(gòu)建立起來(lái)。而數(shù)據(jù)庫(kù)的地位也變得越來(lái)越重要,一旦數(shù)據(jù)庫(kù)出現(xiàn)問題造成極壞影響。因此,構(gòu)建一個(gè)高線穩(wěn)定的數(shù)據(jù)庫(kù)體系,變成了亟待解決的問題。結(jié)合現(xiàn)有的條件,決定采用Oracle DataGuard技術(shù)來(lái)解決此問題。
1 DataGuard技術(shù)介紹
DataGuard是一種數(shù)據(jù)庫(kù)級(jí)別的HA方案,其主要功能是數(shù)據(jù)庫(kù)的冗余、容災(zāi)和故障恢復(fù)。主備庫(kù)通過TCP/IP網(wǎng)絡(luò)利用傳輸重做日志文件的方式來(lái)保證數(shù)據(jù)一致。DataGuard有兩種類型,物理Standby和邏輯standby,其主要區(qū)別是,物理Standby的物理結(jié)構(gòu)和邏輯結(jié)構(gòu)同主庫(kù)一模一樣,而邏輯standby則只在邏輯結(jié)構(gòu)上與主庫(kù)保持一致。
DataGuard保護(hù)模式:
1)最大保護(hù)。在此種保護(hù)模式下,主庫(kù)的任何操作信息會(huì)同步應(yīng)用到備庫(kù)。一旦主庫(kù)檢測(cè)到備庫(kù)無(wú)法連接,則主庫(kù)停止提供服務(wù)直到備庫(kù)恢復(fù)后可繼續(xù)操作。
2)最大可用性。此種保護(hù)模式下,主庫(kù)和備庫(kù)之間數(shù)據(jù)同步會(huì)按照“最大保護(hù)”的模式進(jìn)行。一旦主庫(kù)檢測(cè)到備庫(kù)無(wú)法連接的時(shí)候,主庫(kù)不會(huì)停機(jī)而是自動(dòng)轉(zhuǎn)化為“最大性能”模式繼續(xù)提供服務(wù)。
3)最大性能。在此種保護(hù)模式下,主庫(kù)和備庫(kù)是通過異步的方式來(lái)傳輸重做日志文件。主庫(kù)將日志文件歸檔以后,將歸檔日志傳輸?shù)絺鋷?kù),備庫(kù)通過主庫(kù)傳輸過來(lái)的歸檔日志進(jìn)行恢復(fù)操作。從而保持與主庫(kù)的數(shù)據(jù)一致。
2 DataGuard的實(shí)現(xiàn)
2.1 架構(gòu)設(shè)計(jì)
如圖1所示,根據(jù)實(shí)際情況。主庫(kù)采用了一臺(tái)高性能服務(wù)器,操作系統(tǒng)采用的是RHEL 6,備庫(kù)建立在VMWare虛擬機(jī)系統(tǒng)上,配置與主庫(kù)一致的文件結(jié)構(gòu)和賬戶,Oracle安裝位置也盡皆相同。此舉是利用VMWare虛擬機(jī)系統(tǒng)的高可用性和高安全性,因?yàn)楫?dāng)VMWare系統(tǒng)的某一臺(tái)物理節(jié)點(diǎn)服務(wù)器出現(xiàn)故障時(shí),運(yùn)行其上的虛擬機(jī)會(huì)自動(dòng)遷移到其他正常服務(wù)器而不會(huì)失效,進(jìn)一步提升了DataGuard系統(tǒng)的安全性和可靠性。安裝過程此處不再贅述,需要注意的是Linux下安裝數(shù)據(jù)庫(kù)需要很多包支持,并且32位和64位的包均需安裝,不能遺漏,否則會(huì)造成在后續(xù)安裝報(bào)錯(cuò),建議配置yum源的方式來(lái)安裝。
圖1 DataGuard實(shí)施架構(gòu)圖
2.2 主要參數(shù)和步驟
主備庫(kù)參數(shù)配置:
通過主、備庫(kù)啟動(dòng)文件中的參數(shù)設(shè)置來(lái)完成DataGuard系統(tǒng)的配置。
主庫(kù)方面:
1)設(shè)置強(qiáng)制歸檔模式,設(shè)置數(shù)據(jù)庫(kù)運(yùn)行于歸檔模式:Alter system force logging,并使數(shù)據(jù)庫(kù)運(yùn)行于歸檔模式下。設(shè)置結(jié)束后通過查詢語(yǔ)句查看設(shè)置情況,如圖2所示。
圖2
2)主庫(kù)啟動(dòng)文件參數(shù)修改(此處僅列出搭建DataGuard需要的參數(shù)):
*.DB_UNIQUE_NAME='10GPRI'
*.FAL_CLIENT='10GSTD' *.FAL_SERVER='10GPRI'
*.log_archive_config='DG_CONFIG=(10GPRI,10GSTD)'
*.log_archive_dest_1='LOCATION=/u01/oracle/10201/database/orcl/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
*.log_archive_dest_2='SERVICE=10GSTD LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=10GSTD'
*.log_archive_dest_state_1='ENABLE' *.log_archive_dest_state_2='ENABLE'
*.log_file_name_convert='/u01/oracle/10201/database/orcl/archivelog','/u01/oracle/10201/database/orcl/archivelog'
備庫(kù)方面:
備庫(kù)的參數(shù)修改基本與主庫(kù)一致,需要注意的是備庫(kù)參數(shù)文件設(shè)置同主庫(kù)相反,發(fā)生FailOver切換時(shí)主備庫(kù)角色互換,主庫(kù)轉(zhuǎn)換為備庫(kù)后的日志應(yīng)用設(shè)置。
2.3 主備庫(kù)添加Standby Logfileendprint
此處操作要注意的是standy logfile的文件大小需同redo logfile的大小必須一致。而且Standby logfile的數(shù)目至少要比redo logfile的數(shù)目多一個(gè)。否則在備庫(kù)應(yīng)用時(shí)會(huì)報(bào)如下錯(cuò)誤:RSF[1]:No standby redo logfile created。
2.4 TNS Lisenter的修改
啟動(dòng)參數(shù)文件配置完成后,還需要修改tnsname.ora文件中的參數(shù)。確定主庫(kù)和備庫(kù)的連接參數(shù)。并在配置完成后用tnsping名來(lái)來(lái)測(cè)試主備庫(kù)是否能互相ping通。
主庫(kù)tnsname.ora配置(僅摘取關(guān)鍵部分):
ORCL =(ADDRESS = (PROTOCOL = TCP)(HOST =172.18.XXX.XXX)(PORT = 1521)
10GPRI =(ADDRESS = (PROTOCOL = TCP)(HOST = 172.18.XXX.XXX)(PORT = 1521))
10GSTD =(ADDRESS = (PROTOCOL= TCP)(HOST = 172.18.XXX.XXX)(PORT = 1521))
其中,ORCL和10GPRI參數(shù)中HOST的IP為主庫(kù)地址,10GSTD中HOST地址為備庫(kù)地址。備庫(kù)的tnsname.ora配置同主庫(kù)類似。需要注意備庫(kù)的IP地址對(duì)應(yīng)關(guān)系。
2.5 配置完成后的狀態(tài)確認(rèn)
DataGuard架設(shè)完成以后,可以通過查看DataBase的狀態(tài)來(lái)確認(rèn)是否成功,在主庫(kù)查詢DG狀態(tài),如圖3示。
圖3
3 舊數(shù)據(jù)庫(kù)數(shù)據(jù)遷移
DataGuard系統(tǒng)架設(shè)完畢并測(cè)試無(wú)誤后,可以著手實(shí)施數(shù)據(jù)的遷移工作。需要將舊數(shù)據(jù)庫(kù)的數(shù)據(jù)及對(duì)象全部遷移到新的數(shù)據(jù)庫(kù)中,所以要對(duì)數(shù)據(jù)進(jìn)行全庫(kù)導(dǎo)出。
3.1 數(shù)據(jù)導(dǎo)出
1)創(chuàng)建導(dǎo)出目錄,此處需要注意,導(dǎo)出目錄的實(shí)際物理結(jié)構(gòu)一定要在數(shù)據(jù)庫(kù)所在的服務(wù)器上,否則在導(dǎo)出過程中會(huì)提示導(dǎo)出目錄無(wú)效。用到的SQL操作語(yǔ)句為create directory dir_dump as ‘USER_DIR。
2)Grant read,write on directory dir_dump to USER
3)expdp '/ as sysdba' directory = dir_dump full=y dumpfile=fullexpdp.dmp logfile=fullexpdp.log parallel=2
3.2 數(shù)據(jù)導(dǎo)入
數(shù)據(jù)導(dǎo)入的操作同數(shù)據(jù)導(dǎo)出類似。也是需要?jiǎng)?chuàng)建目錄。執(zhí)行全庫(kù)導(dǎo)入。需要注意的是,導(dǎo)出是從Windows平臺(tái)導(dǎo)出。導(dǎo)出語(yǔ)句的寫法以及標(biāo)點(diǎn)符號(hào)的轉(zhuǎn)義。導(dǎo)入語(yǔ)句為: [orcl@OraServer]$:impdp /as sysdba/ directory=dir_dump dumpfile=fullexp.dmp logfile=fullimpdp.dmp parallel=2 table_exists_action=replace;
4 結(jié)束語(yǔ)
至此,數(shù)據(jù)庫(kù)完成了從單機(jī)到DataGuard的遷移和轉(zhuǎn)換。相比單機(jī)而言,DataGuard能提供數(shù)據(jù)保護(hù)和數(shù)據(jù)冗余,再配合RMAN,可以確保數(shù)據(jù)能安全高效的存儲(chǔ)和管理。但也有缺點(diǎn):在發(fā)生故障時(shí),依賴于數(shù)據(jù)庫(kù)運(yùn)行的各種應(yīng)用會(huì)報(bào)錯(cuò)而被用戶察覺。針對(duì)此問題,Oracle提出了RAC的解決方案,其真正做到了數(shù)據(jù)庫(kù)實(shí)例級(jí)別的冗余,在RAC的多節(jié)點(diǎn)環(huán)境中,任何某個(gè)單一節(jié)點(diǎn)出現(xiàn)故障都不會(huì)被用戶察覺,做到了對(duì)用戶的透明。下一步將考慮在建立基于RAC的數(shù)據(jù)庫(kù)系統(tǒng),配合DataGuard及備份策略,真正做到數(shù)據(jù)的“萬(wàn)無(wú)一失”。
參考文獻(xiàn)
[1]蓋國(guó)強(qiáng).oracleDBA手記[M].電子工業(yè)出版社,2010.endprint
此處操作要注意的是standy logfile的文件大小需同redo logfile的大小必須一致。而且Standby logfile的數(shù)目至少要比redo logfile的數(shù)目多一個(gè)。否則在備庫(kù)應(yīng)用時(shí)會(huì)報(bào)如下錯(cuò)誤:RSF[1]:No standby redo logfile created。
2.4 TNS Lisenter的修改
啟動(dòng)參數(shù)文件配置完成后,還需要修改tnsname.ora文件中的參數(shù)。確定主庫(kù)和備庫(kù)的連接參數(shù)。并在配置完成后用tnsping名來(lái)來(lái)測(cè)試主備庫(kù)是否能互相ping通。
主庫(kù)tnsname.ora配置(僅摘取關(guān)鍵部分):
ORCL =(ADDRESS = (PROTOCOL = TCP)(HOST =172.18.XXX.XXX)(PORT = 1521)
10GPRI =(ADDRESS = (PROTOCOL = TCP)(HOST = 172.18.XXX.XXX)(PORT = 1521))
10GSTD =(ADDRESS = (PROTOCOL= TCP)(HOST = 172.18.XXX.XXX)(PORT = 1521))
其中,ORCL和10GPRI參數(shù)中HOST的IP為主庫(kù)地址,10GSTD中HOST地址為備庫(kù)地址。備庫(kù)的tnsname.ora配置同主庫(kù)類似。需要注意備庫(kù)的IP地址對(duì)應(yīng)關(guān)系。
2.5 配置完成后的狀態(tài)確認(rèn)
DataGuard架設(shè)完成以后,可以通過查看DataBase的狀態(tài)來(lái)確認(rèn)是否成功,在主庫(kù)查詢DG狀態(tài),如圖3示。
圖3
3 舊數(shù)據(jù)庫(kù)數(shù)據(jù)遷移
DataGuard系統(tǒng)架設(shè)完畢并測(cè)試無(wú)誤后,可以著手實(shí)施數(shù)據(jù)的遷移工作。需要將舊數(shù)據(jù)庫(kù)的數(shù)據(jù)及對(duì)象全部遷移到新的數(shù)據(jù)庫(kù)中,所以要對(duì)數(shù)據(jù)進(jìn)行全庫(kù)導(dǎo)出。
3.1 數(shù)據(jù)導(dǎo)出
1)創(chuàng)建導(dǎo)出目錄,此處需要注意,導(dǎo)出目錄的實(shí)際物理結(jié)構(gòu)一定要在數(shù)據(jù)庫(kù)所在的服務(wù)器上,否則在導(dǎo)出過程中會(huì)提示導(dǎo)出目錄無(wú)效。用到的SQL操作語(yǔ)句為create directory dir_dump as ‘USER_DIR。
2)Grant read,write on directory dir_dump to USER
3)expdp '/ as sysdba' directory = dir_dump full=y dumpfile=fullexpdp.dmp logfile=fullexpdp.log parallel=2
3.2 數(shù)據(jù)導(dǎo)入
數(shù)據(jù)導(dǎo)入的操作同數(shù)據(jù)導(dǎo)出類似。也是需要?jiǎng)?chuàng)建目錄。執(zhí)行全庫(kù)導(dǎo)入。需要注意的是,導(dǎo)出是從Windows平臺(tái)導(dǎo)出。導(dǎo)出語(yǔ)句的寫法以及標(biāo)點(diǎn)符號(hào)的轉(zhuǎn)義。導(dǎo)入語(yǔ)句為: [orcl@OraServer]$:impdp /as sysdba/ directory=dir_dump dumpfile=fullexp.dmp logfile=fullimpdp.dmp parallel=2 table_exists_action=replace;
4 結(jié)束語(yǔ)
至此,數(shù)據(jù)庫(kù)完成了從單機(jī)到DataGuard的遷移和轉(zhuǎn)換。相比單機(jī)而言,DataGuard能提供數(shù)據(jù)保護(hù)和數(shù)據(jù)冗余,再配合RMAN,可以確保數(shù)據(jù)能安全高效的存儲(chǔ)和管理。但也有缺點(diǎn):在發(fā)生故障時(shí),依賴于數(shù)據(jù)庫(kù)運(yùn)行的各種應(yīng)用會(huì)報(bào)錯(cuò)而被用戶察覺。針對(duì)此問題,Oracle提出了RAC的解決方案,其真正做到了數(shù)據(jù)庫(kù)實(shí)例級(jí)別的冗余,在RAC的多節(jié)點(diǎn)環(huán)境中,任何某個(gè)單一節(jié)點(diǎn)出現(xiàn)故障都不會(huì)被用戶察覺,做到了對(duì)用戶的透明。下一步將考慮在建立基于RAC的數(shù)據(jù)庫(kù)系統(tǒng),配合DataGuard及備份策略,真正做到數(shù)據(jù)的“萬(wàn)無(wú)一失”。
參考文獻(xiàn)
[1]蓋國(guó)強(qiáng).oracleDBA手記[M].電子工業(yè)出版社,2010.endprint
此處操作要注意的是standy logfile的文件大小需同redo logfile的大小必須一致。而且Standby logfile的數(shù)目至少要比redo logfile的數(shù)目多一個(gè)。否則在備庫(kù)應(yīng)用時(shí)會(huì)報(bào)如下錯(cuò)誤:RSF[1]:No standby redo logfile created。
2.4 TNS Lisenter的修改
啟動(dòng)參數(shù)文件配置完成后,還需要修改tnsname.ora文件中的參數(shù)。確定主庫(kù)和備庫(kù)的連接參數(shù)。并在配置完成后用tnsping名來(lái)來(lái)測(cè)試主備庫(kù)是否能互相ping通。
主庫(kù)tnsname.ora配置(僅摘取關(guān)鍵部分):
ORCL =(ADDRESS = (PROTOCOL = TCP)(HOST =172.18.XXX.XXX)(PORT = 1521)
10GPRI =(ADDRESS = (PROTOCOL = TCP)(HOST = 172.18.XXX.XXX)(PORT = 1521))
10GSTD =(ADDRESS = (PROTOCOL= TCP)(HOST = 172.18.XXX.XXX)(PORT = 1521))
其中,ORCL和10GPRI參數(shù)中HOST的IP為主庫(kù)地址,10GSTD中HOST地址為備庫(kù)地址。備庫(kù)的tnsname.ora配置同主庫(kù)類似。需要注意備庫(kù)的IP地址對(duì)應(yīng)關(guān)系。
2.5 配置完成后的狀態(tài)確認(rèn)
DataGuard架設(shè)完成以后,可以通過查看DataBase的狀態(tài)來(lái)確認(rèn)是否成功,在主庫(kù)查詢DG狀態(tài),如圖3示。
圖3
3 舊數(shù)據(jù)庫(kù)數(shù)據(jù)遷移
DataGuard系統(tǒng)架設(shè)完畢并測(cè)試無(wú)誤后,可以著手實(shí)施數(shù)據(jù)的遷移工作。需要將舊數(shù)據(jù)庫(kù)的數(shù)據(jù)及對(duì)象全部遷移到新的數(shù)據(jù)庫(kù)中,所以要對(duì)數(shù)據(jù)進(jìn)行全庫(kù)導(dǎo)出。
3.1 數(shù)據(jù)導(dǎo)出
1)創(chuàng)建導(dǎo)出目錄,此處需要注意,導(dǎo)出目錄的實(shí)際物理結(jié)構(gòu)一定要在數(shù)據(jù)庫(kù)所在的服務(wù)器上,否則在導(dǎo)出過程中會(huì)提示導(dǎo)出目錄無(wú)效。用到的SQL操作語(yǔ)句為create directory dir_dump as ‘USER_DIR。
2)Grant read,write on directory dir_dump to USER
3)expdp '/ as sysdba' directory = dir_dump full=y dumpfile=fullexpdp.dmp logfile=fullexpdp.log parallel=2
3.2 數(shù)據(jù)導(dǎo)入
數(shù)據(jù)導(dǎo)入的操作同數(shù)據(jù)導(dǎo)出類似。也是需要?jiǎng)?chuàng)建目錄。執(zhí)行全庫(kù)導(dǎo)入。需要注意的是,導(dǎo)出是從Windows平臺(tái)導(dǎo)出。導(dǎo)出語(yǔ)句的寫法以及標(biāo)點(diǎn)符號(hào)的轉(zhuǎn)義。導(dǎo)入語(yǔ)句為: [orcl@OraServer]$:impdp /as sysdba/ directory=dir_dump dumpfile=fullexp.dmp logfile=fullimpdp.dmp parallel=2 table_exists_action=replace;
4 結(jié)束語(yǔ)
至此,數(shù)據(jù)庫(kù)完成了從單機(jī)到DataGuard的遷移和轉(zhuǎn)換。相比單機(jī)而言,DataGuard能提供數(shù)據(jù)保護(hù)和數(shù)據(jù)冗余,再配合RMAN,可以確保數(shù)據(jù)能安全高效的存儲(chǔ)和管理。但也有缺點(diǎn):在發(fā)生故障時(shí),依賴于數(shù)據(jù)庫(kù)運(yùn)行的各種應(yīng)用會(huì)報(bào)錯(cuò)而被用戶察覺。針對(duì)此問題,Oracle提出了RAC的解決方案,其真正做到了數(shù)據(jù)庫(kù)實(shí)例級(jí)別的冗余,在RAC的多節(jié)點(diǎn)環(huán)境中,任何某個(gè)單一節(jié)點(diǎn)出現(xiàn)故障都不會(huì)被用戶察覺,做到了對(duì)用戶的透明。下一步將考慮在建立基于RAC的數(shù)據(jù)庫(kù)系統(tǒng),配合DataGuard及備份策略,真正做到數(shù)據(jù)的“萬(wàn)無(wú)一失”。
參考文獻(xiàn)
[1]蓋國(guó)強(qiáng).oracleDBA手記[M].電子工業(yè)出版社,2010.endprint