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