

# Oracle DB インスタンスの一般的なログ関連タスクの実行
<a name="Appendix.Oracle.CommonDBATasks.Log"></a>

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

詳細については、「[Amazon RDS for Oracle データベースのログファイル](USER_LogAccess.Concepts.Oracle.md)」を参照してください。

**Topics**
+ [強制ログ作成の設定](#Appendix.Oracle.CommonDBATasks.SettingForceLogging)
+ [サプリメンタルロギングの設定](#Appendix.Oracle.CommonDBATasks.AddingSupplementalLogging)
+ [オンラインログファイルを切り替える](#Appendix.Oracle.CommonDBATasks.SwitchingLogfiles)
+ [オンライン REDO ログの追加](#Appendix.Oracle.CommonDBATasks.RedoLogs)
+ [オンライン REDO ログの削除](#Appendix.Oracle.CommonDBATasks.DroppingRedoLogs)
+ [オンライン REDO ログのサイズ変更](Appendix.Oracle.CommonDBATasks.ResizingRedoLogs.md)
+ [アーカイブ REDO ログの保持](Appendix.Oracle.CommonDBATasks.RetainRedoLogs.md)
+ [オンライン およびアーカイブ REDO ログへのアクセス](Appendix.Oracle.CommonDBATasks.Log.Download.md)
+ [Amazon S3 からのアーカイブ REDO ログのダウンロード](Appendix.Oracle.CommonDBATasks.download-redo-logs.md)

## 強制ログ作成の設定
<a name="Appendix.Oracle.CommonDBATasks.SettingForceLogging"></a>

強制ログ作成モードでは、Oracle はテンポラリテーブルスペースとテンポラリセグメントの変更を除き、すべての変更をデータベースに記録します (`NOLOGGING` 句は無視されます)。詳細については、Oracle ドキュメントの「[FORCE LOGGING モードの指定](https://docs.oracle.com/cd/E11882_01/server.112/e25494/create.htm#ADMIN11096)」を参照してください。

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


****  

| パラメータ名 | データ型 | デフォルト | はい | 説明 | 
| --- | --- | --- | --- | --- | 
|  `p_enable`  |  boolean  |  true  |  いいえ  |  データベースを強制ログ作成モードに設定するには `true`、データベースを強制ログ作成モードから解除するには `false` に設定します。  | 

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

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

## サプリメンタルロギングの設定
<a name="Appendix.Oracle.CommonDBATasks.AddingSupplementalLogging"></a>

補足的なログ記録を有効にすると、LogMiner には、チェーンされた行とクラスター化されたテーブルをサポートするために必要な情報が表示されます。サプリメンタルロギングの詳細については、Oracle ドキュメントの「[サプリメンタルロギング](https://docs.oracle.com/cd/E11882_01/server.112/e22490/logminer.htm#SUTIL1582)」を参照してください。

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

`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;
/
```

## オンラインログファイルを切り替える
<a name="Appendix.Oracle.CommonDBATasks.SwitchingLogfiles"></a>

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

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

```
EXEC rdsadmin.rdsadmin_util.switch_logfile;
```

## オンライン REDO ログの追加
<a name="Appendix.Oracle.CommonDBATasks.RedoLogs"></a>

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

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

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


****  

| パラメータ名 | データ型 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | 
|  `bytes`  |  positive  |  null  |  いいえ  |  ログファイルのサイズ (バイト単位)。 このパラメータは、ログのサイズが 2,147,483,648 バイト (2 GiB) 未満の場合にのみ使用します。それ以外の場合、RDS はエラーを発行します。このバイト値を超えるログサイズの場合は、代わりに `p_size` パラメータを使用します。  | 
|  `p_size`  |  varchar2  |  —  |  はい  |  ログファイルのサイズは、キロバイト (K)、メガバイト (M)、またはギガバイト (G) です。  | 

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

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

## オンライン REDO ログの削除
<a name="Appendix.Oracle.CommonDBATasks.DroppingRedoLogs"></a>

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 ログのサイズ変更
<a name="Appendix.Oracle.CommonDBATasks.ResizingRedoLogs"></a>

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 ログの保持
<a name="Appendix.Oracle.CommonDBATasks.RetainRedoLogs"></a>

アーカイブ REDO ログを、Oracle LogMiner (`DBMS_LOGMNR`) などの製品で使用できるように DB インスタンスにローカルで保持できます。REDO ログを保持した後、LogMiner を使用してログを分析できます。詳細については、Oracle ドキュメントの「[LogMiner を使用した REDO ログファイルの分析](http://docs.oracle.com/cd/E11882_01/server.112/e22490/logminer.htm)」を参照してください。

アーカイブされた REDO ログを保持するには、Amazon RDS プロシージャ `rdsadmin.rdsadmin_util.set_configuration` を使用します。この手順を Oracle Data Guard のプライマリインスタンスで使用すると、RDS はプライマリインスタンスとオープンリードレプリカでのアーカイブログ保持設定を変更しますが、マウントされたレプリカでは変更しません。RDS は、マウントされたレプリカに最新のアーカイブ REDO ログを短期間保持します。RDS は、マウントされたレプリカにダウンロードされた古いログを自動的に削除します。

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


****  

| パラメータ名 | データ型 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | 
|  `name`  |  varchar  |  —  |  はい  |  更新する設定の名前。アーカイブ REDO ログの保持時間を変更するには、名前を `archivelog retention hours` に設定します。  | 
|  `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 インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

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

# オンライン およびアーカイブ REDO ログへのアクセス
<a name="Appendix.Oracle.CommonDBATasks.Log.Download"></a>

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

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

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

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

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

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

以下のコードでは、オンライン 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 ログのダウンロード
<a name="Appendix.Oracle.CommonDBATasks.download-redo-logs"></a>

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

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

## アーカイブ RED Oログのダウンロード:基本的なステップ
<a name="Appendix.Oracle.CommonDBATasks.download-redo-logs.basic-process"></a>

アーカイブ REDO ログを使用できるかどうかは、以下に挙げる保存ポリシーによって異なります。
+ バックアップ保持ポリシー - このポリシー内のログは Amazon S3 で使用できます。このポリシー外のログは削除されています。
+ アーカイブログ保持ポリシー - このポリシー内のログは、DB インスタンスで使用できます。このポリシー外のログは削除されています。

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

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

1. 保持期間を設定して、ダウンロードしたアーカイブ REDO ログを必要な期間保持します。忘れずに変更を `COMMIT` します。

   RDS は、ダウンロードしたログを、ログがダウンロードされた時点から、アーカイブされたログ保持ポリシーに従って保持します。保持ポリシーを設定する方法については、「[アーカイブ REDO ログの保持](Appendix.Oracle.CommonDBATasks.RetainRedoLogs.md)」を参照してください。

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

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

   詳細については、「[単一のアーカイブ REDO ログのダウンロード](#Appendix.Oracle.CommonDBATasks.download-redo-logs.single-log)」および「[一連のアーカイブ REDO ログのダウンロード](#Appendix.Oracle.CommonDBATasks.download-redo-logs.series)」を参照してください。
**注記**  
RDS は、ダウンロードの実行前に、利用可能なストレージを自動的に確認します。要求されたログで大量の領域が消費される場合は、アラートが表示されます。

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

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

## 単一のアーカイブ REDO ログのダウンロード
<a name="Appendix.Oracle.CommonDBATasks.download-redo-logs.single-log"></a>

単一のアーカイブ 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 ログのダウンロード
<a name="Appendix.Oracle.CommonDBATasks.download-redo-logs.series"></a>

一連のアーカイブ 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;
```