這期內容當中小編將會給大家帶來有關如何進行Dataguard日常管理,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
dataguard日常管理
1.fail over
2.switchover
3.更改保護模式
4.常用命令和視圖
fail over:
1.如果在dataguard中做了fail over,那么原來的standby 要成為primary要執行如下命令
A
首先查看v$archive_gap,然后手動將卻是的archive_log拷貝過來,然后執行如下命令:
sql> alter database register physical standby 'logfile_patch'
B
sql> alter database recover managed standby database cancel;
C
sql> alter database recover managed standby database finish ;
或
sql> alter database recover managed standby database finish force;
D
sql> alter dattabase commit to switchover to primary;
對于老的primary 數據庫需要轉化為standby 有兩種情況:
A.對于打開flashback 功能的數據庫比較簡單,現在新的primary數據庫上執行這個命令
select standby_became_primary_scn from v$database;
接著在新的standby的數據庫上執行
flashback database to scn nnnnnn
alter database convert to physical standby;
alter datbase recover managed standby database using current logfile disconnect from session;
在primary數據庫上做日志切換,查看新的standby數據庫日志是否正常。
select applied from v$archived_log;
B.如果沒有開啟flashback功能的話,重新創建dataguard
switchover:
在switchover的時候,最好讓兩個庫不要再有新的session進來,這樣可以快速switchover,避免發生異常
在switchover應注意的幾點:
1.在primary庫要有standby logfile。
2.檢查v$archive_gap,核查是否日志都已經歸檔到standby庫
實際操作:
1.在primary上查看switchover_status
SQL> select database_role,switchover_status from v$database;
DATABASE_ROLE SWITCHOVER_STATUS
---------------- --------------------
PRIMARY TO STANDBY
或
SQL> select database_role,switchover_status from v$database;
DATABASE_ROLE SWITCHOVER_STATUS
---------------- --------------------
PRIMARY SESSIONS ACTIVE
狀態說明:
TO STANDBY : 沒有session連接,可以直接switchover
SESSIONS ACTIVE :還有session連接,不能直接switchiver
如果SWITCHOVER_STATUS為to standby則可直接進行switchover,如果為session active則執行以下步驟:
(1)檢查是否standby沒接收到最新的日志,如果沒有則在primary手動切換
SQL> alter system switch logfile;
系統已更改。
然后在standby恢復
SQL> alter database recover managed standby database cancel;
數據庫已更改。
(2)檢查是否有活動的sql session
SQL> SELECT SID, PROCESS, PROGRAM FROM V$SESSION
2 WHERE TYPE = 'USER'
3 AND SID <>(SELECT DISTINCT SID FROM V$MYSTAT);
未選定行
如果有則將session kill
2。如果上述步驟都已執行而primary的switchover_status還是為session active則在正常switchover語句后加上WITH SESSION SHUTDOWN;
(1)primary進行switchover
SQL> alter database commit to switchover to physical standby WITH SESSION SHUTDOWN; ---在沒有活動的session下,不帶WITH SESSION SHUTDOWN 選項,我也測試switchover成功
數據庫已更改。
(2)重啟原primary數據庫到mount
SQL> select open_mode from v$database;
select open_mode from v$database
*
第 1 行出現錯誤:
ORA-01507: 未裝載數據庫
SQL> shutdown immediate;
ORA-01507: 未裝載數據庫
ORACLE 例程已經關閉。
SQL> startup mount;
ORACLE 例程已經啟動。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 176163716 bytes
Database Buffers 427819008 bytes
Redo Buffers 7135232 bytes
數據庫裝載完畢。
SQL>
查看原primary的switchover的角色
SQL> select database_role,switchover_status from v$database;
DATABASE_ROLE SWITCHOVER_STATUS
---------------- --------------------
PHYSICAL STANDBY TO PRIMARY
SQL>
(3)檢查原standby的switchover_status
SQL> select database_role,switchover_status from v$database;
DATABASE_ROLE SWITCHOVER_STATUS
---------------- --------------------
PHYSICAL STANDBY TO PRIMARY
(4)置于恢復模式
SQL> alter database recover managed standby database using current logfile disconnect from session;
數據庫已更改。
SQL>
3。切換原standby to primary
如果上述standby的SWITCHOVER_STATUS為to primary則正常切換,否則檢查是否有活動sql session,有則kill掉
再次檢查SWITCHOVER_STATUS,如果仍然不為to primary則在切換語句后加with session shutdown.
(1)切換standby to primary(standby需要置于接收日志的mount狀態)
SQL> alter database commit to switchover to primary with session shutdown;
數據庫已更改。
SQL> select open_mode from v$database;
OPEN_MODE
----------
MOUNTED
SQL> shutdown immediate;
ORA-01109: 數據庫未打開
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 234883972 bytes
Database Buffers 369098752 bytes
Redo Buffers 7135232 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL>
查看原standby庫switchover后的角色
SQL> select database_role from v$database;
DATABASE_ROLE
----------------
PRIMARY
SQL>
最后還要查看兩個庫的alert.log內容,看是否正常
dataguard保護模式:
在更改dataguard的保護模式,一定要在primary庫上執行;在primary更改的保護模式都會應用到standby庫
在更改保護模式時, 還要注意修改 log_archive_dest_n
SQL> alter system set log_archive_dest_2='SERVICE=orcldg LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcldg';
實際操作:
在primary庫上:
SQL> select open_mode,protection_mode,protection_level from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL
---------- -------------------- --------------------
READ WRITE MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
SQL> alter database set standby database to maximize protection;
alter database set standby database to maximize protection
*
第 1 行出現錯誤:
ORA-01126: 數據庫必須已裝載到此實例并且不在任何實例中打開
SQL> shutdown immediate;
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup mount
ORACLE 例程已經啟動。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 239078276 bytes
Database Buffers 364904448 bytes
Redo Buffers 7135232 bytes
數據庫裝載完畢。
SQL> alter database set standby database to maximize protection;
數據庫已更改。
SQL> alter database open;
數據庫已更改。
SQL>
在standby庫上:
正常來說,當primary更改完保護模式后,在standby也會隨著更改
SQL> select open_mode ,protection_mode,protection_level from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL
---------- -------------------- --------------------
MOUNTED MAXIMUM PROTECTION MAXIMUM PROTECTION
注意
當保護模式更改順序:
maximize protection ---> maximize availability ----> maximize performance
當在把dataguard的保護級別按這上面的順序減低的時候, 不需要primary庫在mount狀態,
primary在open狀態就可以直接執行保護模式更改命令
primary的保護模式:
SQL> select open_mode ,protection_mode,protection_level from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL
---------- -------------------- --------------------
MOUNTED MAXIMUM PROTECTION MAXIMUM PROTECTION
執行保護模式更改:
SQL> alter database set standby database to maximize protection;
數據庫已更改。
SQL> alter database set standby database to maximize availability;
數據庫已更改。
在查看primary的保護模式:
SQL> select open_mode,protection_mode,protection_level from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL
---------- -------------------- --------------------
READ WRITE MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
SQL>
當保護模式更改順序:
maximize protection <--- maximize availability <---- maximize performance
當在把dataguard的保護級別按這上面的順序升高的時候, 需要primary庫在mount狀態,如果在open更改會報如下錯誤:
SQL> select open_mode,protection_mode,protection_level from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL
---------- -------------------- --------------------
READ WRITE MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
SQL> alter database set standby database to maximize protection;
alter database set standby database to maximize protection
*
第 1 行出現錯誤:
ORA-01126: 數據庫必須已裝載到此實例并且不在任何實例中打開
步驟:
1. primary庫先 shutdown immediate
2. startup mount
3. alter database set standby database to maximize protection;
4. alter database open
dataguard常用命令和視圖
查看當前保護模式
SQL> select DATABASE_ROLE,PROTECTION_MODE,PROTECTION_LEVEL from v$database;
查看日志傳送方式
SQL> select dest_name,archiver from v$archive_dest;
首先停止standby的自動恢復狀態
SQL> alter database recover managed standby database finish;
添加standby logfile
SQL> alter database add standby logfile group 4 ('/oracle/product/10.2.0/db_1/oradata/sjh20g/redo04.log') size 50m;
更改保護模式
alter database set standby database to maximize protection;
alter database set standby database to maximize availability;
alter database set standby database to maximize performancen;
更改傳輸方式
SQL> alter system set log_archive_dest_2='SERVICE=orcldg LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcldg';
解決方法:將主備庫的flashback打開:
啟動到mount
SQL> select FLASHBACK_ON from v$database;
SQL> alter database flashback on;
取消自動恢復模式:
alter database recover managed standby database cancel;
alter database recover managed standby database finish;
alter database recover managed standby database finish force;
switchover 到 primary
alter dattabase commit to switchover to primary;
alter database commit to switchover to primary with session shutdown;
switchover 到 standby
alter database commit to switchover to physical standby WITH SESSION SHUTDOWN;
flashback database to scn nnnnnn
alter database convert to physical standby
alter datbase recover managed standby database using current logfile disconnect from session;
alter database register physical standby 'logfile_patch'
常用視圖:
v$managed_standby
v$archive_dest
v$archive_dest_status
v$archive_gap
v$archiveg_log
v$dataguard_status
v$database
v$log_history
v$log
v$logfile
注意事項:
1、如果在主庫執行 alter database clear unarchived logfile或alter database open resetlogs ,則dataguard要重建。
2、在連續恢復模式下工作之前,需要保證之前所有的歸檔日志己經應用到備用庫上。因為在連續恢復模式的情況下,oracle不會應用之前的
歸檔日志,而只會應用后面陸續到來的歸檔日志。
3、出現歸檔日志gap時,需要找出相應的歸檔日志, 然后將這些歸檔日志copy到備用節點的standby_archive_dest和
log_archive_dest目錄下面。需要注意的是log_archive_dest目錄下也需要copy。然后ALTER DATABASE RECOVER AUTOMATIC STANDBY DATABASE;
4、新建表、表空間、datafile都能通過日志應用到備庫,但新建一個臨時表空間,rename datafile 均不能應用到備庫上.
5、應當實時察看standby庫的alert文件,就能清晰明了地知道主備更新的情況。這也是排錯的重要方法,切記!!
failover和switchover
Failover : 將主數據庫offline,備用數據庫online,這種操作由系統和軟件失敗引起。 即使在備用數據庫上應用重做日志,也可能出現數
據丟失的現象,除非備用數據庫運行在 guaranteed protection 模式。 原主數據庫重新使用時必須重新啟動實例。 其它的備用數據庫也
需重新啟動實例。
Switchover : 故意將主數據庫offline,而將另一備用數據庫online,它能夠切換到備用數據庫而不需同步操作。如:可使用 Switchover
完成系統的平滑升級。 即使在備用數據庫上不應用重做日志,也不會造成數據的丟失。 數據庫不需重新啟動實例。這使主數據庫幾乎能立即
在備用數據庫上恢復它的功能,因此可經常進行定期維護而不需中斷操作。 Failover和Switchover的區別為:當Failover發生,備用
數據庫切換為主數據庫之后,它丟失了備用數據庫的所有能力,也就是說,不能再返回到備用模式;而Switchover可以,備用數據庫可切換
為主數據庫,也可從主數據庫再切換回備用數據庫。
上述就是小編為大家分享的如何進行Dataguard日常管理了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。