1. 程式人生 > >Oracle 表的創建 及相關參數

Oracle 表的創建 及相關參數

數據庫 next 跟蹤 sql rollback append stat 限定 計劃

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 表的創建 及相關參數