

# Oracle DB 인스턴스의 RDS\$1X\$1 뷰 관리
<a name="Appendix.Oracle.CommonDBATasks.X-dollar"></a>

`SYS`를 통해서만 액세스할 수 있는 `SYS.X$` 고정 테이블에 액세스해야 할 수도 있습니다. 대상이 되는 `X$` 표에 `SYS.RDS_X$` 뷰를 만들려면 `rdsadmin.rdsadmin_util` 패키지의 프로시저를 사용합니다. 마스터 사용자에게 `RDS_X$` 뷰에 대한 `SELECT … WITH GRANT OPTION` 권한이 자동으로 부여됩니다.

`rdsadmin.rdsadmin_util` 절차는 다음과 같은 경우에 사용할 수 있습니다.
+ 업그레이드된 적이 없고 다음 릴리스를 사용하는 기존 DB 인스턴스:
  + `21.0.0.0.ru-2023-10.rur-2023-10.r1` 이상의 21c 릴리스
  + `19.0.0.0.ru-2023-10.rur-2023-10.r1` 이상의 19c 릴리스
+ 사용자가 만드는 모든 새 DB 인스턴스
+ 사용자가 업그레이드하는 모든 기존 DB 인스턴스

**중요**  
`rdsadmin.rdsadmin_util` 패키지는 내부적으로 `X$` 표에 뷰를 생성합니다. `X$` 표는 Oracle Database 설명서에 설명되어 있지 않은 내부 시스템 객체입니다. 비 프로덕션 데이터베이스에서 특정 뷰를 테스트하고 Oracle Support의 안내에 따라 프로덕션 데이터베이스에서만 뷰를 생성하는 것이 좋습니다.

## RDS\$1X\$1 뷰에서 사용할 수 있는 X\$1 고정 표 나열
<a name="Appendix.Oracle.CommonDBATasks.list-allowed-X-dollar"></a>

`RDS_X$` 뷰에 사용할 수 있는 X\$1 표를 나열하려면 RDS 프로시저 `rdsadmin.rdsadmin_util.list_allowed_sys_x$_views`를 사용합니다. 이 프로시저는 파라미터를 받지 않습니다. 다음 문에는 해당하는 모든 `X$` 표가 나열되어 있습니다(샘플 출력 포함).

```
SQL> SET SERVEROUTPUT ON
SQL> SELECT * FROM TABLE(rdsadmin.rdsadmin_util.list_allowed_sys_x$_views);

'X$BH'
'X$K2GTE'
'X$KCBWBPD'
'X$KCBWDS'
'X$KGLLK'
'X$KGLOB'
'X$KGLPN'
'X$KSLHOT'
'X$KSMSP'
'X$KSPPCV'
'X$KSPPI'
'X$KSPPSV'
'X$KSQEQ'
'X$KSQRS'
'X$KTUXE'
'X$KQRFP'
```

대상 `X$` 표 목록은 시간이 지남에 따라 변경될 수 있습니다. 대상 `X$` 고정 표 목록을 최신으로 유지하려면 주기적으로 `list_allowed_sys_x$_views`를 다시 실행하세요.

## SYS.RDS\$1X\$1 뷰 생성
<a name="Appendix.Oracle.CommonDBATasks.create-X-dollar"></a>

대상이 되는 `X$` 표에 `RDS_X$` 뷰를 만들려면 RDS 프로시저 `rdsadmin.rdsadmin_util.create_sys_x$_view`를 사용합니다. `rdsadmin.rdsadmin_util.list_allowed_sys_x$_views`의 출력에 나열된 표에 대한 뷰만 생성할 수 있습니다. `create_sys_x$_view` 프로시저는 다음 파라미터를 수용합니다.


****  

| 파라미터 이름 | 데이터 형식 | 기본값 | 필수 | 설명 | 
| --- | --- | --- | --- | --- | 
|  `p_x$_tbl`  |  varchar2  |  Null  |  예  |  유효한 `X$` 표 이름입니다. 이 값은 `list_allowed_sys_x$_views`에서 보고한 `X$` 표 중 하나여야 합니다.  | 
|  `p_force_creation`  |  부울  | FALSE |  아니요  |  `X$` 표에 이미 존재하는 `RDS_X$` 뷰를 강제로 생성할지 여부를 나타내는 값입니다. 기본적으로 RDS는 뷰가 이미 있는 경우 뷰를 만들지 않습니다. 강제로 생성하려면 이 파라미터를 `TRUE`로 설정합니다.  | 

다음 예제에서는 `X$KGLOB` 표에 `SYS.RDS_X$KGLOB` 뷰를 생성합니다. 뷰 이름 형식은 `RDS_X$tablename`입니다.

```
SQL> SET SERVEROUTPUT ON
SQL> EXEC rdsadmin.rdsadmin_util.create_sys_x$_view('X$KGLOB');

PL/SQL procedure successfully completed.
```

다음 데이터 사전 쿼리는 `SYS.RDS_X$KGLOB` 뷰를 나열하고 상태를 보여줍니다. 마스터 사용자에게 이 뷰에 대한 `SELECT ... WITH GRANT OPTION` 권한이 자동으로 부여됩니다.

```
SQL> SET SERVEROUTPUT ON
SQL> COL OWNER FORMAT A30 
SQL> COL OBJECT_NAME FORMAT A30
SQL> COL STATUS FORMAT A30
SQL> SET LINESIZE 200
SQL> SELECT OWNER, OBJECT_NAME, STATUS 
FROM DBA_OBJECTS 
WHERE OWNER = 'SYS' AND OBJECT_NAME = 'RDS_X$KGLOB';

OWNER                          OBJECT_NAME                    STATUS
------------------------------ ------------------------------ ------------------------------
SYS                            RDS_X$KGLOB                    VALID
```

**중요**  
업그레이드 전과 후에 `X$` 표가 동일하게 유지된다고 보장할 수는 없습니다. RDS for Oracle은 엔진 업그레이드 중에 `X$` 표에서 `RDS_X$` 뷰를 삭제하고 다시 생성합니다. 그런 다음 마스터 사용자에게 `SELECT ... WITH GRANT OPTION` 권한을 부여합니다. 업그레이드 후에는 해당 `RDS_X$` 뷰에서 필요에 따라 데이터베이스 사용자에게 권한을 부여합니다.

## SYS.RDS\$1X\$1 뷰 목록
<a name="Appendix.Oracle.CommonDBATasks.list-created-X-dollar"></a>

기존 `RDS_X$` 뷰를 나열하려면 RDS 프로시저 `rdsadmin.rdsadmin_util.list_created_sys_x$_views`를 사용합니다. 프로시저에는 `create_sys_x$_view` 프로시저로 만든 뷰만 나열됩니다. 다음 예제에서는 해당하는 `RDS_X$` 뷰(샘플 출력 포함)가 있는 `X$` 표를 나열합니다.

```
SQL> SET SERVEROUTPUT ON
SQL> COL XD_TBL_NAME FORMAT A30
SQL> COL STATUS FORMAT A30
SQL> SET LINESIZE 200
SQL> SELECT * FROM TABLE(rdsadmin.rdsadmin_util.list_created_sys_x$_views);

XD_TBL_NAME                    STATUS
------------------------------ ------------------------------
X$BH                           VALID
X$K2GTE                        VALID
X$KCBWBPD                      VALID

3 rows selected.
```

## RDS\$1X\$1 뷰 삭제
<a name="Appendix.Oracle.CommonDBATasks.drop-X-dollar"></a>

`SYS.RDS_X$` 뷰를 삭제하려면 RDS 프로시저 `rdsadmin.rdsadmin_util.drop_sys_x$_view`를 사용합니다. `rdsadmin.rdsadmin_util.list_allowed_sys_x$_views`의 출력에 나열된 뷰만 삭제할 수 있습니다. `drop_sys_x$_view` 프로시저는 다음 파라미터를 받습니다.


****  

| 파라미터 이름 | 데이터 형식 | 기본값 | 필수 | 설명 | 
| --- | --- | --- | --- | --- | 
|  `p_x$_tbl`  |  varchar2  |  Null  |  예  |  유효한 `X$` 고정 표 이름입니다. 이 값은 `list_created_sys_x$_views`에서 보고한 `X$` 고정 표 중 하나여야 합니다.  | 

다음 예제에서는 `X$KGLOB` 표에 만든 `RDS_X$KGLOB` 뷰를 삭제합니다.

```
SQL> SET SERVEROUTPUT ON
SQL> EXEC rdsadmin.rdsadmin_util.drop_sys_x$_view('X$KGLOB');

PL/SQL procedure successfully completed.
```

다음 예제에서는 `SYS.RDS_X$KGLOB` 뷰가 삭제되었음을 보여줍니다(샘플 출력 포함).

```
SQL> SET SERVEROUTPUT ON
SQL> COL OWNER FORMAT A30 
SQL> COL OBJECT_NAME FORMAT A30
SQL> COL STATUS FORMAT A30
SQL> SET LINESIZE 200
SQL> SELECT OWNER, OBJECT_NAME, STATUS 
FROM DBA_OBJECTS 
WHERE OWNER = 'SYS' AND OBJECT_NAME = 'RDS_X$KGLOB';

no rows selected
```