Oracle DB インスタンスのその他のタスクの実行 - Amazon Relational Database Service

Oracle DB インスタンスのその他のタスクの実行

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

主要データストレージ領域でのディレクトリの作成と削除

ディレクトリを作成するには、Amazon RDS プロシージャ rdsadmin.rdsadmin_util.create_directory を使用します。最大 10,000 個のディレクトリを作成でき、すべてメインデータストレージ領域に配置されます。ディレクトリを作成するには、Amazon RDS プロシージャ rdsadmin.rdsadmin_util.drop_directory を使用します。

create_directory および drop_directory プロシージャには、以下の必須パラメータがあります。

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

p_directory_name

VARCHAR2

はい

ディレクトリの名前。

次の例では、新しいディレクトリ PRODUCT_DESCRIPTIONS を作成します。

EXEC rdsadmin.rdsadmin_util.create_directory(p_directory_name => 'product_descriptions');

データディクショナリは、ディレクトリ名を大文字で保存します。DBA_DIRECTORIES を照会することで、ディレクトリを一覧表示できます。システムによって実際のホストパス名が自動的に選択されます。以下の例では、PRODUCT_DESCRIPTIONS という名前のディレクトリのディレクトリパスを取得しています。

SELECT DIRECTORY_PATH FROM DBA_DIRECTORIES WHERE DIRECTORY_NAME='PRODUCT_DESCRIPTIONS'; DIRECTORY_PATH ---------------------------------------- /rdsdbdata/userdirs/01

DB インスタンスのマスターユーザー名には、新しいディレクトリでの読み取りおよび書き込み権限があり、他のユーザーにアクセスを許可できます。EXECUTE 権限は、DB インスタンス上のディレクトリでは使用できません。ディレクトリはメインデータストレージ領域に作成され、領域および I/O 帯域幅を消費します。

以下の例では、PRODUCT_DESCRIPTIONS という名前のディレクトリを削除します。

EXEC rdsadmin.rdsadmin_util.drop_directory(p_directory_name => 'product_descriptions');
注記

Oracle SQL コマンド DROP DIRECTORY を使用してディレクトリを削除することもできます。

ディレクトリを削除してもその内容は削除されません。rdsadmin.rdsadmin_util.create_directory プロシージャはパス名を再利用できるため、削除されたディレクトリのファイルが新たに作成されたディレクトリに存在する可能性があります。ディレクトリを削除する前に、UTL_FILE.FREMOVE を使用してディレクトリからファイルを削除することをお勧めします。詳細については、Oracle ドキュメントの「FREMOVE プロシージャ」を参照してください。

DB インスタンスディレクトリ内のファイルのリスト化

ディレクトリ内のファイルを一覧表示するには、Amazon RDS プロシージャ rdsadmin.rds_file_util.listdir を使用します。このプロシージャは Oracle レプリカではサポートされていません。listdir プロシージャには以下のパラメータがあります。

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

p_directory

varchar2

はい

一覧表示するディレクトリの名前。

次の例では、ディレクトリ PRODUCT_DESCRIPTIONS に対する読み取り/書き込み権限をユーザー rdsadmin に付与し、このディレクトリ内のファイルを一覧表示します。

GRANT READ,WRITE ON DIRECTORY PRODUCT_DESCRIPTIONS TO rdsadmin; SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => 'PRODUCT_DESCRIPTIONS'));

DB インスタンスディレクトリ内のファイルの読み取り

テキストファイルを読み取るには、Amazon RDS プロシージャ rdsadmin.rds_file_util.read_text_file を使用します。read_text_file プロシージャには以下のパラメータがあります。

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

p_directory

varchar2

はい

ファイルを含むディレクトリの名前。

p_filename

varchar2

はい

読み取るファイルの名前。

次の例では rice.txt ディレクトリの PRODUCT_DESCRIPTIONS ファイルを読み取ります。

declare fh sys.utl_file.file_type; begin fh := utl_file.fopen(location=>'PRODUCT_DESCRIPTIONS', filename=>'rice.txt', open_mode=>'w'); utl_file.put(file=>fh, buffer=>'AnyCompany brown rice, 15 lbs'); utl_file.fclose(file=>fh); end; /

次の例では、ディレクトリ rice.txt からファイル PRODUCT_DESCRIPTIONS を読み取ります。

SELECT * FROM TABLE (rdsadmin.rds_file_util.read_text_file( p_directory => 'PRODUCT_DESCRIPTIONS', p_filename => 'rice.txt'));

Opatch ファイルへのアクセス

Opatch は、Oracle ソフトウェアへのパッチの適用とロールバックを可能にする Oracle ユーティリティです。データベースに適用されているパッチを判別するための Oracle のメカニズムは、opatch lsinventory コマンドです。Bring Your Own License (BYOL) の顧客のサービスリクエストを開くために、Oracle サポートは lsinventory ファイルをリクエストします。Opatch によって生成される lsinventory_detail ファイルをリクエストする場合もあります。

マネージドサービスエクスペリエンスを提供するために、Amazon RDS には Opatch へのシェルアクセスは用意されていません。代わりに、BDUMP ディレクトリのlsinventory-dbv.txtには、現在のエンジンのバージョンに関連するパッチ情報が含まれています。マイナーアップグレードまたはメジャーアップグレードを実行すると、Amazon RDS はパッチを適用してから 1 時間以内にlsinventory-dbv.txtを更新します。適用されたパッチを確認するには、lsinventory-dbv.txtを読み取ります。このアクションは、opatch lsinventoryコマンドの実行に似ています。

注記

このセクションの例では、BDUMP ディレクトリ名を BDUMP としています。リードレプリカでは、BDUMP ディレクトリ名が異なります。BDUMP 名を取得するためにリードレプリカに対してクエリ V$DATABASE.DB_UNIQUE_NAME を実行する方法については、「ファイルのリスト化」を参照してください。

インベントリファイルは Amazon RDS 命名規則 lsinventory-dbv.txt および lsinventory_detail-dbv.txt を使用します。ここで、dbv は DB バージョンの完全な名前です。lsinventory-dbv.txt ファイルはすべての DB バージョンで使用できます。対応する lsinventory_detail-dbv.txt は、19.0.0.0、ru-2020-01.rur-2020-01.r1 以降で利用できます。

例えば、DB のバージョンが 19.0.0.0.ru-2021-07.rur-2021-07.r1 の場合、インベントリファイルは以下の名前になります。

lsinventory-19.0.0.0.ru-2021-07.rur-2021-07.r1.txt lsinventory_detail-19.0.0.0.ru-2021-07.rur-2021-07.r1.txt

DB エンジンの現在のバージョンと一致するファイルをダウンロードしてください。

コンソールを使用してインベントリファイルをダウンロードするには
  1. Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. ナビゲーションペインで、[データベース] を選択します。

  3. 表示するログファイルのある DB インスタンスの名前を選択します。

  4. [ログとイベント] タブを選択します。

  5. [ログ] セクションまで下にスクロールします。

  6. [ログ] セクションで、lsinventory を検索します。

  7. アクセスするファイルを選択し、[ダウンロード] を選択します。

SQL クライアントで lsinventory-dbv.txt を読み取るには、SELECT ステートメントを使用できます。この手法では、rdsadmin 関数として rdsadmin.rds_file_util.read_text_file または rdsadmin.tracefile_listing のいずれかを使用します。

以下のサンプルクエリでは、dbv を Oracle DB のバージョンに置き換えます。例えば、DB のバージョンは 19.0.0.0.ru-2020-04.rur-2020-04.r1 です。

SELECT text FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'lsinventory-dbv.txt'));

SQL クライアントで lsinventory-dbv.txt を読み取るには、PL/SQL プログラムを作成します。このプログラムは、utl_file を使用してファイルを読み取り、dbms_output を使用して出力します。これらは、Oracle が提供するパッケージです。

以下のサンプルプログラムでは、dbv を Oracle DB のバージョンに置き換えます。例えば、DB のバージョンは 19.0.0.0.ru-2020-04.rur-2020-04.r1 です。

SET SERVEROUTPUT ON DECLARE v_file SYS.UTL_FILE.FILE_TYPE; v_line VARCHAR2(1000); v_oracle_home_type VARCHAR2(1000); c_directory VARCHAR2(30) := 'BDUMP'; c_output_file VARCHAR2(30) := 'lsinventory-dbv.txt'; BEGIN v_file := SYS.UTL_FILE.FOPEN(c_directory, c_output_file, 'r'); LOOP BEGIN SYS.UTL_FILE.GET_LINE(v_file, v_line,1000); DBMS_OUTPUT.PUT_LINE(v_line); EXCEPTION WHEN no_data_found THEN EXIT; END; END LOOP; END; /

または、rdsadmin.tracefile_listing をクエリし、出力をファイルにスプールします。以下の例では、出力を /tmp/tracefile.txt にスプールします。

SPOOL /tmp/tracefile.txt SELECT * FROM rdsadmin.tracefile_listing WHERE FILENAME LIKE 'lsinventory%'; SPOOL OFF;

アドバイザータスクの管理

Oracle Database には、多数のアドバイザーが含まれています。各アドバイザーは、自動タスクと手動タスクをサポートします。rdsadmin.rdsadmin_util パッケージ内のプロシージャを使用して、いくつかのアドバイザータスクを管理できます。

アドバイザータスク手順は、次のエンジンバージョンで使用できます。

  • Oracle Database 21c (21.0.0)

  • Version 19.0.0.0.ru-2021-01.rur-2021-01.r1 以上の Oracle Database 19c バージョン

    詳細については、「Amazon RDS for Oracle リリースノート」の「バージョン 19.0.0.0.ru-2021-01.rur-2021-01.r1」を参照してください。

アドバイザータスクのパラメータの設定

一部のアドバイザータスクのパラメータを設定するには、Amazon RDS 手順 rdsadmin.rdsadmin_util.advisor_task_set_parameter を使用します。advisor_task_set_parameter プロシージャには以下のパラメータがあります。

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

p_task_name

varchar2

はい

パラメータを変更するアドバイザータスクの名前。以下の値が有効です。

  • AUTO_STATS_ADVISOR_TASK

  • INDIVIDUAL_STATS_ADVISOR_TASK

  • SYS_AUTO_SPM_EVOLVE_TASK

  • SYS_AUTO_SQL_TUNING_TASK

p_parameter

varchar2

はい

タスクパラメータの名前。アドバイザータスクの有効なパラメータを検索するには、次のクエリを実行します。p_task_namep_task_name の有効な値に置き換えます:

COL PARAMETER_NAME FORMAT a30 COL PARAMETER_VALUE FORMAT a30 SELECT PARAMETER_NAME, PARAMETER_VALUE FROM DBA_ADVISOR_PARAMETERS WHERE TASK_NAME='p_task_name' AND PARAMETER_VALUE != 'UNUSED' ORDER BY PARAMETER_NAME;

p_value

varchar2

はい

タスクパラメータの値。タスクパラメータの有効な値を検索するには、次のクエリを実行します。p_task_namep_task_name の有効な値に置き換えます:

COL PARAMETER_NAME FORMAT a30 COL PARAMETER_VALUE FORMAT a30 SELECT PARAMETER_NAME, PARAMETER_VALUE FROM DBA_ADVISOR_PARAMETERS WHERE TASK_NAME='p_task_name' AND PARAMETER_VALUE != 'UNUSED' ORDER BY PARAMETER_NAME;

次の PL/SQL プログラムは ACCEPT_PLANSFALSESYS_AUTO_SPM_EVOLVE_TASK に設定します。SQL Plan Management の自動化タスクでは、プランが検証され、その結果のレポートが生成されますが、プランを自動的には進化させません。レポートを使用して、新しい SQL 計画ベースラインを識別し、手動で受け入れることができます。

BEGIN rdsadmin.rdsadmin_util.advisor_task_set_parameter( p_task_name => 'SYS_AUTO_SPM_EVOLVE_TASK', p_parameter => 'ACCEPT_PLANS', p_value => 'FALSE'); END;

次の PL/SQL プログラムは EXECUTION_DAYS_TO_EXPIRE10AUTO_STATS_ADVISOR_TASK に設定します。事前定義されたタスク AUTO_STATS_ADVISOR_TASK は、メンテナンスウィンドウで 1 日 1 回自動的に実行されます。この例では、タスク実行の保持期間を 10 日に設定します。

BEGIN rdsadmin.rdsadmin_util.advisor_task_set_parameter( p_task_name => 'AUTO_STATS_ADVISOR_TASK', p_parameter => 'EXECUTION_DAYS_TO_EXPIRE', p_value => '10'); END;

AUTO_STATS_ADVISOR_TASK を無効にする

AUTO_STATS_ADVISOR_TASK を無効にするには、Amazon RDS 手順 rdsadmin.rdsadmin_util.advisor_task_drop を使用します。advisor_task_drop 手順は、次のパラメータを受け付けます。

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

p_task_name

varchar2

はい

無効にするアドバイザータスクの名前。唯一の有効な値は AUTO_STATS_ADVISOR_TASK です。

次のコマンドは AUTO_STATS_ADVISOR_TASK をドロップします。

EXEC rdsadmin.rdsadmin_util.advisor_task_drop('AUTO_STATS_ADVISOR_TASK')

rdsadmin.rdsadmin_util.dbms_stats_init を使用して AUTO_STATS_ADVISOR_TASK を再度有効にすることができます。

AUTO_STATS_ADVISOR_TASK を再度有効にする

AUTO_STATS_ADVISOR_TASK を再度有効にするには、Amazon RDS 手順 rdsadmin.rdsadmin_util.dbms_stats_init を使用します。dbms_stats_init 手順では、パラメータは使用しません。

次のコマンドは AUTO_STATS_ADVISOR_TASK を再度有効にします。

EXEC rdsadmin.rdsadmin_util.dbms_stats_init()