[20150707]外部表与rowid.txt

[20150707]外部表与rowid.txt

SCOTT@test> @ver1

PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.3.0     Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

CREATE OR REPLACE DIRECTORY
TRACE AS
'/u01/app/oracle11g/diag/rdbms/test/test/trace/';

GRANT EXECUTE, READ, WRITE ON DIRECTORY TRACE TO SCOTT WITH GRANT OPTION;

CREATE TABLE ALERT_LOG (text_line VARCHAR2 (512))
ORGANIZATION EXTERNAL
   (TYPE ORACLE_LOADER
         DEFAULT DIRECTORY TRACE
            ACCESS PARAMETERS
               (
            RECORDS DELIMITED BY NEWLINE
            NOBADFILE
            NODISCARDFILE
            NOLOGFILE
    )
         LOCATION ('alert_test.log'));

SCOTT@test> select rowid,alert_log.text_line c100 from ALERT_LOG where rownumROWID                   C100
----------------------- ----------------------------------------------------------------------------------------------------
(AASw6QAAAAAAAAAAAAAAAA Mon May 04 15:22:19 2015
(AASw6QAAAAAAAAAAAAAAGQ Error 12170 received logging on to the standby
(AASw6QAAAAAAAAAAAAAASA PING[ARC2]: Heartbeat failed to connect to standby 'testdg'. Error is 12170.
(AASw6QAAAAAAAAAAAAAAlQ Mon May 04 15:22:35 2015
(AASw6QAAAAAAAAAAAAAArg ALTER SYSTEM ARCHIVE LOG
(AASw6QAAAAAAAAAAAAAAxw Mon May 04 15:22:35 2015
(AASw6QAAAAAAAAAAAAAA4A Beginning log switch checkpoint up to RBA [0xa8f.2.10]
(AASw6QAAAAAAAAAAAAABKQ Thread 1 advanced to log sequence 2703 (LGWR switch)
(AASw6QAAAAAAAAAAAAABXg   Current log# 1 seq# 2703 mem# 0: /u01/app/oracle11g/oradata/test/redo01.log
(AASw6QAAAAAAAAAAAAABrA Mon May 04 15:22:35 2015

10 rows selected.)

--可以发现外部表也有rowid,但是明显与实际的rowid不同。
SCOTT@test> select rowid,dept.* from dept where rownum=1;
ROWID                  DEPTNO DNAME          LOC
------------------ ---------- -------------- -------------
AABJVUAAEAAAAdzAAA         10 ACCOUNTING     NEW YORK

SCOTT@test> @ lookup_rowid (AASw6QAAAAAAAAAAAAAAAA
SELECT DBMS_ROWID.ROWID_OBJECT ('(AASw6QAAAAAAAAAAAAAAAA') "OBJECT",
       *
ERROR at line 1:
ORA-01410: invalid ROWID
ORA-06512: at "SYS.DBMS_ROWID", line 82

SCOTT@test> @ lookup_rowid AASw6QAAAAAAAAAAAAAAAA
SELECT DBMS_ROWID.ROWID_OBJECT ('AASw6QAAAAAAAAAAAAAAAA') "OBJECT",
       *
ERROR at line 1:
ORA-01410: invalid ROWID
ORA-06512: at "SYS.DBMS_ROWID", line 82

SCOTT@test> select text_line c100  from alert_log where rowid='(AASw6QAAAAAAAAAAAAAAAA';
C100
----------------------------------------------------------------------------------------------------
Mon May 04 15:22:19 2015

--我插入1行空行。

SCOTT@test> select rowid,alert_log.text_line c100 from ALERT_LOG where rownumROWID                   C100
----------------------- ----------------------------------------------------------------------------------------------------
(AASw6QAAAAAAAAAAAAAAAA
(AASw6QAAAAAAAAAAAAAAAQ Mon May 04 15:22:19 2015
(AASw6QAAAAAAAAAAAAAAGg Error 12170 received logging on to the standby
(AASw6QAAAAAAAAAAAAAASQ PING[ARC2]: Heartbeat failed to connect to standby 'testdg'. Error is 12170.
(AASw6QAAAAAAAAAAAAAAlg Mon May 04 15:22:35 2015
(AASw6QAAAAAAAAAAAAAArw ALTER SYSTEM ARCHIVE LOG
(AASw6QAAAAAAAAAAAAAAyA Mon May 04 15:22:35 2015
(AASw6QAAAAAAAAAAAAAA4Q Beginning log switch checkpoint up to RBA [0xa8f.2.10]
(AASw6QAAAAAAAAAAAAABKg Thread 1 advanced to log sequence 2703 (LGWR switch)
(AASw6QAAAAAAAAAAAAABXw   Current log# 1 seq# 2703 mem# 0: /u01/app/oracle11g/oradata/test/redo01.log
(AASw6QAAAAAAAAAAAAABrQ Mon May 04 15:22:35 2015

11 rows selected.

--我感觉rowid应该表示某种偏移量,具体细节很难猜透,至少我的能力不行.。

--建立一个aaa.txt文件在相应目录。
$ nl aaa.txt
     1  12334567890
     2  22334567890
     3  32334567890
     4  42334567890
     5  52334567890
     6  62334567890
     7  72334567890
     8  82334567890
     9  92334567890

SCOTT@test>  alter table ALERT_LOG location ('aaa.txt');
Table altered.

SCOTT@test> select rowid,text_line c100  from alert_log ;
ROWID                   C100
----------------------- ------------
(AASw6QAAAAAAAAAAAAAAAA 12334567890
(AASw6QAAAAAAAAAAAAAADA 22334567890
(AASw6QAAAAAAAAAAAAAAGA 32334567890
(AASw6QAAAAAAAAAAAAAAJA 42334567890
(AASw6QAAAAAAAAAAAAAAMA 52334567890
(AASw6QAAAAAAAAAAAAAAPA 62334567890
(AASw6QAAAAAAAAAAAAAASA 72334567890
(AASw6QAAAAAAAAAAAAAAVA 82334567890
(AASw6QAAAAAAAAAAAAAAYA 92334567890
9 rows selected.

--ABC DEF GHI JKL MNO PQR STU VWX YZ,视乎存在某种规律。

$ nl aaa.txt
     1  12334567890a
     2  22334567890
     3  32334567890
     4  42334567890
     5  52334567890
     6  62334567890
     7  72334567890
     8  82334567890
     9  92334567890

SCOTT@test> select rowid,text_line c100  from alert_log ;
ROWID                   C100
----------------------- ----------------------------------
(AASw6QAAAAAAAAAAAAAAAA 12334567890a
(AASw6QAAAAAAAAAAAAAADQ 22334567890
(AASw6QAAAAAAAAAAAAAAGQ 32334567890
(AASw6QAAAAAAAAAAAAAAJQ 42334567890
(AASw6QAAAAAAAAAAAAAAMQ 52334567890
(AASw6QAAAAAAAAAAAAAAPQ 62334567890
(AASw6QAAAAAAAAAAAAAASQ 72334567890
(AASw6QAAAAAAAAAAAAAAVQ 82334567890
(AASw6QAAAAAAAAAAAAAAYQ 92334567890
9 rows selected.

--放弃,应该表示某种偏移量,具体细节实在太难猜测。

时间: 2024-10-23 20:16:13

[20150707]外部表与rowid.txt的相关文章

Oracle中如何管理外部表

外部表是表结构被存放在数据字典,而表数据被存放在OS文件的表.通过使用外部表,不仅可以在数据库中查询OS文件的数据,还可以使用INSERT方式将OS文件数据装载到数据库中,从而实现SQL*Loader所提供的功能.建立外部表后,可以查询外部表的数据,在外部表上执行连接查询,或对外部表的数据进行排序.需要注意,外部表上不能执行DML修改,也不能在外部表上建立索引. 1.建立外部表 --准备工作: [oracle@solaris10 ~]$mkdir /export/home/oracle/dat

oracle 外部表导入时间日期类型数据

1.建立外部表目录 create directory extdir as 'e:appextdir'; 2.定义外部表 create table ext_test ( rt date, rtype char(1) ) organization external( type oracle_loader default directory extdir access parameters( fields terminated by ',' --- 字段间隔符为逗号 missing field val

Oracle 外部表

--================= -- Oracle 外部表 --=================       外部表只能在Oracle 9i 之后来使用.简单地说,外部表,是指不存在于数据库中的表.通过向Oracle提供描述外部表的元数据,我们 可以把一个操作系统文件当成一个只读的数据库表,就像这些数据存储在一个普通数据库表中一样来进行访问.外部表是对数据库表的延伸.   一.外部表的特性     位于文件系统之中,按一定格式分割,如文本文件或者其他类型的表可以作为外部表.     对

《Hadoop实战手册》一1.10 在Greenplum外部表中使用HDFS

1.10 在Greenplum外部表中使用HDFS Greenplum是一个并行数据库,数据的存储与查询基于一个或多个PostgreSQL实例.它补充了Hadoop,提供对大数据的实时或准实时访问,它还支持使用HDFS文件作为外部表.外部表是一个处理Greenplum集群之外数据很好的解决方案.由于外部表访问首先要消耗网络带宽,所以与Greenplum集群内的数据相比,它应该存储那些访问相对不频繁的数据.本节将介绍如何创建只读的外部表和可读写的外部表. 准备工作 在本节假定你使用的Hadoop版

【动手实践】Oracle 12.2新特性:多列列表分区和外部表分区

Oracle 12.2版本中,增加了大量的分区新特性,这其中包括: 自动的列表分区创建 在线的普通表转换分区表 支持只读分区和读写分区混合 以下介绍的三个特性同样是12.2新增的: 多列列表分区.外部表分区.维护过滤 而对于多列列表分区的支持,也是大家关注已久的特性,先看一下脚本(在 livesql.oracle.com 测试执行,推荐动手实践): CREATE TABLE dba_by_db_in_yhem  (dbalic           NUMBER,    username    

[20150913]文件检查点-表空间offline.txt

[20150913]文件检查点-表空间offline.txt --oracle从8i以后基本使用增量检查点取代原来的检查点模式,但是如果一个表空间处于热备份模式以及offline时,要将这些表空间包含 --的数据文件所涉及到的脏块写数据文件.这个叫file level Checkpoint(感觉叫tablespace level checkpoint更加合适一些),如何验证 --这个过程,实际上很简单仅仅需要检查v$bh或者x$bh视图,或者转储脏块看看里面的内容是否存在变化,来验证这个过程,还

[20120816]快速修改表的schema.txt

[20120816]快速修改表的schema.txt     前几天在测试环境,开发人员把几个表建成system schema,需要修改成别的schema模式.当然方法很多,ctas,exp/imp等等.数据库建立在他自己的机器(数据库是11G的),我建议他可以直接修改sys.obj$对象.最后他发现修改后,查看dba_objects依旧是原来的schema.我自己也做了测试. 测试如下: 1.测试环境 SQL> select * from v$version ; BANNER --------

通过外部表改进一个繁琐的大查询

今天处理了一个比较有意思的案例,说是有意思,因为涉及多个部门,但是哪个部门似乎都不愿意接.最后还是用了一些巧力,化干戈为玉帛. 问题的背景是这样的,业务部门需要做一个大查询,他们目前只拿到了部分账号的一个id字段的值,需要匹配得到一个类似手机号的字段值,开发部门提供了对应的sql语句,会关联两张表来匹配得到对的数据,然后反馈到DBA这里的时候就是最终的sql语句了,DBA查询得到数据,然后反馈给业务部门.大体的流程是这样的.    但是现在的问题是,业务部门需要提供的id有60多万个,开发部门看

巧用外部表避免大量的insert

昨天开发咨询我一个问题,希望我对下面的语句进行调优. 语句类似下面的形式 SELECT  subscriber_no  FROM SUBSCRIBER S WHERE SUBSCRIBER_TYPE = 'RM'              and CONV_RUN_NO in (20, 21, 22, 23)              and not EXISTS (SELECT s.AGREEMENT_NO                        FROM SERVICE_AGREEME