Oracle Database SQL Language Reference 笔记(3)—— 伪列(续)
来源:互联网 发布:ubuntu 禁用访客 编辑:程序博客网 时间:2024/06/14 21:21
前面已经学习过 Oracle 伪列的种类:
- 与树状结构查询语句相关的伪列(包括 CONNECT_BY_ISCYCLE、CONNECT_BY_ISLEAF 和 LEVEL);
- 与序列对象相关的伪列(CURRVAL和NEXTVAL);
- 与版本控制相关的伪列(ORA_ROWSCN、VERSIONS_STARTSCN、VERSIONS_STARTTIME、VERSIONS_ENDSCN、VERSIONS_ENDTIME、VERSIONS_XID、VERSIONS_OPERATION);
- 与嵌套表数据相关的伪列(COLUMN_VALUE);
- 与对象数据表相关的伪列(OBJECT_ID、OBJECT_VALUE);
- 与数据行相关的伪列(ROWID、ROWNUM)。
3、与版本控制相关的伪列
包括ORA_ROWSCN、VERSIONS_STARTSCN、VERSIONS_STARTTIME、VERSIONS_ENDSCN、VERSIONS_ENDTIME、VERSIONS_XID、VERSIONS_OPERATION等伪列。
这些伪列仅仅在 Oracle 的闪回版本查询语句中可用(Flashback Version Query)。
说到 Oracle 的 Flashback 功能(从 Oracle 10g 开始),主要包括四种类型:
- Flashback Database,可以把整个数据库回退到过去的某个时点的状态。
- Flashback Drop,用于恢复用户误删除的对象(包括表,索引等)。
- Flashback Query,又分Flashback Query,Flashback Version Query, Flashback Transaction Query 三种
- Flashback Query,利用oracle 查询多版本一致的特点,实现从回滚段中读取表一定时间内操作过的数据,可用来进行数据比对,或者修正意外提交造成的错误数据
- Flashback Version Query,可以看到过去某个时间段内,记录是如何发生变化的(Flashback Query 只能看到一点的状态)
- Flashback Transaction Query,可以查看某个事务执行的所有变化
- Flashback Table。
对于这几种 Flashback 功能和前述伪列的作用,具体可参考cnblogs上的这篇博文,以及itpub上这篇博文中的详细描述。
4、与嵌套表数据相关的伪列(COLUMN_VALUE)(暂略)
5、与对象数据表相关的伪列(OBJECT_ID、OBJECT_VALUE)(暂略)
6、与数据行相关的伪列(ROWID、ROWNUM)
这是我们见得最多也最常用的伪列,其中 ROWID 返回每个数据行的物理地址,而 ROWNUM 用于返回检索集的数据行号。
ROWID 伪列返回的值是ROWID或UROWID类型,其中ROWID类型是普通的以堆方式存储数据表行的地址,由数据对象编号、数据行在数据文件中的数据块地址、数据行在数据块中的编号,以及数据所在数据文件的编号组成。而UROWID是索引组织方式存储数据表以及外部表行的地址。
其格式为18个64进制数字,这些数字由'A~Z'(对应十进制0~25)、'a~z'(对应十进制26~51)、'0~9'(对应十进制52~61)、+(对应十进制62)、/(对应十进制63)来表示。这18位64进制数字中(从左至右):前6位表示数据对象编号,转换成十进制后对应 DBA_OBJECTS 中的某个 DATA_OBJECT_ID,第7至9位表示对应表空间相应的文件编号,第10至15位表示数据文件中的数据块编号,最后3位表示在数据块中的记录(行)编号。
例如:
scott@ORA11G> select rowid from emp_flash;
ROWID
------------------
AAASoOAAEAAAQ5TAAA
AAASoOAAEAAAQ5TAAB
AAASoOAAEAAAQ5TAAC
AAASoOAAEAAAQ5TAAD
AAASoOAAEAAAQ5TAAE
AAASoOAAEAAAQ5TAAF
AAASoOAAEAAAQ5TAAG
AAASoOAAEAAAQ5TAAH
AAASoOAAEAAAQ5TAAI
AAASoOAAEAAAQ5TAAJ
AAASoOAAEAAAQ5TAAK
AAASoOAAEAAAQ5TAAL
AAASoOAAEAAAQ5TAAM
AAASoOAAEAAAQ5TAAN
AAASoOAAEAAAQ5TAAO
其中第一行数据的 rowid 表示对象编号为 AAASoO,表空间文件号为 AAE,数据块编号是 AAAQ5T,数据是数据块中第 AAA 个记录。
可以用下面的语句来查询相应的编码数据:
scott@ORA11G> select dbms_rowid.rowid_object(rowid) obj#,dbms_rowid.rowid_relative_fno(rowid) rfile#,dbms_rowid.rowid_block_number(rowid) block#,dbms_rowid.rowid_row_number(rowid) row#,dbms_rowid.rowid_to_absolute_fno(rowid,'SCOTT','EMP_FLASH') file# from emp_flash;
OBJ# RFILE# BLOCK# ROW# FILE#
---------- ---------- ---------- ---------- ----------
76302 4 69203 0 4
76302 4 69203 1 4
76302 4 69203 2 4
76302 4 69203 3 4
76302 4 69203 4 4
76302 4 69203 5 4
76302 4 69203 6 4
76302 4 69203 7 4
76302 4 69203 8 4
76302 4 69203 9 4
76302 4 69203 10 4
76302 4 69203 11 4
76302 4 69203 12 4
76302 4 69203 13 4
76302 4 69203 14 4
可以看见 OBJECT_ID 为76302,通过以下语句从 dba_objects 中查询(需要具有 dba 权限的用户)
system@ORA11G> select owner,object_name,object_id,object_type from dba_objects where object_id=76302;
OWNER OBJECT_NAME OBJECT_ID OBJECT_TYPE
------------- ---------------------------------------------------
SCOTT EMP_FLASH 76302 TABLE
表空间相对文件号为 4,通过以下语句查询具体对应哪个文件
system@ORA11G> select file_name,tablespace_name from dba_data_files where relative_fno=4;
FILE_NAMETABLESPACE_NAME
---------------- -------------------
/home/u01/app/oracle/oradata/ora11g/users01.dbf USERS
利用这些信息可以查看 dump 文件信息,具体操作方法请参考新浪博客的这篇博文。
- Oracle Database SQL Language Reference 笔记(3)—— 伪列(续)
- Oracle Database SQL Language Reference 笔记(2)—— 伪列(Pseudocolumn)
- Oracle Database SQL Language Reference 笔记(1)—— Oracle SQL 简介
- Oracle Database SQL Language Reference 笔记(4)—— SQL语句基本元素
- oracle 官方参考文档(Database SQL Language Reference)
- oracle帮助文档——SQL Language Reference
- Oracle PL/SQL Language Pocket Reference
- Oracle笔记(七) 数据更新、事务处理、数据伪列
- Oracle笔记(七) 数据更新、事务处理、数据伪列
- Oracle笔记(七) 数据更新、事务处理、数据伪列
- oracle学习笔记(7)_伪列
- Oracle笔记(七) 数据更新、事务处理、数据伪列
- Oracle笔记(七) 数据更新、事务处理、数据伪列
- Oracle笔记(七) 数据更新、事务处理、数据伪列
- Oracle数据库(索引、视图、伪列与伪表)
- Oracle数据库(索引、视图、伪列与伪表)
- android database SQL language
- Oracle PL/SQL Language Pocket Reference, Second Edition
- SQL表连接查询(inner join、full join、left join、right join)
- [Leetcode]Search in Rotated Sorted Array II
- hdu2053
- Android用户界面基础之ViewGroup学习
- Java内部类
- Oracle Database SQL Language Reference 笔记(3)—— 伪列(续)
- [纯代码必备]为Xcode7 添加空模版 Empty Application
- 用Kruskal算法解POJ 1251 Jungle Roads代码
- 特征工程简介
- (源码)关于A->B*->D的时间序列频繁模式挖掘的思考 1.26更新
- Json数据解析
- C++中的返回值优化(RVO)
- egnaRarofhcraeS.34
- 求三角形面积