[20140521]shutdown immediate?.txt

[20140521]shutdown immediate?.txt

--昨天别人问如果正常关闭数据库,执行shutdown immediate,如果有一些事务没有提交,是先回滚后后再正常关闭数据库呢?
--还是在下次open时,执行回滚操作。我的理解应该是第1种情况,做一个测试:

SYS@test> @ver
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

create table t (id number,name varchar2(20));
insert into t values (1,'ABCDEFABCDEF');
commit ;

SCOTT@test> select rowid ,t.* from t ;

ROWID                      ID NAME
------------------ ---------- --------------------
AABFuNAAEAAAAIjAAA          1 ABCDEFABCDEF

SCOTT@test> @lookup_rowid  AABFuNAAEAAAAIjAAA
    OBJECT       FILE      BLOCK        ROW DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- ----------------------------------------
    285581          4        547          0 4,547                alter system dump datafile 4 block 547 ;


SCOTT@test> update t set name='123456789012' where id=1;
1 row updated.

SCOTT@test> alter system checkpoint ;
System altered.
--不提交。

--使用bbed观察:
BBED> set dba 4,547
        DBA             0x01000223 (16777763 4,547)

BBED> p *kdbr[0]
rowdata[0]
----------
ub1 rowdata[0]                              @8169     0x2c

BBED> x /rnc
rowdata[0]                                  @8169
----------
flag@8169: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8170: 0x02
cols@8171:    2

col    0[2] @8172: 1
col   1[12] @8175: 123456789012


--关闭数据库:

SYS@test> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.


--开始使用bbed观察:
BBED> set dba 4,547
        DBA             0x01000223 (16777763 4,547)

BBED> p *kdbr[0]
rowdata[0]
----------
ub1 rowdata[0]                              @8169     0x2c

BBED> x /rnc
rowdata[0]                                  @8169
----------
flag@8169: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8170: 0x00
cols@8171:    2

col    0[2] @8172: 1
col   1[12] @8175: ABCDEFABCDEF

--可以确定在执行shutdown immediate 时,已经将未提交的事务回滚。说明如果有大量的事务没有提交的情况下,如果执行正常关闭
--数据库操作,关机过程会很慢,需要等待许多时间。最好在正常关闭数据库前,查询还有多少事务没有提交。

SELECT SUM (used_ublk) FROM v$transaction;

请使用浏览器的分享功能分享到微信等