[20150715]10513事件禁止smon回滚.txt

[20150715]10513事件禁止smon回滚.txt

--如果数据库特别是特别忙的数据库出现异常当机的情况,有大量的数据脏块没有更新到数据文件中。还有许多事务没有提交。

--通过设置10513事件,可以加快数据库的启动,但是禁用smon进行tx recovery(所谓tx recovery就是open后数据文件包含提交和未提交
--数据,数据不一致),不会造成数据库不一致,虽然禁用了smon自动恢复,但是当查询的时候还是会进行回滚从undo中读取回滚数据(等
--同于用到哪个对象回滚哪个对象,这种方式会带来压力,且若undo损坏就十分麻烦了,那么这将是另一个恢复问题select
--segment_name,status,tablespace_name from dba_rollback_segs看那个段损坏使用隐藏参数_offline_rollback_segments 标记,然
--后drop rollback segment 'xxx' ,此时才会造成真正的数据不一致)

--还是通过测试说明情况:

1.建立测试环境:

SCOTT@test> @ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.3.0     Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

SCOTT@test> create table t as select rownum id , cast ( 'test' as varchar2(20)) name from xmltable ('1 to 100000');
Table created.

SCOTT@test> alter system flush buffer_cache ;
System altered.

-- 保证脏块写盘。

SCOTT@test> select rowid,t.* from t where rownum=1;
ROWID                      ID NAME
------------------ ---------- --------------------
AABLTpAAEAAABKbAAA          1 test

SCOTT@test> @ lookup_rowid AABLTpAAEAAABKbAAA
    OBJECT       FILE      BLOCK        ROW DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- ----------------------------------------
    308457          4       4763          0 4,4763               alter system dump datafile 4 block 4763
 
2.修改数据不提交看看:
SCOTT@test> update t set name='TTTTTEST' ;
...
不等结束...

打开另外的会话:
SYS@test> shutdown abort ;
ORACLE instance shut down.

3.通过bbed观察:
BBED> set dba 4,4763
        DBA             0x0100129b (16781979 4,4763)

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

col    0[3] @2007: 524
col    1[4] @2011: test

--可以发现修改的数据并没有写盘。使用 dump /v offset 0观察也可以证明。

SYS@test> startup mount;
ORACLE instance started.
Total System Global Area 1603411968 bytes
Fixed Size                  2228784 bytes
Variable Size             989859280 bytes
Database Buffers          603979776 bytes
Redo Buffers                7344128 bytes
Database mounted.

SYS@test> alter system set events '10513 trace name context forever,level 2';
System altered.

SYS@test> alter database open ;
Database altered.

--观察alert*.log文件:
Completed: ALTER DATABASE   MOUNT
Wed Jul 15 11:03:19 2015
OS Pid: 17985 executed alter system set events '10513 trace name context forever,level 2'
Wed Jul 15 11:04:05 2015
alter database open
Beginning crash recovery of 1 threads
parallel recovery started with 3 processes
Started redo scan
Completed redo scan
read 44694 KB redo, 2776 data blocks need recovery
Started redo application at
Thread 1: logseq 3160, block 32678
Recovery of Online Redo Log: Thread 1 Group 2 Seq 3160 Reading mem 0
  Mem# 0: /u01/app/oracle11g/oradata/test/redo02.log
Wed Jul 15 11:04:33 2015
Recovery of Online Redo Log: Thread 1 Group 3 Seq 3161 Reading mem 0
  Mem# 0: /u01/app/oracle11g/oradata/test/redo03.log
Wed Jul 15 11:04:56 2015
Completed redo application of 38.43MB
Completed crash recovery at
Thread 1: logseq 3161, block 40136, scn 12698741606
2776 data blocks read, 2776 data blocks written, 44694 redo k-bytes read
Wed Jul 15 11:04:57 2015
LGWR: STARTING ARCH PROCESSES
Wed Jul 15 11:04:57 2015
ARC0 started with pid=23, OS id=17995
ARC0: Archival started
LGWR: STARTING ARCH PROCESSES COMPLETE
ARC0: STARTING ARCH PROCESSES
Wed Jul 15 11:04:58 2015
ARC1 started with pid=24, OS id=17997
Wed Jul 15 11:04:59 2015
ARC2 started with pid=25, OS id=17999
Wed Jul 15 11:04:59 2015
ARC3 started with pid=26, OS id=18001
ARC1: Archival started
ARC2: Archival started
ARC1: Becoming the 'no FAL' ARCH
ARC1: Becoming the 'no SRL' ARCH
ARC2: Becoming the heartbeat ARCH
Thread 1 advanced to log sequence 3162 (thread open)
Thread 1 opened at log sequence 3162
  Current log# 1 seq# 3162 mem# 0: /u01/app/oracle11g/oradata/test/redo01.log
Successful open of redo thread 1
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
Wed Jul 15 11:04:59 2015
SMON: enabling cache recovery
Archived Log entry 4800 added for thread 1 sequence 3161 ID 0x806ffa4c dest 1:
ARC3: Archival started
ARC0: STARTING ARCH PROCESSES COMPLETE
[17985] Successfully onlined Undo Tablespace 2.
Undo initialization finished serial:0 start:1061401088 end:1061401348 diff:260 (2 seconds)
Verifying file header compatibility for 11g tablespace encryption..
Verifying 11g file header compatibility for tablespace encryption completed
SMON: enabling tx recovery
Database Characterset is ZHS16GBK
Wed Jul 15 11:05:00 2015
Incremental checkpoint up to RBA [0xc5a.3.0], current log tail at RBA [0xc5a.3e.0]
No Resource Manager plan active
replication_dependency_tracking turned off (no async multimaster replication found)
Starting background process QMNC
Wed Jul 15 11:05:02 2015
QMNC started with pid=27, OS id=18003
Completed: alter database open
Wed Jul 15 11:05:07 2015
db_recovery_file_dest_size of 20480 MB is 0.09% used. This is a
user-specified limit on the amount of space that will be used by this
database for recovery-related files, and does not reflect the amount of
space available in the underlying filesystem or ASM diskgroup.
Wed Jul 15 11:05:07 2015
Starting background process CJQ0
Wed Jul 15 11:05:07 2015
CJQ0 started with pid=29, OS id=18017

SYS@test> select usn,UNDOBLOCKSDONE,UNDOBLOCKSDONE from v$fast_start_transactions;
no rows selected

--bbed观察:
BBED> set dba 4,4763
        DBA             0x0100129b (16781979 4,4763)

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

BBED> x /rnc
rowdata[6982]                               @8173
-------------
flag@8173: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8174: 0x02
cols@8175:    2

col    0[2] @8176: 1
col    1[8] @8179: TTTTTEST

--这个时候说明开机后redo已经应用。也就是前滚。实际上我的数据没有提交。正常的情况应该看到的像前面的情况。

--这个时候做一个查询,如果我执行:
SCOTT@test> select rowid,t.* from t where rownumROWID                      ID NAME
------------------ ---------- --------------------
AABLTpAAEAAABKbAAA          1 test

--说明已经读取了回滚段信息。

SCOTT@test> alter system checkpoint;
System altered.

--做一次脏块写盘,再使用bbed观察:
BBED> set dba 4,4763
        DBA             0x0100129b (16781979 4,4763)

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

BBED> x /rnc
rowdata[6982]                               @8173
-------------
flag@8173: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8174: 0x02
cols@8175:    2
col    0[2] @8176: 1
col    1[8] @8179: TTTTTEST

--可以发现这个时候字段name还是看到'TTTTEST',而不是'test'。

SCOTT@test> set autot traceonly
SCOTT@test> select rowid,t.* from t where  rownumExecution Plan
--------------------------
Plan hash value: 508354683
---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     1 |    37 |     2   (0)| 00:00:01 |
|*  1 |  COUNT STOPKEY     |      |       |       |            |          |
|   2 |   TABLE ACCESS FULL| T    | 94407 |  3411K|     2   (0)| 00:00:01 |
---------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter(ROWNUMNote
-----
   - dynamic sampling used for this statement (level=2)
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
        713  consistent gets
          0  physical reads
        108  redo size
        675  bytes sent via SQL*Net to client
        520  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

--713次consistent gets,也说明读取了回滚段信息。

4.正常关闭数据库,继续使用bbed观察:

BBED> set dba 4,4763
        DBA             0x0100129b (16781979 4,4763)

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

BBED> x /rnc
rowdata[6982]                               @8173
-------------
flag@8173: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8174: 0x02
cols@8175:    2

col    0[2] @8176: 1
col    1[8] @8179: TTTTTEST

--可以发现10513事件禁止smon回滚,但是在读取时还是通过回滚段读取正确的数据,但是这些信息并不会写盘。

5.正常启动数据库,没有10513事件。

SCOTT@test> select rowid,t.* from t where  rownum

ROWID                      ID NAME
------------------ ---------- --------------------
AABLTpAAEAAABKbAAA          1 test

SCOTT@test> alter system checkpoint;
System altered.

BBED> set dba 4,4763
        DBA             0x0100129b (16781979 4,4763)

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

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

col    0[2] @1332: 1
col    1[4] @1335: test
--这回正确了。

SCOTT@test> select rowid,t.* from t where  rownumExecution Plan
----------------------------------------------------------
Plan hash value: 508354683
---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     1 |    37 |     2   (0)| 00:00:01 |
|*  1 |  COUNT STOPKEY     |      |       |       |            |          |
|   2 |   TABLE ACCESS FULL| T    | 94407 |  3411K|     2   (0)| 00:00:01 |
---------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter(ROWNUMNote
-----
   - dynamic sampling used for this statement (level=2)
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          4  consistent gets
          0  physical reads
          0  redo size
        675  bytes sent via SQL*Net to client
        520  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

--4consistent gets,也能说明问题。

--总结:
--1.使用10513打开最好不能给用户正式使用。仅仅作为监测是否打开的情况。
--2.最好还是选择正常的打开方式,总之dba要情况地了解10513事件的作用,解决遇到的数据库问题。
--3.如果再使用参数_corrupted_rollback_segments,这样正确的信息无法显示,如果再drop undo表空间(不知道是否可以,没有测试),情
--况就不妙了。正确的信息再也无法恢复。可以参考我以前写的链接:
-- http://blog.itpub.net/267265/viewspace-1415396/ => [0126]理解_corrupted_rollback_segments
--4.总之一定要认真了解这些参数的含义,选择正确的方式恢复数据库。

时间: 2024-09-29 21:26:42

[20150715]10513事件禁止smon回滚.txt的相关文章

软件事务内存导论(八)提交和回滚事件

提交和回滚事件 Java的try-catch-finally语法结构不但使我们可以安全地处理异常,还能够在程序抛出异常时选择性地执行一些代码.同样地,我们也可以控制程序在事务成功提交之后去执行某段代码,而当事务回滚时则去执行另一段代码.StmUtils中的deferred()和compensatiing()这两个函数分别提供了上述功能.特别地,在实现事务的过程中,为保证事务能顺利完成,我们通常会加入一些带副作用的逻辑,而deferred()函数则是一个执行所有这部分逻辑的绝佳地点. Java中的

spring hibernate事件不能回滚问题?

问题描述 spring hibernate事件不能回滚问题? 我想要a,b 2个操作要么都做要么都不做现在抛出异常,a仍然存入了数据库,求大神指导一下. 解决方案 事务陪在哪层 没有事务不会回滚 解决方案二: 把rollback-for去掉再试试 解决方案三: 一种方法是加事务,另一种方法是自己加异常处理 解决方案四: 能回滚,加入事务中,异常处理写上rollback 解决方案五: 写上事务异常,你没有写,而且你的error = 0 以后,直接就判断了,所以即时没有错误也会爆异常的,而A在异常前

[20170518]不同事务能使用相同回滚段吗.txt

[20170518]不同事务能使用相同回滚段吗.txt --//昨天别人问的问题,不同事务能使用相同回滚段吗?按照道理oracle会均匀分配事务到不同的回滚段,如果事务很多,oracle会自动建立 --//新的回滚段.正常的测试应该模拟建立多个事务,不提交看看是否存在回滚段是相同的. --//oracle还可以通过alter system set "_smu_debug_mode" = 45;加上set transaction use rollback segment "_S

[20160304]奇怪的回滚段2.txt

[20160304]奇怪的回滚段2.txt --链接: http://blog.itpub.net/267265/viewspace-2022969/ $ locate Seed_Database.dfb /u01/app/oracle/product/11.2.0.4/dbhome_1/assistants/dbca/templates/Seed_Database.dfb --安装的数据文件应该是从这个文件取出的. $ strings /u01/app/oracle/product/11.2.

[20160302]奇怪的回滚段.txt

[20160302]奇怪的回滚段.txt --昨天在探究oracle的启动时,无意中发现我安装这个版本,在安装的测试样例表空间example出现回滚段. --自己今天仔细看看: 1.环境: SYS@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- ----------------------------------

[20160304]奇怪的回滚段3.txt

[20160304]奇怪的回滚段3.txt --相关链接: http://blog.itpub.net/267265/viewspace-2036568/ http://blog.itpub.net/267265/viewspace-2022969/ --自己将其中2个offline的回滚段online看看: 1.环境: SYS@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER -------------

[20140516]取出回滚段信息.txt

[20140516]取出回滚段信息.txt --如果数据库存在问题,无法启动,需要利用隐含参数_offline_rollback_segments=(_SYSSMUx$)和_corrupted_rollback_segments=(_SYSSMUx$) --来屏蔽,可以通过一些隐含信息启动数据库.在数据库不能启动的情况下如何取出这些信息呢? --如果数据库正常启动,可以通过访问基表sys.undo$获得这些信息. SYS@test> select * from sys.undo$ order b

Oracle Database 10g:回滚监视

oracle 为用户提供对回滚操作时间的准确评估 我们还在这地方吗?还要多长时间? 听起来熟悉吗?这些问题可能是您在前往孩子们最喜爱的主题公园的路上,从汽车后座上提出来的,并且经常是不断地.越来越频繁地提出来.您不想告诉他们还确切需要多长时间吗 - 或者更简单些,您自己知道答案吗? 同样,在回滚长期运行的事务时,经常会有些用户不停地询问相同的问题.这些问题是合理的,因为该事务进行了锁定,正常的处理经常受到回滚进程的影响. 在 Oracle 9i Database 及更低的版本中,您可以执行查询

Oracle Database 10g:最佳新特性(第二周:回滚监视 )

oracle 第 2 周:回滚监视 还要多长时间?:回滚监视 为用户提供对回滚操作时间的准确评估 我们还在这地方吗?还要多长时间? 听起来熟悉吗?这些问题可能是您在前往孩子们最喜爱的主题公园的路上,从汽车后座上提出来的,并且经常是不断地.越来越频繁地提出来.您不想告诉他们还确切需要多长时间吗 - 或者更简单些,您自己知道答案吗? 同样,在回滚长期运行的事务时,经常会有些用户不停地询问相同的问题.这些问题是合理的,因为该事务进行了锁定,正常的处理经常受到回滚进程的影响. 在 Oracle 9i D