虚位以待(AD)
虚位以待(AD)
首页 > 数据库 > Oracle数据库 > Oracle表的创建及相关参数

Oracle表的创建及相关参数
类别:Oracle数据库   作者:码皇   来源:Oracle 表的创建 及相关参数     点击:

1、创建表完整语法CREATE TABLE [schema ]table(column datatype [, column datatype] … )[TABLESPACE tablespace][PCTFREE integer][PCTUSED integer][INITRANS integer][
    1、 创建表完整语法CREATE TABLE [schema.]table(column datatype [, column datatype] … )[TABLESPACE tablespace][PCTFREE integer][PCTUSED integer][INITRANS integer][MAXTRANS integer][STORAGE storage-clause][LOGGING | NOLOGGING][CACHE | NOCACHE] ];
    说明:? Schema:表所在的方案名(所属用户名)? Table:表名? Column:字段名? Datatype:字段的数据类型? Tablespace:表所在的表空间名控制数据空间使用的参数:? Pctfree:为了行长度增长而在每个块中保留的空间的量(以占整个空间减去块头部后所剩余空间的百分比形式表示),当剩余空间不足pctfree时,不再向该块中增加新行。? Pctused:在块剩余空间不足pctfree后,块已使用空间百分比必须小于pctused后,才能向该块中增加新行。控制并发性参数:? INITRANS:在块中预先分配的事务项数,INITRANS对数据段的缺省值为1,对索引段的缺省值为2,以保证最低程度的并发。当事务访问表中的一个数据块时,该事务会在oracle块的头部中记录一个值,用于标记该事务正在使用这个oracle块。该事务结束时,会删除对应的条目。例如,如果INITRANS设为3,则保证至少3个事务可以同时对块进行更改。如果需要,也可以从块空闲空间内分配其它事务位置,以允许更多的事务并发修改块内的行。? MAXTRANS:限定可以分配给每个块的最大事务项数,缺省值为255。设置后,该值限制事务位置对空间的使用,从而保证块内有足够的空间供行或者索引数据使用。? STORAGE:标识决定如何将区分配给表的存储子句i. INITIAL:初始区的大小ii. NEXT:下一个区的大小iii. PCTINCREASE:以后每个区空间增长的百分比iv. MINEXTENTS:段中初始区的数量v. MAXEXTENTS:最大能扩展的区数? LOGGING:指定表的创建将记录到重做日志文件中。它还指定所有针对该表的后续操作都将被记录下来。这是缺省设置。? NOLOGGING:指定表的创建将不被记录到重做日志文件中。? CACHE:指定即使在执行全表扫描时,为该表检索的块也将放置在缓冲区高速缓存的LRU列表最近使用的一端。? NOCACHE:指定在执行全表扫描时,为该表检索的块将放置在缓冲区高速缓存的LRU列表最近未使用的一端。? 案例1? 通过设置表的NOLOGGING来产生更少的REDOORACLE数据库会对产生改变的操作记录REDO,比如DDL语句、DML语句,这些操作首先会放在redo buffer中,然后由LGER进程根据触发条件写到联机日志文件,如果数据库开启归档的话,还要在日志切换的时候归档。在这样一个完整的链条上的每一个环节,都可能会成为性能的瓶颈,所以需要引起DBA和数据库应用人员的注意。下面案例中,当把一个表设置成NOLOGGING模式的时候,通过一定的插入操作,可以让oracle产生较少的REDO。SQL> conn / as sysdbaSQL> archive log list --此时为归档模式SQL> create table tj as select * from dba_objects where 1=2;
    SQL> select count(*) from tj;
    SQL> select table_name,logging from user_tables where table_name='TJ';
    --观察logging属性值SQL> set autotrace on statSQL> insert into tj select * from dba_objects;
    --观察redo size的统计值SQL> rollback;
    SQL> insert /*+append*/ into tj select * from dba_objects;
    --观察redo size的统计值SQL> rollback;
    SQL> alter table tj nologging;
    SQL> select table_name,logging from user_tables where table_name='TJ';
    --观察logging属性值SQL> insert into tj select * from dba_objects;
    --观察redo size的统计值SQL> rollback;
    SQL> insert /*+append*/ into tj select * from dba_objects;
    --观察redo size的统计值补充说明:设置Autotrace的命令用法: SET AUTOT[RACE] {
    OFF | ON | TRACE[ONLY]}
    [EXP[LAIN]] [STAT[ISTICS]]--关闭跟踪执行计划和统计信息功能(默认关闭)。SQL> set autotrace off;
    --执行计划和统计信息都显示SQL> set autotrace on ;
    --只显示执行计划和统计信息,不显示sql执行结果。SQL> set autotrace traceonly;
    --只显示执行计划SQL> set autotrace on explain;
    --只显示统计信息SQL> set autotrace on statistics;
    补充说明:归档模式与非归档模式间的转换命令--1)关闭数据库 SQL>shutdown immediate --2)把数据库启动到mount的模式 SQL>startup mount --3)把数据库改为非归档模式 /归档模式SQL>alter database noarchivelog;
    或者SQL>alter database archivelog;
    --4)打开数据库 SQL>Alter database open;
    --5)查看数据库归档模式的状态SQL> archive log list备注:如果在关闭归档日志时出现ORA-38774错误,请关闭flash闪回数据库模式。SQL> alter database flashback off ? 案例2? 创建一张基本表Create tablespace exampletb Datafile 'E: examp01.dbf' reuse;
    CREATE TABLE scott.student (id NUMBER(5) CONSTRAINT st_id_pk PRIMARY KEY, name VARCHAR2(10) CONSTRAINT st_name NOT NULL, phone VARCHAR2(11), school_time DATE DEFAULT SYSDATE,sex CHAR(1),CONSTRAINT st_sex_ck CHECK (sex IN('F','M')),CONSTRAINT st_ph_uk UNIQUE (name))INITRANS 1 MAXTRANS 255PCTFREE 20 PCTUSED 50STORAGE( INITIAL 1024K NEXT 1024K PCTINCREASE 0 MINEXTENTS 1 MAXEXTENTS 5)TABLESPACE exampletb2、 修改表结构Alter table 表名 add (列名 类型);
    --添加新列Alter table 表名 modify (列名 类型);
    --修改列定义Alter table 表名 drop column 列名;
    --删除列Rename 表名 to 新表名 --改表名(表名前不能加方案名)ALTER TABLE 表名 RENAME COLUMN 当前列名 TO 新列名;
    --修改列名? 修改表结构案例SQL> Alter table scott.student add (QQ number(10));
    --为student表增加列存放QQ号SQL> Alter table scott.student modify (QQ number(12));
    --修改student表中名为QQ的列SQL> Alter table scott.student rename COLUMN QQ to QQ_num;
    --将student表中名为QQ的列改名QQ_numSQL> Alter table scott.student drop column QQ_num;
    --删除student表中名为QQ_num的列SQL> insert into scott.student(id,name) values(1, 'lucy');
    --向student表中插入一条记录SQL> Alter table scott.student modify (sex char(1) default 'M');
    --修改sex列的定义SQL> insert into scott.student(id,name) values(2, 'Dell');
    --向student表中插入一条记录SQL> Alter table scott.student modify (sex char(1) default null);
    --修改sex列的定义SQL> insert into scott.student(id,name) values(3, 'Mary');
    --向student表中插入一条记录思考:oracle中列的默认值设置与修改。3、 表的约束Alter table 表名 add constraint 约束 ;
    --增加一个约束Alter table 表名 drop constraint 约束名;
    --删除一个约束alter table表名enable [validate/novalidate] constraint约束名;
    --启用一个约束,validate/novalidate代表启用约束时是否对表中原有数据作检查。alter table表名disable constraint约束名;
    --禁用一个约束? 修改表约束案例SQL> Alter table scott.student disable constraint st_sex_ck;
    --禁用st_sex_ck约束SQL> insert into scott.student(id,name,sex) values(4, 'Lily', 'N');
    SQL> Alter table scott.student enable novalidate constraint st_sex_ck;
    --启用st_sex_ck约束,但不检查已有数据。SQL> select * from scott.student;
    SQL> insert into scott.student(id,name,sex) values(5, 'Mark', 'N');
    SQL>@$ORACLE_HOME/rdbms/admin/utlexpt1.sql --建立异常数据保存表 或者@ G:appAdministratorproduct11.2.0dbhome_1RDBMSADMINutlexpt1.sql--具体路径可以通过搜索utlexpt1.sql获取SQL>alter table scott.student enable validate constraint st_sex_ck exceptions into exceptions;
    -- 将异常数据装入异常表SQL> select * from scott.student where rowid in(select row_id from exceptions);
    --查看对应的原表中的异常数据SQL>Alter table scott.student drop constraint st_sex_ck;
    --删除约束st_sex_ck

相关热词搜索: 参数