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$instance と v$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実行ができる状態です。
SELECT instance_name,
status,
database_status,
logins,
startup_time
FROM v$instance;
STATUS が MOUNTED の場合、制御ファイルは読み込めていますが、データファイルをOPENして通常利用できる状態ではありません。インスタンス自体が見つからない、または接続できない場合は ORA-01034 / ORA-27101の記事 の切り分けが先です。
データベースのOPEN_MODEを確認する
次に、データベースのOPEN状態とロールを確認します。ここで MOUNTED や READ ONLY、Data Guard関連のロールが見えます。
SELECT name,
open_mode,
database_role,
controlfile_type,
switchover_status
FROM v$database;
OPEN_MODE が READ WRITE なら通常の更新ができる状態です。MOUNTED なら、OPENが必要な処理でORA-01109が出ます。DATABASE_ROLE が PHYSICAL STANDBY などの場合は、Data Guard構成として正しい状態かを確認します。Data Guardの運用は Data Guard完全ガイド も参考になります。
単一DBでMOUNT状態ならOPENする
通常の単一DBで、意図せずMOUNT状態のままなら、SYSDBAで接続してOPENします。ただし、OPEN時に別のエラーが出る場合は、そのエラーが本当の原因です。
sqlplus / as sysdba SELECT status FROM v$instance; SELECT open_mode FROM v$database; ALTER DATABASE OPEN; SELECT open_mode FROM v$database;
ALTER DATABASE OPEN で ORA-01113、ORA-01110、ORA-01589 などが続く場合、データファイルのリカバリやRESETLOGSが必要な可能性があります。その場合はアラートログとRMANの復旧状態を確認してから進めます。alert.logでOPENできない理由を確認する
ALTER DATABASE OPEN で別エラーが出る、またはMOUNT状態で止まった理由が分からない場合は、アラートログを確認します。Oracle 11g以降では V$DIAG_INFO から診断ディレクトリを確認できます。
SELECT name,
value
FROM v$diag_info
WHERE name IN ('Diag Trace', 'Diag Alert');
# 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のままだとアプリ接続先では利用できないことがあります。
-- NOMOUNTまで起動 STARTUP NOMOUNT; -- 制御ファイルをマウント ALTER DATABASE MOUNT; -- 通常利用できる状態にする ALTER DATABASE OPEN;
CDB/PDB構成ではPDBのOPEN状態も確認する
Oracle 12c以降のマルチテナント構成では、CDBがOPENしていても、PDBがOPENしていないことがあります。アプリケーションがPDBへ接続する構成なら、対象PDBの状態を確認します。CDB/PDBの基本は マルチテナント完全ガイド も参考になります。
SHOW PDBS;
SELECT con_id,
name,
open_mode,
restricted
FROM v$pdbs
ORDER BY con_id;
-- すべてのPDBをOPEN ALTER PLUGGABLE DATABASE ALL OPEN; -- 特定PDBだけOPEN ALTER PLUGGABLE DATABASE apppdb OPEN; -- 再起動後もOPEN状態を保存 ALTER PLUGGABLE DATABASE apppdb SAVE STATE;
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時に追加エラーが出ないかを確認します。
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のバックアップ・復元 が参考になります。
OPEN RESETLOGS は単なる起動コマンドではありません。不完全リカバリ後の新しいインカネーション開始を伴うため、復旧地点、バックアップ取得、後続の運用手順を確認してから実行します。Data Guard環境ではロールを確認する
Data Guard環境では、スタンバイDBがMOUNT状態で運用されていることがあります。この場合、通常のプライマリDBと同じ感覚でOPENしようとすると、構成や運用方針とズレる可能性があります。
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-03113 や ORA-03135 の確認も必要です。
確認手順のまとめ
v$instanceでインスタンス状態を確認するv$databaseでOPEN_MODEとDATABASE_ROLEを確認するV$DIAG_INFOとalert.logで、OPENできない理由が出ていないか確認する- 単一DBでMOUNT状態なら、必要に応じて
ALTER DATABASE OPENを実行する - CDB/PDB構成なら、対象PDBの
OPEN_MODEを確認してOPENする - OPEN時に別エラーが出たら、そのエラーを優先してリカバリ状態を確認する
- Data Guard環境なら、ロールと運用方針を確認してから操作する
- 再発防止として、起動後のPDB自動OPEN、監視、リリース/復旧手順を整える
よくある質問
ORA-01109はDBが停止しているという意味ですか?
完全停止とは限りません。インスタンスは起動していて、データベースがMOUNT状態のままというケースが多いです。v$instance と v$database で確認します。
ALTER DATABASE OPENを実行すれば必ず直りますか?
単純にOPENしていないだけなら直ります。ただし、リカバリ未完了、制御ファイル復元後、Data Guard構成などでは追加の確認が必要です。
PDBだけOPENしていない場合もORA-01109になりますか?
アプリケーションがPDBへ接続していて、そのPDBがMOUNTEDのままなら、OPEN状態不足として問題になります。SHOW PDBS や v$pdbs で確認します。
起動後に毎回PDBが閉じてしまう場合はどうしますか?
ALTER PLUGGABLE DATABASE ... SAVE STATE を使うと、再起動後もPDBのOPEN状態を保存できます。ただし、本番では起動順やアプリ接続タイミングも合わせて確認します。
alert.logでは何を見ればよいですか?
ORA-01109の前後に出ている、データファイル、制御ファイル、REDO、メディアリカバリ関連のエラーを見ます。OPENできない直接原因は、ORA-01109ではなく前後のエラーに出ていることがあります。

