Oracle データベースに 2 人のユーザー (スキーム) がいるとします:TARGET_USER
とTESTER_USER
.
TARGET_USER
いくつかのパッケージを所有しています:
create or replace package TARGET_USER.SomePackage
is
procedure some_interface_proc(p1 number, p2 varchar2, p3 xmltype);
end;
このパッケージの本体には、 から呼び出される多くの関数が含まれていますsome_interface_proc
。
create or replace package body TARGET_USER.SomePackage
is
procedure do_some_operation_1
is
begin
null; -- Really do some actions here
end;
procedure do_some_operation_2
is
begin
null; -- Really do some actions here
end;
procedure some_interface_proc(p1 number, p2 varchar2, p3 xmltype)
is
begin
do_some_operation_1;
do_some_operation_2;
end;
end;
に付与されたこのパッケージを実行する権限TESTER_USER
:
grant execute on TARGET_USER.SomePackage to TESTER_USER
パッケージの実行に必要なすべての権限もTESTER_USER
付与され、必要なDBMS_PROFILER
すべてのテーブルを所有します。このような設定によりTESTER_USER
、次のように簡略化できるテスト スクリプトに対してプロファイラーを正常に実行できます。
begin
for cData in (
select a, b, с from table_with_test_data
) loop
TARGET_USER.SomePackage.some_interface_proc(a,b,c);
end loop;
end;
それで、すべての統計が収集され、すべて問題ないように見えますが...
質問
およびプロシージャTESTER_USER
の実行時間に関する詳細な統計が表示されないのはなぜですか?SomePackage.do_some_operation_1
SomePackage.do_some_operation_2
DBMS_PROFILER のドキュメントで指定されているように、プロファイラーに影響を与える可能性があるのは次の 4 つです。
- プロファイラーは、ユーザーが CREATE 権限を持つユニットのデータのみを収集します
- 一般に、ユーザーがユニットをデバッグできる場合、同じユーザーがそれをプロファイリングできます。
- コンパイル済みユニットのデバッグ情報。
- プログラム ユニットは、解釈された (ネイティブではない) コードにコンパイルする必要があります。
すべての要件を満たそうとしながら、次のアクションを実行します。
grant create any procedure to TESTER_USER;
grant alter any procedure to TESTER_USER;
grant debug on TARGET_USER.SomePackage to TESTER_USER;
SomePackageのコンパイルモードとデバッグ情報が存在するかどうかを確認しました。
しかし、このすべてのアクションを完了した後でTESTER_USER
も、内部プロシージャーのプロファイラー統計にアクセスできません。
では、問題は、この状況を修正するために、可能であれば何をしなければならないかということです。