[Oracle] ORA-00257エラーの回避方法 | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

Oracleデータベースを運用中突然、
ORA-00257 アーカイブ・エラーです。解除されるまで内部接続のみにしてください。

というメッセージが表示され、Oracleインスタンスに接続できなくなることがあります。



これはREDOログのアーカイブ先のディスクが一杯になったときに発生するエラーで、この時、トランザクションの実行が停止した状態になります。


そのため、Oracleインスタンスに接続できなくなるだけでなく、既存の接続についてもトランザクションを実行できない状態となり、事実上データベースが停止した状態になります。


このエラーが発生した場合、初期化パラメータLOG_ARCHIVE_DESTで示されるREDOログのアーカイブ先のディスクに空きを確保すればこのエラーは発生しなくなり、停止していたトランザクションも自動的に再開されます。



ただ、この問題が発生する根本的な原因は、ほとんどの場合アーカイブREDOログファイルの管理方法にあります。


アーカイブログモードでOracleデータベースを運用する場合、自動アーカイブすることがほとんどですが、この場合、何もしなければアーカイブREDOログファイルがどんどん蓄積されていき、やがてディスクがあふれてしまいます。


ゆえに、アーカイブログモードで運用する場合は、定期的にアーカイブREDOログファイルを退避するか、あるいは削除するという運用体制を整えておくべきです。


例えば、バックアップを取得した後にOSコマンドもしくはRecovey ManagerのDELETEコマンドなどを使ってバックアップ以前のアーカイブされたREDOログファイルを削除するという方法が一般的ではないでしょうか。



また、REDOログファイルをアーカイブしなければならないのは、データベースに障害が発生した場合に障害発生直前の状態まで復旧させなければならないというようなリカバリーポリシーの場合のみです。


前回のバックアップ時点までも復旧できればよい、あるいは(テスト環境など)バックアップそのものも不要であるという場合には、そもそもアーカイブログモードで運用する必要がありません。



まずはそのデータベースのバックアップ・リカバリーポリシーを明確にし、その上でアーカイブログモードでの運用が必要となった場合には、アーカイブREDOログファイルが必要以上に蓄積されないよう定期的に削除するなどの運用管理体制を確立しなければならないということです。