物理dataguard 正常切換 腳色轉換,switchover_status 狀態改變

来源:https://www.cnblogs.com/ritchy/archive/2018/12/28/10191706.html
-Advertisement-
Play Games

正常切換切換前: 主庫:SQL> select DATABASE_ROLE from v$database;DATABASE_ROLE PRIMARY SQL> select OPEN_MODE,PROTECTION_MODE,PROTECTION_LEVEL,SWITCHOVER_STATUS f ...


正常切換
切換前:
主庫:
SQL> select DATABASE_ROLE from v$database;
DATABASE_ROLE
----------------
PRIMARY

SQL> select OPEN_MODE,PROTECTION_MODE,PROTECTION_LEVEL,SWITCHOVER_STATUS from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
---------- -------------------- -------------------- ------------------
READ WRITE MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE TO STANDBY

SQL> SELECT COUNT(*) FROM V$SESSION WHERE USERNAME IS NOT NULL;
COUNT(*)
----------
1

在切換前,殺掉所有的資料庫連接 觀察SWITCHOVER_STATUS,如果是 TO STANDBY,則可以直接切換
如果SESSIONS ACTIVE ,則用

備用庫 :
SQL> select DATABASE_ROLE from v$database;
DATABASE_ROLE
----------------
PHYSICAL STANDBY

SQL> select OPEN_MODE,PROTECTION_MODE,PROTECTION_LEVEL,SWITCHOVER_STATUS from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
---------- -------------------- -------------------- ------------------
MOUNTED MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE NOT ALLOWED

說明:
主庫需要註意事項
A 如果switchover_status為TO_STANDBY說明可以轉換
直接轉換
alter database commit to switchover to physical standby;
B 如果switchover_status為SESSIONS ACTIVE 則關閉會話
SQL>alter database commit to switchover to physical standby with session shutdown;

在備庫中操作,查看備庫
SQL> select switchover_status from v$database;

A 如果switchover_status為TO_PRIMARY 說明標記恢復可以直接轉換為primary庫
SQL>alter database commit to switchover to primary

B 如果switchover_status為SESSION ACTIVE 就應該斷開活動會話
SQL>alter database commit to switchover to primary with session shutdown;

C 如果switchover_status為NOT ALLOWED 說明切換標記還沒收到,此時不能
執行轉換。

切換中 :

備用庫
SQL> select DATABASE_ROLE from v$database;

DATABASE_ROLE
----------------
PHYSICAL STANDBY

SQL> select OPEN_MODE,PROTECTION_MODE,PROTECTION_LEVEL,SWITCHOVER_STATUS from v$database;

OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
---------- -------------------- -------------------- ------------------
MOUNTED MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE SESSIONS ACTIVE

切換後備用的狀態,模式:

SQL> select DATABASE_ROLE from v$database;

DATABASE_ROLE
----------------
PRIMARY

SQL> select OPEN_MODE,PROTECTION_MODE,PROTECTION_LEVEL,SWITCHOVER_STATUS from v$database;

OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
---------- -------------------- -------------------- ------------------
READ WRITE MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE TO STANDBY

2. 檢查環境:

確認主庫和從庫間網路連接通暢;
確認沒有活動的會話連接在資料庫中;
PRIMARY資料庫處於打開的狀態,STANDBY資料庫處於MOUNT狀態;
確保STANDBY資料庫處於ARCHIVELOG模式;
如果設置了REDO應用的延遲,那麼將這個設置去掉;
確保配置了主庫和從庫的初始化參數,使得切換完成後,DATA GUARD機制可以順利的運行。
如果是最大保護模式,先變成最大性能模式:

3. 切換的順序: 先從主庫到備用,再從備庫到主庫
主切備:
SQL> select DATABASE_ROLE from v$database;

DATABASE_ROLE
----------------
PRIMARY

SQL> select OPEN_MODE,PROTECTION_MODE,PROTECTION_LEVEL,SWITCHOVER_STATUS from v$database;

OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
---------- -------------------- -------------------- ------------------
READ WRITE MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE TO STANDBY
SQL>
SQL> alter database commit to switchover to physical standby ;
Database altered.

SQL> shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup nomount ;
ORACLE instance started.

Total System Global Area 3242987696 bytes
Fixed Size 733360 bytes
Variable Size 1174405120 bytes
Database Buffers 2063597568 bytes
Redo Buffers 4251648 bytes
SQL> alter database mount standby database;
Database altered.

SQL> alter database recover managed standby database disconnect from session;
Database altered.

SQL> select DATABASE_ROLE from v$database;
DATABASE_ROLE
----------------
PHYSICAL STANDBY

SQL> select OPEN_MODE,PROTECTION_MODE,PROTECTION_LEVEL,SWITCHOVER_STATUS from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
---------- -------------------- -------------------- ------------------
MOUNTED MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE TO PRIMARY

備切主
SQL> select DATABASE_ROLE from v$database;
DATABASE_ROLE
----------------
PHYSICAL STANDBY

SQL> select OPEN_MODE,PROTECTION_MODE,PROTECTION_LEVEL,SWITCHOVER_STATUS from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
---------- -------------------- -------------------- ------------------
MOUNTED MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE TO PRIMARY

SQL> alter database commit to switchover to primary;
Database altered.

SQL>
SQL> shutdown immediate;
ORA-01507: database not mounted

ORACLE instance shut down.
SQL> startup ;
ORACLE instance started.

Total System Global Area 3242987696 bytes
Fixed Size 733360 bytes
Variable Size 1174405120 bytes
Database Buffers 2063597568 bytes
Redo Buffers 4251648 bytes
Database mounted.
Database opened.

修改主 備庫 的 tnsnames.ora
主庫SESSIONS ACTIVE是正常primary狀態下的結果。
DataGuard:PhysicalStandby Failover
接physical standby switchover
primary db :db2
standby db :db1

一般情況下failover都是表示primary資料庫癱瘓,最起碼也是起不來了,因此這種類型的切換基本上不需要primary資料庫做什麼操作。所以下列步驟中如果有提到primary和standby執行的,只是建議你如果primary還可以用,那就執行一下,即使不去執行,對failover來說也沒有關係
1.檢查歸檔文件是否連續,是否有gap
在standby庫執行
SQL> select THREAD#,LOW_SEQUENCE#,HIGH_SEQUENCE# from v$archive_gap;
2.如果步驟1查詢出來紀錄,則在primary庫上執行,否則跳過此步驟
在主庫上執行語句,按步驟1查詢出來的紀錄找出歸檔文件
 SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE# BETWEEN XX AND XX;
  --如果primary存在,拷貝相應的歸檔到STANDBY資料庫,並註冊.
  SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'xxx';

3.檢查歸檔文件是否完整
分別在primary/standby執行下列語句:
  SQL> select distinct thread#,max(sequence#) over(partition by thread#) a from v$archived_log;
  把相差的歸檔複製到待轉換的standby伺服器,並手工register

4.開始做failover
察看standby進程狀態
SQL> select process,client_process,sequence#,status from v$managed_standby;
PROCESS CLIENT_P SEQUENCE# STATUS
--------- -------- ---------- ------------
ARCH ARCH 30 CLOSING
ARCH ARCH 0 CONNECTED
RFS LGWR 31 IDLE
RFS ARCH 0 IDLE
RFS N/A 0 IDLE
MRP0 N/A 31 APPLYING_LOG

SQL> alter database recover managed standby database finish force ;
FORCE關鍵字將會停止當前活動的RFS進程,以便立刻執行failover。
  或
  SQL> alter database recover managed standby database finish skip standby logfile;
SQL> alter database commit to switchover to primary;
SQL> shutdown immediate
SQL> startup
SQL> select database_role,protection_mode,protection_level,open_mode from v$database;
DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL OPEN_MODE
---------------- -------------------- -------------------- ----------
PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE READ WRITE
Failover切換成功!


dataguard驗證是否正常同步的2種方法
1、
最簡單的方法,備庫查看最新的歸檔日誌是否apply,如果applied是yes則正常同步
主庫sqlplus>
alter system switch logfile;
備庫sqlplus>
select SEQUENCE#,applied,FIRST_TIME,NEXT_TIME from v$archived_log order by 1 desc;

2、
主庫LNS進程的BLOCK#是否變動、備庫查看RFS進程的BLOCK#是否變動,如果BLOCK#都變動,則正常同步
主庫sqlplus>
select PROCESS,STATUS,SEQUENCE#,BLOCK# from V$MANAGED_STANDBY where process='LNS';
備庫sqlplus>
select PROCESS,CLIENT_PROCESS,SEQUENCE#,BLOCK# from V$MANAGED_STANDBY where PROCESS='RFS';

dataguard主備延遲多長時間的2種查詢方法
1、
備庫sqlplus>
select value from v$dataguard_stats where name='apply lag';
2、
備庫sqlplus>
select ceil((sysdate-next_time)*24*60) "M" from v$archived_log where applied='YES' AND SEQUENCE#=(SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG WHERE applied='YES');

//
檢查主備兩邊的序號
select max(sequence#) from v$log;

備庫執行,查看是否有數據未應用
select name,SEQUENCE#,APPLIED from v$archived_log order by sequence#;
select SEQUENCE#,FIRST_TIME,NEXT_TIME ,APPLIED from v$archived_log order by 1;

檢查備庫是否開啟實時應用
select recovery_mode from v$archive_dest_status where dest_id=2;

檢查備庫狀態
select switchover_status from v$database; --發現狀態not allowed

看看進程MRP是否存在
ps aux|grep mrp --發現進程不存在

如果不存在執行以下:
alter database recover managed standby database using current logfile disconnect;
alter database recover managed standby database disconnect from session; --後臺執行
alter database recover managed standby database --前臺執行,執行這個可以看到報錯的情況
如果有報錯,查看alert日誌和log.xml日誌

驗證是否正常
select process,status from v$managed_standby;
select process,status,sequence# from v$managed_standby;
如果看到mrp0正常

6、以上步驟處理好後,如果數據還不正常,接著處理

col OPEN_MODE for a10
col DATABASE_ROLE for a20
col PROTECTION_MODE for a20
col PROTECTION_LEVEL for a20
col SWITCHOVER_STATUS for a20
select OPEN_MODE,DATABASE_ROLE,PROTECTION_MODE,PROTECTION_LEVEL,SWITCHOVER_STATUS from v$database;

轉載於

switch_status not allowed等物理dataguard 正常切換 腳色轉換
https://blog.csdn.net/demonson/article/details/17913217


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在這裡我就不說怎麼搭建 Mysql 資料庫了!如果有需要可以參照我前面的博文。 此博文主要說配置 Linux 資料庫 主從 下麵我們開始進入正題。 master:192.168.31.200 slave:192.168.31.250 主:192.168.31.200 配置如下: 1.修改 /etc/ ...
  • 索引小知識 篇幅有限,索引的基本知識我們就不贅述了,在此,我們嘗試說明其中的一個小點 B+樹與B樹的區別到底是什麼。 InnoDB是使用B+樹來實現其索引功能的。在B+樹中,內節點(非葉子節點)存儲了行數據的鍵,而葉子節點存儲了所有的行數據,而B樹的每個節點都存儲了真實的數據。這種數據結構,決定了兩 ...
  • 在PostgreSQL官方文檔:https://www.postgresql.org/download/linux/redhat/ 有選項和說明 1、檢查有沒安裝:rpg -ga | grep postgresql 2、下載 從上述網址得到YUM地址,即在終端輸入:yum install https ...
  • rocksdb(https://rocksdb.org.cn/)是臉書(facebook)公司開源的一個key-value存儲引擎,基於leveldb開發。rocksdb使用的是LSM存儲引擎,純c++編寫。rocksdb具有很好的讀寫性能。但是rocksdb的實際操作需要很好的閱讀rocksdb ...
  • 非select命令 資料庫 1.創建 //create database 庫名 2.刪除 //drop database 庫名,... 2.重命名//exec sp_renamedb '庫名','新庫名' 表 1.創建 //create table 表名 (列名 類型,...) 2.刪除 //dro ...
  • --聲明變數,同時為變數賦值 declare @n int=10 print @n --單獨使用一條語句為變數複製 set @n=20 print @n select @n=30 print @n --通過set賦值與select複製的區別 select @n=COUNT(*) from Emplo... ...
  • 1、MongoDB介紹 1.1 什麼是MongoDB ? MongoDB 是由C++語言編寫的,是一個基於分散式文件存儲的開源資料庫系統。 在高負載的情況下,添加更多的節點,可以保證伺服器性能。 MongoDB 旨在為WEB應用提供可擴展的高性能數據存儲解決方案。 MongoDB 將數據存儲為一個文 ...
  • 正文 生產環境中有一實例每天使用mysqldump備份時長達到了2個小時53分鐘,接近3個小時,還不算上備份文件歸檔的時間,這個時間對於邏輯備份來說有點久。為了提高邏輯備份效率,打算替換為使用mydumper。 對比mysqldump,mydumper具有如下特點: 1. 多線程備份 2. 備份執行 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...