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来产生更少的REDO
ORACLE数据库会对产生改变的操作记录REDO,比如DDL语句、DML语句,这些操作首先会放在redo buffer中,然后由LGER进程根据触发条件写到联机日志文件,如果数据库开启归档的话,还要在日志切换的时候归档。在这样一个完整的链条上的每一个环节,都可能会成为性能的瓶颈,所以需要引起DBA和数据库应用人员的注意。
下面案例中,当把一个表设置成NOLOGGING模式的时候,通过一定的插入操作,可以让oracle产生较少的REDO。
SQL> conn / as sysdba
SQL> 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 stat
SQL> 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 255
PCTFREE 20 PCTUSED 50
STORAGE( INITIAL 1024K NE