使用 RMAN 備份從物件儲存復原資料庫

本文說明如何復原儲存在物件儲存中的復原管理程式 (RMAN) 備份。

先決條件

您需要下列項目:

假設

以下程序假設下列事項:

在資料庫系統上設定儲存

  1. 將 SSH 連線至資料庫系統。

    ssh -i <private_key_path> opc@<db_system_ip_address>
  2. 以 opc 身分登入,然後 sudo 給 root 使用者。使用連字號的 sudo su - 來呼叫 root 使用者的設定檔,這會將 PATH 設定為 dbcli 目錄 (/opt/oracle/dcs/bin)。

    login as: opc
    sudo su -
  3. 您可以使用現有的空白資料庫本位目錄,或為回復建立新的資料庫本位目錄。請使用適用的命令來協助您完成此步驟。

    如果您將使用現有的資料庫本位目錄:

    • 使用 Dbhome 命令列出資料庫本位目錄。

      dbcli list-dbhomes

      輸出:

      ID                                       Name                 DB Version Home Location
      ---------------------------------------- -------------------- ---------- ---------------------------------------------
      2e743050-b41d-4283-988f-f33d7b082bda     OraDB12102_home1     12.1.0.2   /u01/app/oracle/product/12.1.0.2/dbhome_1
    • 使用資料庫命令可確保資料庫本位目錄未與任何資料庫關聯。

    如有需要,請使用 Dbhome 命令來建立回復的資料庫本位目錄。

  4. 使用 Dbstorage Commands 設定 DATA、RECO 以及 REDO 儲存的目錄。下列範例會為糾正資料庫建立 10GB 的 ACFS 儲存體。

    dbcli create-dbstorage --dbname rectest --dataSize 10 --dbstorage ACFS

注意:回復 11.2 版資料庫時,必須指定 ACFS 儲存體。

執行資料庫回復和復原

  1. SSH 對資料庫系統進行登入,使用 opc 登入,然後成為 oracle 使用者。

    sudo su - oracle
  2. 在 /etc/oratab 中為資料庫建立項目。使用與原始資料庫相同的 SID。

    db1:/u01/app/oracle/product/12.1.0.2/dbhome_1:N
  3. 使用 oraenv 公用程式設定 ORACLE_HOME 和 ORACLE_SID 環境變數。

    . oraenv
  4. 取得原始資料庫的 DBID。這可以從備份媒體上 controlfile 自動備份的檔案名稱取得。檔案名稱會包含包含 DBID 的字串。字串的一般格式為 c-DDDDDDDDDDDD-YYYYMMDD-NN,其中 DDDDDDDDDDDD 是 DBID,YYYYMMDD 是備份的建立日期,而 NN 是讓檔案名稱成為唯一的序號。以下範例中的 DBID 為 1508405000。您的 DBID 將會不同。

    使用下列 curl 語法執行物件儲存的一般查詢。紅色參數與您安裝備份模組時所指定的參數相同,如使用 RMAN 備份資料庫至物件儲存中在資料庫系統上安裝備份模組所述。

    curl -u '<user_ID>.com:<auth_token>' -v https://swiftobjectstorage.<region_name>.oraclecloud.com/v1/<object_storage_namespace>

    若要查詢區域名稱,請參閱區域和可用性網域。

    舉例而言:

    curl -u 'djones@mycompany.com:1cnk!d0++ptETd&C;tHR' -v https://swiftobjectstorage.<region_name>.oraclecloud.com/v1/myobjectstoragenamespace

    若要從控制檔名稱取得 DBID,請使用下列語法:

    curl -u '<user_id>.com:<auth_token>' -v https://swiftobjectstorage.<region_name>.oraclecloud.com/v1/<object_storage_namespace>/<bucket_name>?prefix=sbt_catalog/c-

    舉例而言:

    curl -u 'djones@mycompany.com:1cnk!d0++ptETd&C;tHR' -v https://swiftobjectstorage.<region_name>.oraclecloud.com/v1/myobjectstoragenamespace/dbbackups/?prefix=sbt_catalog/c-

    在下面的範例輸出中,1508405000 為 DBID。

    {
        "bytes": 1732,
        "content_type": "binary/octet-stream",
        "hash": "f1b61f08892734ed7af4f1ddaabae317",
        "last_modified": "2016-08-11T20:28:34.438000",
        "name": "sbt_catalog/c-1508405000-20160811-00/metadata.xml"
    }
  5. 執行 RMAN 並連線到目標資料庫。您不需要建立 pfile 或 spfile,也不需要使用備份 controlfile。這些步驟將在下列步驟中還原。請注意,目標資料庫為 (not started)。這是正常的,目前預期會發生此情況。

    rman target /

    輸出:

    Recovery Manager: Release 12.1.0.2.0 - Production on Wed Jun 22 18:36:40 2016
    Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.
    connected to target database (not started)
  6. 使用上面取得的值設定 DBID。

    set dbid 1508405000;
  7. 執行下列命令。如果沒有伺服器參數檔,RMAN 會嘗試以虛擬伺服器參數檔啟動執行處理。ORA-01078 和 LRM-00109 錯誤為正常錯誤,可以予以忽略。

    STARTUP NOMOUNT
    startup failed: ORA-01078: failure in processing system parameters
    LRM-00109: could not open parameter file '/u01/app/oracle/product/12.1.0.2/dbhome_1/dbs/initdb1.ora'
    
    starting Oracle instance without parameter file for retrieval of spfile
    Oracle instance started
    
    Total System Global Area    2147483648 bytes
    
    Fixed Size                     2944952 bytes
    Variable Size                847249480 bytes
    Database Buffers            1254096896 bytes
    Redo Buffers                  43192320 bytes
  8. 從 autobackup 回復伺服器參數檔。

    安裝「備份模組」時,SBT_LIBRARY 與 -libDir 參數指定的程式庫相同,例如 /home/oracle/lib/。

    安裝「備份模組」時,OPC_PFILE 是使用 -configfile 參數指定的相同檔案,例如 /home/oracle/config。

    set controlfile autobackup format for device type sbt to '%F';
    run {
      allocate channel c1 device type sbt PARMS  'SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';
      restore spfile from autobackup;
    }
  9. 建立 audit_file_dest 的目錄。預設值為 /u01/app/oracle/admin/$ORACLE_SID/adump。您可以透過搜尋字串的 spfile audit_file_dest 來查看原始資料庫所使用的設定。

    strings ${ORACLE_HOME}/dbs/spfile${ORACLE_SID}.ora | grep audit_file_dest
    
    *.audit_file_dest='/u01/app/oracle/admin/db1/adump'
    
    mkdir -p /u01/app/oracle/admin/db1/adump
  10. 如果在原始資料庫上啟用區塊變更追蹤,請建立區塊變更追蹤檔的目錄。這將會是 db_create_file_dest 底下的目錄。搜尋 spfile 以取得目錄的名稱。

    strings ${ORACLE_HOME}/dbs/spfile${ORACLE_SID}.ora | grep db_create_file_dest
    
    *.db_create_file_dest='/u02/app/oracle/oradata/db1'
    
    mkdir -p /u02/app/oracle/oradata/db1/<$ORA_UNQNAME if available or database name>/changetracking
  11. 使用回復的伺服器參數檔重新啟動執行處理。

    STARTUP FORCE NOMOUNT;
  12. 從 RMAN 自動備份回復控制檔並掛載資料庫。

    set controlfile autobackup format for device type sbt to '%F';
    run {
      allocate channel c1 device type sbt PARMS 'SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';
      restore controlfile from autobackup;
      alter database mount;
    }
  13. 回復和復原資料庫。

    RESTORE DATABASE;
    RECOVER DATABASE;
  14. RMAN 將使用存檔重做日誌來復原,直到找不到其他日誌為止。當 RMAN 在備份中套用最後一個存檔重做日誌,而且找不到其他日誌時,就會發生類似下方的錯誤。

    unable to find archived log
    archived log thread=1 sequence=29
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of recover command at 06/28/2016 00:57:35
    RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 29 and starting SCN of 2349563
  15. 使用 resetlogs 開啟資料庫。

    ALTER DATABASE OPEN RESETLOGS;

復原已完成。資料庫將會有截至上次備份之存檔重做日誌為止的所有確認交易。