关于v$transaction的误解

碰到一个奇怪的事情

SQL> delete from test where name is null;

0 rows deleted.

SQL> select * from v$transaction;

no rows selected

SQL> select * from v$lock where sid=52;

ADDR             KADDR                   SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
000000006EDCE090 000000006EDCE0E8         52 AE        100          0          4          0       2411          2
00007F2488B4A8B8 00007F2488B4A918         52 TM      88076          0          3          0       1536          2

疑似没有修改记录的dml语句在v$transaction没有记录,只持有一个3号TM锁。

再看一条正常的dml语句

SQL> delete from test where id=1;

1 row deleted.

SQL> select count(*) from v$transaction;

  COUNT(*)
----------
         1

SQL> select * from v$lock where sid=52;

ADDR             KADDR                   SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
000000006EDCE090 000000006EDCE0E8         52 AE        100          0          4          0       2492          2
00007F2488B0DBC8 00007F2488B0DC28         52 TM      88076          0          3          0         19          2
000000006BCE1A40 000000006BCE1AB8         52 TX     262172        917          6          0         19          2

持有3号TM锁(行级排它锁)和6号TX锁。
官方对于v$transaction的定义
V$TRANSACTION lists the active transactions in the system.

个人觉得,v$transaction这个视图的数据是从回滚段段头取得,没有修改记录的dml语句在回滚段段头没有事务记录,也就不在v$transaction中记录。但这样的语句也算是事务,因为ddl语句有的也没有tx锁,不产生undo数。ddl也是事务的一种。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ORACLE数据库的系统参数都存储在数据库中,可以通过SQLPLUS,以用户SYSYTEM进行查询。几个重要的表或者视图如下: v$controlfile:控制文件的信息; v$datafile:数据文件的信息; v$log:日志文件的信息; v$process:处理器的信息; v$session:会话信息; v$transaction:事务信息; v$resource:资源信息; v$sga:系统全局区的信息。 上面的视图名中的‘v$’,只是视图名字中的字符。类似于上面的视图或表还有很多,位于: $ORACLE_HOME/RDBMS/ADMIN/CATALOG.SQL文件中。 这些视图或表可以在SQLPLUS中用SELECT语句进行查询。 2.数据字典视图 表和列 DBA_TABLES、ALL_TABLES和USER_TABLES显示了有关数据库表的一般信息。 DBA_TAB_COLUMNS、ALL_TAB_COLUMNS和USER_TAB_COLUMNS显示了每个数据库表的列的信息。 注意:DBA_OBJECTS、ALL_OBJECTS和USER_OBJECTS显示了模式对象的信息,包括表。 完整性约束 DBA_CONSTRAINTS、ALL_CONSTRAINTS和USER_CONSTRAINST显示有关约束的一般信息。 DBA_CONS_COLUMNS、ALL_CONS_COLUMNS和USER_CONS_COLUMNS显示有关列的相关约束的一般信息。 视图 DBA_VIEWS、ALL_VIEWS和USER_VIEWS。 注意:DBA_OBJECTS、ALL_OBJECTS和USER_OBJECTS显示了模式对象的信息,包括视图。 序列 DBA_SEQUENCES、ALL_SEQUENCES和USER_SEQUENCES。 注意:DBA_OBJECTS、ALL_OBJECTS和USER_OBJECTS显示了模式对象的信息,包括序列。 同义词 DBA_SYNONYMS、ALL_SYNONYMS和USER_SYNONYMS。 注意:DBA_OBJECTS、ALL_OBJECTS和USER_OBJECTS显示了模式对象的信息,包括同义词。 索引 DBA_INDEXS、ALL_INDEXS、USER_INDEXS、DBA_IND_COLUMNS、ALL_IND_COLUMNS和USER_IND_COLUMNS。 用户 DBA_USERS。 角色 DBA_ROLES。 表空间定额 DBA_TS_QUOTAS。 配置表 DBA_PROFILES。 表空间 DBA_TABLESPACES。 数据文件 DBA_DATA_FILES。 段 DBA_SEGMENTS、USER_SEGMENT。 回滚段 DBA_ROLLBACK_SEGS、V$ROLLNAME、V$ROLLSTAT。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值