Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么提交在立即执行后解决了问题?_Sql_Oracle_Alter - Fatal编程技术网

Sql 为什么提交在立即执行后解决了问题?

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; / 为什么在添加提交后看不到该问题?此:

三台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';
     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' ;