联系:手机/微信(+86 17813235971) QQ(107644445)
标题:DBMS_SESSION.set_context提示ORA-01031问题解决
作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]
最近给客户把oracle数据库从11.2.0.3 aix平台迁移到19.23 linux平台,使用impdp+network_link 按照用户的方式处理,结果发现有一个程序运行异常
ORA-01031: insufficient privileges通过程序跟踪确认是在调用以下部分异常
DBMS_SESSION.set_context ( 'back_exec', 'back_exec_log_no', v_back_exec_log_no ……
通过跟踪执行用户权限,确认EXECUTE ON SYS.DBMS_SESSION已经授权.做一个简单测试重现给问题:
SQL> show user; USER 为 "SYS" SQL> exec DBMS_SESSION.SET_CONTEXT('test_ctx', 'a', '1'); BEGIN DBMS_SESSION.SET_CONTEXT('test_ctx', 'a', '1'); END; * 第 1 行出现错误: ORA-01031: 权限不足 ORA-06512: 在 "SYS.DBMS_SESSION", line 114 ORA-06512: 在 line 1 SQL> GRANT EXECUTE ON SYS.DBMS_SESSION TO sys; 授权成功。 SQL> exec DBMS_SESSION.SET_CONTEXT('test_ctx', 'a', '1'); BEGIN DBMS_SESSION.SET_CONTEXT('test_ctx', 'a', '1'); END; * 第 1 行出现错误: ORA-01031: 权限不足 ORA-06512: 在 "SYS.DBMS_SESSION", line 114 ORA-06512: 在 line 1
基于这种情况,肯定不是权限问题,查询官方DBMS_SESSION.set_context部分描述
确认namespace:The namespace of the application context to be set, limited to 128 bytes. Exceeding the maximum permissible length will result in an error during the execution of the procedure.
SQL> create context test_ctx using sys.DBMS_SESSION; 上下文已创建。 SQL> exec DBMS_SESSION.SET_CONTEXT('test_ctx', 'a', '1'); PL/SQL 过程已成功完成。
官方有相关的执行例子:Example: Creating a Global Application Context that Uses a Client Session ID