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; /
後は、対象のファンクションを「デバッグ用にコンパイル」