レポ
クラウドで
伸びる人沈む人

連絡特定商取引将来設計運営方針&メルマガSEの彼女は?
成功レポート集 Fedora9インストール! EclipseでJava Oracleバックアップのアーキテクチャ ゼロからHPでCGI 便利ネット知識
無料レポ&講習 IT業界の実態 linux処方箋 Java処方箋 Oracle処方箋 Perl処方箋
Oracleのアーカイブ(archive)ログファイル

<概要>


アーカイブログの説明をする前に、まずREDOログの理解をしてください。
なぜなら、REDOログとアーカイブログは密接な関係があるからです。


REDOログなくして、アーカイブなし。そういう関係です。
まずはREDOログファイルの説明から入りますね。


REDOログファイルは、オラクルの作業記録を複数のファイルでローテーションで残していく仕組みです。
したがって、ローテーションで上書きを行っていくため、
REDOログファイルのうち、最も古い作業記録が常に消去されていきます。


そこで、昔の作業記録を永遠に残しておくためのファイル(仕組み)が、アーカイブログです。
でも、そんなファイルを永遠に残して増やし続けたら、いつかディスクが満杯となってしまいます。


だから、もちろん運用方法によりますが、アーカイブログを出力しない方法もあります。
デフォルトは、アーカイブログを出力しないようになっています。


また、REDOログファイルとアーカイブはどんなタイミングで記録を残していくのでしょうか。
アーカイブの場所を変更したり追加したりできるのでしょうか。
ここでは、そんなことを勉強していきます。


では、いってみます。

<1.REDOログとアーカイブログの関係>


REDOログファイルは、グループという単位でローテーションしていきます。
ローテーションが切り替わるタイミングで、アーカイブログができます。


下図をご覧ください。
REDOログのグループ1からグループ2へ書き込みされるタイミングが変わるときに、
グループ1のREDOログファイルと同様の新規ファイルが生まれます。それがアーカイブログファイルです。




このようにREDOログがローテーションするたびに次々とアーカイブファイルが生まれていきます。
だから、永遠に増え続けていくのです。



でも、アーカイブログが生成されるのは、あくまでアーカイブの出力設定がONになっている場合の話です。
OFFになっていれば、アーカイブログが生まれません。
では、次にON、OFFの話にいってみます。

<2.アーカイブログの出力ON、OFFの確認>


次に、アーカイブログを出力するのか、しないのか。
まずは、今の設定がどうなっているのか確認しましょう。


SQL> SELECT log_mode FROM v$database
2 /

LOG_MODE
------------
NOARCHIVELOG



上記のように、NOARCHIVELOGとなっていれば、これはアーカイブの出力OFFです。
もし、ARCHIVELOGとなっていれば、アーカイブ出力ONという意味です。



ちなみに以下のようなコマンドも、アーカイブ出力のON、OFFを確認できます。
(Database log mode というところで)

SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 139
Next log sequence to archive 143
Current log sequence 143


<3.アーカイブログ出力のON、OFFの変更>


では、その出力のON、OFFの設定方法をみていきます。


アーカイブの出力ON、OFFは、mount状態で以下実行します。
データベースが停止してmount モードで起動します。
以下のコマンドです。


SQL> shutdown immediate

SQL> startup mount



●ノー・アーカイブ(出力OFF)に戻す
SQL> alter database noarchivelog


●アーカイブ(出力ON)にする
SQL> ALTER DATABASE ARCHIVELOG


その後、データベースをオープンします。
SQL> alter database open


<4.アーカイブログの出力先>


アーカイブログの出力先の確認は、以下のSQLを実行してください。
アーカイブログ出力先のディレクトリがわかります。

SQL> select name, value from v$parameter where name like 'log_archive%'

name value
log_archive_dest_1 LOCATION=c:\oracle\product\10.1.0\archive_back
・・中略
log_archive_dest_10 LOCATION=USE_DB_RECOVERY_FILE_DEST OPTIONAL REOPEN=300


log_archive_dest_1のディレクトリは、私が追加したディレクトリ。これは、わかりますね。そのものですから。
では、USE_DB_RECOVERY_FILE_DESTって何でしょうか。わけわかりませんね。


次にこれを解決しておきましょう。

<5.デフォルトのアーカイブログの出力先、USB_DB_RECOVERY_FILE_DEST・・・紛らわしい>


USE_DB_RECOVERY_FILE_DESTは、オラクルが用意しているデフォルトのバックアップ出力先なのです。
では、その場所は具体的にどこなのでしょうか。以下のSQLでわかります。

SQL> show parameter db_recovery_file_dest

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string C:\oracle\product\10.1.0\flash_recovery_area
db_recovery_file_dest_size big integer 2G



もしくは、以下のSQLをたたきます。

SQL> select name from v$recovery_file_dest

NAME
-------------------------------------
C:\oracle\product\10.1.0\flash_recovery_area



USE_DB_RECOVERY_FILE_DESTは、オラクルのデフォルトバックアップディレクトリの代名詞です。


そのディレクトリのなかに、さらにディレクトリが日付を名前にして作成されます。
日付名のディレクトリのなかに、その日作られたアーカイブログが格納されるようになっています。

そういう仕組みなのです。少々紛らわしいですが、よく理解しておきましょう。

<6.アーカイブログの追加修正、削除>


アーカイブログの追加修正は、以下のSQLです。
例えば、log_archive_dest_2に追加する場合)

SQL> alter system set log_archive_dest_2='location=c:\oracle\product\10.1.0\archive_test'

右辺にディレクトリを記述すればOKですね。


次にアーカイブログを削除する場合のSQLです。

SQL> alter system set log_archive_dest_2=''


もちろん、USE_DB_RECOVERY_FILE_DESTも同様に指定すればできますからね。
こんなかんじで。

SQL> alter system set log_archive_dest_2='LOCATION=USE_DB_RECOVERY_FILE_DEST OPTIONAL REOPEN=300'


OPTIONAL REOPEN=300は、アーカイブが失敗した場合の再書き込みまでの秒数です。
ここでは深く考えなくてよいでしょう。つけてもつけなくてもいいです。


また、USE_DB_RECOVERY_FILE_DEST(オラクルのデフォルト出力先)を直接変更してしまうこともできます。
SQL> alter system set db_recovery_file_dest='c:\archive'


USE_DB_RECOVERY_FILE_DEST(オラクルのデフォルト出力先)の直接削除はこんなかんじ。
SQL> alter system set db_recovery_file_dest=''

<7.アーカイブログの変更後の確認>


上記変更が反映されたかどうか?は、無理やりアーカイブログを出力してみるて、確認します。

SQL> alter system switch logfile;

この後、追加したディレクトリにファイルが出来ていればOKです。
どうでしたか?
大分、慣れてきましたか?
あと、
初心者がハマる注意点も
勉強しておきましょう。