かきスタンプ

福岡でフリーランスの物流系のエンジニアやってます。

Oracle12c:PL/SQLのデバッグ実行に必要な設定【忙しい人向け】

Oracle 12cにて、PL/SQLデバッグするために必要な設定

  • DEBUG CONNECT SESSION 権限の許可
  • DBMS_DEBUG_JDWP に対する EXECUTE 権限
  • デバッグするストアド・プロシージャーに対する EXECUTE 権限
  • JDWP ACL 実行権限
  • ストアドプロシージャが "Compiled for Debug"であること

多すぎだろ!
 
 
という訳で、以下 PL/SQLデバッグ実行するために必要な設定を反映させるコマンド。

<注意点>
  • ローカルインストールされた DBを対象にしています。リモートに対して実行する場合、「localhost」「127.0.0.1」を、読み替えて下さい。
  • スキーマ名「KAKIP2」に権限を付与しています。適宜読み替えて下さい。
  • PUBLIC に権限を付与するのが嫌な方は、スキーマ名を指定してください。

 

SYSDBA 権限にて、sql plus から実行。
grant execute on SYS.UTL_ENCODE to PUBLIC;
grant execute on SYS.UTL_RAW to PUBLIC;
grant execute on SYS.UTL_I18N to PUBLIC
grant execute on SYS.UTL_SMTP to PUBLIC;
grant execute on SYS.DBMS_LOB to PUBLIC;
grant execute on SYS.DBMS_RANDOM to PUBLIC;
grant execute on SYS.DBMS_DEBUG_JDWP to PUBLIC;
grant execute on DBMS_DEBUG_JDWP to PUBLIC;

grant execute on SYS.UTL_HTTP to PUBLIC;
grant execute on SYS.UTL_TCP to PUBLIC;

grant debug connect session to PUBLIC;
grant debug any procedure to PUBLIC;
BEGIN
   DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(
     acl         => 'localmail.xml',
     description => 'local mail acl',
     principal   => 'KAKIP2',
     is_grant    => true,
     privilege   => 'connect'
     );
   DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(
     acl       => 'localmail.xml',
     principal => 'KAKIP2',
     is_grant  => true,
     privilege => 'resolve'
     );

  DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(
     acl  => 'localmail.xml',
     host => 'localhost'
     );
  DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(
     acl  => 'localmail.xml',
     host => '127.0.0.1'
     );
END;
/
COMMIT;
begin
       dbms_network_acl_admin.append_host_ace
       (host=>'127.0.0.1',
        ace=> sys.xs$ace_type(privilege_list=>sys.XS$NAME_LIST('JDWP') ,
                       principal_name=>'KAKIP2',
                       principal_type=>sys.XS_ACL.PTYPE_DB) );
    end;
/
後は、対象のファンクションを「デバッグ用にコンパイル

f:id:kakisoft:20180514235310p:plain