REDOログファイルのサイズを大きくする。

今回は、更新系の処理というかINSERTオンリーなので、REDOログがかなり出力されることを想定してます。
ただし本番ではないので、アーカイブは行いません。
とりあえず、ログスイッチでパフォーマンスが低下するのを防ぐために、無条件にファイルサイズを大きくすることにしました。

sqlplusを起動。sysユーザでログインする。

前回同様、sysユーザである必要があるのかは不明ですが・・・orz.
ちなみに端末からサーバにログインして、サーバ上で実行してます。

$ sqlplus /NOLOG

SQL> connect sys/[passwd] as sysdba

サイズの大きいログファイルを追加する。

デフォルトは100MBなのですが、今回は1GBのファイルを作成します。

ALTER DATABASE ADD LOGFILE 'REDO_LOG_DIR/exredo01.log' size 1000m;
ALTER DATABASE ADD LOGFILE 'REDO_LOG_DIR/exredo02.log' size 1000m;
ALTER DATABASE ADD LOGFILE 'REDO_LOG_DIR/exredo03.log' size 1000m;

ここで注意することは、

  • 同じロググループにファイルを追加する場合、ファイルサイズが同一である必要がある。そのため、このケースではGROUP句は必要なく、新規のグループを作成する。
  • ログファイル数の制限でエラーになった場合は、「INACTIVE」であるデフォルトのログファイルを先に削除すればOK。(削除方法は、下記参照。)

ログファイルを必要なだけスイッチする。

UNDO表領域の時とは異なり、インスタンスは起動したままです。そのため、使用中のログファイルは削除できない(つまり「CURENT」「ACTIVE」になっているものは削除できない。)ので、削除準備としてログスイッチを促し、削除対象ファイルの状態を「INACTIVE」にします。

ALTER SYSTEM SWITCH LOGFILE;

デフォルトのREDOログを削除する。

REDOログファイルは、必ず2つ以上なければなりません。
この条件を満たしていれば、追加と削除は順不同です。(削除できない条件もありますが)

ALTER DATABASE DROP LOGFILE 'REDO_LOG_DIR/redo01.log';
ALTER DATABASE DROP LOGFILE 'REDO_LOG_DIR/redo02.log';
ALTER DATABASE DROP LOGFILE 'REDO_LOG_DIR/redo03.log';

ディスクにある物理ファイルを削除する。

削除処理では、Oracleとして使わないという設定をしただけなので、物理ファイルが残っています。
これを削除します。

rm REDO_LOG_DIR/redo01.log
rm REDO_LOG_DIR/redo02.log
rm REDO_LOG_DIR/redo03.log

削除が不安な場合は大量の更新処理を行い、追加したREDOログファイルのみが更新されることを確認した上で削除すれば良いかと。
ちなみにこれらの作業は、OEMコンソールで状態を確認しながら行っています。
これは以下のSQLを実行することでも確認できます。

SELECT v$logfile.member, v$logfile.group#, v$log.status, v$log.bytes
FROM v$log, v$logfile
WHERE v$log.group# = v$logfile.group#;