RDS (Oracle) の REDO ログについて

# はじめに

RDS (Oracle) の REDO ログについて整理する必要がでたので、Amazon Q Developer CLI (AWS Documentation MCP Server などは設定済み)を使用しながら情報を整理した。

## REDOログの基本情報

1. **名称と定義**:
   - Oracleデータベースでは、トランザクションログは「REDOログ」と呼ばれます
   - これはOracleデータベースの標準用語であり、AWS RDSでも同様です

参考URL: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.ResizingRedoLogs.html

2. **初期設定**:
   - RDS for Oracleインスタンスは、デフォルトで4つのオンラインREDOログファイルで起動します
   - 各ログファイルのデフォルトサイズは128MBです（合計512MB）

参考URL: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.ResizingRedoLogs.html

3. **循環方式**:
   - REDOログファイルは循環方式で使用されます
   - あるログファイルが満杯になると、次のログファイルに切り替わります（ログスイッチ）
   - すべてのログファイルが一巡すると、最初のファイルに戻って上書きされます

参考URL: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.ResizingRedoLogs.html

4. **サイズ変更**:
   - `rdsadmin.rdsadmin_util.add_logfile`および`rdsadmin.rdsadmin_util.drop_logfile`プロシージャを使用して、REDOログのサイズや数を変更できます
   - 高トランザクション環境では、REDOログのサイズを大きくする（例：512MB）か、数を増やすことが推奨されます

参考URL: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.ResizingRedoLogs.html

## アーカイブREDOログの管理

1. **名称と定義**:
   - REDOログがスイッチされると、使用済みのログは「アーカイブREDOログ」としてアーカイブされます
   - これはOracleの標準用語です

参考URL: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.RetainRedoLogs.html

2. **インスタンス上での保持**:
   - `archivelog retention hours`パラメータで、アーカイブREDOログをRDSインスタンス上に保持する時間を設定できます
   - デフォルト値は0で、アーカイブREDOログはインスタンス上にほとんど保持されません
   - 設定例: `rdsadmin.rdsadmin_util.set_configuration(name => 'archivelog retention hours', value => '24');`

参考URL: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.RetainRedoLogs.html
参考URL（デフォルト値について）: https://repost.aws/knowledge-center/rds-oracle-storage-optimization

3. **S3への保存**:
   - RDSは5分ごとにトランザクションログ（アーカイブREDOログ）をS3にアップロードします
   - これはバックアッププロセスとは独立して行われます
   - S3に保存されたログは、バックアップ保持期間内であれば利用可能です

参考URL: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PIT.html

4. **保持ポリシー**:
   - アーカイブREDOログの可用性は2つの保持ポリシーに依存します:
     * バックアップ保持ポリシー ? このポリシー内のログはS3で利用可能です
     * アーカイブログ保持ポリシー ? このポリシー内のログはDBインスタンス上で利用可能です

参考URL: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.download-redo-logs.html

5. **S3からのダウンロード**:
   - インスタンス上にないがバックアップ保持期間内のログは、`rdsadmin.rdsadmin_archive_log_download`パッケージを使用してS3から再ダウンロードできます

参考URL: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.download-redo-logs.html

## インスタンス上でアーカイブREDOログを保持する理由

S3に5分ごとに保存されるにもかかわらず、インスタンス上でアーカイブREDOログを保持する主な理由:

1. **パフォーマンス**:
   - インスタンス上にログを保持することで、即時アクセスが可能になります
   - S3からのダウンロードは時間がかかります

2. **特定のツールの使用**:
   - Oracle LogMiner（`DBMS_LOGMNR`）などのツールを使用してログを分析する場合、ローカルにログを保持する必要があります

3. **トラブルシューティング**:
   - 問題調査時に即座にログにアクセスできることが重要です

参考URL: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.RetainRedoLogs.html

## ポイントインタイムリカバリ（PITR）への影響

1. **REDOログの消費速度**:
   - 高トランザクション環境では、REDOログが急速に消費される可能性があります
   - ただし、アーカイブプロセスが正常に機能していれば、PITRに支障はありません

2. **潜在的なリスク**:
   - 極端に高いトランザクション率で、アーカイブプロセスがREDOログの生成に追いつけない場合、「アーカイブログの宛先がいっぱいです」エラーでデータベースが停止する可能性があります

3. **対策**:
   - REDOログのサイズを増やす（例：128MBから512MBへ）
   - REDOログの数を増やす（例：4つから8つへ）
   - 高トランザクション環境では、`archivelog retention hours`を0に保ち、インスタンス上でのアーカイブREDOログの保持を最小限にする

参考URL: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PIT.html
参考URL: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.ResizingRedoLogs.html

## まとめ

- RDS for Oracleはデフォルトで128MBの4つのREDOログを持ちます
- REDOログがスイッチされると、古いログはアーカイブされます
- デフォルトでは、アーカイブREDOログはインスタンス上にはほとんど保持されません（`archivelog retention hours = 0`）
- RDSは5分ごとにアーカイブREDOログをS3にアップロードします
- S3に保存されたログは、バックアップ保持期間内であれば利用可能です
- 特定のツールを使用する場合や即時アクセスが必要な場合は、`archivelog retention hours`を増やしてインスタンス上にログを保持できます

参考URL: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PIT.html
参考URL: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.RetainRedoLogs.html
参考URL: https://repost.aws/knowledge-center/rds-oracle-storage-optimization