视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
数据文件头块保留大小、ROWID、数据文件最大大小等数据库的
2020-11-09 07:22:47 责编:小采
文档

学习自EYGLE循序渐进ORACLE及官方文档。 本地管理表空间中设置不同大小的db_block_size时数据文件头保留空间对应如下: db_block_size=2KB,文件头保留32个数据块,即KB。 db_block_size=4KB,文件头保留16个数据块,即KB。 db_block_size=8KB,文件头保

学习自EYGLE循序渐进ORACLE及官方文档。

本地管理表空间中设置不同大小的db_block_size时数据文件头保留空间对应如下:

db_block_size=2KB,文件头保留32个数据块,即KB。
db_block_size=4KB,文件头保留16个数据块,即KB。
db_block_size=8KB,文件头保留8个数据块,即KB。
db_block_size=16KB,文件头保留4个数据块,即KB。
db_block_size=32KB,文件头保留4个数据块,即128KB。
默认是db_block_size=8KB,此时 ORACLE数据文件头的8个数据块作用是:
数据块1和2记录数据文件头信息。3-8用于记录extent-区间的位图信息 --11G中要保留到128个块???
################################

Oracle数据库中的数据文件的最大数量是有限的(通常为K文件)。--来自官方文档

表空间支持的最大数据文件大小的算法:

分两种情况:smallfile tablespace与bigfile tablespace

smallfile tablespace的ROWID

记录存储所在数据文件(file#),所属数据库对象,所在数据块中的行号,这些属性合并起来构成了ORACLE ROWID.
ORACLE ROWID分为物理ROWID,逻辑ROWID。
索引组织表(IOTs)使用逻辑ROWID,其它类型的表使用物理ROWID。
ROWID可以惟一标识一条记录,所以索引中存储了ROWID的值,通过访问索引,得到ROWID,再定位到记录。

ROWID采用Base编码,共18位代表80位二进制数,占用10个字节。
每组字符代表不同的含义,18位最大寻址空间“32G”。
对一条行ID的解析:OOOOOO.FFF.BBBBBB.RRR --其中.是为了方便观看手动增加
OOOOOO: 1-6位:对象id
FFF: 7-9位:文件id
BBBBBB: 10-15位:块id
RRR: 16-18位:行id
对于Base编码,共18位代表80位二进制数,计算方法是:
32bit obj# + 10bit file# + 22bit block# + 16bit row#
通过ROWID计算数据块的相关信息,详见:http://blog.csdn.net/q947817003/article/details/11490051
根据small file tablespace的ROWID,计算出表空间、数据文件、BOOCK中行最大数如下:
根据ROWID的构成: ---注:2^10这种写法代表2的10次方,等于1024.
每个表空间最大文件数: 2^10 1024 ,去掉全0和全1 通常1022个 ---实验测试出是1023个,见:数据文件个数大于1024时ORACLE数据文件FILE_ID及RELATIVE_FNO的变化示例
每数据文件最大数据块数量:filesize=block_size*2^22 ,也就是4M个ORACLE BLOCK

每个BLOKC中行数是: 2^16 65536,也就是每个BLOCK最多65536条记录

每个数据库最多65536个-K个数据文件(实验测试出是65534----官方文档上是65533-http://docs.oracle.com/cd/B19306_01/server.102/b14237/limits002.htm#i287915),最多支持K个表空间,因为每个表空间最少需要包含一个数据文件。引出新问题:如果数据库有大于1024个数据文件,ORACLE如何通过ROWID定位数据文件呢? --详见:数据文件个数大于1024时ORACLE数据文件FILE_ID及RELATIVE_FNO的变化示例

更详细的数据库见官方文档:http://docs.oracle.com/cd/B19306_01/server.102/b14237/limits.htm#REFRN004

smallfile tablespace设置不同大小的db_block_size时数据文件允许的最大大小

db_block_size=2KB,2KB*4M=8192M 8G
db_block_size=4KB,4KB*4M=16384M 16G
db_block_size=8KB,8KB*4M=32768M 32G 8*1024*4M=8*4G=32G
db_block_size=16KB,16KB*4M=65536M G
db_block_size=32KB,32KB*4M=131072M 128G
#########################################################

BIGFILE表空间的ROWID

因为大文件表空间只能包含一个文件,所以ROWID中不需要file#-文件ID。
大文件表空间的ROWID格式为:
OOOOOO.LLLLLLLLL.RRR
OOOOOO: 1-6位:对象id
LLLLLLLLL: 7-15位:块id
RRR: 16-18位:行id
L代表BLOCK号,代替了小文件表空间中ROWID中的file# + block#的位置.
这样大文件表空间的数据文件支持的BLOCK数量最多是:2bit. 2^32=4G.

bigfile tablespace设置不同大小的db_block_size时数据文件允许的最大大小

db_block_size=2KB,2KB*4G= 8T
db_block_size=4KB,4KB*4G= 16T
db_block_size=8KB,8KB*4G= 32T 8*1024*4G=8*4TB=32TB
db_block_size=16KB,16KB*4G= T
db_block_size=32KB,32KB*4G=128TB

下载本文
显示全文
专题