[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;