Oracle 数据块详解(block)
文章目录1 概述2 组成3 示例附件 - 数据块结构信息1 概述1. 作用(1) 屏蔽了不同 '操作系统(Windows、Linux、Unix)的差异',全部数据操作采用对 Oracle 块的操作2. 特性(1) 数据块 'block' 是 Oracle '最小的存储单元',也是 '最小的 I/O 单元'(2) 目前有五种大小:2KB、4KB、8KB(默认)、16KB、32KB -- 必须是倍数增
·
1 概述
1. 作用
(1) 屏蔽了不同 '操作系统(Windows、Linux、Unix)的差异',全部数据操作采用对 Oracle 块的操作
2. 特性
(1) 数据块 'block' 是 Oracle '最小的存储单元',也是 '最小的 I/O 单元'
(2) 目前有五种大小:2KB、4KB、8KB(默认)、16KB、32KB -- 必须是倍数增加
(3) 不可更改,除非重新创建数据库
3. 常用命令
(1) show parameter db_block_size -- 数据块大小 8192 = 8 * 1024
(2) show parameter db_cache_size -- 缓存
(3) show parameter db_file_multiblock_read_count; -- 一次从物理文件中读取数据块的数量
示例:(文件、块、块地址等信息)
select t.*,
rowid,
dbms_rowid.rowid_relative_fno(rowid) 文件,
dbms_rowid.rowid_block_number(rowid) 块,
-- dbms_utility.make_data_block_address('文件', '块') 数据块地址,
-- dbms_utility.data_block_address_file('数据块地址') 文件,
-- dbms_utility.data_block_address_block('数据块地址') 块,
rownum,
dbms_rowid.rowid_row_number(rowid) row_num, -- 等同 rownum
dbms_rowid.rowid_object(rowid) 对象 -- dba_objects.object_id
from scott.emp t;
2 组成
概述说明:
1. "块头": 存放 '块' 的基本信息,如:'块的物理地址',块所属类型('数据段' 还是 '索引段')
(1) rdba: 0x03000086 (12/134) -- block_address=0x03000086 ,file=12,block = 134
(2) type: 0x06 -- 数据段
2. "表目录": 存放表的信息
(1) ntab=1 -- 表数:这个块的数据在 1 张表里面
3. "行目录":存放行的信息,如:行的地址
(1) nrow=3 -- 行数:这个表有 3 行数据
4. "行数据": 真正存放表数据和索引数据的地方
(1) col 0: [ 2] c1 02 -- 1 (16 进制 -> 10 进制)
5. "空闲空间": 可用的,用于新行的插入和已存在的列更新
(1) avsp=0x1f5f -- avaliable space for new entries (空闲空间)
(2) tosp=0x1f5f -- total space (最终空闲空间))
3 示例
-- 为了更好观察数据块信息,请在 pl/sql 中按下列操作
1. 创建表空间
create tablespace BLOCKTEST -- 大小写敏感
datafile 'E:\TableSpace\BLOCKTEST.dbf' size 10m;
2. 创建用户并授权
create user blocktest identified by blocktest
default tablespace blocktest;
grant dba to blocktest;
3. 登录 blocktest,创建表并插入数据
create table block_test(
tno number(3),
tname varchar2(30)
);
insert into block_test(tno, tname) values(1, '瑶瑶');
insert into block_test(tno, tname) values(2, '优优');
insert into block_test(tno, tname) values(3, '倩倩');
commit;
4. 查询数据所在的文件号和块号
select t.tno,
t.tname,
dbms_rowid.rowid_relative_fno(rowid) file#,
dbms_rowid.rowid_block_number(rowid) block#
from block_test t;
TNO TNAME FILE# BLOCK#
1 瑶瑶 12 134
2 优优 12 134
3 倩倩 12 134
-- 可选操作
-- alter system checkpoint; -- 手动发生一个检查点,使上述数据写入到 "数据文件"
-- select * from dba_data_files t where t.file_id = 12; -- 查询 "数据文件"
5. 转储 12 号文件 134 号块
alter system dump datafile 12 block 134;
6. 找到转储的文件(命令行)
SQL> show parameter dump
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
background_core_dump string partial
background_dump_dest string f:\app\yoyo\diag\rdbms\orcl\orcl\trace
我本地路径:
7. 分析数据块结构 -- 内容很多,以下介绍主要的,全部的见附件
(1) "块头":
Block header dump: 0x03000086 -- [4 块头]
Object id on Block? Y
seg/obj: 0x1256e csc: 0x00.1aa42f itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x3000080 ver: 0x01 opc: 0
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0001.020.00000472 0x00c00b19.0120.30 --U- 3 fsc 0x0000.001aa431
0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc
-- Itl 事务槽
(2) "用户数据" -- 16 进制
block_row_dump: -- [6 用户数据]
tab 0, row 0, @0x1f8d
tl: 11 fb: --H-FL-- lb: 0x1 cc: 2
col 0: [ 2] c1 02
col 1: [ 4] d1 fe d1 fe
-- select dump(t.tno, 16) tno, dump(t.tname, 16) tname from block_test t where t.tno = 1;
-- TNO TNAME
-- Typ=2 Len=2: c1,2 Typ=1 Len=4: d1,fe,d1,fe
附件 - 数据块结构信息
Trace file f:\app\yoyo\diag\rdbms\orcl\orcl\trace\orcl_ora_4444.trc
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Windows NT Version V6.2
CPU : 4 - type 8664, 2 Physical Cores
Process Affinity : 0x0x0000000000000000
Memory (Avail/Total): Ph:2428M/7767M, Ph+PgF:4489M/12040M
Instance name: orcl
Redo thread mounted by this instance: 1
Oracle process number: 45
Windows thread id: 4444, image: ORACLE.EXE (SHAD)
*** 2020-11-19 22:00:38.492
*** SESSION ID:(71.7009) 2020-11-19 22:00:38.492
*** CLIENT ID:() 2020-11-19 22:00:38.492
*** SERVICE NAME:(orcl.168.0.102) 2020-11-19 22:00:38.492
*** MODULE NAME:(PL/SQL Developer) 2020-11-19 22:00:38.492
*** ACTION NAME:(命令窗口 - 新建) 2020-11-19 22:00:38.492
Start dump data blocks tsn: 18 file#:12 minblk 134 maxblk 134
Block dump from cache: -- [1 块,缓存]
Dump of buffer cache at level 4 for tsn=18, rdba=50331782
BH (0x00007FFC03FE6B38) file#: 12 rdba: 0x03000086 (12/134) class: 1 ba: 0x00007FFC03D8E000
set: 9 pool 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 37,28
dbwrid: 0 obj: 75118 objn: 75118 tsn: 18 afn: 12 hint: f
hash: [0x00007FFC32FF1228,0x00007FFC62B0EAA8] lru: [0x00007FFC03FE6AF0,0x00007FFC03FF2690]
ckptq: [NULL] fileq: [NULL] objq: [0x00007FFC03FE6B18,0x00007FFC5B48ADD0]
st: XCURRENT md: NULL tch: 7
flags: block_written_once redo_since_read
LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [1]
cr pin refcnt: 0 sh pin refcnt: 0
Block dump from disk: -- [2 磁盘]
buffer tsn: 18 rdba: 0x03000086 (12/134)
scn: 0x0000.001aa431 seq: 0x01 flg: 0x06 tail: 0xa4310601
frmt: 0x02 chkval: 0xafc6 type: 0x06=trans data
Hex dump of block: st=0, typ_found=1 -- [3 块,16 进制]
Dump of memory from 0x0000000022892400 to 0x0000000022894400
022892400 0000A206 03000086 001AA431 06010000 [........1.......]
022892410 0000AFC6 00000001 0001256E 001AA42F [........n%../...]
022892420 00000000 0032F802 03000080 00200001 [......2....... .]
022892430 00000472 00C00B19 00300120 00002003 [r....... .0.. ..]
022892440 001AA431 00000000 00000000 00000000 [1...............]
022892450 00000000 00000000 00000000 00000000 [................]
022892460 00000000 00030100 0018FFFF 1F5F1F77 [............w._.]
022892470 00001F5F 1F8D0003 1F771F82 00000000 [_.........w.....]
022892480 00000000 00000000 00000000 00000000 [................]
Repeat 500 times
0228943D0 00000000 00000000 2C000000 C1020201 [...........,....]
0228943E0 BBD90404 012CBBD9 03C10202 D3C5D304 [......,.........]
0228943F0 02012CC5 0402C102 FED1FED1 A4310601 [.,............1.]
Block header dump: 0x03000086 -- [4 块头]
Object id on Block? Y
seg/obj: 0x1256e csc: 0x00.1aa42f itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x3000080 ver: 0x01 opc: 0
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0001.020.00000472 0x00c00b19.0120.30 --U- 3 fsc 0x0000.001aa431
0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000
bdba: 0x03000086
data_block_dump,data header at 0x22892464 -- [5 用户数据头]
===============
tsiz: 0x1f98 -- top of size
hsiz: 0x18 -- header size
pbl: 0x22892464
76543210
flag=--------
ntab=1
nrow=3
frre=-1
fsbo=0x18 -- free space begin offset
fseo=0x1f77 -- free space end offset
avsp=0x1f5f -- avaliable space for new entries (空闲空间)
tosp=0x1f5f -- total space (最终空闲空间)
0xe:pti[0] nrow=3 offs=0
0x12:pri[0] offs=0x1f8d
0x14:pri[1] offs=0x1f82
0x16:pri[2] offs=0x1f77
block_row_dump: -- [6 用户数据]
tab 0, row 0, @0x1f8d
tl: 11 fb: --H-FL-- lb: 0x1 cc: 2
col 0: [ 2] c1 02
col 1: [ 4] d1 fe d1 fe
tab 0, row 1, @0x1f82
tl: 11 fb: --H-FL-- lb: 0x1 cc: 2
col 0: [ 2] c1 03
col 1: [ 4] d3 c5 d3 c5
tab 0, row 2, @0x1f77
tl: 11 fb: --H-FL-- lb: 0x1 cc: 2
col 0: [ 2] c1 04
col 1: [ 4] d9 bb d9 bb
end_of_block_dump
End dump data blocks tsn: 18 file#: 12 minblk 134 maxblk 134
更多推荐
已为社区贡献1条内容
所有评论(0)