メニュー
Amazon Relational Database Service
ユーザーガイド (API Version 2014-10-31)

Oracle DB インスタンスの一般的な DBA ログタスク

このセクションでは、Oracle を実行する Amazon RDS DB インスタンスのログ記録に関連する一般的な DBA タスクを実行する方法について説明します。マネージド型サービスの操作性を実現するために、Amazon RDS では DB インスタンスへのシェルアクセスは提供していません。また、上位の権限を必要とする特定のシステムプロシージャやシステムテーブルへのアクセスが制限されます。

詳細については、「Oracle Database のログファイル」を参照してください。

強制ログ作成の設定

強制ログ作成の設定は、Oracle バージョン 11.2.0.4.v1 以降でサポートされます。

強制ログ作成モードでは、Oracle は一時テーブルスペースと一時セグメントの変更を除き、すべての変更をデータベースに記録します (NOLOGGING 句は無視されます)。詳細については、Oracle ドキュメントの「FORCE LOGGING モードの指定」を参照してください。

Amazon RDS プロシージャ rdsadmin.rdsadmin_util.force_logging を使用すると、強制ログ作成を設定できます。force_logging プロシージャには以下のパラメータがあります。

パラメータ名 データ型 デフォルト値 必須 説明

p_enable

boolean

true

optional

データベースを強制ログ作成モードに設定するには true、データベースを強制ログ作成モードから解除するには false に設定します。

以下の例では、データベースを強制ログ作成モードに設定しています。

Copy
exec rdsadmin.rdsadmin_util.force_logging(p_enable => true);

サプリメンタルロギングの設定

サプリメンタルロギングの設定は、Oracle バージョン 11.2.0.4.v1 以降でサポートされます。

サプリメンタルロギングを有効にすると、LogMiner および LogMiner テクノロジーを使用する製品に、連鎖行と各種ストレージ配列 (クラスターテーブルなど) をサポートするための情報が十分に提供されます。サプリメンタルロギングの詳細については、Oracle ドキュメントの「サプリメンタルロギング」を参照してください。

Oracle データベースでは、デフォルトではサプリメンタルロギングが有効になっていません。Amazon RDS プロシージャ rdsadmin.rdsadmin_util.alter_supplemental_logging を使用すると、サプリメンタルロギングを有効/無効にすることができます。Amazon RDS が Oracle DB インスタンスのアーカイブ REDO ログの保持を管理する方法の詳細については、「アーカイブされた REDO ログの保持」を参照してください。

alter_supplemental_logging プロシージャには以下のパラメータがあります。

パラメータ名 データ型 デフォルト値 必須 説明

p_action

varchar2

必須

サプリメンタルロギングを追加するには 'ADD'、サプリメンタルロギングを削除するには 'DROP'

p_type

varchar2

null

optional

サプリメンタルロギングのタイプ。有効な値は 'ALL''FOREIGN KEY''PRIMARY KEY'、または 'UNIQUE' です。

以下の例では、サプリメンタルロギングを有効にしています。

Copy
begin rdsadmin.rdsadmin_util.alter_supplemental_logging( p_action => 'ADD'); end; /

以下の例では、すべての固定長の最大サイズの列のサプリメンタルロギングを有効にしています。

Copy
begin rdsadmin.rdsadmin_util.alter_supplemental_logging( p_action => 'ADD', p_type => 'ALL'); end; /

以下の例では、プライマリキー列のサプリメンタルロギングを有効にしています。

Copy
begin rdsadmin.rdsadmin_util.alter_supplemental_logging( p_action => 'ADD', p_type => 'PRIMARY KEY'); end; /

オンラインログファイルを切り替える

Amazon RDS のプロシージャ rdsadmin.rdsadmin_util.switch_logfile を使用すると、ログファイルを切り替えることができます。switch_logfile プロシージャにはパラメータはありません。

以下の例では、ログファイルを切り替えています。

Copy
exec rdsadmin.rdsadmin_util.switch_logfile;

オンライン REDO ログの追加

Oracle を実行している Amazon RDS DB インスタンスには、最初から 4 つのオンライン REDO ログ (それぞれ 128 MB) があります。Amazon RDS プロシージャ rdsadmin.rdsadmin_util.add_logfile を使用すると、別の REDO ログを追加できます。

Oracle のいずれのバージョンでも、add_logfile プロシージャには以下のパラメータがあります。

パラメータ名 データ型 デフォルト値 必須 説明

bytes

positive

null

optional

ログファイルのサイズ (バイト単位)。

バージョン 11.2.0.4.v1 以降を使用している場合、add_logfile プロシージャには以下のパラメータがあります。

パラメータ名 データ型 デフォルト値 必須 説明

p_size

varchar2

必須

ログファイルのサイズ。サイズは、キロバイト (K)、メガバイト (M)、またはギガバイト (G) で指定できます。

以下のコマンドは 100 MB のログファイルを追加します。

Copy
exec rdsadmin.rdsadmin_util.add_logfile(p_size => '100M');

オンライン REDO ログの削除

Amazon RDS プロシージャ rdsadmin.rdsadmin_util.drop_logfile を使用すると、REDO ログを削除できます。drop_logfile プロシージャには以下のパラメータがあります。

パラメータ名 データ型 デフォルト値 必須 説明

grp

positive

requried

ログのグループ番号。

以下の例では、グループ番号 3 のログを削除しています。

Copy
exec rdsadmin.rdsadmin_util.drop_logfile(grp => 3);

ステータスが未使用または非アクティブのログのみを削除できます。以下の例では、ログのステータスを取得しています。

Copy
select GROUP#, STATUS from V$LOG; GROUP# STATUS ---------- ---------------- 1 CURRENT 2 INACTIVE 3 INACTIVE 4 UNUSED

オンライン REDO ログのサイズ変更

Oracle を実行している Amazon RDS DB インスタンスには、最初から 4 つのオンライン REDO ログ (それぞれ 128 MB) があります。以下の例では、Amazon RDS プロシージャを使用してログをそれぞれ 128 MB から 512 MB にサイズ変更する方法を示しています。

Copy
/* Query V$LOG to see the logs. */ /* You start with 4 logs of 128 MB each. */ select GROUP#, BYTES, STATUS from V$LOG; GROUP# BYTES STATUS ---------- ---------- ---------------- 1 134217728 INACTIVE 2 134217728 CURRENT 3 134217728 INACTIVE 4 134217728 INACTIVE /* Add four new logs that are each 512 MB */ exec rdsadmin.rdsadmin_util.add_logfile(bytes => 536870912); exec rdsadmin.rdsadmin_util.add_logfile(bytes => 536870912); exec rdsadmin.rdsadmin_util.add_logfile(bytes => 536870912); exec rdsadmin.rdsadmin_util.add_logfile(bytes => 536870912); /* Query V$LOG to see the logs. */ /* Now there are 8 logs. */ select GROUP#, BYTES, STATUS from V$LOG; GROUP# BYTES STATUS ---------- ---------- ---------------- 1 134217728 INACTIVE 2 134217728 CURRENT 3 134217728 INACTIVE 4 134217728 INACTIVE 5 536870912 UNUSED 6 536870912 UNUSED 7 536870912 UNUSED 8 536870912 UNUSED /* Drop each inactive log using the group number. */ exec rdsadmin.rdsadmin_util.drop_logfile(grp => 1); exec rdsadmin.rdsadmin_util.drop_logfile(grp => 3); exec rdsadmin.rdsadmin_util.drop_logfile(grp => 4); /* Query V$LOG to see the logs. */ /* Now there are 5 logs. */ select GROUP#, BYTES, STATUS from V$LOG; GROUP# BYTES STATUS ---------- ---------- ---------------- 2 134217728 CURRENT 5 536870912 UNUSED 6 536870912 UNUSED 7 536870912 UNUSED 8 536870912 UNUSED /* Switch logs so that group 2 is no longer current. */ exec rdsadmin.rdsadmin_util.switch_logfile; /* Query V$LOG to see the logs. */ /* Now one of the new logs is current. */ SQL>select GROUP#, BYTES, STATUS from V$LOG; GROUP# BYTES STATUS ---------- ---------- ---------------- 2 134217728 ACTIVE 5 536870912 CURRENT 6 536870912 UNUSED 7 536870912 UNUSED 8 536870912 UNUSED /* Issue a checkpoint to clear log 2. */ exec rdsadmin.rdsadmin_util.checkpoint; /* Query V$LOG to see the logs. */ /* Now the final original log is inactive. */ select GROUP#, BYTES, STATUS from V$LOG; GROUP# BYTES STATUS ---------- ---------- ---------------- 2 134217728 INACTIVE 5 536870912 CURRENT 6 536870912 UNUSED 7 536870912 UNUSED 8 536870912 UNUSED # Drop the final inactive log. exec rdsadmin.rdsadmin_util.drop_logfile(grp => 2); /* Query V$LOG to see the logs. */ /* Now there are four 512 MB logs. */ select GROUP#, BYTES, STATUS from V$LOG; GROUP# BYTES STATUS ---------- ---------- ---------------- 5 536870912 CURRENT 6 536870912 UNUSED 7 536870912 UNUSED 8 536870912 UNUSED

アーカイブされた REDO ログの保持

DB インスタンス上でのローカルでアーカイブされた REDO ログの保持は、Oracle バージョン 11.2.0.2.v7 以降でサポートされます。

アーカイブされた REDO ログを、Oracle LogMiner (DBMS_LOGMNR) などの製品で使用できるように DB インスタンスにローカルで保持できます。REDO ログを保持した後、LogMiner を使用してログを分析できます。詳細については、Oracle ドキュメントの「LogMiner を使用した REDO ログファイルの分析」を参照してください。

Amazon RDS プロシージャ rdsadmin.rdsadmin_util.set_configuration を使用すると、アーカイブ REDO ログを保持できます。set_configuration プロシージャには以下のパラメータがあります。

パラメータ名 データ型 デフォルト値 必須 説明

name

varchar

必須

更新する設定の名前。

value

varchar

必須

設定の値。

以下の例では、24 時間分の REDO ログを保持しています。

Copy
begin rdsadmin.rdsadmin_util.set_configuration( name => 'archivelog retention hours', value => '24'); end; /

アーカイブされた REDO ログは、DB インスタンス上に保持されるので、DB インスタンスにログ用の十分な割り当て済みストレージがあることを確認します。DB インスタンスが過去 X 時間に使用した容量を調べるには、次のクエリを実行できます。X は時間数で置き換えます。

Copy
select sum(BLOCKS * BLOCK_SIZE) bytes from V$ARCHIVED_LOG where FIRST_TIME >= SYSDATE-(X/24) and DEST_ID=1;

DB インスタンスのバックアップ保持期間がゼロより大きい場合のみ、アーカイブされた REDO ログが生成されます。デフォルトでは、バックアップ保持期間はゼロより大きいので、明示的にゼロに設定していない限り、アーカイブされた REDO ログは DB インスタンスに対して生成されます。DB インスタンスのバックアップ保持期間を変更するには、「Oracle データベースエンジンを実行する DB インスタンスの変更」を参照してください。

アーカイブされた REDO ログが DB インスタンスから削除されたら、再度それらを DB インスタンスにダウンロードすることはできません。Amazon RDS は、DB インスタンスの外部にアーカイブされた REDO ログを保持して、DB インスタンスの特定時点への復元をサポートします。Amazon RDS は、DB インスタンスで設定されたバックアップの保存期間に基づいて、DB インスタンスの外部に、アーカイブされた REDO ログを保持します。DB インスタンスのバックアップ保持期間を変更するには、「Oracle データベースエンジンを実行する DB インスタンスの変更」を参照してください。

トランザクションログにアクセスする

トランザクションログへのアクセスは、Oracle バージョン 11.2.0.4.v11 以降、12.1.0.2.v7 以降でサポートされています。

GoldenGate、Attunity、Informatica などの外部ツールを使用して、オンライン REDO ログファイルやアーカイブ REDO ログファイルにアクセスすることがあります。オンライン REDO ログファイルやアーカイブ REDO ログファイルにアクセスするには、まず、ファイルの物理パスに読み取り専用アクセスを提供するディレクトリオブジェクトを作成する必要があります。

以下のコードでは、オンライン REDO ログファイルやアーカイブ REDO ログファイルに読み取り専用アクセスを提供するディレクトリが作成されます。

重要

また、このコードによって、DROP ANY DIRECTORY 権限は取り消されます。

Copy
exec rdsadmin.rdsadmin_master_util.create_archivelog_dir; exec rdsadmin.rdsadmin_master_util.create_onlinelog_dir;

オンライン REDO ログファイルやアーカイブ REDO ログファイルに対してディレクトリオブジェクトを作成したら、PL/SQL を使用してファイルを読み取ることができます。ディレクトリオブジェクトからファイルを読み込む方法については、「DB インスタンスディレクトリ内のファイルの一覧表示」および「DB インスタンスディレクトリ内のファイルの読み取り」を参照してください。

以下のコードは、オンライン REDO ログファイルやアーカイブ REDO ログファイルのディレクトリを削除します。

Copy
exec rdsadmin.rdsadmin_master_util.drop_archivelog_dir; exec rdsadmin.rdsadmin_master_util.drop_onlinelog_dir;

以下のコードは、DROP ANY DIRECTORY 権限の付与と取り消しを行います。

Copy
exec rdsadmin.rdsadmin_master_util.revoke_drop_any_directory; exec rdsadmin.rdsadmin_master_util.grant_drop_any_directory;

関連トピック