oracle中block
按资料说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相关推荐
- Oracle中Hint深入理解(原创)
http://czmmiao.iteye.com/blog/1478465 Hint概述 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担.但有时它也聪明反被聪明 ...
- oracle解密des乱码,Oracle中des等算法的加解密
1.oracle中加密function CREATE OR REPLACE FUNCTION ENCRYPT_FUNCTION( V_STR VARCHAR2, V_KEY VARCHAR2) RET ...
- oracle中的rowid--伪列-删除表中的重复内容-实用
1.rowid是一个伪列,是用来确保表中行的唯一性,它并不能指示出行的物理位置,但可以用来定位行. 2.rowid是存储在索引中的一组既定的值(当行确定后).我们可以像表中普通的列一样将它选出来. 3 ...
- oracle中的一些基本概念
Oracle数据库的物理文件是存储在磁盘上的数据文件.控制文件和日志文件的总称.数据文件和日志文件是数据库中最重要的文件.数据库由若干个表空间组成,表空间由表组成,表由段组成,段由区间组成,区间由数据 ...
- java将clob类型文件写到磁盘_Java对Oracle中Clob类型数据的读取和写入
Java对Oracle中Clob数据类型是不能够直接插入的,但是可以通过流的形式对clob类型数据写入或者读取,网上代码并不算特别多,讲的 Java对Oracle中Clob数据类型是不能够直接插入的, ...
- oracle逻辑结构包含,在Oracle中,逻辑结构由哪几个部分组成?
♣答案部分 Oracle中逻辑结构包括表空间(TABLESPACE).段(SEGMENT).区(EXTENT)和块(BLOCK).数据库由表空间构成,而表空间又是由段构成,而段又是由区构成,而区又是由 ...
- 在Oracle中如何让SELECT查询绕过UNDO
是否有想过如何在Oracle中实现脏读(dirty read),在Oracle官方文档或者Asktom的时候显然会提到Oracle是不实现脏读的, 总是有undo来提供数据块的前镜像(before i ...
- oracle模块损坏,Oracle中模拟及修复数据块损坏
Oracle中模拟及修复数据块损坏,itpub link: http://www.itpub.net/showthread.php?threadid=201766[@more@]Oracle中模拟及修 ...
- Oracle编程入门经典 第6章 在Oracle中处理语句
6.1 SQL语句类别 DDL:数据定义语言语句.这样的语句有CREATE.TRUNCATE和ALTER,它们用于建立数据库中的结构,设置许可等.用户可以使用它们维护Oracle数据词典. D ...
最新文章
- c语言函数参数类型检查,内联函数在编译时是否做参数类型检查?
- 【Android 逆向】ART 脱壳 ( dex2oat 脱壳 | aosp 中搜索 dex2oat 源码 | dex2oat.cc#main 主函数源码 )
- 知乎爬虫之4:抓取页面数据
- 打开工程会提示下载的可能原因和可能解决方法
- Java读取resource文件/路径的几种方式
- Android Service基本使用
- 华为回应美新规:不涉及产品买卖;微软 GitHub 帐户疑被黑;GCC 10.1 发布 | 极客头条...
- SpringBoot 集成log4j2
- 【收藏】机器学习与深度学习核心知识点总结
- P ⊆ co-NP的原因
- vue如何获取tree当前选中的节点_vue Treeselect树形下拉框之获取选中节点的ids和lables操作...
- 一些值得学习的Unity教程
- 序列化和反序列化(示例)
- 每日英语:Etiquette Catches On in China, Even in Government
- php仿苹果,关于8个超炫酷仿苹果应用的HTML5动画的图文详解
- 支付宝当面付打shang系统源码分享
- HTML中常见的元素分类(三种)
- 仿新版支付宝账单页面滑动时月份栏被下一个月给顶上去
- (诛仙剑C-SKY)6-QT
- 手把手搭建一个SSM项目(适合新手)
热门文章
- 01-二维数组中的查找
- 去哪儿-18-detail-list
- Java中Math3 各种随机数生成器的使用(Random Generator)
- 使用deeplearning4j训练Word2Vec(Java操作)
- mysql大批量数据写入_存储过程写入大批量数据,用于测试mysql查询优化
- SpringMVC 文件上传及下载
- vba 根据分辨率 调整窗口显示比例_2020 如何选择适合自己的显示器?小白选购电脑显示器必看,附各类型显示器高性价比选购指南分析...
- arraylist删除指定元素_【追凶】ArrayList使用增强for遍历删除元素异常ConcurrentModification...
- java复制文件夹_java实现拷贝一个文件夹,里面存在目录和文件,使用文件创建和文件流...
- python路径规划算法可视化_路径规划问题:DIJKSTRA算法 以及Python实现