溫馨提示×

溫馨提示×

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

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

如何進行Dataguard日常管理

發布時間:2021-11-30 10:28:28 來源:億速云 閱讀:308 作者:柒染 欄目:關系型數據庫

這期內容當中小編將會給大家帶來有關如何進行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日常管理了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

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

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女