ディスクグループ削除後にDB起動エラーが発生!
ディスクグループ削除後のDB起動エラーとその対応
ディスクグループ「DG_WORK」を削除してクラスターを停止した後、DBインスタンスを起動できない状態に陥りました。何の作業が不適切だったかは分からなかったのですが、その時の復旧手順をまとめました。
原因は、DBインスタンス起動時にマウントするディスクグループに、削除したディスクグループ「DG_WORK」が含まれていたのが原因でした。
ディスクグループのマウント失敗が原因のDB起動障害対応
DBインスタンスを起動しようとしたところ、以下のエラーが発生しました。
PRCR-1079 : リソースora.db01.dbの起動に失敗しました
CRS-5017: リソース・アクション”ora.DG_WORK.dg start”に次のエラーが発生しました:
ORA-15032: not all alterations performed
ORA-15017: diskgroup “DG_WORK” cannot be mounted
ORA-15063: ASM discovered an insufficient number of disks for diskgroup “DG_WORK”
CRS-2674: ‘ora.DG_WORK.dg'(‘server01’)の起動に失敗しました
CRS-2632: 配置ポリシーを満たす場所へのリソース’ora.db01.db’の配置を試行するサーバーはありません
[oracle@server01:/home/oracle] srvctl start db -d db01 PRCR-1079 : リソースora.db01.dbの起動に失敗しました CRS-5017: リソース・アクション"ora.DG_WORK.dg start"に次のエラーが発生しました: ORA-15032: not all alterations performed ORA-15017: diskgroup "DG_WORK" cannot be mounted ORA-15063: ASM discovered an insufficient number of disks for diskgroup "DG_WORK" 。詳細は"(:CLSN00107:)"("/u01/app/11.2.0.4/grid/log/server01/agent/crsd/oraagent_grid/oraagent_grid.log")を参照してください。 CRS-2674: 'ora.DG_WORK.dg'('server01')の起動に失敗しました CRS-2632: 配置ポリシーを満たす場所へのリソース'ora.db01.db'の配置を試行するサーバーはありません [oracle@server01:/home/oracle]
直前にディスクグループ「DG_WORK」を削除していました。手順に不手際があったと思われます。
DG_WORKの認識を除去
削除したディスクグループ「DG_WORK」がどこかに残ったままになったのだろうと思い、とりあえずDG_WORKのリソース削除を試みたが失敗。
CRS-2730: リソース’ora.db01.db’はリソース’ora.DG_WORK.dg’に依存しています
CRS-4000: コマンドDeleteは失敗したか、またはエラーのある状態で完了しました。
[grid@server01:/home/grid] crsctl delete res ora.DG_WORK.dg CRS-2730: リソース'ora.db01.db'はリソース'ora.DG_WORK.dg'に依存しています CRS-4000: コマンドDeleteは失敗したか、またはエラーのある状態で完了しました。 [grid@server01:/home/grid]
リソースをリストしてみると、ないはずの「DG_WORK」がリストされていることが判明。しかもTARGETがONLINEになっている。
[grid@server01:/home/grid] crsctl stat res -t -------------------------------------------------------------------------------- NAME TARGET STATE SERVER STATE_DETAILS -------------------------------------------------------------------------------- Local Resources -------------------------------------------------------------------------------- ora.DATA.dg ONLINE ONLINE server02 ONLINE ONLINE server01 ora.DG_REDO_1.dg ONLINE ONLINE server02 ONLINE ONLINE server01 ora.DG_REDO_2.dg ONLINE ONLINE server02 ONLINE ONLINE server01 ora.DG_WORK.dg ONLINE OFFLINE server02 ONLINE OFFLINE server01 ora.LISTENER.lsnr ONLINE ONLINE server02 ONLINE ONLINE server01
次に、リソースの停止を試したところ、正常に完了。
[grid@server01:/home/grid] crsctl stop res ora.DG_WORK.dg [grid@server01:/home/grid]
リソースを確認してみるとOFFLINEになりました。
[grid@server01:/home/grid] crsctl stat res -t -------------------------------------------------------------------------------- NAME TARGET STATE SERVER STATE_DETAILS -------------------------------------------------------------------------------- Local Resources -------------------------------------------------------------------------------- ora.DATA.dg ONLINE ONLINE server02 ONLINE ONLINE server01 ora.DG_REDO_1.dg ONLINE ONLINE server02 ONLINE ONLINE server01 ora.DG_REDO_2.dg ONLINE ONLINE server02 ONLINE ONLINE server01 ora.DG_WORK.dg OFFLINE OFFLINE server02 OFFLINE OFFLINE server01 ora.LISTENER.lsnr ONLINE ONLINE server02 ONLINE ONLINE server01
改めてリソース削除を試してみたが失敗。
CRS-2730: リソース’ora.db01.db’はリソース’ora.DG_WORK.dg’に依存しています
CRS-4000: コマンドDeleteは失敗したか、またはエラーのある状態で完了しました。
[root@server01:/dev/oracle/db/db01] crsctl delete res ora.DG_WORK.dg CRS-2730: リソース'ora.db01.db'はリソース'ora.DG_WORK.dg'に依存しています CRS-4000: コマンドDeleteは失敗したか、またはエラーのある状態で完了しました。 [root@server01:/dev/oracle/db/db01]
いろいろ調べてみると、強制的に削除できることがわかり、「-f」のforceオプションで削除できました。
[root@server01:/dev/oracle/db/db01] crsctl delete res ora.DG_WORK.dg -f [root@server01:/dev/oracle/db/db01]
リソース削除後のDB起動
リソースを削除できたのでDBインスタンスを起動できるはず、と思いDB起動してみたが、やはりエラーで起動できず。
CRS-2730: リソース’ora.db01.db’はリソース’ora.DG_WORK.dg’に依存しています
CRS-4000: コマンドDeleteは失敗したか、またはエラーのある状態で完了しました。
[root@server01:/dev/oracle/db/db01] srvctl start db -d db01 PRCR-1079 : リソースora.db01.dbの起動に失敗しました CRS-2640: 必須リソース'ora.DG_WORK.dg'がありません。 [root@server01:/dev/oracle/db/db01]
DBリソースの詳細を表示してみると、そこに削除した「DG_WORK」が残っていることが判明。
[root@server01:/dev/oracle/db/db01] crsctl stat res ora.db01.db -f NAME=ora.db01.db TYPE=ora.database.type STATE=OFFLINE TARGET=ONLINE ACL=owner:oracle:rwx,pgrp:oinstall:r--,other::r--,group:dba:r-x,user:grid:r-x ACTION_FAILURE_TEMPLATE= ACTION_SCRIPT= ACTIVE_PLACEMENT=1 AGENT_FILENAME=%CRS_HOME%/bin/oraagent%CRS_EXE_SUFFIX% AUTO_START=restore CARDINALITY=2 CARDINALITY_ID=0 CHECK_INTERVAL=1 CHECK_TIMEOUT=30 CLUSTER_DATABASE=true CREATION_SEED=153 DATABASE_TYPE=RAC DB_UNIQUE_NAME=db01 DEFAULT_TEMPLATE=PROPERTY(RESOURCE_CLASS=database) PROPERTY(DB_UNIQUE_NAME= CONCAT(PARSE(%NAME%, ., 2), %USR_ORA_DOMAIN%, .)) ELEMENT(INSTANCE_NAME= %GEN_USR_ORA_INST_NAME%) ELEMENT(DATABASE_TYPE= %DATABASE_TYPE%) DEGREE=1 DESCRIPTION=Oracle Database resource ENABLED=1 FAILOVER_DELAY=0 FAILURE_INTERVAL=60 FAILURE_THRESHOLD=1 GEN_AUDIT_FILE_DEST=/orafs/oracle/admin/db01/audit GEN_START_OPTIONS= GEN_START_OPTIONS@SERVERNAME(server02)=open GEN_START_OPTIONS@SERVERNAME(server01)=open GEN_USR_ORA_INST_NAME= GEN_USR_ORA_INST_NAME@SERVERNAME(server02)=db012 GEN_USR_ORA_INST_NAME@SERVERNAME(server01)=db011 HOSTING_MEMBERS= ID=ora.db01.db INSTANCE_FAILOVER=0 LOAD=1 LOGGING_LEVEL=1 MANAGEMENT_POLICY=AUTOMATIC NLS_LANG= NOT_RESTARTING_TEMPLATE= OFFLINE_CHECK_INTERVAL=0 ONLINE_RELOCATION_TIMEOUT=0 ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 ORACLE_HOME_OLD= PLACEMENT=restricted PROFILE_CHANGE_TEMPLATE= RESTART_ATTEMPTS=2 ROLE=PRIMARY SCRIPT_TIMEOUT=60 SERVER_POOLS=ora.db01 SPFILE=+DATA/db01/spfiledb01.ora START_DEPENDENCIES=hard(ora.DATA.dg,ora.DG_REDO_1.dg,ora.DG_REDO_2.dg,ora.DG_WORK.dg) weak(type:ora.listener.type,global:type:ora.scan_listener.type,uniform:ora.ons,global:ora.gns) pullup(ora.DATA.dg,ora.DG_REDO_1.dg,ora.DG_REDO_2.dg,ora.DG_WORK.dg) START_TIMEOUT=600 STATE_CHANGE_TEMPLATE= STOP_DEPENDENCIES=hard(intermediate:ora.asm,shutdown:ora.DATA.dg,shutdown:ora.DG_REDO_1.dg,shutdown:ora.DG_REDO_2.dg,shutdown:ora.DG_WORK.dg) STOP_TIMEOUT=600 TYPE_VERSION=3.2 UPTIME_THRESHOLD=1h USR_ORA_DB_NAME=db01 USR_ORA_DOMAIN=server01.it-memo.info USR_ORA_ENV= USR_ORA_FLAGS= USR_ORA_INST_NAME= USR_ORA_INST_NAME@SERVERNAME(server02)=db012 USR_ORA_INST_NAME@SERVERNAME(server01)=db011 USR_ORA_OPEN_MODE=open USR_ORA_OPI=false USR_ORA_STOP_MODE=immediate VERSION=11.2.0.4.0 [root@server01:/dev/oracle/db/db01]
マウントするべきディスクグループのリストを更新します。
[root@server01:/] srvctl modify database -d db01 -a "DATA,DG_REDO_1,DG_REDO_2" [root@server01:/]
DBリソースの詳細を表示したところ、DG_WORKの要素がなくなったことを確認。
[root@server01:/] crsctl stat res ora.db01.db -f NAME=ora.db01.db TYPE=ora.database.type STATE=OFFLINE TARGET=ONLINE ACL=owner:oracle:rwx,pgrp:oinstall:r--,other::r--,group:dba:r-x,user:grid:r-x ACTION_FAILURE_TEMPLATE= ACTION_SCRIPT= ACTIVE_PLACEMENT=1 AGENT_FILENAME=%CRS_HOME%/bin/oraagent%CRS_EXE_SUFFIX% AUTO_START=restore CARDINALITY=2 CARDINALITY_ID=0 CHECK_INTERVAL=1 CHECK_TIMEOUT=30 CLUSTER_DATABASE=true CREATION_SEED=186 DATABASE_TYPE=RAC DB_UNIQUE_NAME=db01 DEFAULT_TEMPLATE=PROPERTY(RESOURCE_CLASS=database) PROPERTY(DB_UNIQUE_NAME= CONCAT(PARSE(%NAME%, ., 2), %USR_ORA_DOMAIN%, .)) ELEMENT(INSTANCE_NAME= %GEN_USR_ORA_INST_NAME%) ELEMENT(DATABASE_TYPE= %DATABASE_TYPE%) DEGREE=1 DESCRIPTION=Oracle Database resource ENABLED=1 FAILOVER_DELAY=0 FAILURE_INTERVAL=60 FAILURE_THRESHOLD=1 GEN_AUDIT_FILE_DEST=/orafs/oracle/admin/db01/audit GEN_START_OPTIONS= GEN_START_OPTIONS@SERVERNAME(server02)=open GEN_START_OPTIONS@SERVERNAME(server01)=open GEN_USR_ORA_INST_NAME= GEN_USR_ORA_INST_NAME@SERVERNAME(server02)=db012 GEN_USR_ORA_INST_NAME@SERVERNAME(server01)=db011 HOSTING_MEMBERS= ID=ora.db01.db INSTANCE_FAILOVER=0 LOAD=1 LOGGING_LEVEL=1 MANAGEMENT_POLICY=AUTOMATIC NLS_LANG= NOT_RESTARTING_TEMPLATE= OFFLINE_CHECK_INTERVAL=0 ONLINE_RELOCATION_TIMEOUT=0 ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 ORACLE_HOME_OLD= PLACEMENT=restricted PROFILE_CHANGE_TEMPLATE= RESTART_ATTEMPTS=2 ROLE=PRIMARY SCRIPT_TIMEOUT=60 SERVER_POOLS=ora.db01 SPFILE=+DATA/db01/spfiledb01.ora START_DEPENDENCIES=hard(ora.DATA.dg,ora.DG_REDO_1.dg,ora.DG_REDO_2.dg) weak(type:ora.listener.type,global:type:ora.scan_listener.type,uniform:ora.ons,global:ora.gns) pullup(ora.DATA.dg,ora.DG_REDO_1.dg,ora.DG_REDO_2.dg) START_TIMEOUT=600 STATE_CHANGE_TEMPLATE= STOP_DEPENDENCIES=hard(intermediate:ora.asm,shutdown:ora.DATA.dg,shutdown:ora.DG_REDO_1.dg,shutdown:ora.DG_REDO_2.dg) STOP_TIMEOUT=600 TYPE_VERSION=3.2 UPTIME_THRESHOLD=1h USR_ORA_DB_NAME=db01 USR_ORA_DOMAIN=server01.it-memo.info USR_ORA_ENV= USR_ORA_FLAGS= USR_ORA_INST_NAME= USR_ORA_INST_NAME@SERVERNAME(server02)=db012 USR_ORA_INST_NAME@SERVERNAME(server01)=db011 USR_ORA_OPEN_MODE=open USR_ORA_OPI=false USR_ORA_STOP_MODE=immediate VERSION=11.2.0.4.0 [root@server01:/]
DBインスタンス起動
再びDBインスタンス起動を試したところ、無事に起動することができました。
[root@server01:/] srvctl start db -d db01 [root@server01:/]