示例演示通过rowid得到数据块的相关信息(所在对象,文件,数据块)
2013-09-10 09:16
387 查看
示例演示通过rowid得到数据块的相关信息(所在对象,文件,数据块)
row:Oracle处理数据的最小单位,至少会扫描一行,也是lock的最小单位,不同用户可以修改不同的行,因为是行级锁由ITL事物槽控制。rowid:我想大家对这个东东应该都不会陌生,说白了就是行的物理磁盘地址,由十六进制表示,由行头和行体组成。
行头:记录行的属性信息方便管理。
行体:记录字段的值,即数据。
下面我们来看看rowid在数据库中是如何表示的
SQL>drop table t purge;
表已删除。
SQL> create table t asselect * from dba_objects where object_id in (1,2,3);
表已创建。
SQL> selectrowid,object_id,object_name from t;
ROWID OBJECT_ID OBJECT_NAME
---------------------------- --------------------
AAASTVAABAAAVS5AAA 3 I_OBJ# 表中记录对应的rowid
AAASTVAABAAAVS5AAB 2 C_OBJ#
我们数了一下rowid由18位字符组成,每组字符代表不同的含义,18位最大寻址空间“32G”
AAASTV:对象id
AAB:文件id
AAAVS5块id
AAA:行id
这四部分唯一标识了一行的物理地址,基于rowid的数据查询是最快的,比index还要快
下面我们使用DBMS_ROWID包来得到数据块的相关信息
SQL> select rowid,dbms_rowid.rowid_object(rowid)object_id,
2 dbms_rowid.rowid_relative_fno(rowid) file_id,
3 dbms_rowid.rowid_block_number(rowid) block_id,
4 dbms_rowid.rowid_row_number(rowid) row_id
5 fromt;
ROWID OBJECT_ID FILE_ID BLOCK_ID ROW_ID
---------------------------- ---------- ---------- ----------
AAASTVAABAAAVS5AAA 74965 1 87225 0
AAASTVAABAAAVS5AAB 74965 1 87225 1
SQL> select object_name from dba_objects whereobject_id=74965;
OBJECT_NAME
--------------------
T
上面两行记录的对象名即为t,所属文件号是5(同一个文件),所属块号是1459(同一个块),所属行号0(第一行)1(第二行)以此类推。
小结:如果我们想要了解数据行的物理结构,那么可以通过DBMS_ROWID包来得到数据行的相关信息。
相关文章推荐
- 通过rowid得到数据块的相关信息
- 直接使用XIB/NIB文件,读取信息创建 UIView [通过Nib文件进行反序列化,得到对象]
- Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示(待补全)
- 通过xml配置文件得到数据库信息
- 通过request对象得到基本的信息
- 得到指定文件夹内所有文件的相关信息
- 设计模式之1.1 再谈反射 以及java当中通过配置文件得到类名字,并生成对象的方法
- vbs 通过 WMI 得到进程列表及其它相关信息
- Java通过class文件得到所在jar包
- 各类Java heap space 解决方法,并通过java代码获取JVM的相关信息,所在操作系统的信息(包含eclipse&myeclipse的调试的内存设置)
- Android-通过网络获取xml文件使用pull解析得到服务器中的信息(新闻客户端)
- 通过runtime获取对象相关信息
- JDBC 通过从properties配置文件获取信息得到orcale数据库接口
- 得到文件系统的相关信息
- ajax实现文件异步上传并回显文件相关信息功能示例
- Symbian 3rd 版本打包(.pkg文件),自签名,签名标志文件所在的目录,等相关信息
- 通过注册表得到IP相关信息
- oracle查看表数据的对象,所在文件,所在块等信息
- 通过DBCO配置链接信息用Native SQL访问外部数据库的代码示例及其相关notes
- GDAL通过RasterIO读写图像文件,数据集的创建,图像相关信息的获取