更新失敗疑難排解
更新作業可能會因為各種原因而失敗。一般而言,作業會因為資料庫節點已關閉、檔案系統空間不足,或資料庫主機無法存取物件存放區而失敗。
本文包含的資訊可協助您判斷失敗原因並修正問題。系統會根據錯誤情況,將資訊組織成數個區段。
如果您已經知道原因,可以使用建議的解決方案跳至主題。否則,請使用識別失敗原因主題開始作業。
本文涵蓋下列主題:
秘訣:
您也可以建立序列主控台連線,以在單一使用者模式對系統進行疑難排解。如需在 OCI 主控台中建立序列主控台連線的相關資訊,請參閱管理資料庫系統的序列主控台連線。相關主題
識別失敗原因
在 OCI 主控台中,您可以檢視資料庫系統或個別資料庫的更新歷史記錄,以識別失敗的更新作業。未順利套用的更新會顯示失敗狀態,並包含造成失敗之錯誤的簡短描述。如果錯誤訊息包含的資訊不足以指向解決方案,您可以使用資料庫 CLI 與日誌檔來收集更多資料。然後,請參考本文中適用的部分以取得解決方案。
涵蓋的主題如下:
識別更新作業失敗的根本原因
-
以 root 使用者身分登入主機,然後瀏覽至
/opt/oracle/dcs/bin/
目錄。 -
決定在資料庫上執行的作業順序。
dbcli list-jobs
請注意列出的最後一個工作 ID,其狀態不是成功。
-
使用上一個步驟所記下的工作 ID,使用下列命令檢查該工作的詳細資訊:
dbcli describe-job -i <job_ID> -j
一般而言,執行此命令足以透露失敗的根本原因。
-
如果需要更多資訊,請檢閱
/opt/oracle/dcs/log/dcs-agent.log
檔案。您可以使用工作報告在步驟 2 中傳回的時間戳記,在此檔案中找到工作 ID。
- 如果更新失敗位於雙節點 RAC 資料庫上,請在兩個節點上執行步驟 3 與步驟 4。
資料庫服務代理程式問題
您的資料庫會使用代理程式架構,透過 Oracle Cloud 平台進行管理。
解決已停止代理程式所造成的更新失敗
有時候,如果 dcsagent
程式的狀態為停止 / 等待以解決更新失敗,您可能需要重新啟動該程式。
重新啟動資料庫服務代理程式
-
從命令提示中,檢查代理程式的狀態:
initctl status initdcsagent
-
如果代理程式處於停止 / 等待狀態,請嘗試重新啟動代理程式:
initctl start initdcsagent
-
再次檢查代理程式的狀態,以確認代理程式的狀態為啟動 / 執行中:
initctl status initdcsagent
解決需要更新之代理程式所造成的更新失敗
如果需要更新您的代理程式,更新作業也會失敗。系統會針對此失敗提供下列錯誤訊息:
Current DcsAgent version is less than or equal to minimum required version.
若要解決此問題,請執行下節中的步驟。
請洽詢 Oracle Support 以更新 OCI 資料庫服務代理程式
-
使用下列命令確認代理程式 (dcsagent) 和「DCS 管理」程式 (dcsadmin) 正在執行:
initctl status initdcsagent
initctl status initdcsadmin
-
如果這些程式沒有執行,請使用下列指令重新啟動程式:
initctl start initdcsagent
initctl start initdcsadmin
- 請依照取得額外說明中的指示,收集您的 DCS 代理程式記錄檔。
- 請聯絡 Oracle Support 以取得更新代理程式的協助。
物件存放區連線問題
資料庫系統和資料庫更新會儲存在 OCI Object Storage 中。因此,成功的更新作業需要在資料庫系統主機與下載更新的物件儲存位置之間進行連線。
涵蓋的主題如下:
確定您的資料庫主機可以連線至 OCI 物件儲存
-
使用下列命令確認主機可以存取 OCI Object Storage:
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
-
如果您無法連線至物件存放區,請參考使用主控台備份資料庫,瞭解如何設定物件存放區連線。
主機問題
資料庫主機上的一或多個下列條件可能會導致更新作業失敗:
涵蓋的主題如下:
更新作業期間未執行資料庫節點
無論您是更新資料庫系統還是資料庫本位目錄,當更新作業進行時,資料庫的所有節點都必須為作用中且在執行中。使用 OCI 主控台檢查每個節點的狀態是否為 AVAILABLE,並視需要啟動節點。
檔案系統已完整
更新作業在主機檔案系統的 /u01
目錄中至少需要 15 GB 的可用空間。使用主機上的 df -h
命令來檢查可用的空間。如果檔案系統的空間不足,您可以移除舊的日誌或追蹤檔來釋出空間。
Oracle Clusterware 問題
Oracle Clusterware 未執行
Oracle Clusterware 可讓伺服器彼此通訊,使其成為集體單位。叢集軟體程式必須在資料庫系統上啟動並執行,才能完成更新作業。有時候您可能需要重新啟動 Oracle Clusterware 來解決更新失敗。
重新啟動 Oracle Clusterware
-
從命令提示檢查 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
。 -
如果 Oracle Clusterware 未連線,請嘗試重新啟動程式:
crsctl start crs
-
檢查 Oracle Clusterware 的狀態,確認它已上線:
crsctl check crs
未更新 Oracle Grid Infrastructure (GI)
在更新該資料庫的資料庫系統之前,當您嘗試更新資料庫時,就會發生此問題。錯誤描述指示必須先更新 Oracle Grid Infrastructure。若要解決此問題,請將資料庫系統更新為最新的可用版本。更新資料庫系統之後,您可以重試資料庫更新作業。
若要取得目前和最新可用的資料庫系統 GI 版本,請使用以下命令:
dbcli describe-component
資料庫問題
不正確的資料庫狀態可能會導致更新失敗。
涵蓋的主題如下:
更新作業期間未執行資料庫
資料庫必須為作用中且在執行中,才能完成所有更新作業。否則,您必須手動執行 datapatch 作業。
檢查資料庫是否作用中且在執行中
使用下列命令檢查資料庫的狀態,並確保解決任何可能使資料庫處於不適當狀態的問題:
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
作業
執行 datapatch
命令之前,請確定所有可插拔資料庫 (PDB) 都已開啟。如果要開啟 PDB,您可以使用 SQL*Plus 對該 PDB 執行 ALTER PLUGGABLE DATABASE <pdb_name> OPEN READ WRITE;
。
$ORACLE_HOME/OPatch/datapatch
datapatch
命令應該在每個資料庫本位目錄上執行。
取得其他說明
如果您無法使用本文中的資訊來解決問題,請遵循以下程序來收集相關的資料庫和診斷資訊。收集這些資訊之後,請聯絡 Oracle Support 。
收集失敗工作的診斷資訊
-
以 root 使用者身分登入主機,然後瀏覽至
/opt/oracle/dcs/bin/
目錄。 -
執行下列兩個命令以產生失敗工作的相關資訊:
dbcli list-jobs | grep -i <dbname>
dbcli describe-job -i <job_ID> -j
第二個指令中的 <job_ID> 應該是第一個指令所報告之最新失敗工作的 ID。
-
執行診斷收集器命令檔,以建立包含 Oracle Support Services 診斷資訊的壓縮檔。
diagcollector.py
此指令會在
/tmp
目錄中建立名為diagLogs-<timestamp>.zip
的檔案。
收集 DCS 代理程式日誌檔
若要收集 DCS 代理程式日誌檔,請執行下列作業:
- 以 opc 使用者身分登入。
-
執行下列命令:
sudo /opt/oracle/dcs/bin/diagcollector.py
-
系統會傳回訊息,指出代理程式日誌可在指定目錄的 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 資料庫
$ORACLE_HOME/cfgtoollogs/