Oracle ROWID详解
Oracle ROWID详解
1.ROWID定义
ROWID:数据库中行的全局唯一地址
对于数据中的每一行,rowid伪列返回行的地址。rowid值主要包含以下信息:
- 对象的数据对象编号
- 该行所在的数据文件中的数据块
- 该行中数据块的位置(第一行是0)
- 数据行所在的数据文件(第一个文件是1)。该文件编号是相对于表空间。
通常来说,一个rowid值唯一标识数据中的一行。然而,存储在同一聚簇中不同的表可以有相同的rowid。
Oracle rowid
Oracle入门基础教程:rowid详解
Oracle 中ROWNUM用法总结,ROWNUM 与 rowid 区别
rowid走索引之嫌疑犯抓获
Oracle利用rownum和rowid分页
2.扩展ROWID
从Oracle 8i开始使用扩展rowid标识行物理地址
扩展rowid使用base64编码行的物理地址,编码字符包含A-Z, a-z, 0-9, +,
和/。
扩展rowid由四部分组成:OOOOOOOFFFBBBBBBRRR:
其中:
- OOOOOO:数据对象编号(6位显示)
- FFF:相关数据文件编号(3位显示)
- BBBBBB:数据块编号(6位显示)
- RRR:数据块中行编号(3位显示)
3.受限ROWID
为了兼容Oracle8i以前的应用使用受限rowid标识行物理地址
受限rowid使用二进制标识行的物理地址,当使用SQL*Plus查询时,二进制被转换为VARCHAR2/十六进制显示。
受限rowid有三部分组成:BBBBBB.RRRR.FFFF(block.row.file):
- BBBBBB:数据库块编号(6位显示)
- RRRR:数据块找中行编号(4位显示)
- FFFF:数据文件编号(4位显示)
4.ROWID内部存储
对于内部ROWID存储结构,扩展ROWID在大多数平台上采用10个字节存储,受限ROWID6个字节存储。具体规则如下:
- 数据对象编号-----32bit
- 数据文件编号------10bit
- 数据块编号--------22bit
- 数据块中行编号----16bit
Oracle 8i以前,rowid占用6个字节空间,分别是22bit的block#,16bit的row#,10bit的file#。
从Oracle 8i开始,rowid占用10个字节空间,分别是32bit的object#,10bit的rfile#,22bit的block#,16bit的row#。新增了32bit的object#。受限rowid的file#t基于整个数据库,扩展rowid的rfile#基于表空间。
5.base 64编码
索引 |
对应字符 |
索引 |
对应字符 |
索引 |
对应字符 |
索引 |
对应字符 |
0 |
A |
17 |
R |
34 |
i |
51 |
z |
1 |
B |
18 |
S |
35 |
l |
52 |
0 |
2 |
C |
19 |
T |
36 |
k |
53 |
1 |
3 |
D |
20 |
U |
37 |
l |
54 |
2 |
4 |
E |
21 |
V |
38 |
m |
55 |
3 |
5 |
F |
22 |
W |
39 |
n |
56 |
4 |
6 |
G |
23 |
X |
40 |
o |
57 |
5 |
7 |
H |
24 |
Y |
41 |
p |
58 |
6 |
8 |
I |
25 |
Z |
42 |
q |
59 |
7 |
9 |
J |
26 |
a |
43 |
r |
60 |
8 |
10 |
K |
27 |
b |
44 |
s |
61 |
9 |
11 |
L |
28 |
c |
45 |
t |
62 |
+ |
12 |
M |
29 |
d |
46 |
u |
63 |
/ |
13 |
N |
30 |
e |
47 |
v |
||
14 |
O |
31 |
f |
48 |
w |
||
15 |
P |
32 |
g |
49 |
x |
||
16 |
Q |
33 |
h |
50 |
y |
更多详情见请继续阅读下一页的精彩内容:
|
评论暂时关闭