您好,登錄后才能下訂單哦!
本文概要介紹了Oracle數據庫表空間存儲分配和管理的主要特性及操作。
一、表空間的物理關系和邏輯關系
database:數據庫。
users:用戶,一個數據庫包含多個用戶。
schema:數據庫對象根據用戶與對象的從屬關系組織為不同的模式,一個數據庫用戶所擁有的所有對象稱為一個模式,模式名與用戶名相同,一個用戶模式下的所有數據庫對象是通過多個類型的段來存儲的。
tablespace:表空間,從性能和管理上做邏輯劃分,總體上可劃分為系統表空間、撤銷表空間、臨時表空間、用戶表空間。應盡量減少系統表空間的負擔,用戶數據不要放在系統表空間。10g之后多了SYSAUX表空間(輔助系統表空間),主要用于記錄大量的自調整、優化分析的數據等。
data file:數據文件,大塊數據順序訪問用一個,小塊數據隨機訪問用多個。
segment:段,一種存儲結構,不同類型的數據庫對象以不同的段形式存在,如數據段、索引段、臨時段、撤銷段等。
extent:范圍,Oracle表空間內部分配和回收空間的最小單位,由若干連續的數據塊構成。范圍的大小分配由創建表空間時指定,未指定時則采用Oracle的默認存儲參數。
data block:Oracle數據塊,Oracle的最小IO單位,由多個操作系統塊(os block)組成。主塊大小由初始化參數db_block_size指定(一般默認8K),從塊大小在創建表空間時指定。設定db_nk_cache_size參數為1,在SGA中可分配非標準的DB塊內存,如db_2k_cache_size、db_4k_cache_size、db_32k_cache_size等。
os block:操作系統塊,大小由操作系統決定。
二、表空間存儲參數的設置
1、文件屬性的設置
大文件(bigfile)與小文件(smallfile):大文件是Oracle 10g開始引進的特性,大文件表空間建立在單個數據文件上,文件大小可達32TB。而小文件表空間由一至多個數據文件構成。大文件特性主要為超大型數據庫設計,為了克服在數據變更時Oracle要更新所有數據文件頭信息而可能帶來的效率問題。要使用大文件表空間,在創建表空間時使用bigfile或smallfile關鍵字,create [bigfile | smallfile] tablespace,省略時默認為小文件表空間。
自動擴展(autoextend):autoextend on | off
文件狀態信息:online | offline
表空間的數據文件可以同時創建多個
create [bigfile | smallfile] tablespace mytbs
datafile 'd:\oradata\mes\mytbs01.dbf' size 100m autoextend on next 10m [maxsize 500m | unlimited],
'd:\oradata\mes\mytbs02.dbf' size 100m autoextend off;
2、空間管理的方式
Oracle提供兩類參數設置:范圍管理,段空間管理。
范圍管理(extent management):決定范圍分配信息的存儲位置,有數據字典管理(dictionary)和本地管理(local)兩種方式。前者將表空間的范圍分配信息存儲于系統表空間的數據字典中,后者將范圍分配信息以bitmap形式存儲于表空間數據文件頭部的特殊區域。Oracle推薦并默認使用本地管理的表空間,以提高表空間的操縱性能,Oracle保留數據字典方式管理的表空間只是為了向后兼容。如果system表空間是本地管理的,則不允許創建數據字典管理的表空間。
段空間管理(segment space management):指定段內空間的管理方式,有auto和manual兩種。Oracle推薦使用auto管理方式,manual方式為向后兼容所保留,這需要手動設置段空間的使用參數pct_free和pct_used等。
創建表空間時指定范圍管理和段空間管理方式
create [bigfile | smallfile] tablespace mytbs
datafile 'd:\oradata\mes\mytbs01.dbf' size 100m autoextend on next 10m [maxsize 500m | unlimited],
'd:\oradata\mes\mytbs02.dbf' size 100m autoextend off
extent management [local | dictionary] autoallocate | uniform size 512k
segment space management [auto | manual];
為了減少不必要的額外I/O操作,uniform size的最佳大小應為參數db_block_size和參數db_file_multiblock_read_count設定值兩者的乘積。
3、內部存儲參數的設置
創建表空間時如果指定用老式的數據字典范圍管理方式,則可進一步設置默認的存儲參數(default storage),以控制段內空間的范圍分配。
另可通過關鍵字blocksize指定表空間的非標準數據塊大小,否則按標準數據塊大小(db_block_size參數指定)來設置。創建非標準數據塊大小的表空間,需要事先在SGA中分配非標準數據塊的內存區域,可通過參數db_nk_cache_size = 1來設定。
default storage(
[initial n K|M]
[next n K|M]
[minextents n]
[maxextents n|unlimited]
[pctincrease n]
initial:段空間分配的第一個范圍的字節數。當用戶創建模式對象時,Oracle為范圍分配空間。
next:分配下一個范圍的字節數。
minextents:指定當創建對象時分配范圍的最小數目,默認為1,含義是Oracle僅分配初始范圍,最大值取決于操作系統。如果minextents大于1,則Oracle根據initial、next、pctincrease的值計算下一個范圍的大小。
maxextents:指定Oracle可以分配給一個段結構范圍的最大數目,包括第一個范圍。最小值為1,默認值和最大值取決于操作系統。unlimited表示按需要自動分配范圍數目。
pctincrease:指定第三個和以后的范圍比前一個范圍增大的百分比。早期默認值是50,表示每個擴展比前一個大50%,最小值為0,表示第一個范圍之后的所有范圍的大小都相同。pctincrease參數設定大于0,可令表空間中的小段擁有小的范圍,大段擁有大的范圍并使范圍的數目盡可能少。
使用舉例
create tablespace mytbs
datafile 'd:\oradata\mes\mytbs01.dbf' size 100m
blocksize 4096
default storage(
initial 256k
next 256k
minextents 2
maxextents 100
pctincrease 50);
此代碼創建前需要對非標準數據塊數據緩沖區db_4k_cache_size進行設置
alter system set db_4k_cache_size=1;
之后可看到Oracle實際分配的緩沖區大小
show parameter db_4k_cache_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_4k_cache_size big integer 32M
從Oracle 10g開始,創建表空間時自動設置為extent management local autollocate和segment space management auto,此時create tablespace語句將忽略default storage子句。
三、表空間的維護管理
1、更改表空間的狀態
表空間脫機,如在做系統恢復、數據文件移位等操作時。system表空間、默認的臨時表空間、包含活動回滾段的表空間(當前的撤銷表空間)不能脫機。
alter tablespace … offline;
offline包括三種模式:
offline normal:默認,所有數據文件做檢查點,有脫機的數據文件時則無法正常脫機。
offline immediate:立即,脫機時不做檢查點,用于基于時間點的恢復。
offline temporary:臨時,所有聯機的數據文件做檢查點,數據文件可分聯機和脫機,未聯機的不管,則恢復時可能需要介質恢復。
表空間聯機
alter tablespace … online;
對于一些用來專門存儲歷史或靜態數據的表空間,可將其設置為只讀狀態,可以防止對數據的意外更新、刪除。只讀表空間不必周期性備份,只需備份一次即可。
表空間設置為只讀
alter tablespace … read only;
表空間設置為默認的可讀寫
alter tablespace … read write;
2、表空間重命名
alter tablespace … rename to …;
3、刪除表空間
drop tablespace … [including contents [and datafiles]];
當表空間中包含有永久的數據庫對象時,必須顯示指定including contents子句。若要一并刪除磁盤上的操作系統文件,可同時指定and datafiles子句,否則僅將表空間從數據字典中刪除。
表空間一旦刪除,其中數據將永久丟失,因此在正式刪除表空間前,最好先將其設置為offline狀態,經時間考驗確認不再需要后再刪除。
4、表空間的擴容
三種方法:
1)打開表空間數據文件的自動擴展屬性。
alter database datafile 'd:\oradata\mes\mytbs01.dbf' autoextend on;
2)手動調整已有數據文件的大小,使用alter database語句,如
alter database datafile 'd:\oradata\mes\mytbs01.dbf' resize 200m;
對于臨時表空間文件
alter database tempfile 'd:\oradata\mes\temp01.dbf' resize 200m;
resize也可以將數據文件尺寸調小,前提是已有的數據能夠被新的大小容納。
3)為表空間添加新的數據文件,使用alter tablespace語句,如
alter tablespace mytbs add datafile 'd:\oradata\mes\mytbs02.dbf' size 200m;
對于臨時表空間文件
alter tablespace temp add tempfile 'd:\oradata\mes\temp02.dbf' size 200m;
表空間數據文件一旦添加,則不能從中去除,除非刪除整個表空間。
5、合并自由空間
基于數據字典管理的表空間,在經過一段時間的使用后,由于不斷的分配和釋放空間,表空間中的碎片會逐漸增多,此時可以對自由空間做合并。
alter tablespace … coalesce;
本地管理的表空間對此做了改善,不需要該操作。
6、臨時表空間
主要用于存放臨時排序數據等,數據首先會存放在PGA內存的排序區中,排序區大小由參數sort_area_size指定。
show parameter sort_area_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sort_area_size integer 65536
創建臨時表空間
create temporary tablespace ... tempfile '...';
修改數據庫默認的臨時表空間
alter database default temporary tablespace ...;
查看數據庫默認的臨時表空間
col property_value for a30
select property_value from database_properties where property_name = 'DEFAULT_TEMP_TABLESPACE';
PROPERTY_VALUE
------------------------------
TEMP
7、撤銷表空間
數據庫當前的UNDO表空間由參數undo_tablespace指定
show parameter undo_tablespace;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_tablespace string UNDOTBS1
創建撤銷表空間
create undo tablespace UNDOTBS2 datafile 'd:\oradata\mes\undotbs02.dbf' size 200m autoextend on;
將數據庫的默認UNDO表空間切換到新創建的表空間
alter system set undo_tablespace = UNDOTBS2;
查看更改結果
show parameter undo_tablespace;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_tablespace string UNDOTBS2
四、數據文件的管理
管理數據文件需要考慮以下幾方面的問題:
1、數據文件的數量
操作系統會限制每個過程可同時打開的文件數量。
Oracle會限制每個數據庫實例可打開的數據文件的數量,該限制由初始化參數db_files決定。
在創建數據庫時,參數maxdatafiles決定了在控制文件中用于記錄數據文件的部分的大小,這也限制了數據庫可擁有的數據文件數量。
少量的大數據文件要優于大量的小數據文件,因為這樣可以減少同時打開的文件個數,減少對數據文件頭部的更新數。
2、數據文件的尺寸
除SYSTEM、SYSAUX、UNDO、TEMP等幾個系統必要的表空間需要保證其大小外,其余表空間根據數據量需要確定大小,無特殊限制。
3、數據文件的位置
數據文件的物理位置將影響數據庫性能。
應考慮將數據文件和索引文件分別放在不同的磁盤上以改善性能。
應考慮將數據文件和日志文件放在不同的磁盤上,避免讀寫數據文件和寫日志文件的I/O競爭。
出于安全考慮也應將數據文件和日志文件分磁盤存放,若日志組有多個日志成員,這些成員應分別置于不同的物理磁盤上,以保證日志文件的安全性。
4、OMF的數據文件
Oracle管理的數據文件,由Oracle來管理定義文件名和路徑,不再需要手工指定數據文件。可以OMF的文件包括:
Datafiles
Tempfiles
Redo log files
Control files
Block change tracking files
通過設定參數db_create_file_dest來指定目標文件位置
alter system set db_create_file_dest='d:\oradata';
不再需要指定數據文件
create tablespace …;
此時Oracle在指定路徑下的<SID>\DATAFILE\下自動創建了數據文件,如d:\oradata\mes\DATAFILE\O1_MF_MYTBS_FV8S2RLX_.DBF,默認大小100M,且autoextend屬性為unlimited。
可以自定義文件大小
create tablespace ... datafile size 200m;
增加數據文件
alter tablespace ... add datafile;
五、數據文件的維護操作
1、為表空間添加數據文件
alter tablespace mytbs add datafile 'd:\oradata\mes\mytbs02.dbf' size 200m;
2、改變數據文件大小,這里的操作同前面描述的給表空間擴容的操作類似。
1)通過允許或禁止數據文件的自動擴展
alter database datafile 'd:\oradata\mes\mytbs01.dbf' autoextend on;
2)通過手工改變數據文件的大小
alter database datafile 'd:\oradata\mes\mytbs01.dbf' resize 200m;
3、改變數據文件的可用性
1)數據文件聯機
alter database datafile 'd:\oradata\mes\mytbs01.dbf' online;
2)數據文件脫機
alter database datafile 'd:\oradata\mes\mytbs01.dbf' offline [drop];
數據庫打開時被脫機的數據文件,在回到聯機狀態時,需要介質恢復。對于非歸檔模式的數據庫來說,脫機需使用drop選項,脫機后如果進行了日志切換,文件將無法恢復。
4、重定位數據文件
方法1:重定位表空間的數據文件,需要表空間脫機。
1)alter tablespace … offline;
2)將數據文件復制到新的位置,按需要重命名
3)alter tablespace … rename datafile '…' to '…';
或 alter database rename file '…' to '…';
4)alter tablespace … online;
方法2:重定位數據庫文件,適用于不能脫機的表空間,該方法同樣適用于對聯機日志文件的重定位。
1)啟動數據庫到mount狀態
2)復制或移動數據庫文件到新位置,按需要重命名
3)alter database rename file '…' to '…';
4)打開數據庫
六、沒有備份情況下數據文件的恢復實驗
在歸檔模式下實驗:
1)創建一個表空間mytbs(mytbs01.dbf)
2)在mytbs表空間內創建一張表t1(insert into)
3)shutdown immediate
4)手工刪除表空間mytbs的數據文件
5)startup
6)將數據文件mytbs01.dbf脫機
7)alter database open;
8)alter database create datafile '…\mytbs01.dbf';
9)recover datafile '…\mytbs01.dbf';
10)將數據文件mytbs01.dbf聯機
11)檢查數據是否恢復
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。