Sql 为什么提交在立即执行后解决了问题?
三台oracle服务器中有一台出现以下错误。甲骨文:11.2.0.4 ora 12841无法更改会话中的会话并行DML状态 交易 但添加COMMIT后,系统运行良好Sql 为什么提交在立即执行后解决了问题?,sql,oracle,alter,Sql,Oracle,Alter,三台oracle服务器中有一台出现以下错误。甲骨文:11.2.0.4 ora 12841无法更改会话中的会话并行DML状态 交易 但添加COMMIT后,系统运行良好 BEGIN EXECUTE IMMEDIATE 'ALTER SESSION SET SKIP_UNUSABLE_INDEXES = TRUE'; EXECUTE IMMEDIATE 'ALTER SESSION DISABLE PARALLEL DML' ; END; / 为什么在添加提交后看不到该问题?此:
BEGIN
EXECUTE IMMEDIATE 'ALTER SESSION SET SKIP_UNUSABLE_INDEXES = TRUE';
EXECUTE IMMEDIATE 'ALTER SESSION DISABLE PARALLEL DML' ;
END;
/
为什么在添加提交后看不到该问题?此:
BEGIN
EXECUTE IMMEDIATE 'ALTER SESSION SET SKIP_UNUSABLE_INDEXES = TRUE';
COMMIT;
EXECUTE IMMEDIATE 'ALTER SESSION DISABLE PARALLEL DML' ;
END;
/
。。。启动了一个新事务,之后尝试更改会话并行DML状态
COMMIT完成了事务并启动了另一个事务,因此您可以更改会话并行DML状态
此处的交易单据:
编辑:开头可能让你感到困惑。在PostgreSQL中,BEGIN启动一个事务:。在Oracle中,“当遇到第一条可执行SQL语句时,事务开始” 如果您有一些语句在上述块之前启动任何事务,则会发生此问题 在我的例子中,有一个简单的选择同义词,这是造成错误的原因。在该事务之后添加commit后,块将正常执行 即使在您的情况下,如果在添加COMMIT之后,在执行下面的语句之前没有错误,那么可以肯定的是,有一些事务缺少提交
EXECUTE IMMEDIATE 'ALTER SESSION SET SKIP_UNUSABLE_INDEXES = TRUE';
对我来说,这个链接很有帮助
感谢/请参阅@davidardridge以了解更多信息如果提交是必须的,那么为什么它没有在所有oracle服务器中中断。这个问题只在1台服务器上出现,而该语句在其他服务器上运行良好,没有提交。嗯,我想知道是否“ALTER SESSION SET SKIP_UNUSABLE_index=TRUE”不是启动事务的原因,而是启动之前的另一个语句?如果在一台服务器上没有执行上一条语句,则可以解释差异。您可以尝试连接到数据库,执行提交,执行“从V$TRANSACTION;选择XID”,然后执行“ALTER SESSION SET SKIP_UNUSABLE_INDEXES=TRUE”,然后再次执行“从V$TRANSACTION;选择XID”。发布select语句返回的内容。谢谢David,问题现在已经解决了。问题是存在单独的开放链接连接。
COMMIT;
EXECUTE IMMEDIATE 'ALTER SESSION SET SKIP_UNUSABLE_INDEXES => TRUE';
EXECUTE IMMEDIATE 'ALTER SESSION DISABLE PARALLEL DML' ;