Oracle10g系統管理14

2021-08-31 19:40:21 字數 4224 閱讀 3696

61.設計表

規劃表的型別

規劃資料塊空間使用

規劃表的位置

使用並行方式建表

使用nologging選項建表

使用子查詢(as select)建表時,通過指定nologging選項,可以最小化建表所生成的重做資訊,從而提高建表效能。使用sql*loader或insert進行直接裝載時,使用nologgging也可以加快資料裝載速度。

使用compress選項建表

預計和規劃表尺寸

行格式建立普通表時,oracle會為表分配相應的表段,並且表的所有資料都會存放到相應的表段中。在oracle資料庫中,行資料儲存在資料塊中,並且行長度可變。一般情況下,行資料是按照列定義順序存放的。如果使用了long或long raw型別,那麼它們的資料總是放在行的尾部。

如果使用了lob型別(clob和blob)並且該列的資料長度超過4000個位元組。那麼該列的資料會存放到相應的lob段中

行頭:包含列個數、行鏈、行鎖等資訊

列長度:如果列值小於250位元組,則占用1個位元組,否則占用3個位元組

列值:列的實際資料,null不會占用空間

常用oracle資料型別

char(n)或char(n byte)

char(n char)

varchar2(n)或varchar2(n byte)

varchar2(n char)

number(p,s)

date

timestamp

raw(n)

long,long raw,lob

rowid

資料物件號6位-相對檔案號3位-資料塊號6位-行號3位

oooooo-fff-bbbbbb-rrr

查詢rowid

rowid是表的偽列,與其他列一樣可以直接查詢,因為其資料以掩碼格式存放,用包dbms_rowid進行轉換

select dname,rowid,dbms_rowid.rowid_row_number(rowid) row# from dept where deptno=10;

事務臨時表是指資料只在當前事務內有效的臨時表

create global temporary table temp1(cola int)

on commit delete rows;

insert into temp1 values(1);

commit;

select * from temp1;無資料

事務臨時表temp1的資料只在當前事務內可以檢視:當使用commit或rollback結束事務後,其臨時資料會被自動清除

會話臨時表是資料只在當前會話內有效的臨時表

create global temporary table temp2(cola int)

on commit preserve rows;

insert into temp2 values(1);

commit;

select * from temp2;有資料

使用會話臨時表時,如果使用commit提交事務,那麼其資料仍然可以查詢,但關閉會話後,oracle會自動清除其臨時資料

修改表的物理屬性,使用alter table改變塊空間使用引數pctfree和pctused時,新設定對所有塊都起作用,但對於已分配塊不會立即生效,

而使用alter table改變事務入口initrans時,該設定只會對將來分配的資料塊生效。

重新組織表

alter table department move tablespace user02;

執行alter table命令重新組織表時,因為rowid會發生改變,從而導致表的所有索引轉變為無效狀態,所以在重新組織表之後必須重新建立索引

使用unused選項刪除列

alter table emp set unused column comm;

alter table emp drop unused columns checkpoint 1000;

62.管理索引表

索引表以b-樹結構來組織表的資料,它是主鍵b-樹索引的變種。對於普通表而言,其資料以無序方式儲存。而對於索引表來說,其資料以b-樹結構來組織,並且其頁塊既包含鍵列資料,也包含非鍵列資料。一般情況下,表及其索引資料分別存放在表段和索引段中。當在where子句中引用索引列時,首先定位索引資料並取得rowid,然後根據rowid取得表的資料。如果要經常基於主鍵列檢索表資料,那麼oracle建議使用索引表。建立索引表時,oracle會將表及其主鍵索引的資料一起存放到索引段中。當在where子句中引用主鍵列時,oracle可以直接根據主鍵索引值取得錶行資料。對於普通表來說,表、索引資料分別存放到表段、索引段,要占用更多空間。而對於索引表來書,鍵列和非鍵列的資料都被存放到主鍵索引段中。當經常使用主鍵列定位表資料時,應該建立索引表。使用索引表,一方面降低了磁碟和記憶體空間占用,另一方面也可以提高訪問效能。

建立索引表

create table sales_info(

id number(6) constraint pk_sale primary key,

customer_name varchar2(30),

sales_amount number(10,2),

sales_date date,

remark varchar2(2000)

)organization index tablespace user01

pctthreshold 20 including remark

overflow tablespace user02;

63.管理外部表

外部表是表結構被存放在資料字典,而表空間被存放在os檔案中的表。通過使用外部表,不僅可以在資料庫中查詢os檔案的資料,還可以使用insert方式將os檔案資料裝載到資料庫中,從而實現sql*loader所提供的功能。建立外部表後,可以查詢外部表的資料,在外部表上執行連線查詢,或對外部表的資料進行排序。在外部表上不能執行dml修改也不能在外部表上建立索引。

建立目錄物件,並授予使用者許可權

create directory ext as 'd:\ext';

grant read,write on directory ext to scott;

建立外部表

create table ext_emp(

id number(4),

f_name varchar2(20),

l_name varchar2(25),

job varchar2(10),

mgr number(4),

hiredate date,

sal number(8,2),

comm number(2,2),

dept_id number(4),

email varchar2(25)

)organization external(

type oracle_loader default directory ext

access parameters(

records delimited by newline fields terminated by ','

missing field values are null(

id,f_name,l_name,job,mgr,hiredate char date_format date mask "dd-mm-yyyy",sal,comm,dept_id,email

))location('emp.dat')

);修改外部表

修改預設directory物件

alter table ext_emp default directory ext_new;

修改檔案位置

alter table ext_emp location ('emp_1.dat');

修改訪問引數

alter table ext_emp access parameters(fields terminated by ';');

顯示特定使用者的表

select table_name,num_rows,pct_free,blocks,chain_cnt from dba_tables where owner='scott';

顯示行所在實際位置

select deptno,dname,

dbms_rowid.rowid_relative_fno(rowid) file#,

dbms_rowid.rowid_block_number(rowid) block#,

dbms_rowid.rowid_row_number(rowid) row# from dept;

Oracle10g系統管理2

13.資料庫物理結構 資料庫檔案 資料檔案datafile 重做日誌logfile 控制檔案controlfile 資料檔案的位置及大小,重做日誌檔案的位置及大小,資料庫名稱及建立時間,日誌序列號 歸檔日誌archive log file 引數檔案pfile,spfile,init.ora,spfi...

Oracle10g系統管理4

30.建立資料庫步驟 建立例程服務 建立引數檔案 以nomount方式啟動例程 建立資料庫 執行指令碼完成後續操作 31.建立資料庫指令碼 create database demo maxinstances 8 maxloghistory 1 maxlogfiles 16 maxlogmembers...

Oracle10g系統管理6

39.控制檔案用於記錄和維護資料庫的物理結構。當啟動例程並開啟資料庫時,oracle會根據初始化引數control files在例程和資料庫之間建立關聯。裝載資料庫 mount狀態 時,oracle會按照初始化引數control files定位並開啟控制檔案。開啟資料庫時,oracle會根據控制檔案...