[20151218]未提交事务保存在那里.txt

[20151218]dml未提交事务最新内容到底存储在什么地方.txt

--刚刚看了http://www.itpub.net/thread-1940809-1-1.html上的讨论。

--我自己的想法应该在buffer cache中,自己也做1些测试,说明问题:

1.环境:

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

SCOTT@book> create table t (id number, name varchar2(20)) ;
Table created.

SCOTT@book> insert into t values (1,'AAAA');
1 row created.

SCOTT@book> commit ;
Commit complete.

SCOTT@book> select rowid,t.* from t;
ROWID                      ID NAME
------------------ ---------- --------------------
AAAVr7AAEAAAAIPAAA          1 AAAA

SCOTT@book> @ &r/rowid AAAVr7AAEAAAAIPAAA
    OBJECT       FILE      BLOCK        ROW DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- ----------------------------------------
     88827          4        527          0 4,527                alter system dump datafile 4 block 527 ;

--实际上如果你不写盘,通过bbed观察看到的内容是不对的。一般这个时候我要通过bbed观察要执行alter system checkpoint,或者刷新脏块到磁盘。
SCOTT@book> alter system checkpoint;
System altered.

--这个时候通过bbed观察可以发现数据已经写盘。
BBED> set dba 4,527
        DBA             0x0100020f (16777743 4,527)

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

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

col    0[2] @8180: 1
col    1[4] @8183: AAAA

2.开始测试:
SYS@book> @ &r/bh 4 527

HLADDR              DBARFIL     DBABLK      CLASS CLASS_TYPE         STATE             TCH CR_SCN_BAS CR_SCN_WRP CR_UBA_FIL CR_UBA_BLK CR_UBA_SEQ BA               OBJECT_NAME
---------------- ---------- ---------- ---------- ------------------ ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------- --------------------
0000000083EED060          4        527          1 data block         xcur                1          0          0          0          0          0 000000007469A000 T

SCOTT@book> update t set name='BBBB' where id=1;
1 row updated.
--不提交!

SYS@book> @ &r/bh 4 527
HLADDR              DBARFIL     DBABLK      CLASS CLASS_TYPE         STATE             TCH CR_SCN_BAS CR_SCN_WRP CR_UBA_FIL CR_UBA_BLK CR_UBA_SEQ BA               OBJECT_NAME
---------------- ---------- ---------- ---------- ------------------ ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------- --------------------
0000000083EED060          4        527          1 data block         xcur                1          0          0          0          0          0 000000007B07E000 T
0000000083EED060          4        527          1 data block         cr                  1    1475062          0          0          0          0 000000007469A000 T

--可以发现两个STATE不一样。原来变成了BA=000000007469A000,xucr=>cr. XCUR表示当前块的状态。
-- BA 表示就是块地址,如果检查里面的内容就知道问题。数据块大小8192. 8192 = 0x2000.而且我仅仅插入一条应该靠近块的底板。

SYS@book> oradebug setmypid
Statement processed.

--0x000000007B07E000+0x2000-0x10 = 0x7B07FFF0
--0x000000007469A000+0x2000-0x10 = 0x7469BFF0

SYS@book> oradebug peek 0x7B07FFF0 16
[07B07FFF0, 07B080000) = 02022C00 0402C102 42424242 81FA0601

SYS@book> oradebug peek 0x7469BFF0 16
[07469BFF0, 07469C000) = 02002C00 0402C102 41414141 7FBF0602

--ASCII=0x41=>对应的就是A , ASCII=0x42=>对应的就是B.从这里可以证明DML未提交事务最新内容到底存储在buffer cache中。
--实际上你这样执行一个alter system checkpoint;或者alter system flush buffer_cache;再转储就可以看到。

3.转储问题:
--实际上这个问题一直困扰我以前的学习,执行dml未提交如果这个时候参考转储的块,因为没有写盘,往往看到错误的信息。
--换1句话讲alter system dump datafile 4 block 527 ;看到的磁盘文件的信息,如何看内存的信息呢?可以参考我写另外一篇blog。
http://blog.itpub.net/267265/viewspace-1659981/

--继续测试:

SCOTT@book> commit ;
Commit complete.

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

--不提交!
SYS@book> @ &r/bh 4 527
HLADDR              DBARFIL     DBABLK      CLASS CLASS_TYPE         STATE             TCH CR_SCN_BAS CR_SCN_WRP CR_UBA_FIL CR_UBA_BLK CR_UBA_SEQ BA               OBJECT_NAME
---------------- ---------- ---------- ---------- ------------------ ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------- --------------------
0000000083EED060          4        527          1 data block         xcur                1          0          0          0          0          0 0000000077F3A000 T
0000000083EED060          4        527          1 data block         cr                  1    1476290          0          3       3014        498 000000007839A000 T
0000000083EED060          4        527          1 data block         cr                  1    1476289          0          3       3014        498 0000000078372000 T
0000000083EED060          4        527          1 data block         cr                  1    1476338          0          0          0          0 00000000786CC000 T
0000000083EED060          4        527          1 data block         free                0          0          0          0          0          0 000000007B07E000 T
0000000083EED060          4        527          1 data block         free                0          0          0          0          0          0 000000007469A000 T
6 rows selected.

--注意看STATE=xcur,BA=0x0000000077F3A000,0x0000000077F3A000+0x2000-0x10=0x77F3BFF0.

SYS@book> oradebug peek 0x77F3BFF0 16
[077F3BFF0, 077F3C000) = 02012C00 0402C102 43434343 86EF0601

SCOTT@book> select dump('CCCC',16) from dual ;
DUMP('CCCC',16)
-------------------------
Typ=96 Len=4: 43,43,43,43

--正好对上。

BBED> set dba 4,527
        DBA             0x0100020f (16777743 4,527)
--DBA地址是16777743。

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

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

col    0[2] @8180: 1
col    1[4] @8183: BBBB

--可以发现依旧是旧的信息。name='BBBB'.

SCOTT@book> alter session set events 'immediate trace name set_tsn_p1 level 5';
Session altered.
--注意这里的level 要在ts# 原来基础上+1,为什么我不知道?参考原来的测试:http://blog.itpub.net/267265/viewspace-1659981/

SCOTT@book> ALTER SESSION SET EVENTS 'immediate trace name buffer level 16777743';
Session altered.

--也可以执行ALTER SESSION SET EVENTS 'immediate trace name buffer level 0x0100020f';

Dump of buffer cache at level 10 for tsn=4 rdba=16777743
BH (0x77ff5638) file#: 4 rdba: 0x0100020f (4/527) class: 1 ba: 0x77f3a000
  set: 56 pool: 3 bsz: 8192 bsi: 0 sflg: 2 pwc: 0,15
  dbwrid: 1 obj: 88827 objn: 88827 tsn: 4 afn: 4 hint: f
  hash: [0x783f9170,0x83eee1e0] lru: [0x77ff5860,0x77ff55f0]
  ckptq: [NULL] fileq: [NULL] objq: [0x7c43a348,0x7c43a348] objaq: [0x7c43a338,0x7c43a338]
  st: XCURRENT md: NULL fpin: 'kdswh11: kdst_fetch' tch: 1
  flags: block_written_once redo_since_read
  LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [1]
  buffer tsn: 4 rdba: 0x0100020f (4/527)
  scn: 0x0000.0016875c seq: 0x01 flg: 0x04 tail: 0x875c0601
  frmt: 0x02 chkval: 0x6d86 type: 0x06=trans data
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x0000000077F3A000 to 0x0000000077F3C000
077F3A000 0000A206 0100020F 0016875C 04010000  [........\.......]
077F3A010 00006D86 00000001 00015AFB 001686F3  [.m.......Z......]
077F3A020 00000000 00320002 01000208 00120004  [......2.........]
077F3A030 000002FD 00C0014B 0020011C 00000001  [....K..... .....]
077F3A040 00000000 000D000A 00000A1A 00C00BC6  [................]
077F3A050 001801F2 00008000 001686EF 00000000  [................]
077F3A060 00000000 00010100 0014FFFF 1F791F8D  [..............y.]
077F3A070 00001F79 1F8D0001 00000000 00000000  [y...............]
077F3A080 00000000 00000000 00000000 00000000  [................]
        Repeat 502 times
077F3BFF0 02012C00 0402C102 43434343 875C0601  [.,......CCCC..\.]
Block header dump:  0x0100020f
Object id on Block? Y
seg/obj: 0x15afb  csc: 0x00.1686f3  itc: 2  flg: E  typ: 1 - DATA
     brn: 0  bdba: 0x1000208 ver: 0x01 opc: 0
     inc: 0  exflg: 0

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0004.012.000002fd  0x00c0014b.011c.20  ----    1  fsc 0x0000.00000000
0x02   0x000a.00d.00000a1a  0x00c00bc6.01f2.18  C---    0  scn 0x0000.001686ef
bdba: 0x0100020f
data_block_dump,data header at 0x77f3a064
===============
tsiz: 0x1f98
hsiz: 0x14
pbl: 0x77f3a064
     76543210
flag=--------
ntab=1
nrow=1
frre=-1
fsbo=0x14
fseo=0x1f8d
avsp=0x1f79
tosp=0x1f79
0xe:pti[0]  nrow=1  offs=0
0x12:pri[0] offs=0x1f8d
block_row_dump:
tab 0, row 0, @0x1f8d
tl: 11 fb: --H-FL-- lb: 0x1  cc: 2
col  0: [ 2]  c1 02
col  1: [ 4]  43 43 43 43
end_of_block_dump

BH (0x783f90b8) file#: 4 rdba: 0x0100020f (4/527) class: 1 ba: 0x7839a000
  set: 59 pool: 3 bsz: 8192 bsi: 0 sflg: 2 pwc: 1,15
  dbwrid: 1 obj: 88827 objn: 88827 tsn: 4 afn: 4 hint: f
  hash: [0x783f7910,0x77ff56f0] lru: [0x7b3e5c18,0x783f9070]
  ckptq: [NULL] fileq: [NULL] objq: [NULL] objaq: [NULL]
  st: CR md: NULL tch: 1
  cr: [scn: 0x0.1686c2],[xid: 0xa.d.a1a],[uba: 0xc00bc6.1f2.18],[cls: 0x0.1686c2],[sfl: 0x0],[lc: 0x0.1686c2]
  flags: only_sequential_access
  buffer tsn: 4 rdba: 0x0100020f (4/527)
  scn: 0x0000.001686c3 seq: 0x00 flg: 0x00 tail: 0x86c30600
  frmt: 0x02 chkval: 0x0000 type: 0x06=trans data
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x000000007839A000 to 0x000000007839C000
07839A000 0000A206 0100020F 001686C3 00000000  [................]
07839A010 00000000 00000001 00015AFB 001686C2  [.........Z......]
07839A020 00000000 00320002 01000208 0009000A  [......2.........]
07839A030 00000A19 00C00BC2 001E01F2 00008000  [................]
07839A040 00167F29 00000000 00000000 00000000  [)...............]
07839A050 00000000 00000000 00000000 00000000  [................]
07839A060 00000000 00010100 0014FFFF 1F791F8D  [..............y.]
07839A070 00001F79 1F8D0001 00000000 00000000  [y...............]
07839A080 00000000 00000000 00000000 00000000  [................]
        Repeat 502 times
07839BFF0 02002C00 0402C102 41414141 86C30600  [.,......AAAA....]
Block header dump:  0x0100020f
Object id on Block? Y
seg/obj: 0x15afb  csc: 0x00.1686c2  itc: 2  flg: E  typ: 1 - DATA
     brn: 0  bdba: 0x1000208 ver: 0x01 opc: 0
     inc: 0  exflg: 0

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x000a.009.00000a19  0x00c00bc2.01f2.1e  C---    0  scn 0x0000.00167f29
0x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000
bdba: 0x0100020f
data_block_dump,data header at 0x7839a064
===============
tsiz: 0x1f98
hsiz: 0x14
pbl: 0x7839a064
     76543210
flag=--------
ntab=1
nrow=1
frre=-1
fsbo=0x14
fseo=0x1f8d
avsp=0x1f79
tosp=0x1f79
0xe:pti[0]  nrow=1  offs=0
0x12:pri[0] offs=0x1f8d
block_row_dump:
tab 0, row 0, @0x1f8d
tl: 11 fb: --H-FL-- lb: 0x0  cc: 2
col  0: [ 2]  c1 02
col  1: [ 4]  41 41 41 41
end_of_block_dump

--我这里仅仅截取其中1段,ba: 0x77f3a000,ba: 0x7839a000。这样就可以看到内存中该数据块的信息了。

时间: 2024-08-29 13:07:20

[20151218]未提交事务保存在那里.txt的相关文章

Word文档未即时保存怎么办

  在编辑文档的过程中,由于突然断电致使正在编辑的文档未即时保存.该如何来挽救些数据呢? 修复未即时保存的文档可采用以下几种方法来解决. 方法一:用"文档恢复"功能恢复文档 Word带有自动恢复功能,当应用程序错误突然关闭程序,或系统出现故障突然重启系统时,再次打开Word时,Word会自动分析并处理文件错误,然后尝试恢复数据,并且会将恢复的文件保存下来,这时用户可以根据需要选择对应的Word文档进行保存. 第1步,重新启动电脑后,首先重新启动Word. 第2步,Word将自动激活&q

[20170302]fuzzy保存在那里.txt

[20170302]fuzzy保存在那里.txt --参考链接:http://blog.itpub.net/267265/viewspace-2134551/ --提到fuzzy表示某种状态,正常关闭是NO. --从访问的视图看v$datafile_header,应该这个信息保存在数据文件头,找找具体的位置在那里. 1.环境: SYS@book> @ &r/ver BANNER ---------------------------------------------------------

txt自动保存的方法 txt怎么自动保存

记事本是一个免费的小巧的文本编辑器,由于其占用的系统资源非常小,所以很多人都热衷于用txt来写文章或者编写代码,但是txt有一个巨大的缺陷就是不能自动保存,我们必须借助第三方软件的帮助才能实现自动保存,下面就是具体的方法. 首先在百度上搜索 Autosave Your Edit,找到该软件,下载下来,并安装好.安装的方法非常简单,双击打开安装,然后一直点击next 安装完成以后,你会看到这个对话框,点击[later],意思是以后再注册 打开软件以后,我们先来更改一下界面语言,依次执行:view-

C# 在vs2008里 treeview 保存 和读取 txt或者xml 过程的全代码 还有就是前进 后退 功能

问题描述 求把treeview保存到txt文本文档之中之后下次运行程序会自动加载txt文本中的节点的代码最好是一粘贴就能用的!!还有就是用c#实现前进和后退功能也求代码谢谢大家了 解决方案 解决方案二:该回复于2011-12-19 13:58:25被版主删除解决方案三:思路别人能给,叫别人给你敲代码貌似很少.解决方案四://我例举一个文本框值保存到记事本中然后下次运行程序自动加载进来值if(File.Exists("../../test.txt"))//保存到记事本中{if(!this

[20130425]使用vim编辑没有保存的恢复.txt

今天使用vim编辑一个存储过程的时候,正好接听一个电话,不知道什么回事,点击X,选择"否",导致将近半个小时的工作没有保存下 来. 我冷静下来,想起使用vim会在它的dir目录保存为"原来文件名.swp". 我的vim设置如下: set dir=d:\\temp缺省如果不设置,保存在当前目录. 知道这个就很好办了,使用EasyRecovery.exe恢复工具,恢复这个文件并且放回原来的位置. 再次使用vim打开文件.会提示交换文件 "d:\temp\xxx

sqlserver中查找长时间未提交事务

  无论是有意无意,如果事务在数据库中保持打开,则它会阻塞其他进程对修改后的数据进行操作.同样,对事务日志进行备份也只会截断不活动事务的那部分事务日志,所以打开的事务会导致日志变多(甚至达到物理限制),直到事务被提交或回滚. 要找到最早的活动事务,可以使用DBCC OPENTRAN命令. 给出一个示例: 代码如下: CREATE TABLE T_Product(PKID int, PName Nvarchar(50)); GO BEGIN TRAN INSERT INTO T_Product V

如何使用FSO组件截取多个变量并保存为TXT文件

问题描述 程序为ASP语言,如我需要截取某个页面中的username,和userpass,并保存为1.txt,且如有多个输入,就保存多行,格式为username1userpass1username2userpass2username3userpass3...................代码怎么写,请赐教 解决方案 解决方案二:参考:<%Setfso=Server.CreateObject("Scripting.FileSystemObject")txt=server.mapp

Mac系统下.txt格式的纯文本怎么保存?

  .txt是个用途广泛的纯文本格式,在ms系统上经常用到.然而Mac新手发现,在骄傲的苹果系统上,保存.txt似乎不太可能,它只支持.rtf的自家格式.其实,Mac做的很好,你可以保存为.txt的纯文本格式,而不必强行冒着文本乱码的风险修改后缀. 1.打开文本编辑的app 2.选择新建文本 3.然后按快捷键shift+command+T,让文本成为纯文本格式 4.或者在顶部菜单选择格式一项,保存为纯文本格式,如果想保存为多信息文本,重复此快捷键 5.最后按command+s保存文档 6.保存之

VB打开与保存txt文件的方法_vb

本文实例讲述了VB打开与保存txt文件的方法.分享给大家供大家参考.具体如下: Private Sub cmdsave_Click() Dim filelocation As String ' loads save as box commondialog1.ShowSave filelocation = commondialog1.FileName ' append saves over file if it assists Open filelocation For Append As #1