【解決】 Oracle: ORA-01034: ORACLE not available の解決方法と原因 | Oracle DB トラブルシューティング

Oracleデータベースを操作中、「ORA-01034: ORACLE not available」というエラーメッセージに遭遇し、不安を感じていることでしょう。ご安心ください。このエラーは非常に一般的であり、多くの場合、簡単な手順で迅速に解決できます。

結論から言うと、このエラーのほとんどの原因は「Oracleデータベースインスタンスが停止していること」です。 以下の手順で、すぐにデータベースを起動し、問題解決へと進みましょう。

1. Oracle: ORA-01034: ORACLE not available とは?(概要と緊急度)

「ORA-01034: ORACLE not available」は、Oracleデータベースへの接続を試みたものの、接続先のデータベースインスタンスが起動していない、または利用可能な状態ではないことを示すエラーです。

これは例えるなら、電話をかけようとしたのに相手の電話機がオフになっている状態に似ています。データベース自体が存在しないわけではなく、単に稼働していないだけなので、データベースのデータが失われたわけではありません。

緊急度としては「高」です。このエラーが発生している間はデータベースにアクセスできないため、データベースを利用するアプリケーションやシステムは停止状態となり、ビジネスに大きな影響を及ぼす可能性があります。しかし、前述の通り解決策は比較的単純であることが多いです。

2. 【最速】今すぐ試すべき解決策

まずは、Oracleデータベースインスタンスとリスナーサービスが起動しているかを確認し、停止していれば起動しましょう。Windows環境では、以下の手順が最も簡単で効果的です。

解決策1:WindowsサービスからOracle関連サービスを起動する(最も簡単な方法)

Oracleデータベースのインスタンスやリスナーは、Windowsのサービスとして動作しています。サービスマネージャーから手動で起動するのが最も直感的です。

  1. サービスマネージャーを開く:
    • Windowsキー + R を押して「ファイル名を指定して実行」ダイアログを開きます。
    • services.msc と入力し、Enterキーを押します。
  2. Oracle関連サービスを探す:サービス一覧の中から、以下の名前のサービスを探します。環境によって名前の「ORCL」部分は異なる場合があります(例: XE, DB19Cなど、SIDに依存)。
    • OracleService[SID]: 例: OracleServiceORCL (データベースインスタンス本体)
    • OracleOraHome[バージョン]TNSListener: 例: OracleOraHome19CTNSListener (リスナーサービス)
  3. サービスの状態を確認し、起動する:
    • これらのサービスの「状態」列が「実行中」になっているか確認します。
    • もし「停止」状態であれば、サービス名を右クリックし、「開始」を選択します。

より迅速にPowerShellで実行したい場合は、以下のコマンドを使用できます。(ORCL, OraHome19cの部分はご自身の環境に合わせて変更してください。)

# Oracleデータベースインスタンスのサービス名を特定(例: OracleServiceORCL)
Get-Service -DisplayName "OracleService*" | Format-Table Name, DisplayName, Status

# リスナーサービスのサービス名を特定(例: OracleOraHome19cTNSListener)
Get-Service -DisplayName "OracleOraHome*TNSListener*" | Format-Table Name, DisplayName, Status

# データベースインスタンスのサービスが停止していたら起動する
# 例: OracleServiceORCL を起動
Start-Service -DisplayName "OracleServiceORCL" -ErrorAction SilentlyContinue
Write-Host "OracleServiceORCL の起動を試みました。"

# リスナーサービスが停止していたら起動する
# 例: OracleOraHome19cTNSListener を起動
Start-Service -DisplayName "OracleOraHome19cTNSListener" -ErrorAction SilentlyContinue
Write-Host "OracleOraHome19cTNSListener の起動を試みました。"

# 起動後の状態を確認
Get-Service -DisplayName "OracleServiceORCL", "OracleOraHome19cTNSListener" | Format-Table Name, DisplayName, Status

サービスの起動が完了したら、再度データベースへの接続を試みてください。

解決策2:SQL*Plusからデータベースインスタンスを起動する

Windowsサービスからの起動が難しい場合や、より直接的にデータベースの状態を操作したい場合は、SQL*Plusを使用する方法もあります。

# コマンドプロンプトまたはPowerShellを開く
# 以下のコマンドでSYSDBA権限でSQL*Plusに接続します。
sqlplus / as sysdba

# SQL*Plusのプロンプト(SQL>)が表示されたら、以下のコマンドを実行します。
SQL> startup

startupコマンドが正常に完了すると、「Oracle インスタンスが起動しました。」のようなメッセージが表示され、データベースが利用可能になります。

解決策3:リスナーの状態を確認し、起動する

データベースインスタンスが起動していても、リスナーが起動していなければ、外部からの接続はできません。リスナーの状態も確認しましょう。

# コマンドプロンプトまたはPowerShellを開く
# リスナーの状態を確認します。
lsnrctl status

# もしリスナーが停止していたら、以下のコマンドで起動します。
lsnrctl start

# 起動後、再度状態を確認します。
lsnrctl status

lsnrctl statusの出力で、「リスナーはサービスをサポートしています。」と表示されれば、正常に機能しています。

3. Oracle: ORA-01034: ORACLE not available が発生する主要な原因(複数)

前述の解決策で問題が解決しなかった場合、または再発防止のために、発生しうる主要な原因を理解しておきましょう。

  • データベースインスタンスの停止:
    • 手動でデータベースがシャットダウンされた。
    • OSの再起動後に、Oracleサービスが自動起動に設定されていない、または起動に失敗した。
    • リソース不足(メモリ、ディスクスペース)により、インスタンスがクラッシュした。
  • リスナープロセスの停止:
    • 外部からの接続要求を受け付けるリスナーサービスが停止している。
    • OSの再起動後にリスナーサービスが自動起動に失敗した。
  • 初期化パラメータファイルの欠損または破損:
    • データベースインスタンスの起動に必要なinit.ora(PFILE)やspfile(SPFILE)が見つからない、または内容が不正である。
  • Oracleホーム環境変数の誤り:
    • コマンドプロンプトやPowerShellの環境変数ORACLE_HOMEORACLE_SIDが正しく設定されていない場合、SQL*Plusやlsnrctlコマンドが正常に動作しないことがあります。
  • メモリ不足やOSリソースの枯渇:
    • サーバー全体のメモリやCPUが枯渇している場合、Oracleインスタンスが起動できない、または起動してもすぐに停止してしまうことがあります。

4. Oracle DBで恒久的に再発を防ぐには

一度解決しても、同じエラーが再発しないように、以下の対策を検討することをお勧めします。

  • Oracleサービスの自動起動設定の確認:Windowsのサービスマネージャーで、OracleService[SID]OracleOraHome[バージョン]TNSListener サービスの両方が「スタートアップの種類」が「自動」に設定されていることを確認してください。これにより、OS再起動時に自動的にデータベースが起動するようになります。
  • サーバーリソースの監視:サーバーのメモリ、CPU使用率、ディスクI/Oなどを定期的に監視し、リソースが不足していないか確認します。特にメモリ不足はOracleインスタンスの起動失敗やクラッシュの一般的な原因です。
  • Oracleログファイルの定期的な確認:Oracleのアラートログ(alert_[SID].log)やリスナーログ(listener.log)は、エラーの原因を特定する上で非常に重要です。これらを定期的に確認し、異常がないかチェックする習慣をつけましょう。
  • 適切なシャットダウン手順の遵守:データベースをシャットダウンする際は、SHUTDOWN IMMEDIATESHUTDOWN NORMAL といった適切なコマンドを使用し、意図しないクラッシュを防ぎましょう。電源の強制切断などは避けるべきです。
  • 初期化パラメータファイルのバックアップ:spfileinit.oraといった初期化パラメータファイルは、変更時に必ずバックアップを取るようにしてください。破損や誤設定があった場合に、迅速に復旧できるようになります。
  • システム運用担当者との連携:OSのメンテナンスや再起動の際には、事前にOracleデータベースのシャットダウン計画を立て、関係者と連携を取りましょう。

これらの対策を実施することで、「ORA-01034」エラーの再発リスクを大幅に低減し、より安定したデータベース運用が可能になります。