在Oracle文档http://docs.oracle.com/cd/E11882_01/server.112/e25789/transact.htm#CNCPT88952中,它说:
事务在第一个可执行SQL语句开始时开始 遇到。可执行的SQL语句是一个SQL语句 生成对数据库实例的调用,包括DML和DDL 语句和SET TRANSACTION语句。 事务开始时,Oracle数据库会将事务分配给 可用的undo数据段,用于记录新的undo表项 事务。
我对前面陈述的理解是,
SET TRANSACTION是开始交易的一种方式;
交易开始的一个里程碑是可用的撤消数据段已分配;
交易ID 是可用撤消数据段的一部分,因此将在运行SET TRANSACTION后分配。
但我的以下测试并不能满足我的理论,
SQL> -- I suppose there's no other session is using this database
SQL> show rel;
release 1102000200
SQL> set transaction name 't1';
Transaction set.
SQL> SELECT XID, XIDUSN, XIDSLOT, STATUS from v$transaction;
no rows selected
让我感到惊讶的是,事务视图中没有行。我的假设有什么不对?
答案 0 :(得分:3)
你跳过引用文字中最后一个最重要的句子:
当遇到第一个可执行SQL语句时,事务开始。可执行SQL语句是一种SQL语句,它生成对数据库实例的调用,包括DML和DDL语句以及SET TRANSACTION语句。
当事务开始时,Oracle数据库会将事务分配给可用的撤消数据段,以记录新事务的撤消条目。 在分配撤消段和事务表槽之前不会分配事务ID,在第一个DML语句期间发生。事务ID对于事务是唯一的并且代表undo segment number,slot和sequence number。
SET TRANSACTION
不是DML (Data Manipulation Language)
,而是transaction control statement
,有关详细信息,请参阅此链接:http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_1001.htm
您需要运行 DML语句才能看到该事务是V $ Transactions视图。
======= EDIT - SET TRANSACTION语法(参数)===============
强>
有关详细信息,请参阅此链接:http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_10005.htm#SQLRF01705