[20130721]ORACLE 12C Invisible Columns.txt

[20130721]ORACLE 12C Invisible Columns.txt

在ORACLE 12C中有了Invisible Columns的概念,就是在表中真实的存在该列,但是通过设置Invisible可以实现不显示该列。
自己测试看看。

SQL> select banner from v$version ;
BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
PL/SQL Release 12.1.0.1.0 - Production
CORE    12.1.0.1.0      Production
TNS for 64-bit Windows: Version 12.1.0.1.0 - Production
NLSRTL Version 12.1.0.1.0 - Production
SQL> create table t (a number,b number ,c number);
Table created.
SQL> select object_id,data_object_id from dba_objects where wner=user and object_name='T';
 OBJECT_ID DATA_OBJECT_ID
---------- --------------
     92476          92476
SQL> select obj#,col#,segcol#,SEGCOLLENGTH,OFFSET, NAME,TYPE#,LENGTH , INTCOL# from sys.col$ where obj#= 92476;
      OBJ#       COL#    SEGCOL# SEGCOLLENGTH     OFFSET NAME                      TYPE#     LENGTH    INTCOL#
---------- ---------- ---------- ------------ ---------- -------------------- ---------- ---------- ----------
     92476          1          1           22          0 A                             2         22       1
     92476          2          2           22          0 B                             2         22       2
     92476          3          3           22          0 C                             2         22       3
--因为我创建的是普通表,注意看COL#,SEGCOL#,INTCOL#相同。
--intcol#为创建表时的列顺序,col#初始情况下跟intcol#相同。而segcol#表示列在数据段上存储时的顺序。
--如果是IOT,cluster table可能不同。
SQL> ALTER TABLE t MODIFY (a invisible);
Table altered.
SQL> select obj#,col#,segcol#,SEGCOLLENGTH,OFFSET, NAME,TYPE#,LENGTH , INTCOL# from sys.col$ where obj#= 92476;
      OBJ#       COL#    SEGCOL# SEGCOLLENGTH     OFFSET NAME                      TYPE#     LENGTH    INTCOL#
---------- ---------- ---------- ------------ ---------- -------------------- ---------- ---------- ----------
     92476          0          1           22          0 A                             2         22       1
     92476          1          2           22          0 B                             2         22       2
     92476          2          3           22          0 C                             2         22       3
SQL> ALTER TABLE t MODIFY (a visible);
Table altered.
SQL> select obj#,col#,segcol#,SEGCOLLENGTH,OFFSET, NAME,TYPE#,LENGTH , INTCOL# from sys.col$ where obj#= 92476;
      OBJ#       COL#    SEGCOL# SEGCOLLENGTH     OFFSET NAME                      TYPE#     LENGTH    INTCOL#
---------- ---------- ---------- ------------ ---------- -------------------- ---------- ---------- ----------
     92476          3          1           22          0 A                             2         22       1
     92476          1          2           22          0 B                             2         22       2
     92476          2          3           22          0 C                             2         22       3

--可以发现COL#的顺序发现了变化,利用这个特性可以实现修改显示select *时列的展示顺序(Column Ordering)。

SQL> set linesize 40
SQL> desc t;
 Name              Null?    Type
 ----------------- -------- ------------
 B                          NUMBER
 C                          NUMBER
 A                          NUMBER
--但是要注意如果插入数据:
insert into t values(1,2,3);
commit ;
SQL> select * from t;
         B          C          A
---------- ---------- ----------
         1          2          3
-- 实际上按照desc t显示的顺序,如果你看数据块,可以发现保持A,B,C的顺序。
SQL> @lookup_rowid AAAWk8AAJAAAACtAAA
    OBJECT       FILE      BLOCK        ROW DBA
---------- ---------- ---------- ---------- --------------------
     92476          9        173          0 9,173
SQL> alter system dump datafile 9 block 173 ;
System altered.

Block header dump:  0x024000ad
 Object id on Block? Y
 seg/obj: 0x1693c  csc: 0x00.28e176  itc: 2  flg: E  typ: 1 - DATA
     brn: 0  bdba: 0x24000a8 ver: 0x01 opc: 0
     inc: 0  exflg: 0
 
 Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0008.020.00000869  0x01402866.0111.21  --U-    1  fsc 0x0000.0028e177
0x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000
bdba: 0x024000ad
data_block_dump,data header at 0x179d6064
===============
tsiz: 0x1f98
hsiz: 0x14
pbl: 0x179d6064
     76543210
flag=--------
ntab=1
nrow=1
frre=-1
fsbo=0x14
fseo=0x1f8c
avsp=0x1f78
tosp=0x1f78
0xe:pti[0]    nrow=1    ffs=0
0x12:pri[0]    ffs=0x1f8c
block_row_dump:
tab 0, row 0, @0x1f8c
tl: 12 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [ 2]  c1 04
col  1: [ 2]  c1 02
col  2: [ 2]  c1 03
end_of_block_dump
End dump data blocks tsn: 3 file#: 9 minblk 173 maxblk 173

SQL> select dump(A,16) c20 ,dump(b,16) c20,dump(c,16) c20 from t ;
C20                  C20                  C20
-------------------- -------------------- --------------------
Typ=2 Len=2: c1,4    Typ=2 Len=2: c1,2    Typ=2 Len=2: c1,3
 
时间: 2024-09-29 12:26:05

[20130721]ORACLE 12C Invisible Columns.txt的相关文章

[20130723]ORACLE 12C Invisible Columns的补充.txt

[20130723]ORACLE 12C Invisible Columns的补充.txt http://connormcdonald.wordpress.com/2013/07/22/12c-invisible-columns/ 正好看了以上链接,执行以上过程,可以调整显示顺序.记录一下. SQL> create or replace   2  procedure fix_cols(p_tname varchar2, p_col_list varchar2) is   3    l_col_l

ORACLE 12C Identity Columns实现ORACLE自增长列

在ORACLE 12C以前的版本中,如果要实现列自增长,需要通过序列+触发器实现,到了12C ORACLE 引进了Identity Columns新特性,从而实现了列自增长功能,和mysql,sql server类似功能.使用语法ORACLE 12C IDENTITYGENERATED ALWAYS AS IDENTITY方式测试C:\Users\ffcheng>sqlplus chf/xifenfei@pdb SQL*Plus: Release 12.1.0.2.0 Production on

[20130727]ORACLE 12C使用expdp导出view数据.txt

[20130727]ORACLE 12C使用expdp导出view数据.txt 12C新特性里面可以定义试图,然后通过view当作表一样导出数据,然后导入数据库,自己做一个测试: 1.建立测试环境: SQL> @ver BANNER -------------------------------------------------------------------------------- Oracle Database 12c Enterprise Edition Release 12.1.

[20130817]Oracle 12c new feature In-Database Archiving.txt

[20130817]Oracle 12c new feature In-Database Archiving_Information Life Cycle Management.txt 一些大表保存大量信息,里面的许多信息可能不再需要.而且保持这些信息,对备份以及恢复都带来影响. 12C提供新特性-In-Database Archiving,即 Information Life Cycle Management (ILM),保持新与旧的信息,仅仅显示新信息. 要使用这个新特性,系统会建立一个隐含

[20130803]ORACLE 12C TOP N SQL实现分页功能.txt

[20130803]ORACLE 12C TOP N SQL实现分页功能.txt 参考链接:http://www.xifenfei.com/4257.html SQL> @verBANNER                                                                               CON_ID----------------------------------------------------------------------

[20130803]ORACLE 12C RMAN 功能增强.txt

[20130803]ORACLE 12C RMAN 功能增强.txt 在oracle 12c rman中可以直接输入sql语句,缺点就是仅仅输出最大仅仅80列,不知道如何调整. d:\tmp>rman target sys/xxxx@test01p Recovery Manager: Release 12.1.0.1.0 - Production on Fri Aug 2 22:53:49 2013 Copyright (c) 1982, 2013, Oracle and/or its affi

[20130809]12c Clustering Factor.txt

[20130809]12c Clustering Factor.txt 以前在11G以前,如果使用assm,表的CF经常会很大,即使你插入的像顺序号这样的字段,由于多个会话同时操作,插入的数据分布的不同的块中,以顺序号为索引的CF也会变得很大,甚至接近记录的数量.这个在<基于成本的优化>里面也有介绍. 但是在12g可以设置一个参数改善这种情况,做一些测试看看. 参考了Richard Foote大师的blog:http://richardfoote.wordpress.com/2013/05/0

BenchmarkSQL 测试Oracle 12c TPC-C 性能

使用BenchmarkSQL测试一下Oracle 12c的TPC-C性能,同时对比一下PostgreSQL 9.5的性能. 测试机: 3 * PCI-E SSD,逻辑卷条带,XFS,数据块对齐,16核开HT,256G内存. 12c安装,配置请参考 http://blog.163.com/digoal@126/blog/static/1638770402015112281556942/ http://blog.163.com/digoal@126/blog/static/1638770402015

ORACLE 12C 相同列创建多个索引方法

从ORACLE 12C开始允许在同一列上创建不同类型的index,用来做性能调优,不同类型的index主要包括(B*TREE vs BITMAP,Local vs Global) ORACLE 11G  代码如下 复制代码 SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g