程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle表的創建及相關參數

Oracle表的創建及相關參數

編輯:Oracle教程

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  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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved