

# 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 サポートのガイダンスに従って、本番用のデータベースにのみビューを作成することをお勧めしています。

## 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$` テーブルの 1 つである必要があります。  | 
|  `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$` 固定テーブルの 1 つである必要があります。  | 

次の例では、テーブル `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
```