按资料说V$BH查看表来显示数据库里每个对象类型的数据缓冲区里数据块的数量.

然后查询V$bh

select
   owner, object_name                 
  from
   dba_objects o,
   v$bh        bh
where
   o.object_id  = bh.objd
and
   o.owner =MOBILEADC

这一查找出 MOBILEADC 用户创建的对象 数据块的相关信息

也可以查询表的数据快的信息

select
   owner, object_name                 
  from
   dba_objects o,
   v$bh        bh
where
   o.object_id  = bh.objd
and
   o.object_name =’NN_APPLICATION’;

v$BH中有个状态

The possible values of X$BH.STATUS are:

0, FREE, no valid block image
        1, XCUR, a current mode block, exclusive to this instance
        2, SCUR, a current mode block, shared with other instances
        3, CR,   a consistent read (stale) block image
        4, READ, buffer is reserved for a block being read from disk
        5, MREC, a block in media recovery mode
        6, IREC, a block in instance (crash) recovery mode

可以查询表空间的快大小

select tablespace_name,block_size from dba_tablespaces;

在安装数据库的时候我们将db_block_size这个default block size设置成了8k,那么在安装以后Oracle是不允许我们修改默认块大小的。对于一个8196字节大小的数据块一般block overhead会占据其中100个左右的字节,那么剩下的8096字节的空间就用来存储我们的行数据库,如果我们插入1个字节的行数据,那么这个块是否会允许我们插入8096行呢?答案当然是否定的。其实排除pctfree和mssm情况下的pctused等段级存储参数,一行的的开销最小也要11个字节左右,因此我们可以算一下8k大小的数据库其实最多可以存储8096/11=736行的数据。

现在用实验来说明一下:
SQL> drop table hellotab purge;

表已删除。

SQL> create table hellotab
  2  (name varchar2(1)) pctfree 0;
---这里我们创建了一个只有一列,并且pctfree为0的表段,这也表示着,理论上我们这个段可以最大限度的插入数据。

表已创建。

SQL> show user;
USER 为 "SYS"
SQL> desc dba_tablespaces;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ------------------------
 TABLESPACE_NAME                           NOT NULL VARCHAR2(30)
 BLOCK_SIZE                                NOT NULL NUMBER
 INITIAL_EXTENT                                     NUMBER
 NEXT_EXTENT                                        NUMBER
 MIN_EXTENTS                               NOT NULL NUMBER
 MAX_EXTENTS                                        NUMBER
 PCT_INCREASE                                       NUMBER
 MIN_EXTLEN                                         NUMBER
 STATUS                                             VARCHAR2(9)
 CONTENTS                                           VARCHAR2(9)
 LOGGING                                            VARCHAR2(9)
 FORCE_LOGGING                                      VARCHAR2(3)
 EXTENT_MANAGEMENT                                  VARCHAR2(10)
 ALLOCATION_TYPE                                    VARCHAR2(9)
 PLUGGED_IN                                         VARCHAR2(3)
 SEGMENT_SPACE_MANAGEMENT                           VARCHAR2(6)
 DEF_TAB_COMPRESSION                                VARCHAR2(8)
 RETENTION                                          VARCHAR2(11)
 BIGFILE                                            VARCHAR2(3)

SQL> select tablespace_name,block_size from dba_tablespaces;

TABLESPACE_NAME                BLOCK_SIZE
------------------------------ ----------
SYSTEM                               8192
UNDOTBS1                             8192
SYSAUX                               8192
TEMP                                 8192
USERS                                8192
EXAMPLE                              8192
TEST                                 8192
UNDO_SMALL                           8192
RBTEST                               8192
MYALAN                               2048
可以看到我们的system表空间的大小是标准的8192个字节

我们再来看看这个段理论上的最大行数
SQL> select object_name,object_id from dba_objects where object_name='HELLOTAB';

OBJECT_NAME                                                                                                               OBJECT_ID
-------------------------------------------------------------------------------------------------------------------------------- ----------
HELLOTAB                                                                                                                      56661

SQL> col object_name for a30
SQL> /

OBJECT_NAME                     OBJECT_ID
------------------------------ ----------
HELLOTAB                            56661

SQL>select spare1 from tab$ where obj#=56661;

SPARE1
----------
       736

确实是736行。

这个时候我们再查询一下,指定的表段中数据块中的最大达到行数。

因为我们的hellotab表是空的,所以下面的查询应该返回NULL:
SQL> selectmax(sys_op_rpb(rowid))from hellotab;

MAX(SYS_OP_RPB(ROWID))
----------------------

现在向hellotab中插入5000条记录
SQL> begin
  2  for i in 1 .. 5000
  3  loop
  4     insert into hellotab values('A');
  5  end loop
  6  ;
  7  commit;
  8  end;
  9  /

PL/SQL 过程已成功完成。

SQL> select max(sys_op_rpb(rowid)) from hellotab;

MAX(SYS_OP_RPB(ROWID))
----------------------
                   733

可以看到块中最大的行数是733行。

进一步通过rowid转换来确定:
SQL> select file_number,block_id,count(*) row_numbers
  2  from
  3  (
  4  select dbms_rowid.rowid_relative_fno(rowid) file_number,
  5         dbms_rowid.rowid_block_number(rowid) block_id
  6  from hellotab
  7  )
  8  group by file_number,block_id;

FILE_NUMBER   BLOCK_ID ROW_NUMBERS
----------- ---------- -----------
          1      62628         734
          1      62632         596
          1      62629         734
          1      62630         734
          1      62631         734
          1      62626         734
          1      62627         734

已选择7行。

转载于:https://www.cnblogs.com/liaomin416100569/archive/2009/12/01/9332155.html

oracle中block相关推荐

  1. Oracle中Hint深入理解(原创)

    http://czmmiao.iteye.com/blog/1478465 Hint概述  基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担.但有时它也聪明反被聪明 ...

  2. oracle解密des乱码,Oracle中des等算法的加解密

    1.oracle中加密function CREATE OR REPLACE FUNCTION ENCRYPT_FUNCTION( V_STR VARCHAR2, V_KEY VARCHAR2) RET ...

  3. oracle中的rowid--伪列-删除表中的重复内容-实用

    1.rowid是一个伪列,是用来确保表中行的唯一性,它并不能指示出行的物理位置,但可以用来定位行. 2.rowid是存储在索引中的一组既定的值(当行确定后).我们可以像表中普通的列一样将它选出来. 3 ...

  4. oracle中的一些基本概念

    Oracle数据库的物理文件是存储在磁盘上的数据文件.控制文件和日志文件的总称.数据文件和日志文件是数据库中最重要的文件.数据库由若干个表空间组成,表空间由表组成,表由段组成,段由区间组成,区间由数据 ...

  5. java将clob类型文件写到磁盘_Java对Oracle中Clob类型数据的读取和写入

    Java对Oracle中Clob数据类型是不能够直接插入的,但是可以通过流的形式对clob类型数据写入或者读取,网上代码并不算特别多,讲的 Java对Oracle中Clob数据类型是不能够直接插入的, ...

  6. oracle逻辑结构包含,在Oracle中,逻辑结构由哪几个部分组成?

    ♣答案部分 Oracle中逻辑结构包括表空间(TABLESPACE).段(SEGMENT).区(EXTENT)和块(BLOCK).数据库由表空间构成,而表空间又是由段构成,而段又是由区构成,而区又是由 ...

  7. 在Oracle中如何让SELECT查询绕过UNDO

    是否有想过如何在Oracle中实现脏读(dirty read),在Oracle官方文档或者Asktom的时候显然会提到Oracle是不实现脏读的, 总是有undo来提供数据块的前镜像(before i ...

  8. oracle模块损坏,Oracle中模拟及修复数据块损坏

    Oracle中模拟及修复数据块损坏,itpub link: http://www.itpub.net/showthread.php?threadid=201766[@more@]Oracle中模拟及修 ...

  9. Oracle编程入门经典 第6章 在Oracle中处理语句

    6.1     SQL语句类别 DDL:数据定义语言语句.这样的语句有CREATE.TRUNCATE和ALTER,它们用于建立数据库中的结构,设置许可等.用户可以使用它们维护Oracle数据词典. D ...

最新文章

  1. c语言函数参数类型检查,内联函数在编译时是否做参数类型检查?
  2. 【Android 逆向】ART 脱壳 ( dex2oat 脱壳 | aosp 中搜索 dex2oat 源码 | dex2oat.cc#main 主函数源码 )
  3. 知乎爬虫之4:抓取页面数据
  4. 打开工程会提示下载的可能原因和可能解决方法
  5. Java读取resource文件/路径的几种方式
  6. Android Service基本使用
  7. 华为回应美新规:不涉及产品买卖;微软 GitHub 帐户疑被黑;GCC 10.1 发布 | 极客头条...
  8. SpringBoot 集成log4j2
  9. 【收藏】机器学习与深度学习核心知识点总结
  10. P ⊆ co-NP的原因
  11. vue如何获取tree当前选中的节点_vue Treeselect树形下拉框之获取选中节点的ids和lables操作...
  12. 一些值得学习的Unity教程
  13. 序列化和反序列化(示例)
  14. 每日英语:Etiquette Catches On in China, Even in Government
  15. php仿苹果,关于8个超炫酷仿苹果应用的HTML5动画的图文详解
  16. 支付宝当面付打shang系统源码分享
  17. HTML中常见的元素分类(三种)
  18. 仿新版支付宝账单页面滑动时月份栏被下一个月给顶上去
  19. (诛仙剑C-SKY)6-QT
  20. 手把手搭建一个SSM项目(适合新手)

热门文章

  1. 01-二维数组中的查找
  2. 去哪儿-18-detail-list
  3. Java中Math3 各种随机数生成器的使用(Random Generator)
  4. 使用deeplearning4j训练Word2Vec(Java操作)
  5. mysql大批量数据写入_存储过程写入大批量数据,用于测试mysql查询优化
  6. SpringMVC 文件上传及下载
  7. vba 根据分辨率 调整窗口显示比例_2020 如何选择适合自己的显示器?小白选购电脑显示器必看,附各类型显示器高性价比选购指南分析...
  8. arraylist删除指定元素_【追凶】ArrayList使用增强for遍历删除元素异常ConcurrentModification...
  9. java复制文件夹_java实现拷贝一个文件夹,里面存在目录和文件,使用文件创建和文件流...
  10. python路径规划算法可视化_路径规划问题:DIJKSTRA算法 以及Python实现