ディスクグループ削除後にDB起動エラーが発生!

oracle-y-lupa-100

ディスクグループ削除後の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:/]

 

 

 

 

 


サブコンテンツ

このページの先頭へ