1 背景

Vage大师的一段话。

还有一个问题,不知道大家有没考虑到。这个问题涉及统一区大小表空间的位图块。每个二进制位对应一个区的使用情况,这是没问题的,但系统管理区大小呢?就比如刚才创建的TABLE_LHB1表,前16个区大小为64KB,之后的区大小为1MB。区的大小不同,如何用二进制位来反映区的使用情况呢?

Oracle的处理方法是这样的,以64KB(也就是8个块)为准,每个二进制位对应64KB。1MB的区,对应16个二进制位。每分配一个1MB的区,Oracle将对应的16个二进制位(也就是两个字节)设置为1。释放一个区也同样,将16个二进制位设置为0。这样就解决了区大小不统一的问题,Oracle的解决方法还是很巧妙的!

2 验证

2.1 环境信息

SYS@zkm1> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

2.2 创建表空间tbs1

SYS@zkm1> drop tablespace tbs1 including contents and datafiles;

Tablespace dropped.

SYS@zkm1> create tablespace tbs1 datafile '+arch' size 1g autoextend on;

Tablespace created.

2.3 创建表段并拓展至16个区

SYS@zkm1> create table zkm.test as select rownum id from dual where rownum=1;

Table created.

SYS@zkm1> select SEGMENT_NAME,EXTENT_ID,FILE_ID,BLOCK_ID,BYTES,BLOCKS from dba_extents where owner='ZKM' and SEGMENT_NAME like 'TEST%';

SEGMENT_NAME     EXTENT_ID    FILE_ID   BLOCK_ID      BYTES     BLOCKS
--------------- ---------- ---------- ---------- ---------- ----------
TEST 0 6 128 65536 8 SYS@zkm1> alter table zkm.test allocate extent (size 960k); Table altered. SYS@zkm1> select SEGMENT_NAME,EXTENT_ID,FILE_ID,BLOCK_ID,BYTES,BLOCKS from dba_extents where owner='ZKM' and SEGMENT_NAME like 'TEST%'; SEGMENT_NAME EXTENT_ID FILE_ID BLOCK_ID BYTES BLOCKS
--------------- ---------- ---------- ---------- ---------- ----------
TEST 0 6 128 65536 8
TEST 1 6 136 65536 8
TEST 2 6 144 65536 8
TEST 3 6 152 65536 8
TEST 4 6 160 65536 8
TEST 5 6 168 65536 8
TEST 6 6 176 65536 8
TEST 7 6 184 65536 8
TEST 8 6 192 65536 8
TEST 9 6 200 65536 8
TEST 10 6 208 65536 8 SEGMENT_NAME EXTENT_ID FILE_ID BLOCK_ID BYTES BLOCKS
--------------- ---------- ---------- ---------- ---------- ----------
TEST 11 6 216 65536 8
TEST 12 6 224 65536 8
TEST 13 6 232 65536 8
TEST 14 6 240 65536 8
TEST 15 6 248 65536 8 16 rows selected.

2.4 查看3号位图块信息

SYS@zkm1> select value from v$diag_info where name like 'De%';

VALUE
--------------------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/zkm/zkm1/trace/zkm1_ora_128094.trc SYS@zkm1> exec dbms_space_admin.tablespace_dump_bitmaps('TBS1'); PL/SQL procedure successfully completed.
/////zkm1_ora_128094.trc文件信息
Header Control:
RelFno: 6, Unit: 8, Size: 131072, Flag: 9
AutoExtend: YES, Increment: 12800, MaxSize: 4194302
Initial Area: 126, Tail: 131071, First: 16, Free: 16352
Deallocation scn: 3.0
Header Opcode:
Save: No Pending Op
File Space Bitmap Block:
BitMap Control:
RelFno: 6, BeginBlock: 128, Flag: 0, First: 16, Free: 63472
FFFF000000000000 0000000000000000 0000000000000000 0000000000000000
0000000000000000 0000000000000000 0000000000000000 0000000000000000
...省略...

其中,FFFF即为1111 1111 1111 1111,刚好16个区。

接下去16号区(第17个),区有128个块,大小刚好为1M。按照Vage的说法,每个二进制位对应64KB(0-15号区每个区大小均为64K,所以16个二进制位即可),那么第16号区(第17个)大小位1M,需要1M*1024/64KB=16个二进制位。

那样,预计拓展到16号区(第17个)之后,会出现FFFFFFFF。

2.5 拓展16号区

SYS@zkm1> alter table zkm.test allocate extent (size 1k);

Table altered.

SYS@zkm1> select SEGMENT_NAME,EXTENT_ID,FILE_ID,BLOCK_ID,BYTES,BLOCKS from dba_extents where owner='ZKM' and SEGMENT_NAME like 'TEST%';

SEGMENT_NAME     EXTENT_ID    FILE_ID   BLOCK_ID      BYTES     BLOCKS
--------------- ---------- ---------- ---------- ---------- ----------
TEST 0 6 128 65536 8
TEST 1 6 136 65536 8
TEST 2 6 144 65536 8
TEST 3 6 152 65536 8
TEST 4 6 160 65536 8
TEST 5 6 168 65536 8
TEST 6 6 176 65536 8
TEST 7 6 184 65536 8
TEST 8 6 192 65536 8
TEST 9 6 200 65536 8
TEST 10 6 208 65536 8 SEGMENT_NAME EXTENT_ID FILE_ID BLOCK_ID BYTES BLOCKS
--------------- ---------- ---------- ---------- ---------- ----------
TEST 11 6 216 65536 8
TEST 12 6 224 65536 8
TEST 13 6 232 65536 8
TEST 14 6 240 65536 8
TEST 15 6 248 65536 8
TEST 16 6 256 1048576 128 17 rows selected.

2.6 查看3号位图块信息


SYS@zkm1> select value from v$diag_info where name like 'De%'; VALUE
--------------------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/zkm/zkm1/trace/zkm1_ora_362.trc SYS@zkm1> exec dbms_space_admin.tablespace_dump_bitmaps('TBS1'); PL/SQL procedure successfully completed.
/////zkm1_ora_362.trc文件信息
Header Control:
RelFno: 6, Unit: 8, Size: 131072, Flag: 9
AutoExtend: YES, Increment: 12800, MaxSize: 4194302
Initial Area: 126, Tail: 131071, First: 32, Free: 16336
Deallocation scn: 3.0
Header Opcode:
Save: No Pending Op
File Space Bitmap Block:
BitMap Control:
RelFno: 6, BeginBlock: 128, Flag: 0, First: 32, Free: 63456
FFFFFFFF00000000 0000000000000000 0000000000000000 0000000000000000
0000000000000000 0000000000000000 0000000000000000 0000000000000000
...省略...

正如预测那样子。

关于位图数据位和系统管理区大小-P6的更多相关文章

  1. 关于位图数据和标记位-P3

    文章目录 1 背景 1.1 问题 2 问题1探究 2.1 没有区的情况 2.2 一个区的情况 2.3 两个区的情况 2.4 三个区的情况 2.5 四个区的情况 2.6 五个区的情况 3 问题2探究 3 ...

  2. 第14章 位图和位块传输_14.4 GDI位图对象(1)

    14.4.1 创建DDB (1)创建 HBITMAP= CreateBitmap(cx,cy,cPlanes,cBitsPixel,lpBits); 参数 说明 cx,cy 指定位图宽度和高度,单位为 ...

  3. Oracle查询数据表结构(字段,类型,大小,备注)

    作用:想要生成整个Oracle数据库所有表结构WORD文档(数据库设计说明书) Oracle数据库字典介绍    Oracle数据字典是有表和视图组成的,存储有关数据库结构信息的一些数据库对象.数据库 ...

  4. 利用union判断系统的大小端

    int checkCPUendian()//返回1,为小端:反之,为大端: { union { unsigned int a; unsigned char b; }c; c.a = 1; return ...

  5. 64位Win8系统下安装Oracle12c

    经过3个小时的折腾,终于在64位win8系统下成功安装了Oracle 12c.这篇文章主要把安装过程中遇到的一些问题总结一下,以便帮助后来人参考. 首先我把我的机器的主要配制情况列举出来: 1. 系统 ...

  6. 安卓下设置系统字体大小影响H5页面布局

    问题描述: 调整好的h5页面,放在安卓app内嵌页面后布局正常,后来用户调整系统里面字体大小,后内嵌H5布局乱掉 问题分析: 因为用户调整了系统字体的大小,修改了根节点和body节点的font-siz ...

  7. AI,大数据,复杂系统 最精 40本大书单

    AI,大数据,复杂系统 最精 40本大书单 原创 2017-10-30 Peter 混沌巡洋舰 如果这篇文的题目变成最全书单,那么这篇文会变得又臭又长,这个年代,关于人工智能和大数据的书,没有一万本也 ...

  8. Android默认系统声音/大小修改及配置【转】

    本文转载自:http://blog.csdn.net/a8316124/article/details/60574859 在做定制需求的时候,需要修改系统通知的声音,将其禁用掉,避免第三方应用发送通知 ...

  9. win10 64位专业版系统中显示32位dcom组件配置的方法

    word.excel是32位的组件,当用户64位系统在运行窗口中输入dcomcnfg命令时,在打开的组件服务管理窗口,是找不到Microsoft Excel.word程序的.另外,Windows 环境 ...

随机推荐

  1. Java实现 LeetCode 166 分数到小数

    166. 分数到小数 给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数. 如果小数部分为循环小数,则将循环的部分括在括号内. 示例 1: 输入 ...

  2. Java实现 蓝桥杯 历届试题 横向打印二叉树

    问题描述 二叉树可以用于排序.其原理很简单:对于一个排序二叉树添加新节点时,先与根节点比较,若小则交给左子树继续处理,否则交给右子树. 当遇到空子树时,则把该节点放入那个位置. 比如,10 8 5 7 ...

  3. java实现第四届蓝桥杯空白格式化

    空白格式化 本次大赛采用了全自动机器测评系统. 如果你的答案与标准答案相差了一个空格,很可能无法得分,所以要加倍谨慎! 但也不必过于惊慌.因为在有些情况下,测评系统会把你的答案进行"空白格式 ...

  4. java实现第四届蓝桥杯猜灯谜

    猜灯谜 题目描述 A 村的元宵节灯会上有一迷题: 请猜谜 * 请猜谜 = 请边赏灯边猜 小明想,一定是每个汉字代表一个数字,不同的汉字代表不同的数字. 请你用计算机按小明的思路算一下,然后提交&quo ...

  5. Linux 重装MySQL

    1.首先查看当前MySQL的安装情况,查找之前是否安装了MySQL rpm -qa|grep -i mysql 可以看到如下图: 因为我是使用的宝塔面板一键安装的LAMP,所以显示安装了bt-mysq ...

  6. TCP/IP三次握手协议

    一.简介         三次握手协议指的是在发送数据的准备阶段,服务器端和客户端之间需要进行三次交互,OSI参考模型中的网络层,在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一 ...

  7. .NET开发者省份分布排名

    什么叫.NET开发者省份分布排名呢? 顾名思义,这几个词大家都认识,.NET开发者都集中在城市,涵盖一线城市到五线城市.排名的方法非常简单粗暴,就是根据本公众号(dotnet跨平台)的省份订阅读者数量 ...

  8. 使用 UniApp 实现小程序的微信登录

    微信登录思路: 在main.js 中封装公共函数,用于判断用户是否登录 在main.js 中分定义全局变量,用于存储接口地址 如果没有登录.则跳转至登录页面 进入登录页面 通过 wx.login 获取 ...

  9. synchronized 和 java.util.concurrent.locks.Lock 的异同 ?

    主要相同点:Lock 能完成 synchronized 所实现的所有功能 主要不同点:Lock 有比synchronized 更精确的线程语义和更好的性能. synchronized 会自动释放锁,而 ...

  10. @bzoj - 2658@ [Zjoi2012]小蓝的好友(mrx)

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 终于到达了这次选拔赛的最后一题,想必你已经厌倦了小蓝和小白的故事 ...