为什么Oracle说“设置交易”'是一种交易手段

时间:2014-05-04 04:55:34

标签: oracle transactions

在Oracle文档http://docs.oracle.com/cd/E11882_01/server.112/e25789/transact.htm#CNCPT88952中,它说:

  

事务在第一个可执行SQL语句开始时开始   遇到。可执行的SQL语句是一个SQL语句   生成对数据库实例的调用,包括DML和DDL   语句和SET TRANSACTION语句。   事务开始时,Oracle数据库会将事务分配给   可用的undo数据段,用于记录新的undo表项   事务。

我对前面陈述的理解是,

  1. SET TRANSACTION是开始交易的一种方式;

  2. 交易开始的一个里程碑是可用的撤消数据段已分配;

  3. 交易ID 可用撤消数据段的一部分,因此将在运行SET TRANSACTION后分配。

  4. 但我的以下测试并不能满足我的理论,

    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
    

    让我感到惊讶的是,事务视图中没有行。我的假设有什么不对?

1 个答案:

答案 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语法(参数)===============

enter image description here

有关详细信息,请参阅此链接:http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_10005.htm#SQLRF01705