【Oracle】ORA-01109の原因と解決方法|database not open・MOUNT状態やPDB未OPEN時の確認ポイント

【Oracle】ORA-01109の原因と解決方法|database not open・MOUNT状態やPDB未OPEN時の確認ポイント Oracle

ORA-01109: database not open は、Oracle DatabaseがOPENされていない状態で、OPEN状態を前提にしたSQLや管理コマンドを実行した時に発生するエラーです。インスタンス自体は起動していても、データベースが MOUNT 状態のままだったり、CDB/PDB構成でPDBだけがOPENされていなかったりすると発生します。

重要なのは、ORA-01109は「Oracleが完全に起動していない」とは限らない点です。STARTUP MOUNT までは成功している、リカバリ後にOPENしていない、Data GuardのスタンバイDBを誤って通常DBのように操作している、といった状況を切り分けます。

先に結論
まず v$instancev$database で、インスタンス状態とOPEN_MODEを確認します。単一DBなら ALTER DATABASE OPEN;、CDB/PDBなら対象PDBのOPEN状態を確認します。ただし、リカバリ途中やData Guard構成では、むやみにOPENせず、ロール・復旧状態・アラートログを先に確認します。
スポンサーリンク

OPENしてよいケース・止めるべきケース

ORA-01109は ALTER DATABASE OPEN で解消することがありますが、どの環境でもすぐOPENしてよいわけではありません。まず、単純な起動途中なのか、復旧・スタンバイ・PDB運用上の意図した状態なのかを分けます。

OPENしてよい可能性が高い

単一DBの通常起動でMOUNTのまま止まっており、alert.logにリカバリ要求やデータファイル障害が出ていないケースです。

先に確認する

OPEN時に別エラーが出る、直前にRMAN復元や制御ファイル復元をしている、RESETLOGSが必要そうなケースです。

勝手にOPENしない

Data GuardのスタンバイDB、リカバリ中のDB、運用上MOUNTで待機させているDBです。ロールと手順を確認してから操作します。

PDBだけOPENする

CDBはOPENしていて、アプリ接続先のPDBだけがMOUNTEDの場合です。CDB全体ではなく対象PDBの状態を確認します。

ORA-01109とは

Oracle公式のエラー説明では、ORA-01109は「データベースがOPENされている必要があるコマンドを実行した」ことが原因とされています。対処はデータベースをOPENして、同じコマンドを再実行することです。

ただし実務では、なぜOPENされていないのかを確認してから対処します。単純に起動途中ならOPENすればよいですが、メディアリカバリが必要な状態、制御ファイル復元後、Data Guardのスタンバイ、PDB未OPENなどでは、状況に応じた手順が必要です。

まずインスタンス状態を確認する

最初に、インスタンスがどの状態まで起動しているかを確認します。STARTED ならNOMOUNT、MOUNTED ならMOUNT、OPEN なら通常のSQL実行ができる状態です。

check-instance-status.sql
SELECT instance_name,
       status,
       database_status,
       logins,
       startup_time
FROM v$instance;

STATUSMOUNTED の場合、制御ファイルは読み込めていますが、データファイルをOPENして通常利用できる状態ではありません。インスタンス自体が見つからない、または接続できない場合は ORA-01034 / ORA-27101の記事 の切り分けが先です。

データベースのOPEN_MODEを確認する

次に、データベースのOPEN状態とロールを確認します。ここで MOUNTEDREAD ONLY、Data Guard関連のロールが見えます。

check-database-open-mode.sql
SELECT name,
       open_mode,
       database_role,
       controlfile_type,
       switchover_status
FROM v$database;

OPEN_MODEREAD WRITE なら通常の更新ができる状態です。MOUNTED なら、OPENが必要な処理でORA-01109が出ます。DATABASE_ROLEPHYSICAL STANDBY などの場合は、Data Guard構成として正しい状態かを確認します。Data Guardの運用は Data Guard完全ガイド も参考になります。

単一DBでMOUNT状態ならOPENする

通常の単一DBで、意図せずMOUNT状態のままなら、SYSDBAで接続してOPENします。ただし、OPEN時に別のエラーが出る場合は、そのエラーが本当の原因です。

open-database.sql
sqlplus / as sysdba

SELECT status FROM v$instance;
SELECT open_mode FROM v$database;

ALTER DATABASE OPEN;

SELECT open_mode FROM v$database;
OPENできない時は無理に進めない
ALTER DATABASE OPENORA-01113ORA-01110ORA-01589 などが続く場合、データファイルのリカバリやRESETLOGSが必要な可能性があります。その場合はアラートログとRMANの復旧状態を確認してから進めます。

alert.logでOPENできない理由を確認する

ALTER DATABASE OPEN で別エラーが出る、またはMOUNT状態で止まった理由が分からない場合は、アラートログを確認します。Oracle 11g以降では V$DIAG_INFO から診断ディレクトリを確認できます。

check-diagnostic-dest.sql
SELECT name,
       value
FROM v$diag_info
WHERE name IN ('Diag Trace', 'Diag Alert');
alert-log-check.sh
# Linux例: Diag Traceで確認したディレクトリに移動して直近ログを見る
cd /u01/app/oracle/diag/rdbms/orcl/ORCL/trace
tail -n 200 alert_ORCL.log

# Windows例: alertログを検索
findstr /i "ORA-01109 ORA-01113 ORA-01110 ORA-01589 media recovery" alert_ORCL.log

ここでデータファイル、制御ファイル、REDO、メディアリカバリに関するエラーが出ていれば、ORA-01109は結果として見えているだけです。実際には、続いて出ているORAエラーや復旧ログを優先して確認します。

起動手順の違いを整理する

ORA-01109の理解には、Oracleの起動段階を押さえておくと楽です。どこまで起動しているかによって、見えるビューや実行できる処理が変わります。

NOMOUNT

インスタンスだけが起動した状態です。SPFILE/PFILEを読み込みますが、制御ファイルはまだマウントしていません。

MOUNT

制御ファイルを読み込み、DB名やデータファイル構成を認識した状態です。リカバリや一部管理操作はできますが、通常SQLにはOPENが必要です。

OPEN

データファイルとオンラインREDOログを開き、通常のSELECTやDMLができる状態です。ORA-01109はこの状態でない時に出ます。

PDB OPEN

マルチテナント構成ではCDBがOPENでも、PDBがMOUNTEDのままだとアプリ接続先では利用できないことがあります。

startup-states.sql
-- NOMOUNTまで起動
STARTUP NOMOUNT;

-- 制御ファイルをマウント
ALTER DATABASE MOUNT;

-- 通常利用できる状態にする
ALTER DATABASE OPEN;

CDB/PDB構成ではPDBのOPEN状態も確認する

Oracle 12c以降のマルチテナント構成では、CDBがOPENしていても、PDBがOPENしていないことがあります。アプリケーションがPDBへ接続する構成なら、対象PDBの状態を確認します。CDB/PDBの基本は マルチテナント完全ガイド も参考になります。

check-pdb-open-mode.sql
SHOW PDBS;

SELECT con_id,
       name,
       open_mode,
       restricted
FROM v$pdbs
ORDER BY con_id;
open-pdb.sql
-- すべてのPDBをOPEN
ALTER PLUGGABLE DATABASE ALL OPEN;

-- 特定PDBだけOPEN
ALTER PLUGGABLE DATABASE apppdb OPEN;

-- 再起動後もOPEN状態を保存
ALTER PLUGGABLE DATABASE apppdb SAVE STATE;
check-pdb-saved-state.sql
SELECT con_name,
       instance_name,
       state,
       restricted
FROM dba_pdb_saved_states
ORDER BY con_name, instance_name;

PDB接続でエラーが出ている場合は、リスナーやサービス名の問題に見えることもあります。接続文字列、サービス登録、lsnrctl status の確認は Oracleネットワーク設定 と合わせて見ると切り分けやすいです。

リカバリ後にORA-01109が出る場合

バックアップ復元や障害復旧の後にORA-01109が出る場合、データベースがMOUNT状態で止まっていることがあります。まずリカバリが完了しているか、OPEN時に追加エラーが出ないかを確認します。

recovery-open-check.sql
SELECT open_mode,
       database_role,
       controlfile_type
FROM v$database;

-- 必要に応じてリカバリ状況を確認
RECOVER DATABASE;

-- 完了後にOPEN
ALTER DATABASE OPEN;

制御ファイル復元後や不完全リカバリ後は、ALTER DATABASE OPEN RESETLOGS が必要になることがあります。ただしRESETLOGSは復旧方針に関わるため、バックアップ世代、リカバリ地点、業務影響を確認してから実行します。RMANの基本は RMAN完全ガイド、制御ファイル/SPFILE復元は 制御ファイルとSPFILEのバックアップ・復元 が参考になります。

RESETLOGSは復旧判断として扱う
OPEN RESETLOGS は単なる起動コマンドではありません。不完全リカバリ後の新しいインカネーション開始を伴うため、復旧地点、バックアップ取得、後続の運用手順を確認してから実行します。

Data Guard環境ではロールを確認する

Data Guard環境では、スタンバイDBがMOUNT状態で運用されていることがあります。この場合、通常のプライマリDBと同じ感覚でOPENしようとすると、構成や運用方針とズレる可能性があります。

check-dataguard-role.sql
SELECT name,
       open_mode,
       database_role,
       protection_mode,
       switchover_status
FROM v$database;

PHYSICAL STANDBY でREDO Apply中なら、MOUNT状態が意図した状態のことがあります。参照用途で開く場合も、Active Data Guardの利用可否や復旧方針を確認します。Data Guardの切り替えやロールの見方は Data Guard完全ガイド を参照してください。

ORA-01034 / ORA-03113との違い

ORA-01109

インスタンスは起動しているが、データベースまたはPDBがOPENされていない時に出ます。MOUNT状態の確認が中心です。

ORA-01034 / ORA-27101

インスタンスが利用できない、またはORACLE_SID違いなどで共有メモリに接続できない時に出ます。DB未起動の確認が中心です。

ORA-03113

確立済みの通信チャネルが途中で切れた時に出ます。DBプロセス異常、ネットワーク、サーバー側ログの突き合わせが必要です。

ORA-03135

接続が失われた時のエラーです。アイドルタイムアウト、ネットワーク機器、SQLNET.EXPIRE_TIME、接続プールを確認します。

DBが起動していない場合は ORA-01034 / ORA-27101、接続が途中で切れる場合は ORA-03113ORA-03135 の確認も必要です。

確認手順のまとめ

  1. v$instance でインスタンス状態を確認する
  2. v$databaseOPEN_MODEDATABASE_ROLE を確認する
  3. V$DIAG_INFO とalert.logで、OPENできない理由が出ていないか確認する
  4. 単一DBでMOUNT状態なら、必要に応じて ALTER DATABASE OPEN を実行する
  5. CDB/PDB構成なら、対象PDBの OPEN_MODE を確認してOPENする
  6. OPEN時に別エラーが出たら、そのエラーを優先してリカバリ状態を確認する
  7. Data Guard環境なら、ロールと運用方針を確認してから操作する
  8. 再発防止として、起動後のPDB自動OPEN、監視、リリース/復旧手順を整える

よくある質問

ORA-01109はDBが停止しているという意味ですか?

完全停止とは限りません。インスタンスは起動していて、データベースがMOUNT状態のままというケースが多いです。v$instancev$database で確認します。

ALTER DATABASE OPENを実行すれば必ず直りますか?

単純にOPENしていないだけなら直ります。ただし、リカバリ未完了、制御ファイル復元後、Data Guard構成などでは追加の確認が必要です。

PDBだけOPENしていない場合もORA-01109になりますか?

アプリケーションがPDBへ接続していて、そのPDBがMOUNTEDのままなら、OPEN状態不足として問題になります。SHOW PDBSv$pdbs で確認します。

起動後に毎回PDBが閉じてしまう場合はどうしますか?

ALTER PLUGGABLE DATABASE ... SAVE STATE を使うと、再起動後もPDBのOPEN状態を保存できます。ただし、本番では起動順やアプリ接続タイミングも合わせて確認します。

alert.logでは何を見ればよいですか?

ORA-01109の前後に出ている、データファイル、制御ファイル、REDO、メディアリカバリ関連のエラーを見ます。OPENできない直接原因は、ORA-01109ではなく前後のエラーに出ていることがあります。

参考