[20150518]关于块转储问题2.txt

[20150518]关于块转储问题2.txt

--我自己在学习oracle有时候使用块转储时,发现转储的内容跟我自己的想象不一样.
--正好前一阵子ITPUB有人也遇到类似的问题,自己做一个简单探究,参考链接如下:

http://blog.itpub.net/267265/viewspace-1655497/

-- 我前面提到块转储alter system dump datafile 4 block 1523;,仅仅从数据文件读取.无论在何种情况下.
-- 昨天看了相关文档,可以使用如下:

ALTER SESSION SET EVENTS 'immediate trace name buffer level n';

-- n为某个指定block的rdba,该命令可以转储某个block在buffer中的所有版本。

--自己做一个测试:

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> select rowid,depty.* from depty ;
ROWID                  DEPTNO DNAME          LOC
------------------ ---------- -------------- -------------
AABKCeAAEAAAAXzAAA         10 ACCOUNTING     NEW YORK
AABKCeAAEAAAAXzAAB         20 RESEARCH       DALLAS1
AABKCeAAEAAAAXzAAC         30 SALES          CHICAGO
AABKCeAAEAAAAXzAAD         40 OPERATIONS     BOSTON
AABKCeAAEAAAAXzAAE         50 MARKETING      LONDON

SCOTT@test> @ lookup_rowid AABKCeAAEAAAAXzAAE
    OBJECT       FILE      BLOCK        ROW DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- ----------------------------------------
    303262          4       1523          4 4,1523               alter system dump datafile 4 block 1523

BBED> set dba 4,1523
        DBA             0x010005f3 (16778739 4,1523)

$ cat convrdba.sql
select
TO_CHAR (dbms_utility.make_data_block_address(&1,&2), 'xxxxxxxxxxxxx') rdba16,
dbms_utility.make_data_block_address(&&1,&&2) rdba
from dual;

SCOTT@test> @convrdba.sql 4 1523
RDBA16               RDBA
-------------- ----------
       10005f3   16778739

--可以知道rdba地址是16778739.

SCOTT@test> update depty set loc=lower(loc) where deptno=50 ;
1 row updated.
--不提交.

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

SCOTT@test> ALTER SESSION SET EVENTS 'immediate trace name buffer level 0x010005f3';
Session altered.

WARNING: set_tsn_p1 event has not been called.
Using stale value for tablespace number - 0
Dump of buffer cache at level 10 for tsn=0 rdba=16778739

*** 2015-05-18 10:34:51.437
WARNING: set_tsn_p1 event has not been called.
Using stale value for tablespace number - 0
Dump of buffer cache at level 10 for tsn=0 rdba=16778739

--tsn=0  不对啊,google看看相关文档.

SCOTT@test> select TS#,name from sys.ts$ where name='USERS';
       TS# NAME
---------- --------------------
         4 USERS

SCOTT@test> alter session set events 'immediate trace name set_tsn_p1 level 4';
Session altered.

SCOTT@test> ALTER SESSION SET EVENTS 'immediate trace name buffer level 0x010005f3';
Session altered.
--
*** 2015-05-18 10:40:19.911
Dump of buffer cache at level 10 for tsn=3 rdba=16778739
---tsn还给加1.

SCOTT@test> alter session set events 'immediate trace name set_tsn_p1 level 5';
Session altered.

SCOTT@test> ALTER SESSION SET EVENTS 'immediate trace name buffer level 0x010005f3';
Session altered.

        Repeat 493 times
099069F80 00000000 00000000 0203022C 4D0933C1  [........,....3.M]
099069F90 454B5241 474E4954 6E6F6C06 2C6E6F64  [ARKETING.london,]
099069FA0 C1020300 504F0A29 54415245 534E4F49  [....).OPERATIONS]
099069FB0 534F4206 2C4E4F54 C1020300 4153051F  [.BOSTON,......SA]
099069FC0 0753454C 43494843 2C4F4741 C1020300  [LES.CHICAGO,....]
099069FD0 45520815 52414553 44074843 414C4C41  [..RESEARCH.DALLA]
099069FE0 002C3153 0BC10203 4343410A 544E554F  [S1,......ACCOUNT]
099069FF0 08474E49 2057454E 4B524F59 D8E30601  [ING.NEW YORK....]
Block header dump:  0x010005f3
Object id on Block? Y
seg/obj: 0x4a09e  csc: 0x02.f479d8c4  itc: 3  flg: E  typ: 1 - DATA
     brn: 0  bdba: 0x10005f0 ver: 0x01 opc: 0
     inc: 0  exflg: 0

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0003.01c.00007e90  0x00c005e1.26ea.26  C---    0  scn 0x0002.f479d6b4
0x02   0x0003.016.00007e85  0x00c005e3.26ea.05  ----    1  fsc 0x0000.00000000
0x03   0x0006.01e.00008d29  0x00c03b78.272f.01  C---    0  scn 0x0002.f4739d4d
bdba: 0x010005f3
data_block_dump,data header at 0x9906807c
===============
tsiz: 0x1f80
hsiz: 0x1c
pbl: 0x9906807c
     76543210
flag=--------
ntab=1
nrow=5
frre=-1
fsbo=0x1c
fseo=0x1f0c
avsp=0x1ef0
tosp=0x1ef0
0xe:pti[0]  nrow=5  offs=0
0x12:pri[0] offs=0x1f66
0x14:pri[1] offs=0x1f4f
0x16:pri[2] offs=0x1f3b
0x18:pri[3] offs=0x1f23
0x1a:pri[4] offs=0x1f0c
block_row_dump:
tab 0, row 0, @0x1f66
tl: 26 fb: --H-FL-- lb: 0x0  cc: 3
col  0: [ 2]  c1 0b
col  1: [10]  41 43 43 4f 55 4e 54 49 4e 47
col  2: [ 8]  4e 45 57 20 59 4f 52 4b
tab 0, row 1, @0x1f4f
tl: 23 fb: --H-FL-- lb: 0x0  cc: 3
col  0: [ 2]  c1 15
col  1: [ 8]  52 45 53 45 41 52 43 48
col  2: [ 7]  44 41 4c 4c 41 53 31
tab 0, row 2, @0x1f3b
tl: 20 fb: --H-FL-- lb: 0x0  cc: 3
col  0: [ 2]  c1 1f
col  1: [ 5]  53 41 4c 45 53
col  2: [ 7]  43 48 49 43 41 47 4f
tab 0, row 3, @0x1f23
tl: 24 fb: --H-FL-- lb: 0x0  cc: 3
col  0: [ 2]  c1 29
col  1: [10]  4f 50 45 52 41 54 49 4f 4e 53
col  2: [ 6]  42 4f 53 54 4f 4e
tab 0, row 4, @0x1f0c
tl: 23 fb: --H-FL-- lb: 0x2  cc: 3
col  0: [ 2]  c1 33
col  1: [ 9]  4d 41 52 4b 45 54 49 4e 47
col  2: [ 6]  6c 6f 6e 64 6f 6e
end_of_block_dump

--如果要了解块在内存的情况,使用如下:

alter session set events 'immediate trace name set_tsn_p1 level m';
ALTER SESSION SET EVENTS 'immediate trace name buffer level rdba';

--m = ts#+1, rdba是块地址.

时间: 2024-09-18 12:56:18

[20150518]关于块转储问题2.txt的相关文章

[20150515]关于块转储问题.txt

[20150515]关于块转储问题.txt --我自己在学习oracle有时候使用块转储时,发现转储的内容跟我自己的想象不一样. --正好前一阵子ITPUB有人也遇到类似的问题,自己做一个简单探究: 1.建立测试环境: SCOTT@test> @ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- -----------------------

[20111223]索引键值在B tree索引块中的顺序.txt

[20111223]索引键值在B tree索引块中的顺序.txt 参考链接:http://www.adellera.it/blog/2009/05/24/order-keys-inside-index-blocks/ 自己为了加强理解重复一下对方的测试! 1.建立测试表以及索引 SQL> select * from v$version; BANNER -------------------------------------------------------------------------

数据块转储及RDBA的转换

数据|转换 数据块转储及RDBA的转换 原文链接: http://www.eygle.com/internal/How_to_dump_datablock.htm Tuesday, 2004-08-31 17:51 Eygle  很多时候我们在进行进一步研究时需要转储(dump)Oracle的数据块,以研究其内容,Oracle提供了很好的方式,我们通过以下例子简单说明一下: [oracle@jumper udump]$ sqlplus "/ as sysdba"SQL*Plus: Re

[20170611]关于数据块地址的计算.txt

[20170611]关于数据块地址的计算.txt --//如果数据库出现一些问题,会在alert或者跟踪文件,或者屏幕出现一些错误提示.例如: ORA-00600: internal error code, arguments: [2662], [3], [392066208], [3], [392066212], [4194825], [], [], [], [], [], [] ORA-600 [2662] [a] [b] {c} [d] [e] Arg [a] Current SCN WR

[20150130]块清理(block cleanout).txt

[20150130]块清理(block cleanout).txt 1.建立测试环境: create table t2 as select * from dept ; SCOTT@test> select rowid,t2.* from t2; ROWID                    DEPTNO DNAME          LOC ------------------ ------------ -------------- ------------- AAAOQdAAEAAAAGG

[20121016]坏块处理以及数据恢复.txt

[20121016]坏块处理以及数据恢复.txt 如果产生坏块,在没有备份的情况下,如何最大程度的恢复信息,减少损失. SQL> select * from v$version ; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Produ

简介ORACLE数据块转储及RDBA的转换

很多时候我们在进行进一步研究时需要转储(dump)Oracle的数据块,以研究其内容,Oracle提供了很好的方式,我们通过以下例子简单说明一下: [oracle@jumper udump]$ sqlplus "/ as sysdba" SQL*Plus: Release 9.2.0.3.0 - Production on Tue Aug 31 17:01:27 2004 Copyright (c) 1982, 2002, Oracle Corporation.  All rights

[20150112]系统管理表空间的疑问.txt

[20150112]系统管理表空间的疑问.txt http://www.itpub.net/thread-1903121-1-1.html 10g下每个数据文件3-8块为位图区. 6个块=48K(假设数据块大小8k) 48*8*1024=393216 区 对于系统表空间管理.1区=64K. SCOTT@test> set numw 20 SCOTT@test> select 48*8*1024*64*1024 from dual;    48*8*1024*64*1024 ----------

[20150910]关于对象级检查点.txt

[20150910]关于对象级检查点.txt --oracle从8i以后基本使用增量检查点取代原来的检查点模式,但是如果一个对象表被drop,truncate时也要将这些脏块写文件. --这个叫Object level Checkpoint,如何验证这个过程,实际上很简单仅仅需要检查v$bh或者x$bh视图,或者转储脏块看看里面 --的内容是否存在变化,来验证这个过程,还是通过例子来说明: --我个人喜欢使用bbed观察,效果与块转储一直. 1.建立测试环境: SCOTT@test> @ver1