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