Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

0

积分

1

好友

48

主题
1#
发表于 2013-11-27 15:56:41 | 查看: 4486| 回复: 4
oracle:10.2.0.5
OS:windows 2008 64 bit
在oracle(10g)的手册中解释including:
The primary key columns are always
stored in the index. column_name can be either the last primary key column or any
non primary key column. All non primary key columns that follow column_name are
stored in the overflow data segment.


如果我在创建表的时候,主键并不是放在第一位的
  1. CREATE TABLE "SAJET"."IOT1"
  2.    (        "EMP_NO" CHAR(800),

  3.         "EMP_NAME" VARCHAR2(20),

  4.         "EMP_ID" NUMBER,

  5.         "QUIT_DATE" DATE,

  6.          CONSTRAINT "EMP_IOT1_PK" PRIMARY KEY ("EMP_ID") ENABLE

  7.    ) ORGANIZATION INDEX NOCOMPRESS PCTFREE 10 INITRANS 2 MAXTRANS 255 LOGGING
  8.   STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  9.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  10.   TABLESPACE "SYSBS"
  11. PCTTHRESHOLD 50 INCLUDING "EMP_NAME" OVERFLOW
  12. PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING
  13.   STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  14.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  15.   TABLESPACE "SYSBS
复制代码
这个时候是哪些column被放置在overflow的segment呢,按照以下结果是不是就只有quit_date放在overflow的segment呢

select l.column_name,l.segment_column_id from user_tab_cols l where table_name='IOT1'
  1. COLUMN_NAME        SEGMENT_COLUMN_ID
  2. EMP_NO        2
  3. EMP_NAME        3
  4. EMP_ID        1
  5. QUIT_DATE        4
复制代码
2#
发表于 2013-11-27 16:31:11
FYI
  1. CREATE TABLE "IOT1"
  2.    (        "EMP_NO" CHAR(800),
  3.         "EMP_NAME" VARCHAR2(20),
  4.         "EMP_ID" NUMBER,
  5.         "QUIT_DATE" DATE,
  6.          CONSTRAINT "EMP_IOT1_PK" PRIMARY KEY ("EMP_ID") ENABLE
  7.    ) ORGANIZATION INDEX NOCOMPRESS PCTFREE 10 INITRANS 2 MAXTRANS 255 LOGGING
  8.   STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  9.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  10.   TABLESPACE USERS
  11. PCTTHRESHOLD 50 INCLUDING "EMP_NAME" OVERFLOW
  12. PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING
  13.   STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  14.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  15.   TABLESPACE USERS;
  16.   
  17.   
  18.   
  19.   
  20.   

  21. SQL> col object_id for 999999
  22. SQL> col object_name for a20
  23. SQL> col object_type for a20
  24. SQL> /

  25. OBJECT_ID OBJECT_NAME          OBJECT_TYPE
  26. --------- -------------------- --------------------
  27.    102341 IOT1                 TABLE
  28.    102342 SYS_IOT_OVER_102341  TABLE
  29.    102343 EMP_IOT1_PK          INDEX

  30. SELECT c.table_name, c.column_name,
  31.           CASE WHEN c.column_id <= i.include_column THEN 'TOP' ELSE 'OVERFLOW' END segment
  32.    FROM user_tab_columns c, user_indexes i
  33.    WHERE i.table_name = c.table_name
  34.    ORDER by table_name, column_id;

  35. TABLE_NAME                     COLUMN_NAME                    SEGMENT
  36. ------------------------------ ------------------------------ --------
  37. IOT1                           EMP_NO                         TOP
  38. IOT1                           EMP_NAME                       TOP
  39. IOT1                           EMP_ID                         OVERFLOW
  40. IOT1                           QUIT_DATE                      OVERFLOW
复制代码
IOT上除去主键外 还有 QUIT_DATE                     

回复 只看该作者 道具 举报

3#
发表于 2013-11-27 20:38:10
主键在overflow上么?EMP_ID是主键呀。我不是很理解,是我错过什么了么

回复 只看该作者 道具 举报

4#
发表于 2013-11-27 20:50:29
常规管理] IOT索引组织表内部结构 http://t.askmaclean.com/thread-3438-1-1.html

回复 只看该作者 道具 举报

5#
发表于 2014-1-5 16:59:45
Maclean Liu(刘相兵 发表于 2013-11-27 16:31
FYIIOT上除去主键外 还有 QUIT_DATE

参考了http://jonathanlewis.wordpress.com/2011/12/11/iot-trap/

index segment是不会包含quit_date的。

  1.   CREATE TABLE "SAJET"."IOT"
  2.    (        "OWNER" VARCHAR2(30) NOT NULL ENABLE,

  3.         "OBJECT_TYPE" VARCHAR2(19),

  4.         "OBJECT_NAME" VARCHAR2(30) NOT NULL ENABLE,

  5.          CONSTRAINT "IOT_PK" PRIMARY KEY ("OBJECT_NAME","OWNER", "OBJECT_TYPE") ENABLE

  6.    ) ORGANIZATION INDEX COMPRESS 2 PCTFREE 10 INITRANS 2 MAXTRANS 255 LOGGING
  7.   STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  8.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  9.   TABLESPACE "SYSBS"
  10. PCTTHRESHOLD 50

  11. insert into iot2 (emp_no,emp_name,emp_id,quit_date) values('523698','Kevin',1,sysdate);

  12. insert into iot2 (emp_no,emp_name,emp_id,quit_date) values('52684','ivsds',2,sysdate);
  13. commit;

复制代码
dump leaf block的其中一个entry。看得出来quit_date没有在index block的
  1. row#1[6389] flag: K-----, lock: 2, len=823
  2. col 0; len 2; (2):  c1 03
  3. tl: 818 fb: --H-F--- lb: 0x0  cc: 2
  4. nrid:  0x054bba68.1
  5. col  0: [800]
  6. 35 32 36 38 34 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  7. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  8. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  9. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  10. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  11. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  12. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  13. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  14. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  15. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  16. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  17. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  18. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  19. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  20. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  21. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  22. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  23. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  24. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  25. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  26. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  27. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  28. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  29. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  30. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  31. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  32. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  33. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  34. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  35. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  36. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  37. 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
  38. col  1: [ 5]  69 76 73 64 73
  39. ----- end of leaf block dump -----
  40. End dump data blocks tsn: 12 file#: 21 minblk 768620 maxblk 768620
复制代码
但是有个怪现象,如果最初是插入
  1. insert into iot2 (emp_no,emp_name,emp_id) values('523698','Kevin',1);

  2. insert into iot2 (emp_no,emp_name,emp_id) values('52684','ivsds',2);
  3. commit;
  4. update iot2 set quit_date=sysdate;
  5. commit;
复制代码
那么dump出来的leaf block里面quit_date就会在index block里面

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-12-21 10:22 , Processed in 0.048648 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569