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
プロシージャには以下のパラメータがあります。
パラメータ名 | データ型 | デフォルト | はい | 説明 |
---|---|---|---|---|
|
boolean |
true |
いいえ |
データベースを強制ログ作成モードに設定するには |
次の例では、データベースを強制ログ作成モードに設定します。
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
プロシージャには以下のパラメータがあります。
パラメータ名 | データ型 | デフォルト | 必須 | 説明 |
---|---|---|---|---|
|
varchar2 |
— |
はい |
サプリメンタルロギングを追加するには |
|
varchar2 |
null |
いいえ |
サプリメンタルロギングのタイプ。有効な値は、 |
次の例では、補足ログを有効にします。
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
プロシージャには以下のパラメータがあります。
パラメータは相互に排他的です。
パラメータ名 | データ型 | デフォルト | 必須 | 説明 |
---|---|---|---|---|
|
positive |
null |
いいえ |
ログファイルのサイズ (バイト単位)。 |
|
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
プロシージャには以下のパラメータがあります。
パラメータ名 | データ型 | デフォルト | 必須 | 説明 |
---|---|---|---|---|
|
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
プロシージャには以下のパラメータがあります。
パラメータ名 | データ型 | デフォルト | 必須 | 説明 |
---|---|---|---|---|
|
varchar |
— |
はい |
更新する設定の名前。 |
|
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 ログファイルにアクセスすることがあります。これらのファイルにアクセスするには、次の手順を実行します。
-
物理ファイルパスへの読み取り専用アクセスを提供する、ディレクトリオブジェクトを作成します。
rdsadmin.rdsadmin_master_util.create_archivelog_dir
およびrdsadmin.rdsadmin_master_util.create_onlinelog_dir
を使用します。 -
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 ログをダウンロードするには
-
アーカイブ REDO ログの保持期間を長くし、ダウンロードしたログが RDS によって削除されないようにします。忘れずに変更を
COMMIT
します。保持ポリシーを設定する方法については、「アーカイブ REDO ログの保持」を参照してください。
-
アーカイブログの保持ポリシーに対する変更が有効になるまで、最大 5 分待機します。
-
rdsadmin.rdsadmin_archive_log_download
により、アーカイブ REDO ログを Amazon S3 からダウンロードします。詳細については、「単一のアーカイブ REDO ログのダウンロード」および「一連のアーカイブ REDO ログのダウンロード」を参照してください。
注記 RDS は、ダウンロードの実行前に、利用可能なストレージを自動的に確認します。要求されたログで大量の領域が消費される場合は、アラートが表示されます。
-
Amazon S3 からのログのダウンロードが、正常に実行されたことを確認します。
ダウンロードタスクのステータスは、bdump ファイルで確認できます。bdump ファイルには、パス名
/rdsdbdata/log/trace/dbtask-
が含まれています。前出のダウンロードステップで実行したtask-id
.logSELECT
ステートメントでは、タスク ID がVARCHAR2
データ型で返されます。詳細については、「ファイル転送のステータスをモニタリングする」で類似の例をご確認ください。
単一のアーカイブ REDO ログのダウンロード
単一のアーカイブ REDO ログを /rdsdbdata/log/arch
ディレクトリにダウンロードするには、rdsadmin.rdsadmin_archive_log_download.download_log_with_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
プロシージャには以下のパラメータがあります。
パラメータ名 | データ型 | デフォルト | 必須 | 説明 |
---|---|---|---|---|
|
number |
— |
はい |
全体のスタートシーケンス番号。 |
|
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;