oracle-表结构分析

表结构分析

建表语句
CREATE TABLE table_name(table_name VARCHAR2(10),table_name1 int(5),)
ALTER语句

ALTER TABLE table_name ADD column_name datatype
ALTER TABLE table_name MODIFY (column_name datatype)

oracle ddl

CREATE TABLE "CS_GDBZDATA"."ACCT_WORK_REGISTER" 
   (    "CURDATE" VARCHAR2(10) NOT NULL ENABLE, 
    "MWORKBEGINTIME" VARCHAR2(8), 
    "MWORKENDTIME" VARCHAR2(8), 
    "AWORKBEGINTIME" VARCHAR2(8), 
    "AWORKENDTIME" VARCHAR2(8), 
    "NWORKBEGINTIME" VARCHAR2(8), 
    "NWORKENDTIME" VARCHAR2(8), 
    "WEEK" VARCHAR2(1), 
    "WORKFLAG" VARCHAR2(10), 
    "AREATYPE" VARCHAR2(10), 
    "WORKFLAGHK" VARCHAR2(10), 
    "WORKFLAGMC" VARCHAR2(10)
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "CS_GDBZDATATBS" ;
  ALTER TABLE "CS_GDBZDATA"."ACCT_WORK_REGISTER" MODIFY ("CURDATE" NOT NULL ENABLE);

 


这些参数涉及到存储过程
一般就默认
可根据业务需求相应变更

PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING

关键字段解释

这时候 PCTFREE 代表着设定为 10 ,意思就是说,当 BLOCK 使用到达 90% 的时候,就不可以在使用了,
这个 BLOCK 应该从 FREELIST 列表中移除 (un-link) 。
为何要保留 10% 的空间呢?
这是为了提供 update 数据时所可能增加的空间使用,如果空间保留的太小,就容易发生 row chaining 。


假设 PCTUSED 为 40 ,代表当我们把水杯的水喝到剩下 40% 以下时,侍者就会知道需要加水了。
如果说 PCTUSED 设的太大,例如70 隐含的意义是,这个杯子的利用率增加,但是侍者频繁的服务造成了负荷 (I/O Overhead) 。
喝水( 如同 DELETE 事务操作 ) ,放回 FREELIST ,加水 ( 如同 INSERT 事务操作 ) 。

INITRANS 指的是一个 BLOCK 上初始预分配给并行交易控制的空间 (ITLs)
MAXTRANS 指的是如果 INITRANS 空间不够用了,就会自动扩展 ITL ,直到最大值也就是 MAXTRANS 值为止

如果你建库的时候写上LOGGING,表时你想在建库及随后的操作语句中记录日志log.
NOCOMPRESS  LOB是对大对象字段LOB不压缩

posted @ 2017-09-21 11:20  alan-alan  阅读(577)  评论(0编辑  收藏  举报