1. 程式人生 > >Oracle 11g R2 DBA 操作指南(17) 管理和維護表

Oracle 11g R2 DBA 操作指南(17) 管理和維護表

1.Oracle基本的資料儲存機制——表
1.1 資料的儲存型別
Oracle定義了3種資料型別,分別是標量資料型別、集合資料型別和關係資料型別。

(1)標量資料型別。
VARCHAR2(size)和NVARCHAR2(size):變長字元型資料
CHAR(size)和NCHAR(size):定義字元型資料
DATE:日期型資料
    Oracle伺服器使用7個定長的儲存區儲存日期型資料,它可以月,年,日,世紀,時,分和秒。
NUMBER(P,S):數字型資料
    引數p的最大值為38,最小值為1,而引數s的最大值為1217,最小值為-817.
CLOB或LONG:用於儲存大資料物件,該物件為定長的字元型資料。對於CLOB資料型別的列的操作不能直接使用Oracle資料庫指令,需要一個DBMS_LOB的PL/SQL軟體包來維護該資料型別的列。
BLOB或LONG RAW:儲存無結構的大物件,如照片,PPT,二進位制影象等。它和CLOB資料型別一樣,BLOB資料型別的列的操作只能通過PL/SQL軟體包的DBMS_LOB來實現。
BFILE:在作業系統檔案中儲存無結構的二進位制物件,顯然它是ORACLE的外部資料型別,Oracle無法直接維護這些資料型別,必須由作業系統來維護。
RAW:該資料型別使得資料庫可以直接儲存二進位制資料,在計算機直接傳輸該型別資料時,資料庫不對資料做任何轉換,所以該資料型別的儲存和傳輸效率較高,RAW資料型別的最大長度為2000個位元組。
*LONG和LONG RAW資料型別主要用在Oracle8以前的資料庫系統。LONG資料型別完全可以用Oracle9i,oracle10g,Oracle11g的CLOB或BLOB資料型別替換。

(2)集合資料型別
Oracle集合資料型別包括巢狀表和VARRY資料型別。在巢狀表的列值中又包含表,巢狀表中的元素數量沒有限制,當然不能超過表所在的表空間的大小,而VARRY集合中的元素是有數量限制的。
(3)關係資料型別。
關係型別REF指向一個物件,在Oracle資料庫中一個典型的REF型別的物件就是遊標cursor。

1.2 行ID(ROWID)
ROWID也是一種資料型別,但是這種資料型別是Oracle伺服器使用並管理的。首先解釋ROWID的特性,通過特性可以理解ROWID的作用。

ROWID是資料庫中每一行的唯一識別符號。
ROWID作為列值是隱式儲存的。
ROWID不直接給出行的實體地址,但是可以用ROWID來定位行。
ROWID提供了最快速地訪問表中行的方法。

雖然ROWID是非顯式儲存的,但是對於每一個表,都可以查詢該表中每一行的ROWID。

select deptno,dname,loc,rowid from dept;

ROWID
AAAH17EAAIAAAAByAAB
前6位AAAH17E為資料物件號,在資料庫中每個物件是唯一的。接著3位AAI為相對檔案號,它和表空間中的一個數據檔案對應。接著為AAAABy的塊號,塊號為相對檔案中儲存該行的塊的位置,最後三位AAB為行號,行號標識塊頭中行目錄的位置,而使用該行目錄的位置可以找到行的起始地址。

2016/09/17 22:50:00

2.建立表
2.1 Oracle建立表的規則

Oracle資料庫推薦了一些與表相關的標準。
①命名儘量簡單,表名要具有一定的意義,即表名要清楚描述表中儲存的資料內容,如一個臨時員工表的表名為temp_employees。
②每個表一個表空間,這樣易於管理和維護,對一個表空間的維護不影響其他的表,並且該表空間是本地管理的。
③使用標準EXTENT尺寸減少表空間碎片。
④Oracle資料庫允許表名的最大長度為30個字元。

2.2 建立普通表

建立一個臨時員工表temp_employees
create table scott.temp_employees
    (employee_id    number(17),
     employee_name  varchar(30),
     employee_sex   char,
     department     varchar(30))
    tablespace users;

可以在dba_tables中查詢表是否成功建立
select owner,table_name,tablespace_name from dba_tables where owner = 'SCOTT';

建立一個本地管理的表空間lin
create tablespace lin
datafile 'd:\temp\lin.dbf'
size 30M
extent management local
uniform size 1M;

建立臨時表
臨時表是非常特殊的表,該表只對當前使用者的當前會話有效。建立臨時表的目的就是使得某些操作效率更高。臨時表中的資料只對當前的會話的使用者有效,是當前會話的私有資料,當前會話只操作自己的資料,沒有資料鎖的爭用,這極大提高了臨時表操作的效率。
create global temporary table
scott.emp_temporary
on commit preserve rows
as
select * from scott.emp
where job = 'MANAGER';

如果不再使用臨時表,則最好刪除,比較它佔用儲存空間,而且一旦使用者改變或重新登入,都無法重新使用該表。
DROP TABLE scott.emp_temporary;

3.段空間管理
在Oracle9i之後開始使用自動段空間管理即ASSM,它使用點陣圖來管理段空間的使用情況。

4.理解高水位線(HWM)
高水位線HWM是Oracle訪問資料實現全表掃描的資料塊範圍。如果使用TRUNCATE而不是DELETE刪除表中的所有資料,此時會調整高水位線到表段的第一個資料塊。

5.理解行遷移
行遷移是指某一行的資料量過大,導致該行無法儲存在建立這一行的資料庫中,此時Oracle就會使得該行離開原來的塊,儲存到另一個數據庫中,該行的原始塊和新塊之間使用ROWID記錄這種變遷關係,使得原始行知道後續資料儲存的位置。

2016/09/20 21:36:00

6.建立索引組織表(IOT)