

# RDS for Oracle DB 인스턴스 문제 진단
<a name="Appendix.Oracle.CommonDBATasks.Diagnostics"></a>

Oracle 데이터베이스에는 데이터베이스 문제를 조사하는 데 사용할 수 있는 결함 진단 가능성 인프라가 포함되어 있습니다. Oracle 용어에서 *문제*는 코드 버그 또는 데이터 손상과 같은 중대한 오류입니다. *인시던트*는 문제의 발생입니다. 동일한 오류가 세 번 발생하면 인프라에 이 문제의 세 가지 인시던트가 표시됩니다. 자세한 내용은 Oracle 데이터베이스 설명서의 [문제 진단 및 해결](https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/diagnosing-and-resolving-problems.html#GUID-8DEB1BE0-8FB9-4FB2-A19A-17CF6F5791C3)을 참조하세요.

ADRCI(자동 진단 리포지토리 명령 인터프리터) 유틸리티는 진단 데이터를 관리하는 데 사용하는 Oracle 명령줄 도구입니다. 예를 들어, 이 도구를 사용하여 문제를 조사하고 진단 데이터를 패키징할 수 있습니다. *인시던트 패키지*에는 한 인시던트 또는 특정 문제를 참조하는 모든 인시던트에 대한 진단 데이터가 포함됩니다. .zip 파일로 구현된 인시던트 패키지를 Oracle Support에 업로드할 수 있습니다.

관리형 서비스 환경을 제공하기 위해 Amazon RDS는 ADRCI에 대한 shell 액세스를 제공하지 않습니다. RDS for Oracle 인스턴스에 대한 진단 작업을 수행하려면 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`  |  숫자  |  유효한 인시던트 ID 또는 null   |  Null  |  아니요  |  값이 null이면 이 함수는 모든 인시던트를 표시합니다. 값이 null이 아니고 유효한 인시던트 ID를 나타내면 이 함수는 지정된 인시던트를 표시합니다.   | 
|  `problem_id`  |  숫자  |  유효한 문제 ID 또는 null  |  Null  |  아니요  |  값이 null이면 이 함수에 모든 문제를 표시합니다. 값이 null이 아니고 유효한 문제 ID를 나타내면 이 함수는 지정된 문제를 표시합니다.  | 
|  `last`  |  숫자  |  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`  |  부울  | 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이라는 세 가지 인시던트를 보여줍니다.

```
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.
```

로그 파일을 읽으려면 `rdsadmin.rds_file_util.read_text_file` 함수를 호출하여 작업 ID를 파일 이름의 일부로 제공합니다. 다음 출력에서 로그 파일에는 1, 2 및 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 Support에 제공할 수 있는.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.
```

작업 출력을 읽으려면 `rdsadmin.rds_file_util.read_text_file`을 호출하여 작업 ID를 파일 이름의 일부로 제공합니다. 출력은 인시던트 패키지 `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`을 사용하여 추적 디렉터리 아래에 추적 파일을 나열하고 현재 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.
```

추적 파일 이름을 나열하려면 Amazon RDS 프로시저 `rdsadmin.rds_file_util.read_text_file`을 호출하여 작업 ID를 파일 이름의 일부로 제공합니다.

```
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) 섹션을 참조하세요.