更新失敗疑難排解

更新作業可能會因各種原因而失敗。一般而言,作業會失敗,因為資料庫節點已關閉、檔案系統上的空間不足,或資料庫主機無法存取物件存放區。

本文包含的資訊可協助您判斷失敗原因並修正問題。根據錯誤條件,資訊會組織成數個區段。

如果您已經知道原因,您可以跳至具有建議解決方案的主題。否則,請使用識別失敗原因主題開始作業。

本文涵蓋下列主題:

提示:您也可以建立序列主控台連線,以單一使用者模式對系統進行疑難排解。如需在 OCI 主控台中建立序列主控台連線的資訊,請參閱管理資料庫系統的序列主控台連線。

識別失敗原因

在 OCI 主控台中,您可以檢視資料庫系統的更新歷史記錄或個別資料庫,以識別失敗的更新作業。未順利套用的更新會顯示失敗狀態,並包含造成失敗之錯誤的簡短描述。如果錯誤訊息包含的資訊不足以指向解決方案,您可以使用資料庫 CLI 與記錄檔來收集更多資料。然後,如需解決方案,請參閱本文中適用的章節。

涵蓋的主題如下:

識別更新作業失敗的根本原因

  1. 以 root 使用者身分登入主機,並瀏覽至 /opt/oracle/dcs/bin/ 目錄。
  2. 判斷在資料庫上執行的作業順序。

    dbcli list-jobs

    請注意列出的最後一個工作 ID,其狀態不是成功。

  3. 使用上一個步驟記下的工作 ID,使用下列命令來檢查該工作的詳細資訊:

    dbcli describe-job -i <job_ID> -j

    一般而言,執行此命令足以顯示失敗的根本原因。

  4. 如果您需要更多資訊,請檢閱 /opt/oracle/dcs/log/dcs-agent.log 檔案。

    您可以使用此步驟 2 中工作報表所傳回的時戳,在此檔案中找到工作 ID。

  5. 如果更新失敗是在雙節點 RAC 資料庫上,請在兩個節點上執行步驟 3 和 4。

資料庫服務代理程式問題

您的資料庫會使用代理程式架構,透過 Oracle Cloud 平台進行管理。

涵蓋的主題如下:

解決因停止的代理程式而導致的更新失敗

有時您可能需要重新啟動 dcsagent 程式 (如果其狀態為停止 / 等待 ),才能解決更新失敗。

重新啟動資料庫服務代理程式

  1. 從命令提示中,檢查代理程式的狀態:

    initctl status initdcsagent
  2. 如果代理程式處於停止 / 等待狀態,請嘗試重新啟動代理程式:

    initctl start initdcsagent
  3. 再次檢查代理程式的狀態,確認代理程式的狀態為開始 / 執行:

    initctl status initdcsagent

解決需要更新之代理程式所導致的更新失敗

如果需要更新您的代理程式,更新作業也會失敗。系統會針對此失敗提供下列錯誤訊息:

Current DcsAgent version is less than or equal to minimum required version.

若要解決此問題,請執行下節中的步驟。

請洽詢 Oracle Support 以更新 OCI 資料庫服務代理程式

  1. 確認代理程式 (dcsagent) 和「DCS 管理員」程式 (dcsadmin) 正在使用下列命令執行:

    initctl status initdcsagent
    initctl status initdcsadmin
  2. 如果這些程式不在執行中,請使用下列指令來重新啟動它們:

    initctl start initdcsagent
    initctl start initdcsadmin
  3. 請依照取得其他說明中的指示收集您的 DCS 代理程式日誌檔。
  4. 請聯絡 Oracle Support 以取得更新代理程式的協助。

物件存放區連線問題

資料庫系統和資料庫更新都儲存在 OCI Object Storage 中。因此,成功的更新作業需要資料庫系統主機與下載更新的來源物件儲存位置之間的連線。

涵蓋的主題如下:

確定您的資料庫主機可以連線至 OCI 物件儲存

  1. 使用下列命令驗證主機可存取 OCI 物件儲存:

    dbcli describe-latestpatch

    表示成功的範例輸出:

    componentType   availableVersion
    --------------  --------------
    gi              12.2.0.1.180417
    gi              12.1.0.2.180417
    db              11.2.0.4.180417
    db              12.2.0.1.180417
    db              12.1.0.2.180417
    oak             12.1.2.11.3
    oak             12.2.1.1.0

    指示失敗的範例輸出:

    DCS-10032:Resource patch metadata is not found.Failed to download patchmetadata from objectstore
  2. 如果您無法連線至物件存放區,請參閱使用主控台備份資料庫以瞭解如何設定物件存放區連線。

主機議題

資料庫主機上的一或多個下列條件可能導致更新作業失敗:

涵蓋的主題如下:

更新作業期間未執行資料庫節點

進行更新作業時 (不論是更新資料庫系統或資料庫本位目錄),資料庫的所有節點都必須為作用中且在執行中。使用 OCI 主控台檢查每個節點的狀態是否為 AVAILABLE,並視需要啟動節點。

檔案系統已滿

更新作業在主機檔案系統上的 /u01 目錄中至少需要 15 GB 的可用空間。使用主機上的 df -h 命令來檢查可用的空間。如果檔案系統的空間不足,您可以移除舊的記錄檔或追蹤檔來釋出空間。

Oracle Clusterware 問題

涵蓋的主題如下:

Oracle Clusterware 未執行

Oracle Clusterware 可讓伺服器彼此通訊,使它們能夠以集體單位運作。叢集軟體程式必須在資料庫系統上啟動並執行,才能完成更新作業。有時您可能需要重新啟動 Oracle Clusterware,才能解決更新失敗。

重新啟動 Oracle Clusterware

  1. 從命令提示中,檢查 Oracle Clusterware 的狀態:

    crsctl check crs

    輸出:

    CRS-4638: Oracle High Availability Services is online
    CRS-4537: Cluster Ready Services is online
    CRS-4529: Cluster Synchronization Services is online
    CRS-4533: Event Manager is online

    如需更詳細的狀態資訊,您可以執行 crsctl stat res -t。

  2. 如果 Oracle Clusterware 未連線,請嘗試重新啟動程式:

    crsctl start crs
  3. 檢查 Oracle Clusterware 的狀態,確認它已上線:

    crsctl check crs

未更新 Oracle Grid Infrastructure (GI)

在更新該資料庫的資料庫系統之前,嘗試更新資料庫時會發生此問題。錯誤描述指示必須先更新 Oracle Grid Infrastructure。若要解決此問題,請將資料庫系統更新為最新的可用版本。更新資料庫系統之後,您可以重試資料庫更新作業。

若要取得資料庫系統的目前和最新可用 GI 版本,請使用下列命令:

dbcli describe-component

資料庫問題

不正確的資料庫狀態可能會導致更新失敗。

涵蓋的主題如下:

更新作業期間未執行資料庫

資料庫必須為作用中狀態且在執行中,所有要完成的更新作業。否則,您必須手動執行資料修正作業。

檢查資料庫是否在作用中並執行中

使用下列命令來檢查資料庫的狀態,並確定已解決可能讓資料庫處於不適當狀態的任何問題:

srvctl status database -d <db_unique_name> -verbose

系統會傳回包含資料庫實例狀態的訊息。執行處理狀態必須為開啟,更新作業才會成功。

如果資料庫未執行,請使用下列命令來啟動資料庫:

srvctl start database -d <db_unique_name> -o open

如果資料庫已掛載但沒有開啟狀態,請使用下列命令來存取 SQL*Plus 命令提示字元,並將狀態設為開啟:

sqlplus / as sysdba
alter database open;

執行資料修正作業

執行 datapatch 命令之前,請確定所有可插式資料庫 (PDB) 都已開啟。如果要開啟 PDB,您可以使用 SQL*Plus 對 PDB 執行 ALTER PLUGGABLE DATABASE <pdb_name> OPEN READ WRITE;。

$ORACLE_HOME/OPatch/datapatch

datapatch 命令應該在每個資料庫本位目錄執行。

取得其他說明

如果您無法使用本文中的資訊來解決問題,請遵循以下程序來收集相關的資料庫和診斷資訊。在您收集此資訊後,請聯絡 Oracle Support 。

涵蓋的主題如下:

收集關於失敗工作的診斷資訊

  1. 以 root 使用者身分登入主機,並瀏覽至 /opt/oracle/dcs/bin/ 目錄。
  2. 執行下列兩個命令以產生失敗之工作的相關資訊:

    dbcli list-jobs | grep -i <dbname>
    dbcli describe-job -i <job_ID> -j

    第二個命令中的 <jobID> 應該是第一個命令所報告之最新失敗工作的 ID。

  3. 執行診斷收集器命令檔,以建立含有 Oracle Support Services 診斷資訊的壓縮檔。

    diagcollector.py

    此指令會在 /tmp 目錄中建立名為 diagLogs-<timestamp>.zip 的檔案。

收集 DCS 代理程式日誌檔

若要收集 DCS 代理程式日誌檔,請執行下列作業:

  1. 以 opc 使用者身分登入。
  2. 執行下列命令:

    sudo /opt/oracle/dcs/bin/diagcollector.py
  3. 系統會傳回訊息,指出代理程式日誌可在指定目錄的 zip 檔案中使用。舉例而言:

    Log files collected to :/tmp/dcsdiag/diagLogs-1234567890.zip
    Logs are being collected to:
    /tmp/dcsdiag/diagLogs-1234567890.zip

收集 Oracle Grid Infrastructure 和資料庫日誌檔

如果 Oracle Grid Infrastructure 或 Oracle Database 更新失敗,您可以在下列位置找到這些失敗的日誌檔:

Oracle Grid Infrastructure:

$GI_HOME/cfgtoollogs/

Oracle Database:

$ORACLE_HOME/cfgtoollogs/