溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

ORACLE 11G DATA GUARD基本原理是什么

發(fā)布時間:2021-11-10 14:40:32 來源:億速云 閱讀:119 作者:iii 欄目:關(guān)系型數(shù)據(jù)庫

本篇內(nèi)容主要講解“ORACLE 11G DATA GUARD基本原理是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“ORACLE 11G DATA GUARD基本原理是什么”吧!

1、DATAGUARD原理 

DATAGUARD是通過建立一個PRIMARY和STANDBY組來確立其參照關(guān)系。

STANDBY一旦創(chuàng)建,DATAGUARD就會通過將主數(shù)據(jù)庫(PRIMARY)的REDO傳遞給STANDBY數(shù)據(jù)庫,然后在STANDBY中應(yīng)用REDO實現(xiàn)數(shù)據(jù)庫的同步。

有兩種類型的STANDBY:物理STANDBY和邏輯STANDBY 

物理STANDBY提供與主數(shù)據(jù)庫完全一樣的拷貝(塊到塊),數(shù)據(jù)庫SCHEMA,包括索引都是一樣的。它是直接應(yīng)用REDO實現(xiàn)同步的。 

邏輯STANDBY則不是這樣,在邏輯STANDBY中,邏輯信息是相同的,但物理組織和數(shù)據(jù)結(jié)構(gòu)可以不同,它和主庫保持同步的方法是將接收的REDO轉(zhuǎn)換成SQL語句,然后在STANDBY上執(zhí)行SQL語句。邏輯STANDBY除災(zāi)難恢復外還有其它用途,比如用于用戶進行查詢和報表。

DATAGUARD包含三個服務(wù)(日志傳輸、日志應(yīng)用、角色轉(zhuǎn)換) 

日志傳輸服務(wù)控制REDO數(shù)據(jù)的傳輸(傳輸日志,實施數(shù)據(jù)庫保護模式)————–STANDBY上通過起用RFS進程接收REDO數(shù)據(jù)。 

日志應(yīng)用服務(wù)則一方面自動應(yīng)用日志,另一方面自動檢測STANDBY缺少的REDO,并從主數(shù)據(jù)庫或其它STANDBY中自動查詢出丟失的REDO。

DATAGUARD的幾種保護模式:最大保護,最大可用,最大性能 

最大保護是指除非REDO在至少一個STANDBY中可用,否則事務(wù)不能提交。如果在某個STANDBY中不可用,則主數(shù)據(jù)庫的操作被停止。通常受制約比較多,在生產(chǎn)環(huán)境中不是很常用(性價比不好)。 

最大可用是指如果STANDBY不可用,主數(shù)據(jù)庫仍然可以處理事務(wù),只是在問題被糾正后,STANDBY和主數(shù)據(jù)庫進行再同步。這樣的一個問題是:當再同步之前有FAILOVER時,有些數(shù)據(jù)可能會丟失。 

最大性能是指主數(shù)據(jù)庫的提交操作不等待STANDBY。PRIMARY和STANDBY松耦合,數(shù)據(jù)保護級別較低。

物理STANDBY可能的模式:只讀模式(OPEN READONLY)和恢復模式(MANANGED RECOVERY)

2、物理DATAGUARD實施簡要過程 

主數(shù)據(jù)庫的準備工作:FORCE LOGGING,ENABLE ARCHIVING,一個本地歸檔目的地。 

創(chuàng)建STANDBY數(shù)據(jù)庫: 

1.關(guān)閉主庫,冷備份主庫數(shù)據(jù)文件、日志文件和密碼文件,然后啟動主庫,在主庫上創(chuàng)建STANDBY的控制文件:alter database create standby controlfile as ‘文件名’ 

2.準備參數(shù)文件,將參數(shù)文件、備份的主庫文件和STANDBY控制文件拷貝到STANDBY系統(tǒng)。 

需要更改的參數(shù)有:standby_archive_dest—–接收的歸檔日志存放處 

db_file_name_convert和log_file_name_convert—–僅當主庫和STANDBY庫在同一系統(tǒng)下時用 

log_archive_dest_1—–本地歸檔目的地 

log_archive_dest_2=’service=standby’—–歸檔到STANDBY的目的地 

standby_file_management=auto 

remote_archive_enable=true 

fal_server 

fal_client 

instance_name—–當主庫和STANDBY庫在同一系統(tǒng)下時該參數(shù)用于區(qū)分主庫 

lock_name_space—–當主庫和STANDBY庫在同一系統(tǒng)下時指定STANDBY的實例名和INSTANCE_NAME相同 

3.如果是WINDOWS系統(tǒng),需要創(chuàng)建WINDOWS服務(wù)。 

4.配置兩臺機器的tnsnames.ora,雙方都能tnsping通 

5.在主庫和STANDBY庫上配置監(jiān)聽 

6.起用STANDBY系統(tǒng)上的死連接檢測:sqlnet.ora中設(shè)置sqlnet.expire_time=2 

7.在STANDBY上創(chuàng)建SPFILE 

8.啟動STANDBY: 

startup nomount 

alter database mount standby database 

9.初始化日志應(yīng)用服務(wù) 

alter database recover managed standby database disconnect from session;

3DATAGUARD維護

1.日志傳送服務(wù) 

有些情況下,你可能需要在歸檔日志和應(yīng)用日志之間有個時間間隔,此時可以通過在STANDBY上指定參數(shù)log_archive_dest_n中指定delay=minutes屬性。 

STANDBY上的日志應(yīng)該與主庫上的日志大小相同,另外STANDBY上的日志組應(yīng)該比主庫多,因為這樣歸檔操作才有時間完成。也就是RFS(日志接收)進程在使用STANDBY的日志前,不用等待該日志被歸檔。最簡單判斷日志組是否夠的方法是查看警告日志和RFS的TRACE文件。 

增加STANDBY日志文件的方法: 

alter database 語句中使用add standby logfile子句。相關(guān)視圖vstandbylog,vlogfile 

增加STANDBY日志組的方法: 

alter database add standby logfile group 10 (‘文件名1’,’文件名2’) size 100M對于多個 STANDBY共享歸檔日志文件目的地,有些情況下需要指定log_archive_dest_n參數(shù)的dependency屬性,該屬性的作用是說明該目的地依賴于父目的地的成功歸檔。 

參數(shù)log_archive_dest_n還可以指定reopen、max_failures、sync、async屬性。通過給該參數(shù)指定LGWR或者ARCH屬性以選擇是用LGWR還是ARCH進程傳送日志。 

用于日志接收的幾個進程是:LGWR,ARCH,RFS,F(xiàn)AL。FAL進程用于解決日志縫。 

設(shè)置數(shù)據(jù)保護模式的語句為:alter database set standby database to maximun(protection|availability|performance)

2.日志應(yīng)用服務(wù) 

對于物理STANDBY,日志應(yīng)用服務(wù)涉及到下面幾個進程:RFS,ARC,MRP。MRP是管理恢復進程。 

啟動STANDBY的恢復操作的幾個命令:alter database recover managed standby database(啟動前臺會話);alter database recover managed standby database disconnect from session(啟動后臺會話,也就是說會話可以繼續(xù)干別的事情);alter database recover managed standby database cancel(停止日志應(yīng)用). 

可以通過查詢視圖v$managed_standby查看日志應(yīng)用情況。

3.數(shù)據(jù)文件管理 

當主庫新創(chuàng)建數(shù)據(jù)文件,可定義參數(shù)standby_file_management為auto,讓standby也自動創(chuàng)建數(shù)據(jù)文件。如果主庫和standby的數(shù)據(jù)文件的目錄結(jié)構(gòu)不一樣,可以設(shè)定db_file_name_convert將主庫上的文件名轉(zhuǎn)換成standby上的文件名。如果standby_file_management設(shè)為auto,則不能在standby上重命名或創(chuàng)建數(shù)據(jù)文件、日志文件。 

每分鐘主庫會詢問standby是否有g(shù)ap,該行為被稱為heartbeat. 

可以查詢視圖varchivedgap,如果發(fā)現(xiàn)有GAP,則可以從主庫上將日志文件拷貝到standby,然后將相關(guān)文件注冊到standby,具體方法是:alterdatabaseregisterlogfile‘文件名′。當然也可以通過設(shè)置參數(shù)falserver,falclient,讓日志應(yīng)用服務(wù)自動處理gap問題。對于STANDBY日志應(yīng)用服務(wù),下面幾個視圖有助于監(jiān)控:vmanaged_standby,varchiveddeststatus,varchived_log,vlogstatus,vdataguard_status. 

可以設(shè)置參數(shù)log_archive_trace對歸檔進行不同級別的跟蹤。

4.角色轉(zhuǎn)換 

ORACLE支持兩種形式的角色轉(zhuǎn)換—-switchover和failover 

switchover包含兩個步驟,首先主庫被轉(zhuǎn)換成STANDBY,然后STANDBY被轉(zhuǎn)換成主庫 

switchover的準備工作:完成角色轉(zhuǎn)換需要改變的參數(shù)(必須改變所有STANDBY上的 log_archive_dest_n和log_archive_dest_state_n);確保主庫和所有STANDBY都有連接;確認沒有用戶連接到數(shù)據(jù)庫;對于RAC環(huán)境確保只有一個實例是活動狀態(tài);角色轉(zhuǎn)換之前,主庫實例應(yīng)該是OPEN狀態(tài),而STANDBY實例是MOUNT狀態(tài),因為這樣的話,轉(zhuǎn)換過程中STANDBY數(shù)據(jù)庫也可以應(yīng)用歸檔日志,如果STANDBY為READONLY,切換操作仍然可以進行,只是要花一點額外的時間;如果切換操作包含邏輯STANDBY,那么,主庫實例和STANDBY實例都必須為OPEN狀態(tài);將要轉(zhuǎn)換成主庫的STANDBY變成歸檔模式;取消在該STANDBY庫上的日志延遲。 

switchover的步驟:在當前主庫上,首先確認可以執(zhí)行switchover操作(select switchover_status from vdatabase,如果值為TOSTANDBY則可以切換,否則需要檢查當前DATAGUARD配置是否運行正常),然后將主庫切換為STANDBY(執(zhí)行ALTERDATABASECOMMITTOSWITCHOVERTOPHYSICALSTANDBY;這樣原控制文件被備份并生成新的STANDBY控制文件,然后只要重新啟動該庫為STANDBY模式就可以了);以上操作完成后,在原STANDBY數(shù)據(jù)庫上,需要查詢原主庫的切換信息是否被目標STANDBY接收到(SELECTSWITCHOVERSTATUSFROMVDATABASE;如果結(jié)果為SWITCHOVER PENDING說明STANDBY切換為PRIMARY是可行的,否則需要檢查DATAGUARD的配置是否運行正常),然后執(zhí)行ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;將STANDBY轉(zhuǎn)換成PRIMARY,并重新啟動該庫。這里需要說明的是如果該庫在線重做日志不存在,該切換語句會自動創(chuàng)建它們,然而這樣一來,會花費很長的時間。因此ORACLE建議手工增加在線重做日志。手工增加在線重做日志的方法有兩種:第一種是將原主庫的日志拷貝到原STANDBY,并且定義參數(shù)log_file_name_convert,讓它將standby和新的日志聯(lián)系起來。第二種方法是DROP所有目標STANDBY上存在的日志,并且用命令A(yù)LTER DATABASE ADD STANDBY LOGFILE創(chuàng)建新的日志。switchover的最后一步是將新生成的STANDBY轉(zhuǎn)換成恢復模式,并將新PRIMARY進行一次歸檔操作。

failover的準備工作:完成角色轉(zhuǎn)換需要改變的參數(shù)(必須改變所有STANDBY上的log_archive_dest_n和log_archive_dest_state_n);確保主庫和所有STANDBY都有連接;對于RAC環(huán)境確保只有一個實例是活動狀態(tài);如果要進行failover操作的STANDBY當前運行于最大保護模式,則應(yīng)該將它轉(zhuǎn)換成最大性能模式(通過命令A(yù)LTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;)

failover的步驟:首先發(fā)現(xiàn)并解決日志GAP的問題,然后從其它庫中將日志號高于本庫的日志拷貝過來并應(yīng)用這些日志,如果你沒有手工注冊新的日志,那么可以執(zhí)行下面的語句ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;否則需要執(zhí)行的語句為ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH SKIP STANDBY LOGFILE;接下來執(zhí)行ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;完成切換并重新啟動新的主庫,可能的話對主庫進行一次備份。

5.啟動STANDBY 

STARTUP NOMOUNT; 

ALTER DATABASE MOUNT STANDBY DATABASE; 

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

6.關(guān)閉STANDBY 

首先確認是否處于恢復狀態(tài):SELECT PROCESS, STATUS FROM V$MANAGED_STANDBY; 

取消恢復操作:ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; 

SHUTDOWN IMMEDIATE;

7.讓standby運行于只讀訪問模式 

啟動STANDBY為只讀模式: 

STARTUP NOMOUNT; 

ALTER DATABASE MOUNT STANDBY DATABASE; 

ALTER DATABASE OPEN READ ONLY; 

將恢復模式的STANDBY轉(zhuǎn)換成read only模式: 

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; 

ALTER DATABASE OPEN READ ONLY;

8.讓STANDBY從READ ONLY轉(zhuǎn)變成恢復模式 

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

i.讓為只讀模式的STANDBY執(zhí)行排序操作應(yīng)該注意的問題: 

排序操作不能使用非臨時表空間,臨時表空間必須是本地管理的,并且只包含臨時文件 

如果在創(chuàng)建STANDBY時主庫沒有臨時表空間,則需要在主庫上創(chuàng)建臨時表空間,并執(zhí)行ALTER SYSTEM SWITCH LOGFILE;將redo傳給STANDBY。如果要給STANDBY的臨時表空間增加臨時文件,需要先將STANDBY轉(zhuǎn)換成READ ONLY模式,并執(zhí)行命令A(yù)LTER TABLESPACE temp1 ADD TEMPFILE ‘/disk1/oracle/dbs/s_temp1.dbf’ SIZE 10M REUSE;增加臨時文件。

9.可以通過對STANDBY的備份實現(xiàn)對數(shù)據(jù)庫的備份。

10.主庫上的操作和STANDBY的應(yīng)對: 

如果你執(zhí)行ALTER DATABASE CLEAR UNARCHIVED LOGFILE或者打開數(shù)據(jù)庫時使用RESETLOGS,那么必須重新創(chuàng)建STANDBY。 

如果你在主庫上執(zhí)行ALTER DATABASE ENABLE|DISABLE,如果你改變表空間的狀態(tài),如果你設(shè)置了參數(shù)STANDBY_FILE_MANAGEMENT為AUTO并創(chuàng)建表空間或者增加數(shù)據(jù)文件,則不需要對STANDBY進行操作。 

如果你在主庫上刪除了表空間或者數(shù)據(jù)文件,你需要在STANDBY上等日志應(yīng)用后在操作系統(tǒng)上刪除相關(guān)數(shù)據(jù)文件。 

如果你在主庫上重命名了數(shù)據(jù)文件,你也要在STANDBY上重命名(因為是對控制文件的改變,所以沒有日志傳過去,因此兩邊都要進行相同的操作) 

如果你在主庫上改變了控制文件,你就要重新創(chuàng)建STANDBY控制文件或者重建STANDBY數(shù)據(jù)庫。 

如果你在主庫上增加或刪除日志文件,你也需要在STANDBY上進行同步變化。 

具體方法為:先取消恢復,如果STANDBY_FILE_MANAGEMENT為AUTO,則改為MANUAL,然后使用命令A(yù)LTER DATABASE ADD STANDBY LOGFILE ‘prmy3.log’ SIZE 100K;增加日志文件或者用命令A(yù)LTER DATABASE DROP STANDBY LOGFILE ‘prmy3.log’DROP掉日志文件,最后恢復參數(shù)STANDBY_FILE_MANAGEMENT的值。 

如果你在主庫上進行了nologging|unrecoverable等操作,則應(yīng)該將包含這些變化的表空間拷貝到STANDBY。 

如果你改變了主庫的參數(shù)文件,那么你也應(yīng)該改變STANDBY的參數(shù)文件。

三、監(jiān)控進程 

SELECT PROCESS, CLIENT_PROCESS, SEQUENCE#, STATUS FROM V$MANAGED_STANDBY;

m.監(jiān)控恢復操作的進程 

SELECT ARCHIVED_THREAD#, ARCHIVED_SEQ#, APPLIED_THREAD#, APPLIED_SEQ# FROM V$ARCHIVE_DEST_STATUS;

   DATA GUARD的最主要的功能是冗災(zāi)。當然根據(jù)配置的不同,DATA GUARD還可以具備以下特點:高可用、性能提升、數(shù)據(jù)保護以及故障恢復等。

    DATA GUARD可以分為物理STANDBY和邏輯STANDBY兩種。二者的最大差別在于,物理STANDBY應(yīng)用的是主庫的歸檔日志,而邏輯STANDBY應(yīng)用的是主庫的歸檔日志中提取的SQL語句。由于二者這一點的區(qū)別,決定了物理STANDBY無論從邏輯結(jié)構(gòu)和物理結(jié)構(gòu)都是和主庫保持一致,而邏輯STANDBY則只需保證邏輯結(jié)構(gòu)一致,且邏輯STANDBY在應(yīng)用SQL語句的時候,數(shù)據(jù)庫可以處于打開的狀態(tài)。

    如果從DATA GUARD的保護模式分,可以分為三種不同的保護模式:

    保護最大化:這種模式的配置可以保證主庫和備庫的同步,任何情況下主庫的損毀都不會導致已提交數(shù)據(jù)的丟失。如果主庫和備庫之間的網(wǎng)絡(luò)出現(xiàn)問題,或者備庫本身出現(xiàn)問題,都會導致主庫停止數(shù)據(jù)處理。

    可用最大化:這種模式和上面一種類似,也是會保證主庫和備庫的同步,區(qū)別在于,當網(wǎng)絡(luò)或備庫不可用時,主庫仍然可以繼續(xù)處理。

    性能最大化:主庫和備庫是異步的。這種模式可能在主庫出現(xiàn)損毀時,丟失一部分數(shù)據(jù)。但是這種模式對主庫負荷最小,因此具有最好的性能。

到此,相信大家對“ORACLE 11G DATA GUARD基本原理是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI