联系:手机/微信(+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
 
	        