BEGIN
EXECUTE IMMEDIATE 'ALTER SESSION SET SKIP_UNUSABLE_INDEXES = TRUE';
EXECUTE IMMEDIATE 'ALTER SESSION DISABLE PARALLEL DML' ;
END;
/
在3个oracle服务器中的1个中出现以下错误。 oracle:11.2.0.4
ora 12841无法改变会话内的并行DML状态 交易
但是在添加COMMIT后系统工作正常
BEGIN
EXECUTE IMMEDIATE 'ALTER SESSION SET SKIP_UNUSABLE_INDEXES = TRUE';
COMMIT;
EXECUTE IMMEDIATE 'ALTER SESSION DISABLE PARALLEL DML' ;
END;
/
添加COMMIT后为什么没有看到这个问题?
答案 0 :(得分:2)
此:
EXECUTE IMMEDIATE 'ALTER SESSION SET SKIP_UNUSABLE_INDEXES = TRUE';
...启动了一个新事务,之后您尝试更改会话并行DML状态。
COMMIT完成了事务并启动了另一个事务,因此您可以更改会话并行DML状态。
此处的交易文档:https://docs.oracle.com/database/121/CNCPT/transact.htm
编辑:可能BEGIN让你感到困惑。在PostgreSQL中,BEGIN启动一个事务:http://www.postgresql.org/docs/9.1/static/sql-begin.html。在Oracle"事务在遇到第一个可执行SQL语句时开始"。
答案 1 :(得分:2)
如果您有一些语句在上述块之前启动任何事务,则会出现此问题。
在我的案例中,从导致错误的同义词中进行了简单的选择。在该事务之后添加提交后,块执行正常。
即使在你的情况下,如果在下面的语句之前添加COMMIT之后执行没有错误,那么肯定会有一些你缺少提交的事务。
COMMIT;
EXECUTE IMMEDIATE 'ALTER SESSION SET SKIP_UNUSABLE_INDEXES => TRUE';
EXECUTE IMMEDIATE 'ALTER SESSION DISABLE PARALLEL DML' ;
对我来说这个链接很有帮助 http://docs.oracle.com/cd/B28359_01/server.111/b28310/ds_admin004.htm#ADMIN12167
谢谢/推荐@DavidAldridge以获得更清晰