Oracle DB インスタンスの一般的なシステムタスクの実行 - Amazon Relational Database Service

Oracle DB インスタンスの一般的なシステムタスクの実行

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

セッションの切断

専用サーバープロセスを終了して現在のセッションを切断するには、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」を参照してください。

セッションの終了

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

パラメータ名 データ型 デフォルト 必須 説明

sid

number

はい

セッション識別子。

serial

number

はい

セッションのシリアル番号。

method

varchar

null

いいえ

有効な値は 'IMMEDIATE' または 'PROCESS' です。IMMEDIATE を指定した場合、次のステートメントを実行した場合と同じ結果になります。

ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE

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 ステートメントのキャンセル

セッション内の 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';

制限セッションの有効化と無効化

制限セッションを有効または無効にするには、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

共有プールのフラッシュ

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

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

EXEC rdsadmin.rdsadmin_util.flush_shared_pool;

バッファキャッシュのフラッシュ

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

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

EXEC rdsadmin.rdsadmin_util.flush_buffer_cache;

データベースのスマートフラッシュキャッシュのフラッシュ

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

EXEC rdsadmin.rdsadmin_util.flush_flash_cache;

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

SYS オブジェクトへの SELECT または EXECUTE 権限の付与

通常多くのオブジェクトを含めることができるロールを使用して権限を転送します。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_ROLEEXECUTE_CATALOG_ROLEUSER1 に付与します。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 権限の取り消し

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_X$ ビューの管理

SYS によってのみアクセス可能な SYS.X$ 固定テーブルへのアクセスが必要になる場合があります。対象の X$ テーブルに SYS.RDS_X$ ビューを作成するには、rdsadmin.rdsadmin_util パッケージの手順を使用します。マスターユーザーには、RDS_X$ ビューに対する SELECT … WITH GRANT OPTION 権限が自動的に付与されます。

rdsadmin.rdsadmin_util プロシージャは、次のデータベースエンジンバージョンで使用できます。

  • 21.0.0.0.ru-2023-10.rur-2023-10.r1 以降の Oracle Database 21c バージョン

  • 19.0.0.0.ru-2023-10.rur-2023-10.r1 以降の Oracle Database 19c バージョン

重要

内部的には、rdsadmin.rdsadmin_util パッケージは X$ テーブルにビューを作成します。X$ テーブルは内部システムオブジェクトであり、Oracle Database のドキュメントでは説明されていません。本番用以外のデータベースで特定のビューをテストし、Oracle サポートのガイダンスに従って、本番用のデータベースにのみビューを作成することをお勧めしています。

RDS_X$ ビューで使用できる X$ 固定テーブルを一覧表示する

RDS_X$ ビューで使用できる X$ テーブルを一覧表示するには、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_X$ ビューの作成

対象となる 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$KGLOBSYS.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_X$ ビューの一覧表示

既存の 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_X$ ビューの削除

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

非マスターユーザーへの権限の付与

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;

パスワードを検証するためのカスタム関数の作成

カスタムパスワード検証関数は、以下の方法で作成できます。

  • スタンダード検証ロジックを使用するには、また SYS スキーマに関数を格納するには、create_verify_function の手順を使用します。

  • カスタム検証ロジックを使用するには、または SYS スキーマに関数を格納しないようにするには、create_passthrough_verify_fcn の手順を使用します。

create_verify_function プロシージャ

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 文字を超える名前は使用できません。また、名前には文字列として PASSWORDVERIFYCOMPLEXITYENFORCESTRENGTH のいずれかを含める必要があります。

次の例では、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 を使用します。次の例では、検証関数を DEFAULT ユーザープロファイルに関連付けています。

ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION CUSTOM_PASSWORD_FUNCTION;

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

SELECT * FROM DBA_PROFILES WHERE RESOURCE_NAME = 'PASSWORD' 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_passthrough_verify_fcn プロシージャ

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 サーバーのセットアップ

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

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 オプションセット」を参照してください。

    注記

    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 のセキュリティグループ」と「ルールの追加と削除」を参照してください。

  • ポート 53 でアウトバウンドトラフィックを許可するため、Amazon RDS DB インスタンスの VPC を設定します。VPC には、ポート 53 で UDP および TCP トラフィックを許可するアウトバウンドルールを含むセキュリティグループが必要になります。

    詳細については、「VPC のセキュリティグループ」と「ルールの追加と削除」を参照してください。

  • Amazon RDS DB インスタンスと DNS サーバー間のルーティングパスは、DNS トラフィックを許可できるよう適切に設定してください。

    • Amazon RDS DB インスタンスと DNS サーバーが同じ VPC にない場合は、両者の間でピア接続をセットアップする必要があります。詳細については、「VPC ピア機能とは」を参照してください。

システム診断イベントの設定と設定の解除

セッションレベルで診断イベントを設定および設定解除するには、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」を参照してください。

重要

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

許可されたシステム診断イベントのリスト化

設定できるシステムイベントをリスト化するには、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 を使用します。

システム診断イベントの設定

システムイベントを設定するには、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.

設定されているシステム診断イベントのリスト化

現在設定されているシステムイベントをリスト化するには、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.

システム診断イベントの設定解除

システムイベントの設定を解除するには、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.