暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 收集统计信息后设置隔离级别; 但在此之前没有工作。为什么?

ASKTOM 2019-04-12
276

问题描述

嗨,

请参见下文:-

SQL> create table t (x int);

Table created.

SQL> insert into t values (1);

1 row created.

SQL> alter session set isolation_level=serializable;
ERROR:
ORA-01453: SET TRANSACTION must be first statement of transaction


SQL> exec dbms_stats.gather_table_stats( user, 'T' );

PL/SQL procedure successfully completed.

SQL> alter session set isolation_level=serializable;

Session altered.


为什么alter session语句在收集统计信息之前而不是之后会抛出错误?

专家解答

这与直接收集统计信息无关-这是因为如果您当前处于活动状态,则无法设置隔离级别。例如

SQL> create table t (x int);

Table created.

SQL> insert into t values (1);

1 row created.

SQL> commit;

Commit complete.

SQL> alter session set isolation_level=serializable;

Session altered.


gather_stats调用进行了提交,这就是alter会话在此之后工作的原因。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论