oracle查看列状态unused,Oracle9i下将列设为UNUSED时的系统行为

下面以例子说话:

SQL> create table test1.unused_test  as select rownum a,rownum*2 b,rownum*10 c from dba_objects where rownum<=100;

Table created.

看看数据字典:

SQL> select column_name,data_type,column_id,hidden_column,segment_column_id seg_

cid,internal_column_id internal_cid from dba_tab_cols where wner='TEST1' and ta

ble_name='UNUSED_TEST';

COLUMN_NAM DATA_TYPE            COLUMN_ID HIDDEN    SEG_CID INTERNAL_CID

---------- -------------------- --------- ------ ---------- ------------

A          NUMBER                       1 NO              1            1

B          NUMBER                       2 NO              2            2

C          NUMBER                       3 NO              3            3

SQL> select column_name,data_type,column_id from dba_tab_columns where wner='TE

ST1' and table_name='UNUSED_TEST';

COLUMN_NAM DATA_TYPE            COLUMN_ID

---------- -------------------- ---------

A          NUMBER                       1

B          NUMBER                       2

C          NUMBER                       3

SQL> select object_id from dba_objects where wner='TEST1' and object_name='UNUS

ED_TEST' and object_type='TABLE';

OBJECT_ID

----------

6577

SQL> select col#,segcol#,name,intcol# from col$ where obj#=6577;

COL#    SEGCOL# NAME          INTCOL#

---------- ---------- ---------- ----------

1          1 A                   1

2          2 B                   2

3          3 C                   3

通过DUMP数据库文件块可以看到每行有三列(这里不再列出DUMP文件内容)

下面将B列置为unused状态:

SQL> alter table test1.unused_test set unused (b);

Table altered.

SQL> select column_name,data_type,column_id,hidden_column,segment_column_id seg_

cid,internal_column_id internal_cid from dba_tab_cols where wner='TEST1' and ta

ble_name='UNUSED_TEST';

COLUMN_NAME                  DATA_T COLUMN_ID HIDDEN    SEG_CID INTERNAL_CID

---------------------------- ------ --------- ------ ---------- ------------

A                            NUMBER         1 NO              1            1

SYS_C00002_08011915:24:34$   NUMBER           YES             2            2

C                            NUMBER         2 NO              3            3

这里原来的B列,其名字为系统自动生成的一列,命名形式为SYS_CNNNNN_YYMMDDHH24:MI:SS$,NNNNN为原来的COLUMN_ID,前面补0补足成5数。hidden已经变为YES,COLUMN_ID为空。其他两列A和C的COLUMN_ID顺序作了调整。这三列的SEGMENT_COLUMN_ID和INTERNAL_COLUMN_ID没有变化。

SQL> select column_name,data_type,column_id from dba_tab_columns where wner='TE

ST1' and table_name='UNUSED_TEST';

COLUMN_NAME                  DATA_T COLUMN_ID

---------------------------- ------ ---------

A                            NUMBER         1

C                            NUMBER         2

在DBA_TAB_COLUMNS视图中,B列已经没有显示出来。

SQL> select col#,segcol#,name,intcol# from col$ where obj#=6577;

COL#    SEGCOL# NAME                            INTCOL#

---------- ---------- ---------------------------- ----------

1          1 A                                     1

0          2 SYS_C00002_08011915:24:34$            2

2          3 C                                     3

这里B列的COL#已经变成0.SEGCOL#和INTCOL#列没有变化,NAME也已经变化

DUMP出来的数据中,每一行仍然有三列。

尝试插入数据:

SQL> insert into test1.unused_test values (1234,4321,1);

insert into test1.unused_test values (1234,4321,1)

*

ERROR at line 1:

ORA-00913: too many values

SQL> insert into test1.unused_test values (1234,4321);

1 row created.

SQL> select rowid from test1.unused_test where a=1234 and c=4321;

ROWID

------------------

AAABmxAAFAAAAEuAAA

此ROWID对应的rfile#为5,block#为302,row number为0

DUMP出这一块查看第0行数据,发现在数据块中每行仍然是3列,第二列也就是原来的B列其值为NULL。

现在我们将C列删除:

SQL> alter table test1.unused_test drop (c);

Table altered.

SQL> select column_name,data_type,column_id,hidden_column,segment_column_id seg_

cid,internal_column_id internal_cid from dba_tab_cols where wner='TEST1' and ta

ble_name='UNUSED_TEST';

COLUMN_NAME                  DATA_T COLUMN_ID HIDDEN    SEG_CID INTERNAL_CID

---------------------------- ------ --------- ------ ---------- ------------

A                            NUMBER         1 NO              1            1

这里可以看出B列和C列都已经删除。

SQL> select column_name,data_type,column_id from dba_tab_columns where wner='TE

ST1' and table_name='UNUSED_TEST';

COLUMN_NAME                  DATA_T COLUMN_ID

---------------------------- ------ ---------

A                            NUMBER         1

SQL> select col#,segcol#,name,intcol# from col$ where obj#=6577;

COL#    SEGCOL# NAME                            INTCOL#

---------- ---------- ---------------------------- ----------

1          1 A                                     1

都可以看出B列和C列已经被删除。从这个实验就可以看出,在删除C时会将UNUSED列一并删除。

DUMP出数据块可以发展,块中每一行只有1列。因此SET UNUSED只是修改了数据字典,速度较多。而将COLUMN DROP掉,不仅修改数据字典,而且修改实际的块数据。如果表比较大,会耗费比较长的时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/422075.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(603):计算机基础

好久没有学习前端了&#xff0c;开始找找感觉

c++成员变量与构造函数

一、 如果成员变量是对象实体&#xff08;不是指针&#xff09; 例如StudyTool类中有一个Book类的成员变量&#xff0c;StudyTool的构造函数和析构函数均为空函数。 class StudyTool { public:Book book;StudyTool();virtual ~StudyTool();void printBook(); }; 那么在main()方…

oracle开启日志服务,Oralce 归档日志开启与关闭示例

查看oracle数据库是否为归档模式SQL> select name,log_mode from V$database;NAME LOG_MODE------------------ ------------------------TEST NOARCHIVELOGSQL> archive log listDatabase log mode No Archive ModeAutomatic archival DisabledArchive destination USE_…

网络抓包工具--网路岗

绿色压缩包下载下载 转载于:https://www.cnblogs.com/vilyLei/articles/2799400.html

windows cmd后ipconfig后提示不是内部命令或外部命令

出现这样的提示怎么办&#xff1f; cd c:\windows\system32后再次输入ipconfig发现可以使用了 总不能每次使用都cd一下吧&#xff0c;解决方法&#xff1a;在环境变量里&#xff0c;新添加一个Path 路径写c:/windows/system32&#xff0c;就ok了转载于:https://www.cnblogs.com…

php layui 上传文件,laravel使用layui 上传文件 支持pdf上传

控制器&#xff1a;file(file);//获取图片$allowed_extensions ["png", "jpg", "gif","pdf"]; //多类型//图片是否是正规图片if ($file->getClientOriginalExtension()&&!in_array($file->getClientOriginalExtension(…

STL 中map的用法详解

STL 中map的用法详解 Map是STL的一个关联容器&#xff0c;它提供一对一&#xff08;其中第一个可以称为关键字&#xff0c;每个关键字只能在map中出现一次&#xff0c;第二个可能称为该关键字的值&#xff09;的数据处理能力&#xff0c;由于这个特性&#xff0c;它完成有可能在…

php在线模拟高考志愿,高考志愿模拟填报系统

出国留学高考网为大家提供吉林省2018高考志愿模拟填报系统&#xff0c;更多高考资讯请关注我们网站的更新!吉林省2018高考志愿模拟填报系统填报时间5月26日至28日(每天09&#xff1a;00至15&#xff1a;00)。模拟范围取得吉林省2018年高考报名资格的统考考生。(一)登录模拟训练…

firefox addons

webrank searchstatus转载于:https://www.cnblogs.com/haven/archive/2012/12/08/2808388.html

php递归查找树节点,php递归树

核资源。 执行计划改造 MySQL的执行计划是一棵左深树&#xff0c;在并行执行之前&#xff0c;MySQL使用一个线程递归的执行这颗左深树&#xff0c;然后将join结果进行sort或者aggregation。并行的目标就是使用多个线程来并行执行这颗执行计划树。将第一张non-const primary表进…

献给iphone开发的同仁们,同时也给自己做个笔记

192个加分的回答&#xff1a; 有些初学时的做法&#xff0c;现在我认为是不标准的。 1) 有了property&#xff0c;在“私有”的成员变量前面不再使用"_"前缀。如果一个成员变量可以被其他的类访问&#xff0c;那就应该用property。我不喜欢“_”前缀&#xff0c;它会…

linux 编译多个文件,linux gcc编译多个源文件的方法

华为荣耀6 H60-L02&sol;L12(联通版)救砖包【适用于无限重启】本帖最后由 HOT米粒 于 2014-11-16 20:43 编辑 华为荣耀6 H60-L02/L12(联通版)救砖包[适用于无限重启]说明: 1.本工具包用于华为荣耀6 H60-L02(联通版): ...CMS本质上是什么2015-121.数据可以任意取和构造,结构也…

uboot(一)

BootLoader指系统启动后&#xff0c;在操作系统内核运行之前运行的一段小程序。通过BootLoader&#xff0c;我们可以初始化硬件设备、建立内存空间的映射图&#xff0c;从而将系统的软硬件环境带到一个合适的状态&#xff0c;以便为最终调用操作系统内核准备好正确的环境。通常…

linux+默认监听+目录,C# 时时监听目录文件改动

C# 时时监听目录文件改动:public static class DirectoryListen{public static string CountListXmlPath CountCore.CountListXmlPath;public static string DirectoryListenPath CountCore.ListenerAssemblyDirectory;[PermissionSetAttribute(SecurityAction.Demand, Name …