[OCI]Autonomous DatabaseでReal Application Testing（RAT）Database ReplayのCapture/Replayを試してみた

# はじめに
従来から、他のOracle DatabaseでRATのDatabase Replayを使用してキャプチャしたワークロードをAutonomous Databaseでリプレイすることはできましたが、Autonomous Databaseでのワークロードのキャプチャはできませんでした。

機能アップデートによって、Autonomous DatabaseでもDatabase Replayワークロードのキャプチャができるようになったので、Autonomous Databaseでワークロードのキャプチャを行い、キャプチャしたワークロードを別のAutonomous Databaseでリプレイしてみました。

# 1. トピックの作成
[こちら](https://qiita.com/500InternalServerError/items/28aa9d57f95d09e591ab)の記事を参考にして、イベント・ルールで使用するトピックを作成します。

# 2. イベント・ルールの作成
以下のイベントに合致した場合に1.で作成したトピックを使用してメールを送信するイベント・ルールを作成します。

イベント：com.oraclecloud.databaseservice.autonomous.database.information

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/4d41bdea-651f-04b6-0f24-8a98c1d888f4.png)

# 3. ワークロードのキャプチャ
SQL*PlusからワークロードをキャプチャするAutonomous Database（ここではprodatp）にadminユーザとして接続します。
```
[opc@tools ~]$ sqlplus admin/Demo#1Demo#1@prodadb

SQL*Plus: Release 21.0.0.0.0 - Production on 火 4月 18 22:43:25 2023
Version 21.9.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

最終正常ログイン時間: 火 4月  18 2023 22:38:03 +00:00


Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.19.0.1.0
に接続されました。
SQL>
```

以下のようなパラメータを指定してDBMS_CLOUD_ADMIN.START_WORKLOAD_CAPTUREを実行し、ワークロードのキャプチャを開始します。
|パラメータ名|値|
|---|---|
|capture_name|作成するキャプチャの名前|
|duration（省略化）|キャプチャ期間（分）|

```
SQL> BEGIN
  2    DBMS_CLOUD_ADMIN.START_WORKLOAD_CAPTURE(
  3      capture_name => 'test_dbreplay_capture1'
  4    );
  5  END;
  6  /

PL/SQLプロシージャが正常に完了しました。

SQL>
```
キャプチャの状態はdba_capture_replay_statusビューで確認できます。
```
SQL> col state for a50
SQL> col progress for a20
SQL> SELECT * FROM dba_capture_replay_status;

STATE						                       PROGRESS
-------------------------------------------------- --------------------
CAPTURE test_dbreplay_capture1                     STARTED

SQL> 
```
キャプチャの詳細の情報は、dba_workload_capturesビューで確認できます。
```
SQL> col name for a30
SQL> col status for a20
SQL> SELECT name,status,start_time,end_time FROM dba_workload_captures;

NAME			               STATUS		        START_TIME		    END_TIME
------------------------------ -------------------- ------------------- -------------------
test_dbreplay_capture1	       IN PROGRESS	        2023/04/19 03:39:41

SQL>
```
DBMS_CLOUD_ADMIN.FINISH_WORKLOAD_CAPTUREプロシージャを実行して、ワークロードのキャプチャを終了します。
```
SQL> BEGIN
  2    DBMS_CLOUD_ADMIN.FINISH_WORKLOAD_CAPTURE;
  3  END;
  4  /

PL/SQLプロシージャが正常に完了しました。

SQL>
```
キャプチャの状態をdba_capture_replay_statusビューで確認すると、「FINISHING CAPTURE」に変わっていました。
```
SQL> SELECT * FROM dba_capture_replay_status;

STATE						                       PROGRESS
-------------------------------------------------- --------------------
FINISHING CAPTURE

SQL>
```
キャプチャの全ての処理が完了すると、STATEが「FINISH CAPTURE」に、PROGRESSが「COMPLETED」に変わりました。
```
SQL> SELECT * FROM dba_capture_replay_status;

STATE						                       PROGRESS
-------------------------------------------------- --------------------
FINISH CAPTURE test_dbreplay_capture1              COMPLETED

SQL>
```
キャプチャの詳細情報をdba_workload_capturesビューで確認します。
処理が終了したので、STATUSがCOMPLETEになり、END_TIMEに処理の終了時刻が入りました。
```
SQL> SELECT name,status,start_time,end_time FROM dba_workload_captures;

NAME			               STATUS		        START_TIME		    END_TIME
------------------------------ -------------------- ------------------- -------------------
test_dbreplay_capture1	       COMPLETED	        2023/04/19 03:39:41 2023/04/19 03:41:08
SQL>
```
キャプチャが完了すると、作成したイベント・ルールによって、こちらのような通知メールが届きます。
メール内の赤枠部分のリンクからキャプチャ・ファイル（zipファイル）をダウンロードすることもできますが、必須ではありません。
![スクリーンショット 2023-04-19 13.57.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/5c080f61-69a5-1102-9267-6041bff324e3.png)

# 4. リプレイ実行環境（クローン）の作成

リプレイを実行する環境のデータは、ワークロードのキャプチャを開始した時点のデータとできるかぎり論理的に同じ状態である必要があるため、キャプチャの開始時間のタイムスタンプを指定して、バックアップからフル・クローンを作成します。

事前にリフレッシュ可能クローンを作成しておき、キャプチャの開始時間のタイムスタンプを指定してリフレッシュすることでも、同様の環境を作成することが可能です。

今回はtestadbという名前のフル・クローンを作成しました。

注）2023/4/18現在、クローン作成時に指定するデータベース名が15文字以上の場合にリプレイが正常に終了しない、という問題があるようですのでご注意ください。


# 5. ワークロードのリプレイ
SQL*PlusからワークロードをリプレイするAutonomous Database（ここでは4.で作成したクローン：testadb）にadminユーザとして接続します。
```
[opc@tools ~]$ sqlplus admin/Demo#1Demo#1@testadb

SQL*Plus: Release 19.0.0.0.0 - Production on 水 4月 19 12:58:55 2023
Version 19.16.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

最終正常ログイン時間: 水 4月  19 2023 11:37:59 +09:00


Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.19.0.1.0
に接続されました。
SQL>
```
以下のようなパラメータを指定してDBMS_CLOUD_ADMIN.REPLAY_WORKLOADプロシージャを実行して、キャプチャしたワークロードのリプレイを開始します。
|パラメータ名|値|
|---|---|
|capture_name|作成したキャプチャの名前|
|capture_source_tenancy_ocid|テナンシのOCID|
|capture_source_db_name|キャプチャを取得したAutonomous DatabaseのDB名|
```
SQL> BEGIN
  2    DBMS_CLOUD_ADMIN.REPLAY_WORKLOAD(
  3      capture_name                => 'test_dbreplay_capture1',
  4      capture_source_tenancy_ocid => 'ocid1.tenancy.oc1..a***********************************a',
  5      capture_source_db_name      => 'prodatp'
  6    );
  7  END;
  8  /

PL/SQLプロシージャが正常に完了しました。

SQL> 
```
リプレイの進行状況もdba_capture_replay_statusビューで確認できます。
```
SQL> col state for a50
SQL> col progress for a20
SQL> SELECT * FROM dba_capture_replay_status;

STATE						                       PROGRESS
-------------------------------------------------- --------------------
DOWNLOADING CAPTURE FILES			               4%

SQL>
```

```
SQL> SELECT * FROM dba_capture_replay_status;

STATE						                       PROGRESS
-------------------------------------------------- --------------------
PREPARING REPLAY

SQL>
```

```
SQL> SELECT * FROM dba_capture_replay_status;

STATE						                       PROGRESS
-------------------------------------------------- --------------------
STARTING REPLAY

SQL> /
```
リプレイが終了すると、STATEが「REPLAY COMPLETED」に変わりました。
```
SQL> SELECT * FROM dba_capture_replay_status;

STATE						                       PROGRESS
-------------------------------------------------- --------------------
REPLAY REPLAY_1681877101 COMPLETED

SQL>
```

# 6. レポートのダウンロード

リプレイが完了すると、作成したイベント・ルールによって、こちらのような通知メールが届きますので、メール内の赤枠部分のリンクからレポート（zipファイル）をダウンロードします。
※メールのリンクをクリックすると、URLの末尾にダブルクオートが入ってしまってダウンロードできないため、末尾のダブルクオートを含まない形でURLをコピーしてブラウザからアクセスする必要がありました。
![スクリーンショット 2023-04-19 13.17.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/edc278a3-afe0-5500-8901-59ca5711f5a8.png)

zipファイル（adb_replay_report.zip）を解凍し、adb_replay_report.htmlを開きます。
![スクリーンショット 2023-04-19 13.23.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/5dd37d5b-1863-fd10-fb2c-1e8d1f4142dc.png)

# まとめ

Autonomous DatabaseでのDatabase ReplayのCapture/Replayは上記のようにとても簡単に実施できることがわかりました。
リソース変更や設定変更による影響のテスト等を行う際に活用できますね。

# 参考情報
・[データベース・リプレイの概要](https://docs.oracle.com/cd/E82638_01/ratug/introduction-to-database-replay.html#GUID-5AA30327-74FB-4406-8F7C-5D442F307534)
・[Using Oracle Real Application Testing](https://docs.oracle.com/en/cloud/paas/autonomous-database/adbsa/autonomous-real-application-testing.html#GUID-EB8F065E-5FBB-480D-BAF6-5A0446740073)