Oracle 10g 對象管理

來源:互聯網
上載者:User

Oracle資料庫中,表,索引,預存程序,函數等都是對象。
schema 的名稱與使用者名稱相同,但是與使用者不是同一回事,如果使用者沒有任何對象,則schema就不存在。
一、表
ORACLE表分四類:
普通表     ---  一個表對應一個segment
分區表 Partition Table   虛擬表,沒有對應的segment
索引組織表  Index Organized Table  簡稱 IOT   虛擬表
簇表      ---   虛擬表  首先建立一個簇,一個簇對應一個segment

1、普通表
1)tablespace部分 設定表的logging屬性, Yes 表示對錶DML操作產生重做條目, No 不產生。
2)Extents部分,  設定Initial size
3)Space Usage部分,設定PCTFREE ,預設10 ,表示資料區塊可用空間低於10%以後,資料區塊就不允許insert。PCTUSED 表示什麼情況下可以被insert,預設40%,表示
   當資料區塊使用空間低於40%以後,該資料區塊就可以再被insert。啟用ASSM,就不能設定PCTUSED.
2、rowid  是一個偽列,每一條記錄都有rowid偽列。
對應ORACLE10g 來說,rowid 格式:OOOOOOFFFBBBBBBRRR
OOOOOO:資料行所在的對象號
FFF   :資料行所在的相對檔案號
BBBBBB:資料行所在的資料區塊號
RRR   :資料行所在的資料區塊中的行號
rowid採用64進位,即:A~Z a~z 0~9 / +  64個字元來表示。
A~Z :0~25
a~z :26~51
0~9 :52~61
/   :62
+   :63

例子 rowid = AAAM0hAAEAAAAGnAAA
SQL>select object_id from user_objects where object_name = 'BOOKS';      --對象號
SQL>select dbms_rowid.rowid_relative_fno(rowid) as "File No" from dual;  --檔案號
SQL>select dbms_rowid.rowid_block_number(rowid) as "File No" from dual;  --塊號
SQL>select dbms_rowid.rowid_row_number(rowid) as "File No" from dual;    --行號

3、管理普通表
1)擴充表:有時需要主動擴充表佔用空間,或者將表資料分布到多個檔案,將表的I/O分散到多個磁碟上。
SQL>alter table books allocate extent (size 1M datafile '/u01/app/oracel/oradata/ora10g/users02.dbf');
2)重整表  --消除幣表的資料區塊層級的片段。
稀疏表產生的原因:該表存在很多的insert 和 delete、
在表的segment header裡面,記錄了一個值,叫高水位標誌(High Water Mark 簡稱HWM)表示當前segment 使用最後一個資料區塊的位置。
說明:表進行刪除資料後,HWM位置不會改變,在對錶進行全表掃描時,仍然要掃描到HWM為止。ORACLE10g之前使用move或者匯出匯入的方式進行重整表來減小WHM,如下:
SQL>alter table books move tablespace example;  --把表移到example資料表空間,如果沒有加資料表空間,就在當前表對應資料表空間重整,重整後全表索引失效。
ORACLE 10g 可以使用shrink(收縮)對錶進行收縮。
3)收縮表
條件:表所在的資料表空間必須使用 ASSM (自動段空間管理)
      收縮表引起資料行在不同的資料區塊轉移,必須啟用 row movement 選項
SQL>alter table t enable row movement;
收縮表語句:
SQL>alter table t shrink space compact;  --對錶t只進行壓縮階段,不下降HWM
SQL>alter table t shrink space;          --對錶t只進行壓縮階段,下降HWM
SQL>alter table t shrink space cascade;  --對錶t只進行壓縮階段,下降HWM;同時還收縮表t相關的其他segment
說明:可以使用Segment Advisor 協助哪些segment可以進行收縮。
4)截斷表
truncate 命令是一個DDL命令,最後WHM下降到最低。
SQL>truncate table t;
注意:有些時候截斷一個巨大的表要花費很長的時間,導致表長時間不能使用。再截斷的時候,可以在更新完資料字典以後,不立即釋放全部的資料區塊,但WHM已經下降到最低。
      可以在系統比較空閑分多次釋放資料區塊,每次釋放部分空間。命令如下:
SQL>truncate table t1 reuse storage;
SQL>alter table t1 deallocate unused keep 30M;  --將表t1沒有用的資料區塊釋放,釋放到剩餘的表所佔用的空間為30M為止。
SQL>alter table t1 deallocate unused keep 15M;
SQL>alter table t1 deallocate unused keep 0M;
說明:如果其他使用者已經把資料插入t1,則不會刪除,只釋放沒有的資料區塊。
5)刪除表
刪除表屬於DDL命令,只是更新資料字典的資訊,ORACLE不會讀取表包含的資料區塊資訊,因此,即使表處於唯讀資料表空間裡,該表也是可以被刪除的。
SQL>drop table t;  
SQL>drop table t cascade constraints;
添加cascade constraints 選項,同時刪除參考資料表 t 的外鍵。
6)修改或刪除列
SQL>alter table t rename column to code;
SQL>alter table t drop column code;
SQL>alter table t drop column code cascade constraints;  --同時刪除引用的外鍵
註:在刪除列的過程中,oracle會消耗undo資料表空間,如記錄很多,會消耗過多的undo資料表空間。
SQL>alter table t drop column code cascade constraints checkpoint 2000;
checkpoint 2000 表示每2000條記錄提交一次,從而釋放出undo資源。
註:在刪除列的過程中,oracle會鎖定表,無法對錶進行DML操作,如果資料量很大,則將花費很長時間,在業務高峰期,影響嚴重。
SQL>alter table t set unused column code;    
SQL>select * from user_unusedd_col_tabs;        ----可以查詢到失效的列。
可以先從邏輯上使該列失效,在業務低峰期在物理上刪除失效的列。
SQL>alter table t drop umused columns;
SQL>alter table t drop umused columns checkpoint 2000;

4、約束 constraints
ORACLE 資料庫裡面,有以下5中約束:
1)非空 not null     ---本質上說,not null 屬於 check : col_name is not null
2)唯一 unique
3)主鍵 primary key
4)外鍵 foreign key
5)檢查 check

約束的狀態:
1)enable和disable :對錶進行插入或修改時,對插入或修改後的資料進行檢驗,判斷是否違反約束。
2)validate和novalidate :是否對錶裡已經存在的資料進行檢驗,判斷是否違反約束。
上面的組合存在四種狀態。
SQL>alter table books enable validate constraint pk_books;
SQL>alter table books enable novalidate constraint pk_books;
SQL>alter table books rename constraint pk_books to pk_books_id;

約束校正的時機
延遲約束 deferred constraint :約束在提交的時候進行校正。
1)deferrable :說明約束是否可以被延遲,添加該選項說明可以被延遲。
2)initially deferred 或者 initially immediate:說明約束建立時候,何時校正資料。
initially deferred :提交校正。設定該選項必須設定了deferrable。
initially immediate:預設值,立即校正。
SQL>alter table sales add constraint chk_sales check(price*qty=value) deferrable initially deferred;

SQL>alter session set constraint=deferred;
當發出該語句之後,說明當前session中,對於發出的所有DML語句所涉及的表,只要這些表上約束定義了deferrable選項,這些約束全部延遲檢驗。


5、使用分區表,索引組織表,簇表
Oracle 10g 提供五種分區的方法
1)定界分割 Range Partition
create table t2(id number,createdate date)
  partition by range(createdate)
  (
  partition p1 values less than (to_date('2001-01-01','yyyy-mm-dd')) tablespace ts01,
  partition p2 values less than (to_date('2002-01-01','yyyy-mm-dd')) tablespace ts02,
  partition p3 values less than (to_date('2003-01-01','yyyy-mm-dd')) tablespace ts03,
  partition pmax values less than (maxvalue) tablespace ts04
  );
2)雜湊分割 Hash Partition
create table t3(id number,name varchar2(10))
  partition by hash(id)
  partitions 4
  store in (ts01,ts02.ts03.ts04);
create table t3(id number,varchar2(10))
  partition by hash(id)
  (
  partition p1 tablespace ts01,
  partition p2 tablespace ts02,
  partition p3 tablespace ts03,
  partition p4 tablespace ts04
  ):
3)列表分區 List Partition
create table t4(id number,name varchar2(10),category varchar2(10))
  partition by list(category)
  (
  partition p1 values ('01','02') tablespace ts01,
  partition p2 values ('03','04') tablespace ts02,
  partition p3 values ('05','06','07') tablespace ts03,
  partition p4 values (default) tablespace ts04,
  );
4)範圍雜湊組合分區 Range-Hash Partition
create table t5(id,number,name varchar2(10),createdate date)
 partition by range (createdate)
  subpartition by hash (id)
   subpartitions 4 store in (ts01,ts02)
  (partition p1 values less than (to_date('2001-01-01','yyyy-mm-dd')),
  partition p2 values less than (to_date('2002-01-01','yyyy-mm-dd')),
  partition p3 values less than (to_date('2003-01-01','yyyy-mm-dd')),
  partition pmax values less than (maxvalue)
  subpartitions 2 store in (ts03) );
說明:先按createdate進行定界分割,然後再按照id進行hash分區。預設每個分區包含4個hash子分區,這些子分區都分別在ts01和ts02裡。
也是就是p1,p2,p3都是如此,但對於pmax來說,修改了預設設定,pmax有兩個hash分區,都位於ts03裡。
5)範圍列表組合分區 Range-List Partition
create table t6(id number,name varchar2(10),category varchar2(10),createdate date)
  partition by range(createdate)
   subpartition by list (category)
  (partition p1 values less than (to_date('2001-01-01','yyyy-mm-dd')) tablespace ts01
     (subpartition p1_1 values ('01','02'),
      subpartition p1_2 values ('03','04'),
      subpartition p1_3 values (default) tablespace ts02),
   partition p2 values less than (maxvalue) tablespace ts03
     (subpartition p1_1 values ('01','02'),
      subpartition p1_2 values ('03','04'),
      subpartition p1_3 values (default) tablespace ts04)
  );


索引組織表 index organized table

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.