Oracle DB インスタンスの一般的なログ関連タスクの実行 - Amazon Relational Database Service

Oracle DB インスタンスの一般的なログ関連タスクの実行

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

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

強制ログ作成の設定

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

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

パラメータ名 データ型 デフォルト はい 説明

p_enable

boolean

true

いいえ

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

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

EXEC rdsadmin.rdsadmin_util.force_logging(p_enable => true);

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

補足的なログ記録を有効にすると、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

いいえ

サプリメンタルロギングのタイプ。有効な値は、'ALL''FOREIGN KEY''PRIMARY KEY''UNIQUE'PROCEDURAL のいずれかです。

次の例では、補足ログを有効にします。

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

次の例では、すべての固定長の最大サイズの列に対して補足ログを有効にします。

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

次の例では、プライマリキー列に対して補足ログを有効にします。

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

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

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

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

EXEC rdsadmin.rdsadmin_util.switch_logfile;

オンライン REDO ログの追加

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

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

注記

パラメータは相互に排他的です。

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

bytes

positive

null

いいえ

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

p_size

varchar2

はい

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

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

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

オンライン REDO ログの削除

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

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

grp

positive

はい

ログのグループ番号。

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

EXEC rdsadmin.rdsadmin_util.drop_logfile(grp => 3);

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

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 にサイズ変更する方法を示します。

/* 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 /* If the status of log 2 is still "ACTIVE", issue a checkpoint to clear it to "INACTIVE". */ 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 ログの保持

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

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

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

name

varchar

はい

更新する設定の名前。

value

varchar

はい

設定の値。

次の例では、24 時間分の REDO ログを保持します。

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

変更を反映するにはコミットが必要です。

アーカイブ REDOログが DB インスタンスに保持される期間を表示するには、Amazon RDS プロシージャ rdsadmin.rdsadmin_util.show_configuration を使用します。

次の例は、ログの保持時間を示しています。

set serveroutput on EXEC rdsadmin.rdsadmin_util.show_configuration;

出力は、archivelog retention hours の現在の設定を示します。次の出力は、アーカイブ REDO ログを 48 時間保持することを示しています。

NAME:archivelog retention hours VALUE:48 DESCRIPTION:ArchiveLog expiration specifies the duration in hours before archive/redo log files are automatically deleted.

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

SELECT SUM(BLOCKS * BLOCK_SIZE) bytes FROM V$ARCHIVED_LOG WHERE FIRST_TIME >= SYSDATE-(X/24) AND DEST_ID=1;

DB インスタンスのバックアップ保持期間にゼロより大きな値が設定されている場合のみ、RDS for Oracle がアーカイブ REDO ログを生成します。デフォルトでは、バックアップ保持期間は 0 より大きな値になっています。

アーカイブされたログの保持期間が終了すると、RDS for Oracle はアーカイブされた REDO ログを、DB インスタンスから削除します。DB インスタンスを特定の時点の状態に復元できるようにするために、Amazon RDS は、アーカイブされた REDO ログを、バックアップ保持期間に基づいて DB インスタンスの外部に保持します。バックアップ保持期間の変更方法については、「Amazon RDS DB インスタンスを変更する」を参照してください。

注記

アーカイブ REDO ログをダウンロードするために JDBC を Linux で使用している場合、レイテンシー時間と接続のリセットが長くなることがあります。このような場合、原因は Java クライアントの乱数ジェネレーターのデフォルト設定にある可能性があります。ブロックしない乱数ジェネレーターを使用するように JDBC ドライバを設定することをお勧めします。

オンライン およびアーカイブ REDO ログへのアクセス

GoldenGate、Attunity、Informatica などの外部ツールを使用して、オンライン REDO ログファイルやアーカイブ REDO ログファイルにアクセスすることがあります。これらのファイルにアクセスするには、次の手順を実行します。

  1. 物理ファイルパスへの読み取り専用アクセスを提供する、ディレクトリオブジェクトを作成します。

    rdsadmin.rdsadmin_master_util.create_archivelog_dir および rdsadmin.rdsadmin_master_util.create_onlinelog_dir を使用します。

  2. PL/SQL を使用してファイルを読み取ります。

    ファイルは、PL/SQL により読み取ることができます。ディレクトリオブジェクトからファイルを読み込む方法については、「DB インスタンスディレクトリ内のファイルのリスト化」および「DB インスタンスディレクトリ内のファイルの読み取り」を参照してください。

トランザクションログへのアクセスがサポートされるのは、以下のリリースです。

  • Oracle Database 21c

  • Oracle Database 19c

  • Oracle Database 12c Release 2 (12.2.0.1)

  • Oracle Database 12c Release 1 (12.1)

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

重要

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

EXEC rdsadmin.rdsadmin_master_util.create_archivelog_dir; EXEC rdsadmin.rdsadmin_master_util.create_onlinelog_dir;

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

EXEC rdsadmin.rdsadmin_master_util.drop_archivelog_dir; EXEC rdsadmin.rdsadmin_master_util.drop_onlinelog_dir;

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

EXEC rdsadmin.rdsadmin_master_util.revoke_drop_any_directory; EXEC rdsadmin.rdsadmin_master_util.grant_drop_any_directory;

Amazon S3 からのアーカイブ REDO ログのダウンロード

rdsadmin.rdsadmin_archive_log_download パッケージを使用して、アーカイブ REDO ログを DB インスタンスにダウンロードできます。アーカイブ REDO ログが DB インスタンス上から失われた場合は、Amazon S3 から再度ダウンロードすることが可能です。その後、ログを取り出したり、データベースの復旧またはレプリケート用に使用したりできます。

注記

アーカイブされた REDO ログは、リードレプリカインスタンスにダウンロードすることはできません。

アーカイブ RED Oログのダウンロード:基本的なステップ

アーカイブ REDO ログを使用できるかどうかは、以下に挙げる保存ポリシーによって異なります。

  • バックアップ保持ポリシー - このポリシー内のログは Amazon S3 で使用できます。このポリシー外のログは削除されています。

  • アーカイブログ保持ポリシー - このポリシー内のログは、DB インスタンスで使用できます。このポリシー外のログは削除されています。

インスタンスにログがなく、バックアップ保持期間によって保護されている場合は、rdsadmin.rdsadmin_archive_log_download を使用して、再度ダウンロードしてください。RDS for Oracle は、ログをDB インスタンスの /rdsdbdata/log/arch ディレクトリに保存します。

Amazon S3 からアーカイブ REDO ログをダウンロードするには

  1. アーカイブ REDO ログの保持期間を長くし、ダウンロードしたログが RDS によって削除されないようにします。忘れずに変更を COMMIT します。

    保持ポリシーを設定する方法については、「アーカイブ REDO ログの保持」を参照してください。

  2. アーカイブログの保持ポリシーに対する変更が有効になるまで、最大 5 分待機します。

  3. rdsadmin.rdsadmin_archive_log_download により、アーカイブ REDO ログを Amazon S3 からダウンロードします。

    詳細については、「単一のアーカイブ REDO ログのダウンロード」および「一連のアーカイブ REDO ログのダウンロード」を参照してください。

    注記

    RDS は、ダウンロードの実行前に、利用可能なストレージを自動的に確認します。要求されたログで大量の領域が消費される場合は、アラートが表示されます。

  4. Amazon S3 からのログのダウンロードが、正常に実行されたことを確認します。

    ダウンロードタスクのステータスは、bdump ファイルで確認できます。bdump ファイルには、パス名 /rdsdbdata/log/trace/dbtask-task-id.log が含まれています。前出のダウンロードステップで実行した SELECT ステートメントでは、タスク ID が VARCHAR2 データ型で返されます。詳細については、「ファイル転送のステータスをモニタリングする」で類似の例をご確認ください。

単一のアーカイブ REDO ログのダウンロード

単一のアーカイブ REDO ログを /rdsdbdata/log/arch ディレクトリにダウンロードするには、rdsadmin.rdsadmin_archive_log_download.download_log_with_seqnum を使用します。このプロシージャには次のパラメータがあります。

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

seqnum

number

はい

アーカイブ REDO ログのシーケンス番号。

次の例では、シーケンス番号 20 のログをダウンロードしています。

SELECT rdsadmin.rdsadmin_archive_log_download.download_log_with_seqnum(seqnum => 20) AS TASK_ID FROM DUAL;

一連のアーカイブ REDO ログのダウンロード

一連のアーカイブ REDO ログを /rdsdbdata/log/arch ディレクトリにダウンロードするには、download_logs_in_seqnum_range を使用します。ダウンロードできるログの数は、リクエストごとに 300 に制限されています。download_logs_in_seqnum_range プロシージャには以下のパラメータがあります。

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

start_seq

number

はい

全体のスタートシーケンス番号。

end_seq

number

はい

全体の終了シーケンス番号。

次の例では、シーケンス番号が 50 から 100 までのログをダウンロードしています。

SELECT rdsadmin.rdsadmin_archive_log_download.download_logs_in_seqnum_range(start_seq => 50, end_seq => 100) AS TASK_ID FROM DUAL;