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會根據控制檔案...