为什么 COMMIT 在立即执行后解决了问题?

Bha*_*war 5 sql oracle alter

BEGIN
     EXECUTE IMMEDIATE 'ALTER SESSION SET SKIP_UNUSABLE_INDEXES = TRUE';
     EXECUTE IMMEDIATE 'ALTER SESSION DISABLE PARALLEL DML' ;
END;
/
Run Code Online (Sandbox Code Playgroud)

在 3 个 oracle 服务器中有 1 个出现以下错误。甲骨文: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;
/
Run Code Online (Sandbox Code Playgroud)

为什么在添加 COMMIT 后没有看到这个问题?

tou*_*dra 3

如果您有一些语句在上述块之前启动任何事务,则会出现此问题。

在我的例子中,从同义词中进行简单的选择导致了错误。一旦在该事务之后添加提交,该块就可以正常执行。

即使在您的情况下,如果在以下语句执行之前添加 COMMIT 之后没有错误,那么可以肯定的是,您缺少某些事务的提交。

COMMIT;  
EXECUTE IMMEDIATE 'ALTER SESSION SET SKIP_UNUSABLE_INDEXES => TRUE'; 
EXECUTE IMMEDIATE 'ALTER SESSION DISABLE PARALLEL DML' ;
Run Code Online (Sandbox Code Playgroud)

对我来说这个链接很有帮助 http://docs.oracle.com/cd/B28359_01/server.111/b28310/ds_admin004.htm#ADMIN12167

谢谢/请参阅@DavidAldridge以获得更清晰的信息