0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ADB-S 26ai で 10046/10053 イベントトレースは取れるのか?取得方法を実機検証

0
Last updated at Posted at 2026-05-15

2026年5月15日時点の情報です。

1. はじめに

Oracle の診断で利用する 10046 イベント(SQL Trace)と 10053 イベント(オプティマイザトレース)。オンプレや通常の DBaaS では普通に使えますが、Autonomous Database Serverless (ADB-S) では話が変わります。

前回記事「V$DIAG_ALERT_EXTは廃止済み!ADB-S 26aiでアラートログやトレースを読む正しい方法」の可視性マトリクスで、次のように書いていました。

ALTER SESSION SET EVENTS 10046/10053 △ 一部制限あり(詳細は別記事で検証予定)

本記事はその「△」の内容を実機で確認し、ADB-S 26ai でトレースを取るための正しい手順をまとめます。

なお、Oracle 19c の ADB-S については Connor McDonald が 2025 年 10 月に検証済み1ですが、バージョン 23.26.2(26ai)での挙動と SESSION_CLOUD_TRACE の詳細について、本記事で補完します。

結論先出し

  • ADB-Sの19cと同様 ALTER SESSION SET EVENTS '10046...'ORA-01031 で失敗
  • 2ステップ回避策SQL_TRACE=TRUEDBMS_MONITOR)で Waits 付きトレースが取得可能。最小権限は EXECUTE ON DBMS_MONITOR + READ ON C##CLOUD$SERVICE.SESSION_CLOUD_TRACE(PDB_DBA でも可)
  • 取得したトレースは SESSION_CLOUD_TRACE ビューで参照可能。WAIT / STAT 行ともに取得できる
  • 10053 は ORA-01031 で失敗。オプティマイザの判断過程は追えないと想定。実行計画の確認には DBMS_XPLAN.DISPLAY_CURSORformat='ALL' でクエリ変換情報も取得可)、長時間クエリには SQL Monitor が使える

今回の検証ゴール

# 検証項目
1 10046: 2ステップ回避策は ADB-S 26ai でも通じるか。Waits 情報は取れるか
2 10046: SESSION_CLOUD_TRACE でどう読むか
3 10053: ADB-S 26ai での制限を実機確認。代替候補(DBMS_XPLAN / SQL Monitor)で何が取れるか

検証環境

項目 内容
リージョン ap-tokyo-1
データベースバージョン Oracle AI Database 26ai Enterprise Edition Release 23.26.2.1.0

2. 事前セットアップ: Object Storage の準備

SESSION_CLOUD_TRACE にトレースが書き出されるには、Object Storage バケットと Credential の設定が必要です。未設定の場合は以下を先に実施してください(詳細は公式 Docs 参照)。

-- Credential の作成(Auth Token を使用)
BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'DEF_CRED_NAME',
    username        => 'your_user@example.com',
    password        => '<auth_token>'
  );
END;
/

-- ロギング先バケットと既定 Credential を設定
ALTER DATABASE PROPERTY SET
  DEFAULT_LOGGING_BUCKET = 'https://objectstorage.ap-tokyo-1.oraclecloud.com/n/<namespace>/b/<bucket>/o/';
ALTER DATABASE PROPERTY SET DEFAULT_CREDENTIAL = 'ADMIN.DEF_CRED_NAME';

設定済みかどうかは次で確認できます。

SELECT property_name, property_value
  FROM database_properties
 WHERE property_name IN ('DEFAULT_LOGGING_BUCKET', 'DEFAULT_CREDENTIAL');

バケットは Standard ストレージ階層 で作成してください。公式 Docs では Standard ストレージ階層が前提として記載されています。


3. 10046 イベント(SQL Trace)

3.1. 直接 EVENTS 構文は使えない

まず、オンプレで使い慣れた構文を試します。

-- NG パターン①: EVENTS 構文
ALTER SESSION SET EVENTS '10046 trace name context forever, level 8';

-- NG パターン②: DBMS_SESSION
EXEC DBMS_SESSION.SESSION_TRACE_ENABLE(waits => TRUE, binds => FALSE);

結果:

ORA-01031: 権限が不足しています

両方とも ORA-01031 で失敗します。

3.2. 取得できる方法: 2ステップ回避策

各ステップに必要な権限は以下のとおりです。

ステップ 必要な権限
Step 2(SQL_TRACE=TRUE CREATE SESSION のみ
Step 3(DBMS_MONITOR EXECUTE ON DBMS_MONITOR
SESSION_CLOUD_TRACE 参照 READ ON C##CLOUD$SERVICE.SESSION_CLOUD_TRACE を付与

最小権限で構成したい場合は、ADMIN で次の権限を付与してください。

GRANT EXECUTE ON DBMS_MONITOR TO <user>;
GRANT READ ON C##CLOUD$SERVICE.SESSION_CLOUD_TRACE TO <user>;

GRANT SELECT ON C##CLOUD$SERVICE.SESSION_CLOUD_TRACE は ADMIN でも ORA-01031 で失敗します。READ 権限を使ってください。

Step 1: セッション識別情報を設定(任意、ファイル名への反映に使われる)

BEGIN
  DBMS_SESSION.SET_IDENTIFIER('trace_test');
  DBMS_APPLICATION_INFO.SET_MODULE('my_module', NULL);
END;
/

Step 2: 基本 SQL Trace を有効化

ALTER SESSION SET SQL_TRACE = TRUE;

Step 3: Waits 情報を追加(DBMS_MONITOR)

EXEC DBMS_MONITOR.SESSION_TRACE_ENABLE(waits => TRUE, binds => FALSE);

binds => TRUE を指定するとバインド変数の値も記録されます。実行計画の変動要因(バインドピーキング等)を調べる際に有用ですが、ADB-S 26ai での binds => TRUE による取得については本記事では未検証です。

Step 4: 対象ワークロードを実行

-- ここで計測したい SQL を実行する
SELECT COUNT(*) FROM all_objects WHERE object_type = 'TABLE';

Step 5: トレースを停止(この時点で SESSION_CLOUD_TRACE に書き出される)

ALTER SESSION SET SQL_TRACE = FALSE;

SQL_TRACE = FALSE で停止するまで、SESSION_CLOUD_TRACE には何も書き出されません。従来の Oracle DB(停止前でも一定量で自動フラッシュ)とは挙動が異なります。

他セッションのトレースも可能です。 DBMS_MONITOR.SESSION_TRACE_ENABLE(session_id => <SID>, serial_num => <SERIAL#>, waits => TRUE, binds => FALSE) で別セッションを指定できます。Object Storage に .trc ファイルとして書き出されます。停止は DBMS_MONITOR.SESSION_TRACE_DISABLE(session_id => <SID>, serial_num => <SERIAL#>) で行います。

3.3. SESSION_CLOUD_TRACE でトレースを読む

停止後、SESSION_CLOUD_TRACE ビューで参照できます。

-- 行数確認
SELECT COUNT(*) FROM session_cloud_trace;

-- 先頭から読む
SELECT trace
  FROM session_cloud_trace
 ORDER BY row_number;

実際に取得できた行数は 4,059 行でした。ビューの行構造は以下のとおりです。

ヘッダ部(先頭約 20 行): バージョン・インスタンス情報

Oracle AI Database 26ai Enterprise Edition Release 23.26.2.1.0 - Production
Build label:    RDBMS_23.0.0.0.0_LINUX.X64_260311.ADBS
Instance name: xxxxxxxx

STAT 行(実行計画統計):

SELECT row_number, trace
  FROM session_cloud_trace
 WHERE trace LIKE 'STAT%'
 ORDER BY row_number
 FETCH FIRST 5 ROWS ONLY;
STAT #140108357471312 id=1 cnt=1 pid=0 pos=1 obj=237 op='TABLE ACCESS STORAGE FULL ...

WAIT 行(待機イベント):

SELECT row_number, trace
  FROM session_cloud_trace
 WHERE trace LIKE 'WAIT%'
 ORDER BY row_number
 FETCH FIRST 5 ROWS ONLY;
WAIT #140108354373368: nam='SQL*Net message to client' ela=8 driver id=... tim=...
WAIT #140108354373368: nam='SQL*Net message from client' ela=34934069 driver id=... tim=...

nam が待機イベント名、ela が経過時間(マイクロ秒)です。

  • 同一セッションで複数回 ON/OFF を繰り返すと行が追記されます
  • セッションを切断すると SESSION_CLOUD_TRACE はクリアされるため、必要な行は切断前に退避してください
  • 自セッション・他セッションいずれのトレースも Object Storage に .trc ファイルとして保存されます。パス構造は sqltrace/<CLIENT_ID>/[<MODULE>/]sqltrace_<SID>_<SERIAL#>.trc。MODULE 未設定時はその階層が省略されます(実測例: sqltrace/SQL-Developer/sqltrace_24059_1895.trcsqltrace/trace_test/event_trace_test/sqltrace_9024_3910.trc
  • .trc ファイルは OCI コンソール(バケット画面から直接ダウンロード)または OCI CLI(oci os object get --bucket-name <bucket> --name <path> --file <local_file>)で取得できます。手元に取得後、tkprof で整形できます

4. 10053 イベント(オプティマイザトレース)

4.1. ADB-S 26ai では完全にブロック

ALTER SESSION SET EVENTS '10053 trace name optimizer level 1';

結果:

ORA-01031: 権限が不足しています

ORA-01031 で失敗します。ADB-S 26ai では 10053 は取得手段がありません。必要な場合は Oracle Support への SR を検討してください。

4.2. 10053 で取りたい情報と現実的な代替手段

10053 の本来の目的は「オプティマイザがなぜその実行計画を選んだかの判断過程を追う」ことです。具体的には、オプティマイザが参照した統計値・カーディナリティの計算過程・複数の候補プランのコスト比較・クエリ変換の適用判断などが含まれます。

代替候補として SQL MonitorDBMS_XPLAN format='ALL' を ADB-S 26ai 上で実機確認した結果を以下にまとめます。

SQL Monitor(DBMS_SQLTUNE.REPORT_SQL_MONITOR)

EXECUTE ON DBMS_SQLTUNE があれば実行可能です。

SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(sql_id => NULL, type => 'TEXT')
  FROM dual;

ただし SQL Monitor が自動で対象とするのは並列クエリ実行時間が 5 秒を超えるクエリのみです(公式 Docs: Monitoring Database Operations 参照)。

DBMS_XPLAN.DISPLAY_CURSOR (format => 'ALL')

format => 'ALL' を指定すると、'ALLSTATS LAST' では得られない以下の追加セクションが出力されます。

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL, 0, 'ALL'));

出力に追加されるセクション(抜粋):

Query Block Name / Object Alias (identified by operation id):
   1 - SEL$69
   2 - SEL$1   / "from$_subquery$_002"@"SEL$69"
   5 - SET$1   / "ALL_OBJECTS"@"SEL$1"

Hint Report:
Total hints for statement: 2
   0 - SEL$54: NO_MERGE

SQL Analysis Report:
  14 - SEL$E029B2FF / "O"@"SEL$5"
       - The following columns have predicates which preclude their
         use as keys in index range scan. Consider rewriting the predicates.
           "NAME"

A-Rows / A-Time も同時に取得したい場合は format => 'ALL ALLSTATS LAST' のように組み合わせられます。

代替手段の比較

知りたいこと DBMS_XPLAN.DISPLAY_CURSOR ※1 SQL Monitor 10053 ※2
どの計画が選ばれたか
E-Rows / A-Rows の乖離 ✅(長時間・並列のみ)
Query Block 名 / Object Alias
述語情報の詳細(access / filter)
Column Projection 情報
Hint Report
SQL Analysis(改善提案)
なぜその計画を選んだか
オプティマイザが参照した統計値
コスト計算の内訳
クエリ変換の適用過程

※1 format => 'ALL ALLSTATS LAST' で E-Rows/A-Rows・Query Block 名等をまとめて取得可能
※2 10053 列はオンプレミス等、取得可能な環境での本来の機能を示しています。ADB-S 26ai では ORA-01031 でブロックされます。

「なぜこの実行計画になるのか」を追いたい場合は、ADB-S 26ai では有効な手段がなく Oracle Support への SR が必要になると想定されます。


5. まとめ

# 検証項目 結論
1 2ステップ回避策は 26ai で通じるか ✅ 通じる。最小権限は EXECUTE ON DBMS_MONITOR + READ ON C##CLOUD$SERVICE.SESSION_CLOUD_TRACE
2 SESSION_CLOUD_TRACE でどう読むか STAT / WAIT 行ともに取得可。SQL_TRACE=FALSE が書き出しトリガー
3 10053 の制限と代替手段 10053 は ORA-01031 で完全ブロック。SQL Monitor(長時間・並列クエリのみ)と DBMS_XPLAN format='ALL'(Query Block 名・Hint Report 等)が代替として使える

ADB-S でのトレース取得は「オンプレと同じ方法ではできないが、公式サポートされた代替手段がある」という整理になります。診断が必要になった際の参考にしてください。

参考

  1. https://connor-mcdonald.com/2025/10/27/sql-trace-on-autonomous/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?