码迷,mamicode.com
首页 > 数据库 > 详细

Oracle 表的创建 及相关參数

时间:2019-04-05 18:11:44      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:头部   启用   检查   _id   oracle数据库   结束   ali   app   post   

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:表所在的方案名(所属username)
?	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 NEXT 1024K PCTINCREASE 0 MINEXTENTS 1 MAXEXTENTS 5) TABLESPACE exampletb 2、 改动表结构 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_num SQL> 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:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN\utlexpt1.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


Oracle 表的创建 及相关參数

标签:头部   启用   检查   _id   oracle数据库   结束   ali   app   post   

原文地址:https://www.cnblogs.com/ldxsuanfa/p/10659266.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
分享档案
周排行
mamicode.com排行更多图片
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!