Oracle 19c通過recover standby database from service修複GAP案例

来源:https://www.cnblogs.com/kerrycode/p/18356564
-Advertisement-
Play Games

案例介紹 環境介紹 操作系統: Red Hat Enterprise Linux release 8.10 (Ootpa)資料庫版本: Oracle 19.23.0.0.0 上周五,系統管理員需要給Linux升級補丁,UAT環境下的一套DG,資料庫沒有正常關閉的情況下,操作系統升級補丁後強制rebo ...


案例介紹

環境介紹

  • 操作系統: Red Hat Enterprise Linux release 8.10 (Ootpa)
  • 資料庫版本: Oracle 19.23.0.0.0

上周五,系統管理員需要給Linux升級補丁,UAT環境下的一套DG,資料庫沒有正常關閉的情況下,操作系統升級補丁後強制reboot了,周一早上處理的過程中遇到下麵錯誤:

備庫的告警日誌有下麵錯誤信息(GAP sequence提示信息):

PR00 (PID:145361): FAL: Failed to request gap sequence
PR00 (PID:145361):  GAP - thread 1 sequence 94-94
PR00 (PID:145361):  DBID 1790039322 branch 1173452819
PR00 (PID:145361): FAL: All defined FAL servers have been attempted
PR00 (PID:145361): -------------------------------------------------------------------------
PR00 (PID:145361): Check that the CONTROL_FILE_RECORD_KEEP_TIME initialization
PR00 (PID:145361): parameter is defined to a value that's sufficiently large
PR00 (PID:145361): enough to maintain adequate log switch information to resolve
PR00 (PID:145361): archived redo log gaps.
PR00 (PID:145361): -------------------------------------------------------------------------
2024-07-22T10:26:06.796447+08:00

主庫查詢


set linesize 720
col name for a60
col creator for a12
select name,creator,sequence#,applied,completion_time from v$archived_log where sequence#=94;


SQLset linesize 720
SQLcol name for a60
SQLcol creator for a12
SQLselect name,creator,sequence#,applied,completion_time from v$archived_log where sequence#=94;

NAME                                                         CREATOR       SEQUENCE# APPLIED   COMPLETIO
------------------------------------------------------------ ------------ ---------- --------- ---------
/gspdblog/gspprod_1173452819_1_94.arc                        ARCH                 94 NO        19-JUL-24

SQL

檢查確認主庫上的歸檔日誌gspprod_1173452819_1_94.arc已經被刪除了。

檢查備庫最後應用的歸檔日誌信息:


SQL> set pages 1000 lines 1000
SQLSELECT al.thrd "Thread", almax "Last Seq Received", lhmax "Last Seq Applied"
  2  FROM (select thread# thrd, MAX(sequence#) almax
  3  FROM v$archived_log
  4  WHERE resetlogs_change#=(SELECT resetlogs_change# FROM v$database) GROUP BY thread#) al,
  5  (SELECT thread# thrd,   MAX(sequence#) lhmax
  6  FROM v$log_history
  7  WHERE resetlogs_change#=(SELECT resetlogs_change# FROM v$database) GROUP BY thread#) lh
  8  WHERE al.thrd = lh.thrd;

    Thread Last Seq Received Last Seq Applied
---------- ----------------- ----------------
         1               111               93

SQL> 



SQL> col client_pid for a10
SQL> select inst_id, thread#, process, pid, status, client_process, client_pid,
  2  sequence#, block#, active_agents, known_agents from gv$managed_standby order by thread#, pid;

   INST_ID    THREAD# PROCESS   PID                      STATUS       CLIENT_P CLIENT_PID  SEQUENCE#     BLOCK# ACTIVE_AGENTS KNOWN_AGENTS
---------- ---------- --------- ------------------------ ------------ -------- ---------- ---------- ---------- ------------- ------------
         1          0 DGRD      143439                   ALLOCATED    N/A      N/A                 0          0             0       0
         1          0 DGRD      143441                   ALLOCATED    N/A      N/A                 0          0             0       0
         1          0 RFS       147165                   IDLE         UNKNOWN  148946              0          0             0       0
         1          0 RFS       147167                   IDLE         UNKNOWN  148942              0          0             0       0
         1          0 RFS       147169                   IDLE         UNKNOWN  148944              0          0             0       0
         1          1 ARCH      143437                   CLOSING      ARCH     143437             91     700416             0       0
         1          1 ARCH      143443                   CLOSING      ARCH     143443             92     704512             0       0
         1          1 ARCH      143445                   CLOSING      ARCH     143445             93     696320             0       0
         1          1 ARCH      143447                   CLOSING      ARCH     143447             90     708608             0       0
         1          1 MRP0      145359                   WAIT_FOR_GAP N/A      N/A                94          0             9       9
         1          1 RFS       145885                   IDLE         Archival 148936              0          0             0       0
         1          1 RFS       147161                   IDLE         LGWR     148948            112     321083             0       0

12 rows selected.

SQL

因為UAT環境沒有備份歸檔日誌,而主庫上都設置了一個作業清除兩天前的歸檔日誌(資源不足,需要定期清理歸檔日誌),正常情況下,這個作業並不會帶來什麼問題,而由於上周五升級系統補丁,資料庫停了2天,但是這個作業並沒有停止(crontab作業),周一處理的時候,這個作業已經將兩天前的歸檔日誌給清理了。導致備用資料庫無法獲取序列號(SEQUENCE#)為94的歸檔日誌。 此時由於出現歸檔日誌的GAP導致備用資料庫無法同步數據,這種情況下, 我們打算用Oracle 18.1提供的新特性來恢復物理備庫,如下所示

RMAN> RECOVER STANDBY DATABASE FROM SERVICE primary_connect_identifier;

This command will internally keep track of standby file locations, refresh standby controlfile from primary, 
update the new standby controlfile with standby file names, perform incremental backup on primary, transfer 
the backup-pieces over network to standby and perform recovery on standby

主要是這種新特性來恢復備用資料庫非常方便,一條命令即可搞定,相比之前的增量備份/還原要簡單很多。

操作步驟:

  1. 取消redo應用(備用資料庫)
SQL> alter database recover managed standby database cancel;

Database altered.
  1. 將備用資料庫啟動到MOUNT狀態
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area 8589932424 bytes
Fixed Size                 13932424 bytes
Variable Size            2348810240 bytes
Database Buffers         6207569920 bytes
Redo Buffers               19619840 bytes
Database mounted. 
  1. 執行下麵命令
# 註意,不執行此命令,會遇到RMAN-05150
SQL> recover managed standby database cancel;  
Media recovery complete.
SQL>

如果不執行上面命令,在RMAN做recover standby database時會遇到RMAN-05150錯誤,如下案例所示:

RMAN> recover standby database from service gsp;

Starting recover at 22-JUL-24
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 07/22/2024 10:46:14
RMAN-05150: Managed Recovery Process must be disabled before running RECOVER STANDBY DATABASE.

4: 備庫執行修複命令,開始線上刷新備庫

RMAN> recover standby database from service gsp;

註意,這裡RMAN連接資料庫的方式請選擇賬號密碼,不要使用系統認證方式,否則可能會遇到錯誤案例1.

正常情況下,你會看到類似這樣的輸出信息

.............................
starting media recovery

media recovery complete, elapsed time: 00:00:00
Finished recover at 22-JUL-24
Finished recover at 22-JUL-24

5:啟動資料庫恢復同步

在sqlplus中執行下麵命令

alter databae open;
alter pluggable database all open;
alter database recover managed standby database using current logfile disconnect;

下麵還介紹一下,在操作過程中容易踩到的坑或錯誤:

錯誤案例1

使用RMAN恢復備庫時,遇到ORA-17629: Cannot connect to the remote database server錯誤,如下所示

$ rman target /

Recovery Manager: Release 19.0.0.0.0 - Production on Mon Jul 22 10:59:06 2024
Version 19.23.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

connected to target database: gsp (DBID=1790039322, not open)

RMAN> recover standby database from service gsp;

Starting recover at 22-JUL-24
Oracle instance started

Total System Global Area    8589932424 bytes

Fixed Size                    13932424 bytes
Variable Size               2348810240 bytes
Database Buffers            6207569920 bytes
Redo Buffers                  19619840 bytes

contents of Memory Script:
{
   restore standby controlfile from service  'gsp';
   alter database mount standby database;
}
executing Memory Script

Starting restore at 22-JUL-24
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=5 device type=DISK

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 07/22/2024 10:59:33
RMAN-03015: error occurred in stored script Memory Script
ORA-17629: Cannot connect to the remote database server
ORA-17627: 
ORA-17629: Cannot connect to the remote database server

RMAN> exit

遇到這個錯誤,是因為RMAN連接資料庫使用操作系統認證,這種方式連接遠程資料庫(remote database server)就會有問題,應該改成賬號密碼認證方式連接資料庫。 這樣就不會遇到這個錯誤了。

正確方式

rman target sys/user_password

錯誤方式

rman target /

錯誤案例2

還原恢復過程遇到下麵一系列ORA錯誤。具體如下所示:

.......................................................................
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 07/22/2024 11:08:40
RMAN-03015: error occurred in stored script Memory Script
ORA-19849: error while reading backup piece from service gsp
ORA-19573: cannot obtain exclusive enqueue for datafile 18
ORA-19890: data file already in use
ORA-45909: restore, recover or block media recovery may be in progress
ORA-19660: some files in the backup set could not be verified
ORA-19661: datafile 18 could not be verified due to corrupt blocks
ORA-19849: error while reading backup piece from service gsp
ORA-19573: cannot obtain exclusive enqueue for datafile 18
ORA-19890: data file already in use
ORA-45909: restore, recover or block media recovery may be in progress

RMAN> 

檢查備庫

select process,status,sequence#,thread# from gv$managed_standby where process like 'MRP%';

SQLselect process,status,sequence#,thread# from gv$managed_standby where process like 'MRP%';

PROCESS   STATUS        SEQUENCE#    THREAD#
--------- ------------ ---------- ----------
MRP0      WAIT_FOR_GAP         94          1

在dgmgr中執行命令

DGMGRL> edit database gspro set state='APPLY-OFF';
Succeeded.
DGMGRL> 

重新驗證(備用資料庫)MRP進程是否已經結束。

SQL> select process,status,sequence#,thread# from gv$managed_standby where process like 'MRP%';

no rows selected

SQL> 

如上所示,MRP進程已經不存在了,就可以重新進行還原恢復操作。

參考資料:

  • ORA-19573 when trying to restore to standby with incremental backup From Primary or During any RMAN restore operation (Doc ID 1646232.1)
  • ORA-17629 with RMAN 'From Service' Command (Doc ID 2960469.1)
掃描上面二維碼關註我 如果你真心覺得文章寫得不錯,而且對你有所幫助,那就不妨幫忙“推薦"一下,您的“推薦”和”打賞“將是我最大的寫作動力! 本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接.
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • GreatSQL 並行Load Data加快數據導入 資料庫信息 資料庫版本:GreatSQL 8.0.32-25 Clickhouse表需要導入到 GreatSQL 中,表數據量龐大所以選用導出CSV的方式。 測試數據復現操作 load data MySQL load data 語句能快速將一個文 ...
  • 1.資料庫結構優化 一個好的資料庫設計方案對於資料庫的性能往往會起到事半功倍的效果。優化設計需要考慮數據冗餘、查詢和更新的速度、欄位的數據類型是否合理等多方面的因素。 將欄位很多的表分解成多個表 概述:對於欄位較多的表,如果有些欄位的使用頻率很低,可以將這些欄位分離出來形成新表。這樣可以減少表的數據 ...
  • 指標是反映企業的各項核心業務活動、管理成效的數據體系,指標體系作為聯結業務邏輯與數據實體的關鍵橋梁,是構建高質量數據統計的基礎單元,併在量化業務績效和效果評估中扮演著核心角色。 為了更好地服務於客戶並提供切實可行的實踐指導,自4月24日起,袋鼠雲將推出全新《指標體系建設實戰》系列直播。該系列內容覆蓋 ...
  • 摘要:當多個引擎/節點同時訪問和修改數據時,如何保證數據在各個引擎/節點之間的一致性成為了一項挑戰。本文將深入探討MySQL集群在保持數據一致性的解決方案。 本文分享自華為雲社區《【華為雲MySQL技術專欄】MySQL 8.0事務提交原理解析!》,作者:GaussDB資料庫。 1. 概述 MySQL ...
  • Flink CDC 於 2021 年 11 月 15 日發佈了最新版本 2.1,該版本通過引入內置 Debezium 組件,增加了對 Oracle 的支持。 Flink下載地址 https://flink.apache.org/downloads/ 其他必需的jar包(cdc、jdbc、mysq和o ...
  • 數字化轉型提速中!傳統農牧食品行業也尋求搭上數字化轉型的快車,通過物聯網、大數據、人工智慧等現代信息技術,實現生產、加工、流通等環節的智能化和自動化,提高生產效率、優化資源配置、提升產品質量,並滿足消費者對食品安全和可追溯性的需求。 在數字化浪潮的推動下,鐵騎力士集團作為一家歷史悠久的農牧食品企業, ...
  • 作者 | 月影幽篁 在當前數據驅動的業務環境中,快速且高效的數據處理能力至關重要。Apache SeaTunnel以其卓越的性能和靈活性,成為數據工程師和開發者的首選工具之一。本文將介紹如何在集群環境中搭建Apache SeaTunnel 2.3.5版本的 Zeta-Server,並概述其使用方法。 ...
  • 本文是翻譯MySQL InnoDB Cluster – how to manage a split-brain situation[1]這篇文章,如有翻譯不妥或不對的地方,敬請諒解與指正。請尊重原創和翻譯勞動成果,轉載的時候請註明出處。謝謝! 每次我展示MySQL InnoDB Cluster時,在 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...