

# Oracle DB インスタンスの一般的なシステムタスクの実行
<a name="Appendix.Oracle.CommonDBATasks.System"></a>

次に、Oracle を実行している Amazon RDS DB インスタンスで、システムに関連する特定の一般的な DBA タスクを実行する方法を示します。マネージド型サービスの操作性を実現するために、Amazon RDS では DB インスタンスへのシェルアクセスは提供していません。また、上位の権限を必要とする特定のシステムプロシージャやシステムテーブルへのアクセスが制限されます。

**Topics**
+ [セッションの切断](Appendix.Oracle.CommonDBATasks.DisconnectingSession.md)
+ [セッションの終了](Appendix.Oracle.CommonDBATasks.KillingSession.md)
+ [セッションでの SQL ステートメントのキャンセル](Appendix.Oracle.CommonDBATasks.CancellingSQL.md)
+ [制限セッションの有効化と無効化](Appendix.Oracle.CommonDBATasks.RestrictedSession.md)
+ [共有プールのフラッシュ](Appendix.Oracle.CommonDBATasks.FlushingSharedPool.md)
+ [SYS オブジェクトへの SELECT または EXECUTE 権限の付与](Appendix.Oracle.CommonDBATasks.TransferPrivileges.md)
+ [SYS オブジェクトに対する SELECT または EXECUTE 権限の取り消し](Appendix.Oracle.CommonDBATasks.RevokePrivileges.md)
+ [Oracle DB インスタンスの RDS\$1X\$1 ビューの管理](Appendix.Oracle.CommonDBATasks.X-dollar.md)
+ [非マスターユーザーへの権限の付与](Appendix.Oracle.CommonDBATasks.PermissionsNonMasters.md)
+ [パスワードを検証するためのカスタム関数の作成](Appendix.Oracle.CommonDBATasks.CustomPassword.md)
+ [カスタム DNS サーバーのセットアップ](#Appendix.Oracle.CommonDBATasks.CustomDNS)
+ [システム診断イベントの設定と設定の解除](Appendix.Oracle.CommonDBATasks.SystemEvents.md)

# セッションの切断
<a name="Appendix.Oracle.CommonDBATasks.DisconnectingSession"></a>

専用サーバープロセスを終了して現在のセッションを切断するには、Amazon RDS プロシージャ `rdsadmin.rdsadmin_util.disconnect` を使用します。`disconnect` プロシージャには以下のパラメータがあります。


****  

| パラメータ名 | データ型 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | 
|  `sid`  |  number  |  —  |  はい  |  セッション識別子。  | 
|  `serial`  |  number  |  —  |  はい  |  セッションのシリアル番号。  | 
|  `method`  |  varchar  |  '即時'  |  いいえ  |  有効な値は `'IMMEDIATE'` または `'POST_TRANSACTION'` です。  | 

次の例では、セッションを切断します。

```
begin
    rdsadmin.rdsadmin_util.disconnect(
        sid    => sid, 
        serial => serial_number);
end;
/
```

セッション識別子とセッションのシリアル番号を取得するには、`V$SESSION` ビューを照会します。次の例では、ユーザー `AWSUSER` のすべてのセッションを取得します。

```
SELECT SID, SERIAL#, STATUS FROM V$SESSION WHERE USERNAME = 'AWSUSER';
```

このメソッドを使用するにはデータベースが開いている必要があります。セッションの切断の詳細については、Oracle ドキュメントの「[ALTER SYSTEM](http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_2014.htm#SQLRF53166)」を参照してください。

# セッションの終了
<a name="Appendix.Oracle.CommonDBATasks.KillingSession"></a>

セッションを終了するには、Amazon RDS プロシージャ `rdsadmin.rdsadmin_util.kill` を使用します。`kill` プロシージャには以下のパラメータがあります。


****  

| パラメータ名 | データ型 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | 
|  `sid`  |  number  |  —  |  はい  |  セッション識別子。  | 
|  `serial`  |  number  |  —  |  はい  |  セッションのシリアル番号。  | 
|  `method`  |  varchar  |  null  |  いいえ  |  有効な値は `'IMMEDIATE'` または `'PROCESS'` です。`IMMEDIATE` を指定した場合、次のステートメントを実行した場合と同じ結果になります。 <pre>ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE</pre> `PROCESS` を指定した場合、セッションに関連付けられたプロセスを終了します。`IMMEDIATE` を使用したセッションの終了に失敗した場合のみ、`PROCESS` を指定してください。  | 

セッション識別子とセッションのシリアル番号を取得するには、`V$SESSION` ビューを照会します。次の例では、ユーザー *AWSUSER* のすべてのセッションを取得します。

```
SELECT SID, SERIAL#, STATUS FROM V$SESSION WHERE USERNAME = 'AWSUSER';
```

次の例では、セッションを終了します。

```
BEGIN
    rdsadmin.rdsadmin_util.kill(
        sid    => sid, 
        serial => serial_number,
        method => 'IMMEDIATE');
END;
/
```

次の例では、セッションに関連付けられたプロセスを終了します。

```
BEGIN
    rdsadmin.rdsadmin_util.kill(
        sid    => sid, 
        serial => serial_number,
        method => 'PROCESS');
END;
/
```

# セッションでの SQL ステートメントのキャンセル
<a name="Appendix.Oracle.CommonDBATasks.CancellingSQL"></a>

セッション内の SQL ステートメントをキャンセルするには、Amazon RDS プロシージャ `rdsadmin.rdsadmin_util.cancel` を使用します。

**注記**  
この手順は Oracle Database 19c (19.0.0)、および RDS for Oracle のすべての上位メジャーバージョンおよびマイナーバージョンでサポートされています。

`cancel` プロシージャには以下のパラメータがあります。


****  

| パラメータ名 | データ型 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | 
|  `sid`  |  number  |  —  |  はい  |  セッション識別子。  | 
|  `serial`  |  number  |  —  |  はい  |  セッションのシリアル番号。  | 
|  `sql_id`  |  varchar2  |  null  |  いいえ  |  SQL ステートメントの SQL 識別子。  | 

次の例では、セッション内の SQL ステートメントをキャンセルします。

```
begin
    rdsadmin.rdsadmin_util.cancel(
        sid    => sid, 
        serial => serial_number,
        sql_id => sql_id);
end;
/
```

セッション識別子、セッションのシリアル番号、および SQL ステートメントの SQL 識別子を取得するには、`V$SESSION` ビューを照会します。次の例では、ユーザー `AWSUSER` のすべてのセッションと SQL 識別子を取得します。

```
select SID, SERIAL#, SQL_ID, STATUS from V$SESSION where USERNAME = 'AWSUSER';
```

# 制限セッションの有効化と無効化
<a name="Appendix.Oracle.CommonDBATasks.RestrictedSession"></a>

制限セッションを有効または無効にするには、Amazon RDS プロシージャ `rdsadmin.rdsadmin_util.restricted_session` を使用します。`restricted_session` プロシージャには以下のパラメータがあります。


****  

| パラメータ名 | データ型 | デフォルト | はい | 説明 | 
| --- | --- | --- | --- | --- | 
|  `p_enable`  |  boolean  |  true  |  いいえ  |  制限セッションを有効にするには `true`、制限セッションを無効にするには `false` に設定します。  | 

次の例では、制限セッションを有効化および無効化する方法を示します。

```
/* Verify that the database is currently unrestricted. */

SELECT LOGINS FROM V$INSTANCE;
 
LOGINS
-------
ALLOWED

/* Enable restricted sessions */

EXEC rdsadmin.rdsadmin_util.restricted_session(p_enable => true);
 

/* Verify that the database is now restricted. */

SELECT LOGINS FROM V$INSTANCE;
 
LOGINS
----------
RESTRICTED
 

/* Disable restricted sessions */

EXEC rdsadmin.rdsadmin_util.restricted_session(p_enable => false);
 

/* Verify that the database is now unrestricted again. */

SELECT LOGINS FROM V$INSTANCE;
 
LOGINS
-------
ALLOWED
```

# 共有プールのフラッシュ
<a name="Appendix.Oracle.CommonDBATasks.FlushingSharedPool"></a>

共用プールをフラッシュするには、Amazon RDS プロシージャ `rdsadmin.rdsadmin_util.flush_shared_pool` を使用します。`flush_shared_pool` プロシージャにはパラメータはありません。

次の例では、共有プールをフラッシュします。

```
EXEC rdsadmin.rdsadmin_util.flush_shared_pool;
```

## バッファキャッシュのフラッシュ
<a name="Appendix.Oracle.CommonDBATasks.FlushingBufferCache"></a>

バッファキャッシュをフラッシュするには、Amazon RDS プロシージャ `rdsadmin.rdsadmin_util.flush_buffer_cache` を使用します。`flush_buffer_cache` プロシージャにはパラメータはありません。

次の例では、バッファキャッシュをフラッシュします。

```
EXEC rdsadmin.rdsadmin_util.flush_buffer_cache;
```

## データベースのスマートフラッシュキャッシュのフラッシュ
<a name="Appendix.Oracle.CommonDBATasks.flushing-shared-pool"></a>

データベースのスマートフラッシュキャッシュをフラッシュするには、Amazon RDS プロシージャ `rdsadmin.rdsadmin_util.flush_flash_cache` を使用します。`flush_flash_cache` プロシージャにはパラメータはありません。次の例では、データベースのスマートフラッシュキャッシュをフラッシュします。

```
EXEC rdsadmin.rdsadmin_util.flush_flash_cache;
```

RDS for Oracle でのデータベーススマートフラッシュキャッシュの使用に関する詳細は、「[RDS for Oracle インスタンスストアへの一時データの保存](CHAP_Oracle.advanced-features.instance-store.md)」を参照してください。

# SYS オブジェクトへの SELECT または EXECUTE 権限の付与
<a name="Appendix.Oracle.CommonDBATasks.TransferPrivileges"></a>

通常多くのオブジェクトを含めることができるロールを使用して権限を転送します。1 つのオブジェクトへ権限を付与するには、Amazon RDS プロシージャ `rdsadmin.rdsadmin_util.grant_sys_object` を使用します。このプロシージャは、ロールまたは直接付与によってマスターユーザーに既に付与されている権限のみを付与します。

`grant_sys_object` プロシージャには以下のパラメータがあります。

**重要**  
大文字と小文字を区別する識別子を使用してユーザーを作成した場合を除き、すべてのパラメータ値に大文字を使用します。例えば、`CREATE USER myuser` または `CREATE USER MYUSER` を実行すると、データディクショナリに `MYUSER` が保存されます。ただし、`CREATE USER "MyUser"` で二重引用符を使用すると、データディクショナリには `MyUser` が保存されます。


****  

| パラメータ名 | データ型 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | 
|  `p_obj_name`  |  varchar2  |  —  |  はい  |  権限を付与する元のオブジェクトの名前。オブジェクトとして、ディレクトリ、ファンクション、パッケージ、プロシージャ、シーケンス、テーブル、またはビューを指定できます。オブジェクト名のスペルは `DBA_OBJECTS` に表示されているとおりに正確に入力する必要があります。ほとんどのシステムオブジェクトが大文字で定義されるため、初めにこれを試すことをお勧めします。  | 
|  `p_grantee`  |  varchar2  |  —  |  はい  |  権限を付与する先のオブジェクトの名前。オブジェクトとして、スキーマまたはロールを指定できます。  | 
|  `p_privilege`  |  varchar2  |  null  |  はい  |  —  | 
|  `p_grant_option`  |  boolean  |  false  |  いいえ  |  付与オプションで使用するには、`true` に設定します。  | 

次の例では、オブジェクト `V_$SESSION` に対する選択権限をユーザー `USER1` に付与します。

```
begin
    rdsadmin.rdsadmin_util.grant_sys_object(
        p_obj_name  => 'V_$SESSION',
        p_grantee   => 'USER1',
        p_privilege => 'SELECT');
end;
/
```

次の例では、付与オプションを使用して、オブジェクト `V_$SESSION` に対する選択権限をユーザー `USER1` に付与します。

```
begin
    rdsadmin.rdsadmin_util.grant_sys_object(
        p_obj_name     => 'V_$SESSION',
        p_grantee      => 'USER1',
        p_privilege    => 'SELECT',
        p_grant_option => true);
end;
/
```

オブジェクトに対して権限を付与するには、付与オプションまたは `with admin option` を使用して付与されたロールを通じてアカウントにこれらの権限が直接付与されている必要があります。最も一般的なケースとして、`SELECT` ロールに付与された DBA ビューでの `SELECT_CATALOG_ROLE` 権限の付与があります。このロールが `with admin option` を通じてユーザーにまだ直接付与されていない場合、権限を転送することはできません。DBA 権限がある場合は、そのロールを他のユーザーに直接付与できます。

次の例では、`SELECT_CATALOG_ROLE` と `EXECUTE_CATALOG_ROLE` を `USER1` に付与します。`with admin option` が使用されているため、`USER1` は、`SELECT_CATALOG_ROLE` に許可された SYS オブジェクトへのアクセスを許可できるようになりました。

```
GRANT SELECT_CATALOG_ROLE TO USER1 WITH ADMIN OPTION; 
GRANT EXECUTE_CATALOG_ROLE to USER1 WITH ADMIN OPTION;
```

既に `PUBLIC` として許可されたオブジェクトへのアクセスは再許可する必要はありません。`grant_sys_object` プロシージャを使用してアクセスを再許可すると、プロシージャの呼び出しは成功します。

# SYS オブジェクトに対する SELECT または EXECUTE 権限の取り消し
<a name="Appendix.Oracle.CommonDBATasks.RevokePrivileges"></a>

1 つのオブジェクトに対する権限を取り消すには、Amazon RDS プロシージャ `rdsadmin.rdsadmin_util.revoke_sys_object` を使用します。このプロシージャは、ロールまたは直接付与によってマスターアカウントに既に付与されている権限のみを取り消します。

`revoke_sys_object` プロシージャには以下のパラメータがあります。


****  

| パラメータ名 | データ型 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | 
|  `p_obj_name`  |  varchar2  |  —  |  はい  |  権限を取り消す対象のオブジェクトの名前。オブジェクトとして、ディレクトリ、ファンクション、パッケージ、プロシージャ、シーケンス、テーブル、またはビューを指定できます。オブジェクト名のスペルは `DBA_OBJECTS` に表示されているとおりに正確に入力する必要があります。ほとんどのシステムオブジェクトが大文字で定義されるため、初めにこれを試すことをお勧めします。  | 
|  `p_revokee`  |  varchar2  |  —  |  はい  |  権限を取り消す対象のオブジェクトの名前。オブジェクトとして、スキーマまたはロールを指定できます。  | 
|  `p_privilege`  |  varchar2  |  null  |  はい  |  —  | 

次の例では、オブジェクト `V_$SESSION` に対する選択権限をユーザー `USER1` から取り消します。

```
begin
    rdsadmin.rdsadmin_util.revoke_sys_object(
        p_obj_name  => 'V_$SESSION',
        p_revokee   => 'USER1',
        p_privilege => 'SELECT');
end;
/
```

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

# 非マスターユーザーへの権限の付与
<a name="Appendix.Oracle.CommonDBATasks.PermissionsNonMasters"></a>

`SYS` ロールを使用すると、`SELECT_CATALOG_ROLE` スキーマ内の多くのオブジェクトに対する選択権限を付与できます。`SELECT_CATALOG_ROLE` ロールは、データディクショナリビューに対する `SELECT` 権限をユーザーに付与します。次の例では、ユーザー `SELECT_CATALOG_ROLE` にロール `user1` を付与します。

```
GRANT SELECT_CATALOG_ROLE TO user1;
```

`EXECUTE` ロールを使用すると、`SYS` スキーマ内の多くのオブジェクトに対する `EXECUTE_CATALOG_ROLE` 権限を付与できます。`EXECUTE_CATALOG_ROLE` ロールは、データディクショナリのパッケージとプロシージャに対する `EXECUTE` 権限をユーザーに付与します。次の例では、ユーザー *user1* にロール `EXECUTE_CATALOG_ROLE` を付与します。

```
GRANT EXECUTE_CATALOG_ROLE TO user1;
```

次の例では、ロール `SELECT_CATALOG_ROLE` とロール `EXECUTE_CATALOG_ROLE` が許可するアクセス権限を取得します。

```
  SELECT * 
    FROM ROLE_TAB_PRIVS  
   WHERE ROLE IN ('SELECT_CATALOG_ROLE','EXECUTE_CATALOG_ROLE') 
ORDER BY ROLE, TABLE_NAME ASC;
```

次の例では、非マスターユーザー `user1` を作成し、`CREATE SESSION` 権限を付与します。また、データベース *sh.sales* に対する `SELECT` 権限を付与します。

```
CREATE USER user1 IDENTIFIED BY PASSWORD;
GRANT CREATE SESSION TO user1;
GRANT SELECT ON sh.sales TO user1;
```

# パスワードを検証するためのカスタム関数の作成
<a name="Appendix.Oracle.CommonDBATasks.CustomPassword"></a>

カスタムパスワード検証関数は、以下の方法で作成できます。
+ スタンダード検証ロジックを使用するには、また `SYS` スキーマに関数を格納するには、`create_verify_function` の手順を使用します。
+ カスタム検証ロジックを使用するには、または `SYS` スキーマに関数を格納しないようにするには、`create_passthrough_verify_fcn` の手順を使用します。

# create\$1verify\$1function プロシージャ
<a name="Appendix.Oracle.CommonDBATasks.CustomPassword.Standard"></a>

Amazon RDS プロシージャ `rdsadmin.rdsadmin_password_verify.create_verify_function` を使用してパスワードを検証するには、カスタム関数を作成できます。`create_verify_function` プロシージャは、RDS for Oracle のすべてのバージョンでサポートされています。

`create_verify_function` プロシージャには以下のパラメータがあります。


****  

| パラメータ名 | データ型 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | 
|  `p_verify_function_name`  |  varchar2  |  —  |  はい  |  カスタム関数の名前。この関数は、SYS スキーマに作成されます。この関数をユーザープロファイルに割り当てます。  | 
|  `p_min_length`  |  number  |  8  |  いいえ  |  必要な文字の最小数。  | 
|  `p_max_length`  |  number  |  256  |  いいえ  |  許容された文字の最大数。  | 
|  `p_min_letters`  |  number  |  1  |  いいえ  |  必要な文字の最小数。  | 
|  `p_min_uppercase`  |  number  |  0  |  いいえ  |  必要な大文字の最小数。  | 
|  `p_min_lowercase`  |  number  |  0  |  いいえ  |  必要な小文字の最小数。  | 
|  `p_min_digits`  |  number  |  1  |  いいえ  |  必要な数字の最小数。  | 
|  `p_min_special`  |  number  |  0  |  いいえ  |  必要な特殊文字の最小数。  | 
|  `p_min_different_chars`  |  number  |  3  |  いいえ  |  古いパスワードと新しいパスワードの間で必要な異なる文字の最小数。  | 
|  `p_disallow_username`  |  boolean  |  true  |  いいえ  |  パスワードでユーザー名を禁止するには、`true` に設定します。  | 
|  `p_disallow_reverse`  |  boolean  |  true  |  いいえ  |  パスワードで反転したユーザー名を禁止するには、`true` に設定します。  | 
|  `p_disallow_db_name`  |  boolean  |  true  |  いいえ  |  パスワードでデータベースまたはサーバー名を禁止するには、`true` に設定します。  | 
|  `p_disallow_simple_strings`  |  boolean  |  true  |  いいえ  |  パスワードで単純な文字列を禁止するには、`true` に設定します。  | 
|  `p_disallow_whitespace`  |  boolean  |  false  |  いいえ  |  パスワードで空白文字を禁止するには、`true` に設定します。  | 
|  `p_disallow_at_sign`  |  boolean  |  false  |  いいえ  |  パスワードで「@」文字の使用を禁止するには、`true` に設定します。  | 

複数のパスワード検証関数を作成できます。

カスタム関数名に制限があります。カスタム関数名を既存のシステムオブジェクト名と同じにすることはできません。30 文字を超える名前は使用できません。また、名前には文字列として `PASSWORD`、`VERIFY`、`COMPLEXITY`、`ENFORCE`、`STRENGTH` のいずれかを含める必要があります。

次の例では、`CUSTOM_PASSWORD_FUNCTION` という名前の関数を作成します。この関数のパスワードは、最低で 2 つの大文字、1 つの数字、1 つの特殊文字を含む、12 文字以上で構成する必要があります。また、「@」文字は使用できません。

```
begin
    rdsadmin.rdsadmin_password_verify.create_verify_function(
        p_verify_function_name => 'CUSTOM_PASSWORD_FUNCTION', 
        p_min_length           => 12, 
        p_min_uppercase        => 2, 
        p_min_digits           => 1, 
        p_min_special          => 1,
        p_disallow_at_sign     => true);
end;
/
```

検証関数のテキストを表示するには、`DBA_SOURCE` を照会します。次の例では、カスタムパスワード関数 `CUSTOM_PASSWORD_FUNCTION` のテキストを取得します。

```
COL TEXT FORMAT a150

  SELECT TEXT 
    FROM DBA_SOURCE 
   WHERE OWNER = 'SYS' 
     AND NAME = 'CUSTOM_PASSWORD_FUNCTION' 
ORDER BY LINE;
```

検証関数をユーザープロファイルに関連付けるには、`ALTER PROFILE` を使用します。次の例では、`CUSTOM_PASSWORD_FUNCTION` という名前の検証 PL/SQL 関数を `DEFAULT` ユーザープロファイルに関連付けます。`PASSWORD_VERIFY_FUNCTION` は Oracle プロファイルリソース名です。

```
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION CUSTOM_PASSWORD_FUNCTION;
```

どのユーザープロファイルがどの照合機能に関連付けられているかを確認するには、`DBA_PROFILES` を照会します。次の例では、カスタム検証関数 `CUSTOM_PASSWORD_FUNCTION` に関連付けられたプロファイルを取得します。

```
SELECT * FROM DBA_PROFILES WHERE RESOURCE_NAME = 'PASSWORD_VERIFY_FUNCTION' AND LIMIT = 'CUSTOM_PASSWORD_FUNCTION';


PROFILE                    RESOURCE_NAME                     RESOURCE  LIMIT
-------------------------  --------------------------------  --------  ------------------------
DEFAULT                    PASSWORD_VERIFY_FUNCTION          PASSWORD  CUSTOM_PASSWORD_FUNCTION
```

次の例では、すべてのプロシージャとそれらに関連付けられたパスワード検証関数を取得します。

```
SELECT * FROM DBA_PROFILES WHERE RESOURCE_NAME = 'PASSWORD_VERIFY_FUNCTION';

PROFILE                    RESOURCE_NAME                     RESOURCE  LIMIT
-------------------------  --------------------------------  --------  ------------------------
DEFAULT                    PASSWORD_VERIFY_FUNCTION          PASSWORD  CUSTOM_PASSWORD_FUNCTION
RDSADMIN                   PASSWORD_VERIFY_FUNCTION          PASSWORD  NULL
```

# create\$1passthrough\$1verify\$1fcn プロシージャ
<a name="Appendix.Oracle.CommonDBATasks.CustomPassword.Custom"></a>

`create_passthrough_verify_fcn` プロシージャは、RDS for Oracle のすべてのバージョンでサポートされています。

Amazon RDS 手順 `rdsadmin.rdsadmin_password_verify.create_passthrough_verify_fcn` を使用してパスワードを検証するには、カスタム関数を作成できます。`create_passthrough_verify_fcn` プロシージャには以下のパラメータがあります。


****  

| パラメータ名 | データ型 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | 
|  `p_verify_function_name`  |  varchar2  |  —  |  はい  |  カスタム検証関数の名前。これは、SYS 関数で作成されるラッパー関数です。検証ロジックは含まれていません。この関数をユーザープロファイルに割り当てます。  | 
|  `p_target_owner`  |  varchar2  |  —  |  はい  |  カスタム検証関数のスキーマ所有者。  | 
|  `p_target_function_name`  |  varchar2  |  —  |  はい  |  検証ロジックを含む既存のカスタム関数の名前。カスタム関数はブール値を返します。パスワードが有効の場合は `true`、無効の場合は `false` が関数より返ります。  | 

次の例では、`PASSWORD_LOGIC_EXTRA_STRONG` という名前の関数のロジックを使用するパスワード検証関数を作成します。

```
begin
    rdsadmin.rdsadmin_password_verify.create_passthrough_verify_fcn(
        p_verify_function_name => 'CUSTOM_PASSWORD_FUNCTION', 
        p_target_owner         => 'TEST_USER',
        p_target_function_name => 'PASSWORD_LOGIC_EXTRA_STRONG');
end;
/
```

検証関数をユーザープロファイルに関連付けるには、`alter profile` を使用します。次の例では、検証関数を `DEFAULT` ユーザープロファイルに関連付けています。

```
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION CUSTOM_PASSWORD_FUNCTION;
```

## カスタム DNS サーバーのセットアップ
<a name="Appendix.Oracle.CommonDBATasks.CustomDNS"></a>

Amazon RDS は、Oracle を実行している DB インスタンスでのアウトバウンドのネットワークアクセスをサポートします。前提条件など、アウトバウンドのネットワークアクセスの詳細については、「[証明書と Oracle ウォレットを使用した、UTL\$1HTTP アクセスの設定](Oracle.Concepts.ONA.md)」を参照してください 

Amazon RDS Oracle は、顧客所有のカスタム DNS サーバーでドメイン名サービス (DNS) 解決を許可します。Amazon RDS DB インスタンスからカスタム DNS サーバーを介して完全修飾ドメイン名のみを解決することができます。

カスタム DNS ネームサーバーを設定後、変更を DB インスタンスに反映させるまで約 30 分ほどかかります。DB インスタンスへの変更が反映されたら、すべてのアウトバウンドネットワークトラフィックのポート 53 の DNS サーバーにおいて DNS ルックアップクエリを行う必要があります。

Amazon RDS for Oracle DB インスタンスでカスタム DNS サーバーをセットアップするには、次を実行します。
+ Virtual Private Cloud (VPC) の DHCP オプションで `domain-name-servers` を DNS ネームサーバーの IP アドレスに設定します。詳細については、「[DHCP オプションセット](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html)」を参照してください。
**注記**  
`domain-name-servers` オプションが許可する値は 4 つまでになりますが、Amazon RDS DB インスタンスが使用するのは初期の値のみです。
+ DNS サーバーが、パブリック DNS 名、Amazon EC2 プライベート DNS 名、ユーザー固有の DNS 名を含むすべてのルックアップクエリを解決できることを確認します。DNS サーバーが処理できない DNS ルックアップがアウトバウンドネットワークトラフィックにある場合は、状況に適したアップストリーミング DNS プロバイダを必ず設定してください。
+ 512 バイト以下の User Datagram Protocol (UDP) レスポンスを生成するように DNS サーバーを設定します。
+ 1024 バイト以下の Transmission Control Protocol (TCP) レスポンスを生成するように DNS サーバーを設定します。
+ ポート 53 で Amazon RDS DB インスタンスからのインバウンドトラフィックを許可するように DNS サーバーを設定します。DNS サーバーが Amazon VPC にある場合、VPC にはポート 53 で UDP と TCP トラフィックを許可するインバウンドルールを含むセキュリティグループが必要になります。DNS サーバーが Amazon VPC にない場合は、ポート 53 で UDP と TCP インバウンドトラフィックを許可できるように、適切なファイアウォールの allow-listing が必要になります。

  詳細については、「[VPC のセキュリティグループ](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)」と「[ルールの追加と削除](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#AddRemoveRules)」を参照してください。
+ ポート 53 でアウトバウンドトラフィックを許可するため、Amazon RDS DB インスタンスの VPC を設定します。VPC には、ポート 53 で UDP および TCP トラフィックを許可するアウトバウンドルールを含むセキュリティグループが必要になります。

  詳細については、「[VPC のセキュリティグループ](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)」と「[ルールの追加と削除](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#AddRemoveRules)」を参照してください。
+ Amazon RDS DB インスタンスと DNS サーバー間のルーティングパスは、DNS トラフィックを許可できるよう適切に設定してください。
  + Amazon RDS DB インスタンスと DNS サーバーが同じ VPC にない場合は、両者の間でピア接続をセットアップする必要があります。詳細については、「[VPC ピア機能とは](https://docs.aws.amazon.com/vpc/latest/peering/Welcome.html)」を参照してください。

# システム診断イベントの設定と設定の解除
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents"></a>

セッションレベルで診断イベントを設定および設定解除するには、Oracle SQL ステートメントを使用できます `ALTER SESSION SET EVENTS`。ただし、システムレベルでイベントを設定するには、Oracle SQL を使用できません。代わりに、`rdsadmin.rdsadmin_util` パッケージ内のシステムイベント手順を使用します。システムイベント手順は、次のエンジンバージョンで使用できます。
+ すべての Oracle Database 21c バージョン
+ 19.0.0.0.ru-2020-10.rur-2020-10.r1 以降の Oracle Database 19c バージョン

  詳細については、「*Amazon RDS for Oracle リリースノート*」の「[バージョン 19.0.0.0.ru-2020-10.rur-2020-10.r1](https://docs.aws.amazon.com/AmazonRDS/latest/OracleReleaseNotes/oracle-version-19-0.html#oracle-version-RU-RUR.19.0.0.0.ru-2020-10.rur-2020-10.r1)」を参照してください。

**重要**  
内部的には、`rdsadmin.rdsadmin_util` パッケージは `ALTER SYSTEM SET EVENTS` ステートメントを使用してイベントを設定します。`ALTER SYSTEM` ステートメントは、Oracle データベースのドキュメントには記載されていません。システム診断イベントによっては、大量のトレース情報を生成したり、競合を引き起こしたり、データベースの可用性に影響を与えることがあります。非稼動のデータベースで特定の診断イベントをテストし、Oracleサポートのガイダンスに従って、本番稼動用のデータベースにのみイベントを設定することをお勧めしています。

## 許可されたシステム診断イベントのリスト化
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents.listing"></a>

設定できるシステムイベントをリスト化するには、Amazon RDS の手順 `rdsadmin.rdsadmin_util.list_allowed_system_events`を使用します。この手順はパラメータを受け付けません。

次の例では、設定可能なすべてのシステムイベントをリスト化します。

```
SET SERVEROUTPUT ON
EXEC rdsadmin.rdsadmin_util.list_allowed_system_events;
```

次の出力サンプルは、イベント番号とその説明をリスト化しています。`set_system_event`これらのイベントを設定し、`unset_system_event`設定解除するには、Amazon RDS の手順を使用します。

```
604   - error occurred at recursive SQL level
942   - table or view does not exist
1401  - inserted value too large for column
1403  - no data found
1410  - invalid ROWID
1422  - exact fetch returns more than requested number of rows
1426  - numeric overflow
1427  - single-row subquery returns more than one row
1476  - divisor is equal to zero
1483  - invalid length for DATE or NUMBER bind variable
1489  - result of string concatenation is too long
1652  - unable to extend temp segment by  in tablespace
1858  - a non-numeric character was found where a numeric was expected
4031  - unable to allocate  bytes of shared memory ("","","","")
6502  - PL/SQL: numeric or value error
10027 - Specify Deadlock Trace Information to be Dumped
10046 - enable SQL statement timing
10053 - CBO Enable optimizer trace
10173 - Dynamic Sampling time-out error
10442 - enable trace of kst for ORA-01555 diagnostics
12008 - error in materialized view refresh path
12012 - error on auto execute of job
12504 - TNS:listener was not given the SERVICE_NAME in CONNECT_DATA
14400 - inserted partition key does not map to any partition
31693 - Table data object  failed to load/unload and is being skipped due to error:
```

**注記**  
許可されるシステムイベントのリストは、時間の経過とともに変化する可能性があります。対象イベントの最新のリストがあることを確認するには、`rdsadmin.rdsadmin_util.list_allowed_system_events` を使用します。

## システム診断イベントの設定
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents.setting"></a>

システムイベントを設定するには、Amazon RDS プロシージャ `rdsadmin.rdsadmin_util.set_system_event` を使用します。`rdsadmin.rdsadmin_util.list_allowed_system_events` の出力にリストされているイベントだけを設定できます。`set_system_event` 手順は、次のパラメータを受け付けます。


****  

| パラメータ名 | データ型 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | 
|  `p_event`  |  number  |  —  |  はい  |  システムイベント番号。値は、`list_allowed_system_events` によって報告されるイベント番号の 1 つである必要があります。  | 
|  `p_level`  |  number  |  —  |  はい  |  イベントレベル。異なるレベル値の説明については、Oracle データベースのドキュメントまたは Oracle サポートを参照してください。  | 

手順 `set_system_event`は、次の原則に従って必要な`ALTER SYSTEM SET EVENTS` ステートメントを構築および実行します。
+ イベントタイプ (`context` または `errorstack`) は自動的に決定されます。
+ フォーム内のステートメントは、`ALTER SYSTEM SET EVENTS 'event LEVEL event_level'`コンテキストイベントを設定します。この表記は `ALTER SYSTEM SET EVENTS 'event TRACE NAME CONTEXT FOREVER, LEVEL event_level'` と同等です。
+ フォーム内のステートメントは、`ALTER SYSTEM SET EVENTS 'event ERRORSTACK (event_level)'`エラースタックイベントを設定します。この表記は `ALTER SYSTEM SET EVENTS 'event TRACE NAME ERRORSTACK LEVEL event_level'` と同等です。

次の例では、イベント 942 をレベル 3 に設定し、イベント 10442 をレベル 10 に設定します。サンプル出力が含まれています。

```
SQL> SET SERVEROUTPUT ON
SQL> EXEC rdsadmin.rdsadmin_util.set_system_event(942,3);
Setting system event 942 with: alter system set events '942 errorstack (3)'

PL/SQL procedure successfully completed.

SQL> EXEC rdsadmin.rdsadmin_util.set_system_event(10442,10);
Setting system event 10442 with: alter system set events '10442 level 10'

PL/SQL procedure successfully completed.
```

## 設定されているシステム診断イベントのリスト化
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents.listing-set"></a>

現在設定されているシステムイベントをリスト化するには、Amazon RDS の手順を使用します `rdsadmin.rdsadmin_util.list_set_system_events`。この手順では、`set_system_event` によってシステムレベルで設定されたイベントだけが報告されます。

次の例は、アクティブなシステムイベントをリスト化します。

```
SET SERVEROUTPUT ON
EXEC rdsadmin.rdsadmin_util.list_set_system_events;
```

次のサンプル出力は、イベントのリスト、イベントタイプ、イベントが現在設定されているレベル、およびイベントが設定された時刻を示しています。

```
942 errorstack (3) - set at 2020-11-03 11:42:27
10442 level 10 - set at 2020-11-03 11:42:41

PL/SQL procedure successfully completed.
```

## システム診断イベントの設定解除
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents.unsetting"></a>

システムイベントの設定を解除するには、Amazon RDS の手順を使用します `rdsadmin.rdsadmin_util.unset_system_event`。設定を解除できるのは、`rdsadmin.rdsadmin_util.list_allowed_system_events` の出力にリスト化されたイベントだけです 。`unset_system_event` 手順は、次のパラメータを受け付けます。


****  

| パラメータ名 | データ型 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | 
|  `p_event`  |  number  |  —  |  はい  |  システムイベント番号。値は、`list_allowed_system_events` によって報告されるイベント番号の 1 つである必要があります。  | 

次の例では、イベント 942 と 10442 の設定を解除します。サンプル出力が含まれています。

```
SQL> SET SERVEROUTPUT ON
SQL> EXEC rdsadmin.rdsadmin_util.unset_system_event(942);
Unsetting system event 942 with: alter system set events '942 off'

PL/SQL procedure successfully completed.

SQL> EXEC rdsadmin.rdsadmin_util.unset_system_event(10442);
Unsetting system event 10442 with: alter system set events '10442 off'

PL/SQL procedure successfully completed.
```