

# RDS for Oracle DB インスタンスの問題の診断
<a name="Appendix.Oracle.CommonDBATasks.Diagnostics"></a>

Oracle Databaseは、データベースの問題を調査するために使用できる障害診断能力インフラストラクチャを備えています。Oracle の用語では、*問題*は、コードのバグやデータの破損などの重大なエラーです。*インシデント*とは、問題の発生です。同じエラーが 3 回発生した場合、このインフラストラクチャには、この問題の 3 つのインシデントが示されます。詳細は、Oracle Databaseドキュメントの「[問題の診断と解決](https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/diagnosing-and-resolving-problems.html#GUID-8DEB1BE0-8FB9-4FB2-A19A-17CF6F5791C3)」を参照してください。

自動診断リポジトリコマンドインタープリタ (ADRCI) ユーティリティは、診断データの管理に使用する Oracle コマンドラインツールです。例えば、このツールを使用して問題を調査し、診断データをパッケージ化することができます。*インシデントパッケージ*には、特定の問題を参照する 1 つのインシデントまたはすべてのインシデントの診断データが含まれます。.zipファイルとして実装されているインシデントパッケージを Oracle サポートにアップロードできます。

マネージドサービスエクスペリエンスを提供するために、Amazon RDS は ADRCI へのシェルアクセスを提供していません。RDS for Oracle DB インスタンスの診断タスクを実行するには、Amazon RDS パッケージ `rdsadmin.rdsadmin_adrci_util` を使用します。

`rdsadmin_adrci_util` で関数を使用すると、問題やインシデントをリストしてパッケージ化でき、トレースファイルも表示できます。すべての関数はタスク ID を返します。この ID は、`dbtask-task_id.log` のように ADRCI 出力を含むログファイルの名前の一部を形成します。ログファイルは BDUMP ディレクトリにあります。[データベースログファイルのダウンロード](USER_LogAccess.Procedural.Downloading.md) で説明した手順に従って、ログファイルをダウンロードできます。

## 診断手順の共通パラメータ
<a name="Appendix.Oracle.CommonDBATasks.CommonDiagParameters"></a>

診断タスクを実行するには、 Amazon RDS パッケージ `rdsadmin.rdsadmin_adrci_util` 内の関数を使用します。パッケージ内の共通パラメータは以下のとおりです。


****  

| パラメータ名 | データ型 | 有効な値 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | --- | 
|  `incident_id`  |  number  |  有効なインシデント ID または null   |  Null  |  いいえ  |  値が null の場合、関数はすべてのインシデントを表示します。値が null ではなく、有効なインシデント ID を指定している場合は、関数は指定されたインシデントを表示します。  | 
|  `problem_id`  |  number  |  有効な問題 ID または null  |  Null  |  いいえ  |  値が null の場合、関数はすべての問題を表示します。値が null ではなく、有効な問題 ID を表す場合、関数は指定された問題を表示します。  | 
|  `last`  |  number  |  0 より大きい有効な整数、または null  |  Null  |  いいえ  |  値が null の場合、関数は最大 50 個の項目を表示します。値が null でない場合、関数は指定された数を表示します。  | 

## インシデントのリスト化
<a name="Appendix.Oracle.CommonDBATasks.Incidents"></a>

Oracle の診断インシデントを一覧表示するには、Amazon RDS 関数 `rdsadmin.rdsadmin_adrci_util.list_adrci_incidents` を使用します。インシデントは、ベーシックモードまたは詳細モードのいずれかでリストできます。デフォルトでは、この関数は最新の 50 件のインシデントをリストします。

この関数は、以下の共通パラメータを使用します。
+  `incident_id`
+  `problem_id`
+  `last`

`incident_id` と `problem_id` を指定すると、`incident_id` は `problem_id` より優先されます。詳細については、「[診断手順の共通パラメータ](#Appendix.Oracle.CommonDBATasks.CommonDiagParameters)」を参照してください。

この関数は、次の追加パラメータを使用します。


****  

| パラメータ名 | データ型 | 有効な値 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | --- | 
|  `detail`  |  boolean  | TRUE 、、または FALSE |  `FALSE`  |  いいえ  |  `TRUE` の場合、関数はインシデントを詳細モードでリストします。`FALSE` の場合、この関数はインシデントをベーシックモードでリストします。  | 

すべてのインシデントを一覧表示するには、引数を指定せずに `rdsadmin.rdsadmin_adrci_util.list_adrci_incidents` 関数をクエリします。クエリはタスク ID を返します。

```
SQL> SELECT rdsadmin.rdsadmin_adrci_util.list_adrci_incidents AS task_id FROM DUAL;

TASK_ID
------------------
1590786706158-3126
```

または、引数を指定せずに `rdsadmin.rdsadmin_adrci_util.list_adrci_incidents` 関数を呼び出し、出力を SQL クライアント変数に保存します。変数は、他のステートメントで使用できます。

```
SQL> VAR task_id VARCHAR2(80);
SQL> EXEC :task_id := rdsadmin.rdsadmin_adrci_util.list_adrci_incidents;

PL/SQL procedure successfully completed.
```

ログファイルを読み取るには、Amazon RDS プロシージャ `rdsadmin.rds_file_util.read_text_file` を呼び出します。ファイル名の一部としてタスク ID を指定します。次の出力は、53523、53522、53521 の 3 つのインシデントを示しています。

```
SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'dbtask-'||:task_id||'.log'));

TEXT
-------------------------------------------------------------------------------------------------------------------------
2020-05-29 21:11:46.193 UTC [INFO ] Listing ADRCI incidents.
2020-05-29 21:11:46.256 UTC [INFO ]
ADR Home = /rdsdbdata/log/diag/rdbms/orcl_a/ORCL:
*************************************************************************
INCIDENT_ID PROBLEM_KEY                                                 CREATE_TIME
----------- ----------------------------------------------------------- ----------------------------------------
53523       ORA 700 [EVENT_CREATED_INCIDENT] [942] [SIMULATED_ERROR_003 2020-05-29 20:15:20.928000 +00:00
53522       ORA 700 [EVENT_CREATED_INCIDENT] [942] [SIMULATED_ERROR_002 2020-05-29 20:15:15.247000 +00:00
53521       ORA 700 [EVENT_CREATED_INCIDENT] [942] [SIMULATED_ERROR_001 2020-05-29 20:15:06.047000 +00:00
3 rows fetched


2020-05-29 21:11:46.256 UTC [INFO ] The ADRCI incidents were successfully listed.
2020-05-29 21:11:46.256 UTC [INFO ] The task finished successfully.

14 rows selected.
```

特定のインシデントをリストするには、`incident_id` パラメータを使用してその ID を指定します。次の例では、インシデント 53523 のみのログファイルをクエリします。

```
SQL> EXEC :task_id := rdsadmin.rdsadmin_adrci_util.list_adrci_incidents(incident_id=>53523);

PL/SQL procedure successfully completed.

SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'dbtask-'||:task_id||'.log'));

TEXT
------------------------------------------------------------------------------------------------------------------
2020-05-29 21:15:25.358 UTC [INFO ] Listing ADRCI incidents.
2020-05-29 21:15:25.426 UTC [INFO ]
ADR Home = /rdsdbdata/log/diag/rdbms/orcl_a/ORCL:
*************************************************************************
INCIDENT_ID          PROBLEM_KEY                                                 CREATE_TIME
-------------------- ----------------------------------------------------------- ---------------------------------
53523                ORA 700 [EVENT_CREATED_INCIDENT] [942] [SIMULATED_ERROR_003 2020-05-29 20:15:20.928000 +00:00
1 rows fetched


2020-05-29 21:15:25.427 UTC [INFO ] The ADRCI incidents were successfully listed.
2020-05-29 21:15:25.427 UTC [INFO ] The task finished successfully.

12 rows selected.
```

## 問題のリスト化
<a name="Appendix.Oracle.CommonDBATasks.Problems"></a>

Oracle の診断問題を一覧表示するには、Amazon RDS 関数 `rdsadmin.rdsadmin_adrci_util.list_adrci_problems` を使用します。

デフォルトでは、この関数は最新の 50 個の問題をリストします。

この関数は、共通パラメータ `problem_id` と `last` を使用します。詳細については、「[診断手順の共通パラメータ](#Appendix.Oracle.CommonDBATasks.CommonDiagParameters)」を参照してください。

すべての問題のタスク ID を取得するには、引数を指定せずに `rdsadmin.rdsadmin_adrci_util.list_adrci_problems` 関数を呼び出し、出力を SQL クライアント可変に格納します。

```
SQL> EXEC :task_id := rdsadmin.rdsadmin_adrci_util.list_adrci_problems;

PL/SQL procedure successfully completed.
```

ログファイルを読み込むには、ファイル名の一部としてタスク ID を指定し、`rdsadmin.rds_file_util.read_text_file` 関数を呼び出します。次の出力では、ログファイルには 1、2、3 の 3 つの問題が表示されます。

```
SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'dbtask-'||:task_id||'.log'));

TEXT
----------------------------------------------------------------------------------------------------------------------
2020-05-29 21:18:50.764 UTC [INFO ] Listing ADRCI problems.
2020-05-29 21:18:50.829 UTC [INFO ]
ADR Home = /rdsdbdata/log/diag/rdbms/orcl_a/ORCL:
*************************************************************************
PROBLEM_ID   PROBLEM_KEY                                                 LAST_INCIDENT        LASTINC_TIME
---------- ----------------------------------------------------------- ------------- ---------------------------------
2          ORA 700 [EVENT_CREATED_INCIDENT] [942] [SIMULATED_ERROR_003 53523         2020-05-29 20:15:20.928000 +00:00
3          ORA 700 [EVENT_CREATED_INCIDENT] [942] [SIMULATED_ERROR_002 53522         2020-05-29 20:15:15.247000 +00:00
1          ORA 700 [EVENT_CREATED_INCIDENT] [942] [SIMULATED_ERROR_001 53521         2020-05-29 20:15:06.047000 +00:00
3 rows fetched


2020-05-29 21:18:50.829 UTC [INFO ] The ADRCI problems were successfully listed.
2020-05-29 21:18:50.829 UTC [INFO ] The task finished successfully.

14 rows selected.
```

次の例では、問題 3 のみをリストします。

```
SQL> EXEC :task_id := rdsadmin.rdsadmin_adrci_util.list_adrci_problems(problem_id=>3);

PL/SQL procedure successfully completed.
```

問題 3 のログファイルを読み込むには、`rdsadmin.rds_file_util.read_text_file` を呼び出します。ファイル名の一部としてタスク ID を指定します。

```
SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'dbtask-'||:task_id||'.log'));

TEXT
-------------------------------------------------------------------------
2020-05-29 21:19:42.533 UTC [INFO ] Listing ADRCI problems.
2020-05-29 21:19:42.599 UTC [INFO ]
ADR Home = /rdsdbdata/log/diag/rdbms/orcl_a/ORCL:
*************************************************************************
PROBLEM_ID PROBLEM_KEY                                                 LAST_INCIDENT LASTINC_TIME
---------- ----------------------------------------------------------- ------------- ---------------------------------
3          ORA 700 [EVENT_CREATED_INCIDENT] [942] [SIMULATED_ERROR_002 53522         2020-05-29 20:15:15.247000 +00:00
1 rows fetched


2020-05-29 21:19:42.599 UTC [INFO ] The ADRCI problems were successfully listed.
2020-05-29 21:19:42.599 UTC [INFO ] The task finished successfully.

12 rows selected.
```

## インシデントパッケージの作成
<a name="Appendix.Oracle.CommonDBATasks.IncPackages"></a>

Amazon RDS 関数 `rdsadmin.rdsadmin_adrci_util.create_adrci_package` を使用してインシデントパッケージを作成できます。出力は、Oracle サポートに提供できる .zip ファイルです。

この関数は、以下の共通パラメータを使用します。
+ `problem_id`
+ `incident_id`

上記のパラメータのいずれかを必ず指定してください。両方のパラメータを指定した場合、`incident_id` は `problem_id` をオーバーライドします。詳細については、「[診断手順の共通パラメータ](#Appendix.Oracle.CommonDBATasks.CommonDiagParameters)」を参照してください。

特定のインシデントのパッケージを作成するには、`rdsadmin.rdsadmin_adrci_util.create_adrci_package` パラメータを指定して Amazon RDS 関数 `incident_id` を呼び出します。次の例では、インシデント 53523 のパッケージを作成します。

```
SQL> EXEC :task_id := rdsadmin.rdsadmin_adrci_util.create_adrci_package(incident_id=>53523);

PL/SQL procedure successfully completed.
```

ログファイルを読み込むには、`rdsadmin.rds_file_util.read_text_file` を呼び出します。ファイル名の一部としてタスク ID を指定することができます。出力は、インシデントパッケージ `ORA700EVE_20200529212043_COM_1.zip` を生成したことを示しています。

```
SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'dbtask-'||:task_id||'.log'));

TEXT
--------------------------------------------------------------------------------------------------------------------------------------
2020-05-29 21:20:43.031 UTC [INFO ] The ADRCI package is being created.
2020-05-29 21:20:47.641 UTC [INFO ] Generated package 1 in file /rdsdbdata/log/trace/ORA700EVE_20200529212043_COM_1.zip, mode complete
2020-05-29 21:20:47.642 UTC [INFO ] The ADRCI package was successfully created.
2020-05-29 21:20:47.642 UTC [INFO ] The task finished successfully.
```

特定の問題の診断データをパッケージ化するには、`problem_id` パラメータを使用してその ID を指定します。次の例では、問題 3 のデータのみをパッケージ化します。

```
SQL> EXEC :task_id := rdsadmin.rdsadmin_adrci_util.create_adrci_package(problem_id=>3);

PL/SQL procedure successfully completed.
```

タスク出力を読み取るには、ファイル名の一部としてタスク ID を指定して `rdsadmin.rds_file_util.read_text_file` を呼び出します。出力は、インシデントパッケージ `ORA700EVE_20200529212111_COM_1.zip` を生成したことを示しています。

```
SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'dbtask-'||:task_id||'.log'));

TEXT
------------------------------------------------------------------------------------------------------------------------------------------------------------
2020-05-29 21:21:11.050 UTC [INFO ] The ADRCI package is being created.
2020-05-29 21:21:15.646 UTC [INFO ] Generated package 2 in file /rdsdbdata/log/trace/ORA700EVE_20200529212111_COM_1.zip, mode complete
2020-05-29 21:21:15.646 UTC [INFO ] The ADRCI package was successfully created.
2020-05-29 21:21:15.646 UTC [INFO ] The task finished successfully.
```

ログファイルをダウンロードすることもできます。詳細については、「[データベースログファイルのダウンロード](USER_LogAccess.Procedural.Downloading.md)」を参照してください。

## トレースファイルの表示
<a name="Appendix.Oracle.CommonDBATasks.ShowTrace"></a>

Amazon RDS 関数 `rdsadmin.rdsadmin_adrci_util.show_adrci_tracefile` を使用すると、trace ディレクトリの下にあるトレースファイルと、現在の ADR ホームにあるすべてのインシデントディレクトリを一覧表示できます。トレースファイルとインシデントトレースファイルの内容を表示することもできます。

この関数は、次のパラメータを使用します。


****  

| パラメータ名 | データ型 | 有効な値 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | --- | 
|  `filename`  |  varchar2  | 有効なトレースファイル名 |  Null  |  いいえ  |  値が null の場合、関数はすべてのトレースファイルを表示します。null でない場合、関数は指定されたファイルを表示します。  | 

トレースファイルを表示するには、Amazon RDS 関数 `rdsadmin.rdsadmin_adrci_util.show_adrci_tracefile` を呼び出します。

```
SQL> EXEC :task_id := rdsadmin.rdsadmin_adrci_util.show_adrci_tracefile;

PL/SQL procedure successfully completed.
```

トレースファイル名をリストするには、ファイル名の一部としてタスク ID を指定して、Amazon RDS プロシージャ `rdsadmin.rds_file_util.read_text_file` を呼び出します。

```
SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'dbtask-'||:task_id||'.log')) WHERE TEXT LIKE '%/alert_%';

TEXT
---------------------------------------------------------------
     diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log.2020-05-28
     diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log.2020-05-27
     diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log.2020-05-26
     diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log.2020-05-25
     diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log.2020-05-24
     diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log.2020-05-23
     diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log.2020-05-22
     diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log.2020-05-21
     diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log

9 rows selected.
```

次の例では、`alert_ORCL.log` の出力を生成します。

```
SQL> EXEC :task_id := rdsadmin.rdsadmin_adrci_util.show_adrci_tracefile('diag/rdbms/orcl_a/ORCL/trace/alert_ORCL.log');

PL/SQL procedure successfully completed.
```

ログファイルを読み込むには、`rdsadmin.rds_file_util.read_text_file` を呼び出します。ファイル名の一部としてタスク ID を指定します。出力には、alert\$1ORCL.log の初期の 10 行が表示されます。

```
SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'dbtask-'||:task_id||'.log')) WHERE ROWNUM <= 10;

TEXT
-----------------------------------------------------------------------------------------
2020-05-29 21:24:02.083 UTC [INFO ] The trace files are being displayed.
2020-05-29 21:24:02.128 UTC [INFO ] Thu May 28 23:59:10 2020
Thread 1 advanced to log sequence 2048 (LGWR switch)
  Current log# 3 seq# 2048 mem# 0: /rdsdbdata/db/ORCL_A/onlinelog/o1_mf_3_hbl2p8xs_.log
Thu May 28 23:59:10 2020
Archived Log entry 2037 added for thread 1 sequence 2047 ID 0x5d62ce43 dest 1:
Fri May 29 00:04:10 2020
Thread 1 advanced to log sequence 2049 (LGWR switch)
  Current log# 4 seq# 2049 mem# 0: /rdsdbdata/db/ORCL_A/onlinelog/o1_mf_4_hbl2qgmh_.log
Fri May 29 00:04:10 2020

10 rows selected.
```

ログファイルをダウンロードすることもできます。詳細については、「[データベースログファイルのダウンロード](USER_LogAccess.Procedural.Downloading.md)」を参照してください。