手軽なのはファイル拡張

図1●表領域のサイズと使用状況を調べる

 データ・ファイルを追加するには,“ALTER ~ ADD DATAFILE”コマンドを使う。図1[拡大表示]で調べた表領域の場合,“ALTER TABLESPACE USERS03 ADD DATAFILE '/u02/oradata/oracle8/users032.dbf' size 500M;”と指定すれば,元と同じ500Mバイトのデータ・ファイルが追加できる(図2[拡大表示])。

 一方の拡張は,RESIZEパラメータでファイル・サイズを変更する。コマンドは,“ALTER DATABASE DATAFILE 'データ・ファイル名' RESIZE サイズ;”である。筆者はあるシステムで,INSERT文が頻繁に行われている最中にRESIZEを実行したことがあるが,領域不足によるエラー(ORA-01653)は即時に解消できた。RESIZEは,該当表領域中の表へのDML*の実行に対して排他制御されることはないようだ。

図2●データ・ファイルを追加する

 その意味では,この方法は非常に手軽に実行できるが,以下の点には注意してほしい。DMLの実行により,データベース・バッファ上で変更されたデータがDBWR*によってデータベース・ファイルに書き込まれる動作と,RESIZEによる領域操作が同時に行われると,エラーが返されることが予想される。そのため,可能であれば事前にデータ・ファイルやログ・ファイル,制御ファイルをバックアップしておくことをお勧めする*1

アーカイブ・ログのパンクに備える

図3●アーカイブ・ログの不足で発生するエラー

 障害発生時のデータ復旧に備えてREDOログ・ファイル*アーカイブ・ログ・モード*で運用しているシステムは多いだろう。その際,意外と見落としがちなのが,アーカイブ先の残容量である。残容量が不足した場合は図3[拡大表示]のようなエラー・メッセージがアラート・ファイルに出力される。

 アーカイブ・ログは,オンラインREDOログ・ファイルをアーカイブしたものである。アーカイブ・ログ・モードでは,REDOログ・ファイルがいっぱいになって次のファイルに切り替わるタイミングでコピーがアーカイブされる。

 あるシステムは更新量が非常に多く,頻繁にアーカイブ・ログへ書き込んでいた。書き込みエラーが発生した原因は,アーカイブ先のディスク容量の見積もりが不適切であったことと,不要なアーカイブ・ログ・ファイルを定期的に削除する運用が徹底されていなかったことにあった。

 対処としては,アーカイブ・ログの出力先を,余裕のあるディスクに変更した。具体的には,初期化パラメータのLOG_ARCHIVE_DESTに指定してある出力先ディスク(パス)を変更した。ただし出力先を変更しても,定期的に削除しない限りアーカイブ・ログは増え続けるため,運用も改善した。

REDOログ・ファイルのサイズを変更

 このシステムでは,繁忙期の日中のオンライン時間帯は10~20分に1回ほどの頻度でアーカイブ・ログへの書き込みが発生していた。更新量が多いためアーカイブ・ログの出力量が多くなるのはシステム特性として割り切ったが,書き込み頻度は抑制したい。アーカイブ・ログの出力頻度が高い原因は,更新量に比べてオンラインREDOログ・ファイルのサイズが不足していることにあった。対処はREDOログのサイズ拡張だ。REDOログ・ファイルのサイズを大きくするとリカバリに費やす時間は長くなるが,平常時のパフォーマンスは向上できる。障害時のリカバリ時間と通常時のパフォーマンスはトレード・オフの関係にあるため,システムの特性によって調整したい。

 REDOログ・ファイルのサイズ変更は,ALTER DATABASE文のDROPオプションで,既存のログ・ファイルを削除し,サイズを再定義してADDオプションで作り直す。この作業の過程ではログ・ファイルを削除する必要があるため,以下の2点に注意する。(1)Oracleが稼働するために必要な最低2つのREDOログ・グループを用意する。(2)アクティブなログ・ファイルは削除できないのでログ・スイッチを順次発生させてアクティブなログを切り替えながら行う。

(内藤 尚=システムコンサルタント オープンシステム統括部 マネージャー)