1. 程式人生 > >oracle-dba-表空間與資料檔案管理

oracle-dba-表空間與資料檔案管理

表空間與資料檔案管理
ORACLE資料庫應用系統ORACLE中介軟體DBMS資料檔案
邏輯結構:一個數據庫有多個表空間,一個表空間有多個段,一個段有多個區段,一個區段有多個數據塊,一個數據塊有多個作業系統資料庫塊
物理結構:一個表空間有多個數據庫檔案,一個數據檔案物理上由作業系統塊組成
查看錶空間的資料庫塊大小
Select tablespace_name,block_size,contents from dba_tablespaces;

資料檔案物理結構
資料檔案:oracle格式的作業系統檔案,如dbf。資料檔案大小決定表空間大小,當表空間不足,需要增加新的資料檔案或者重新設定資料檔案的大小
作業系統塊:作業系統操作資料檔案的最小單位。一個或多個構成資料庫快

表空間分類以及建立表空間
資料庫必備的表空間,【System,臨時,還原,預設】表空間。Oracle11g還有sysaux表空間,它是system表空間的擴充套件,包含各種oracle產品和功能部件使用的資料。
表空間分為2類,
系統表空間:資料庫系統建立時需要的表空間,
非系統表空間,還原表空間和臨時表空間(預設系統表空間),資料表空間,索引表空間
語法
CREATE TABLESPACE tablespace_name
[MINIMUM EXTENT integer[K|M]]:定義該表空間最小區段的大小,這樣該表空間中的區段大小為該最小值的整數倍
[BLOCKSIZE integer[K]]:指出該表空間使用的非標準塊尺寸的大小,單位K。設定前需要設定DB_CACHE_SIZE 和 DB_Nk_CACHE_SIZE,且要與BLOCKSIZE相同。使用預設的話,DB_Nk_CACHE_SIZE=0;
[LOGGING[NOLOGGING]]:是否把該表空間中資料的變化記錄在重做日誌檔案中,LOGGING記錄,NOLOGGING不記錄
[DEFAULT storage_clause]
[ONLINE|OFFLINE]
建立表空間
Create tablespace user_data Datafile ‘G:\oracleDB\temp\userdata1.dbf’ size 100M ;
查看錶空間是否建立
Select tablespace_name,logging,status from dba_tablespaces;
查看錶空間對應的資料檔案
Select file_name ,tablespace_name,status from dba_data_files where tablespace_name=’USER_DATA’;

表空間磁碟管理的2種方案
資料字典管理,本地管理
管理表空間的實質是為使用者分配可用的區段以及回收空閒區段的過程。
Oracle9I以上預設本地管理

資料字典管理的表空間磁碟管理
將每個資料字典管理得表空間的使用情況記錄在資料字典表中。當分配或者撤銷表空間區段的分配時,則隱含使用sql語句對錶操作以記錄當前表空間區段的使用情況。並且在還原段中記錄了當前變換前的區段使用情況。這種方式增加了資料字典的頻繁操作。引入本地管理

本地管理的表空間磁碟管理
讓每一個表空間自己管理表空間區段的分配,記錄區段的使用情況
使用點陣圖在資料檔案頭中記錄資料檔案的可用和已用的空間資訊。將表空間中資料檔案的可用和已用資訊記錄起來。點陣圖使用一個數據為表示一個數據庫塊或者一組資料庫塊的使用情況,而表空間分配的最小單位是EXTENT,而一個區段由多個數據庫塊組成。當需要在表空間中增加新物件時,需要查詢點陣圖,看能否有一段連續的oracle資料庫塊空閒。
侷限:使用本地管理的表空間不能隨意更改預設的儲存引數。如初始區段的大小,最大區段數..
建立表空間
建立資料字典管理的表空間
9i的第一個版本預設system表空間是字典管理的,9.2.0.1就預設是本地管理了。要改只能安裝的時候選擇
該表空間有3檔案,分別放在不同目錄下,是為了保證io平衡,每個資料檔案大小為100M,最小區段為20K,
預設儲存引數為,初始區段大小,和在次分配區段時,分配的區段大小為20k,所分配的最大磁碟空間為500區段。
CREATE TABLESPACE Tianjin_data
Datafile
‘G:\oracleDB\temp\01.dbf’ size 100M,
‘G:\oracleDB\temp\02.dbf’ size 100M,
‘G:\oracleDB\temp\03.dbf’ size 100M
minimum extent 20k
extent management dictionary
default storage(initial 20k next 20k maxextents 500 pctincrease 0);
建立本地管理的表空間
建立表空間
CREATE TABLESPACE BEIJING_DATA
Datafile
‘G:\oracleDB\temp\01.dbf’ size 100M
EXTENT management local
Uniform size 1M; 設定統一的區段尺寸
驗證表空間
Select tablespace_name,block_size,extent_management,status,initial_extent ,next_extent,max_extents,pct_increase from dba_tablespaces WHERE tablespace_name=’BEIJING_DATA’;
Select file_name ,tablespace_name,status from dba_data_files where tablespace_name=’BEIJING_DATA’;

建立還原表空間
存放還原段,使用者1修改了資料,其他使用者檢視此資料,此時顯示的應該不是使用者1更改的資料,因為使用者1還未提交。為了保證讀一致性,oarcle設計了還原段。在還原段中存放更改前的資料。
不能存放其他任何物件,建立還原表空間時,只能使用datafile,extent management子句。
建立還原表空間
CREATE undo tablespace user_undo
Datafile ‘G:\oracleDB\temp\user_undo.dbf’
size 30M;

SELECT tablespace_name,status,contents,logging,extent_management from dba_tablespaces;
Contents為undo表示為還原表空間,logging說明該表空間的變化受重做日誌的保護,區段管理為本地

建立臨時表空間
用於使用者特定會話狀態,如使用者會話中的排序操作,排序中間結果需要儲存在某個區域,這個區域就是臨時表空間,臨時表空間的排序段是在例項啟動後有第一個排序操作時間時建立的。沒有建立臨時表空間,則預設system表空間。在oracle9I中會自動建立temp的臨時表空間,oracle11g臨時表空間會預設建立,名字為TEMP,檔名為$ORACLE_HOME/ORADATA/TEMP01.DBF
供多個使用者使用,臨時表空間中的區段在需要時按照建立臨時表空間時的引數或管理方式進行擴充套件
建立臨時表空間
Create temporary tablespace user_temp
Tempfile ‘G:\oracleDB\temp\user_temp.dbf’ size 20m
extent management local uniform size 1m;

select tablespace_name,status,contents,logging from dba_tablespaces where tablespace_name like
CONTENTS為TEMPORARY,contents為 NOLOGGING,即不需要將臨時表空間的變化記錄到重做日誌檔案中。
在初始化引數檔案中,有sort_area_size引數,表示排序區尺寸大小。為了優化臨時表空間中排序操作的效能,最好將Uniform size設定為ssort_area_size整數倍

預設臨時表空間
可以在建立資料庫時建立,此時使用DEFAULT TEMPORARY TABLESPACE,
也可以在建立資料庫之後建立,此時需要建立臨時表空間,在使用
Alter database default temporary tablespace指令更改臨時表
如果在資料庫建立時,沒有建立表空間,資料庫建立後也沒有建立臨時表空間且更改預設設定。Oarcle將system表空間設定為預設臨時表空間,並且給出告警在alter.log檔案中。
檢視當前資料庫預設的臨時表空間
Select * from database_properties where property_name like ‘DEFAULT’;
切換臨時表空間,當設定臨時表空間為USER_TEMP時出現臨時表空間佔用,不滿足條件,使用下面即可
Alter database default temporary tablespace user_temp;
可以發現當前資料庫的臨時表空間為USER_TEMP。
select * from database_properties where property_name like ‘DEFAULT%’;
刪除當前使用的臨時表空間。不能刪除預設的臨時表空間
drop tablespace user_temp;
可以建立另外一個新的臨時表空間,切換到新建立的表空間,然後刪除
預設臨時表空間的型別不能改為PERMANENT永久表空間,不能置為離線狀態
將預設臨時表空間離線
Alter tablespace user_temp offline ;
建立大檔案表空間
大檔案表空間(big File tablespace)簡稱BFT,不要求段空間管理的型別可以使用,如回滾表空間和臨時表空間
優勢,大大減少資料檔案數量,容量比普通表空間大,一個普通檔案的表空間最多1024個數據檔案,而大檔案表空間只包含一個檔案,但是容量可以達到1024倍資料檔案的容量。
建立大檔案表空間3種方式
建立資料庫時,定義大檔案表空間並把它作為預設表空間,
一旦建立預設表空間為大檔案表空間型別,以後建立的表空間都為大檔案表空間。
Create database set default bigfile tablespace tbs_name datafile ‘d:\temp\tbs01.dbf’
Size 2G;

使用create tablespace bigfile建立大檔案表空間
Create bigfile tablespace bigfiletbs datafile ‘G:\oracleDB\temp\temp1.dbf’ size 2g;
查詢表空間的資料檔案資訊
Select tablespace_name ,file_name,bytes/(1024*1024*1024) G from Dba_data_files;
查詢表空間的區段管理方式和段空間管理方式
Select tablespace_name ,initial_extent,contents,extent_management,segment_s
pace_management from dba_tablespaces where tablespace_name like ‘BIG%’;
初始欄位(initial_extent):大小為64KB,區段管理方式(extent_management)為local本地管理方式,段空間管理方式(EXTENT_MANAGEMENT)為自動管理(AUTO)

通過改變預設表空間為大檔案表空間,使得後面建立的表空間都為大檔案表空間。
Alter tablespace set default bigfile tablespace;

2種方式實現大檔案表空間容量的修改
1:直接更改
Alter tablespace 表空間名 resize 4G;
2:修改表空間為自動擴充套件
Alter tablespace表空間名autoextend on next 1G;

Select tablespace_name ,file_name,bytes ,autoextensible from dba_data_files;
Autoextensible:表示是否為自動擴充套件

檢視當前資料庫的預設表空間的型別
Select * from database_properties where property_name=’DEFAULT_TBS_TYPE’;
SMALLFILE小檔案表空間型別,也就是普通表空間

表空間管理
離線管理,離線管理的表空間無法實現資料訪問,
有些情況需要將表處於離線狀態,情況如下
1:允許使用者訪問資料庫的一部分,而某些空間不允許使用者訪問
2:執行離線的表空間備份
3:在資料庫開啟時,恢復表空間或表空間中的資料檔案
4:在資料庫開啟時,移動表空間中資料檔案
設定為離線狀態
Alter tablespace USER_UNDO offline;
檢視是否離線,status
Select status,contents,logging from dba_tablespaces where tablespace_name = ‘USER_UNDO’;
查看錶空間中的資料狀態
Select file#,name,status from v$datafile ;
此時無法讀取表資訊.

只讀管理
只讀的表空間不被重做日誌保護,減少重做日誌的大小。
Alter tablespace bigfiletbs read only;
查看錶空間狀態
Select tablespace_name,status from dba_tablespaces;
設定為正常狀態
Alter tablespace bigfiletbs read write;

表空間和資料檔案管理
修改表空間大小
修改表空間4種方法
 建立表空間時,使用autoextend on子句使得表空間在需要時可以自動擴充套件
 建立表空間後使用alter database datafile file_name autoextend on 修改。
 表空間增加資料檔案
 修改資料檔案大小,即重新設定表空間某個資料檔案的大小

 建立資料檔案自動擴充套件的表空間,每次擴充套件1m
Create tablespace manager_tbs1 datafile ‘G:\oracleDB\temp\TBS1.DBF’ SIZE 100
Uniform size 1M
M AUTOEXTEND ON;

查看錶空間的資料擴充套件方式
SELECT FILE_NAME,TABLESPACE_NAME,BLOCKS,STATUS,AUTOEXTENSIBLE FROM DBA_DATA_FILES WHERE TABLESPACE_NAME LIKE ‘MAN%’;

 使用alter database命令修改表空間中的資料檔案為自動擴充套件
Create tablespace manage_tbs datafile
查看錶空間的是否為自動擴充套件
select tablespace_name ,file_name ,autoextensible from dba_data_files;
alter database datafile
使用alter database 修改表空間資料檔案為自動擴充套件,當該檔案空間不足時可以自動擴充套件,每次擴充套件空間為1m;
alter database datafile ‘G:\oracleDB\temp\TEMP1.DBF’ autoextend on next 1m;

 向表空間增加資料檔案以達到間接擴充套件表空間大小
Alter tablespace manager_tbs1 add datafile ‘G:\oracleDB\temp\tbs02.DBF’ size 50M;
查看錶空間中的資料檔案資訊
Select tablespace_name,file_name,status,autoextensible from dba_data_files
where tablespace_name=’MANAGER_TBS1’;

修改表空間的儲存引數
9i支援,11g不支援
只對資料字典管理的表空間有效
修改表空間最小extent尺寸
Alter tablespace Beijin_data minimum extent 2m;
修改表空間預設儲存子句
Alter tablespace BEIJIN_DATA default storage(initial 2m next 2m maxextents 50);
檢視修改後的表空間的儲存引數
Select * from dba_tablespaces where tablespace_name=’BEIJIN_DATA’;
刪除表空間
Drop tablespace tablespace_name
[INCLUDING CONTENTS[ADD DATAFILES][CASCADE CONSTRAINTS]]
INCLUDING CONTENTS:刪除表空間中的所有區段(EXTENTS)
ADD DATAFILES:刪除表空間中的資料檔案,檔案格式為oracle格式
CASCADE CONSTRAINTS:刪除和該表空間中的表相關的引用完整性約束。
刪除表空間並且刪除該表空間下的資料檔案,不新增資料檔案,預設刪除該表文件指標,實際資料檔案不會被刪除
Drop tablespace MANAGER_TBS1 including contents and datafiles;

遷移資料檔案
把當前表空間中的資料檔案遷移到其他磁碟空間。遷移資料檔案分為2種
 遷移系統表空間中的資料檔案
1:檢視系統表資料資訊
Select tablespace_name,file_name,bytes,status from dba_data_files where tablespace_name= ‘SYSTEM’;
2:根據系統表路徑複製一份到其他地方
Host copy sysytem表路徑 新路徑
3:開啟到mount,然後遷移
Startup mount;
Alter database rename ‘system表路徑’ to ‘新路徑‘ ;
Recover database;–介質回覆(oracle11G需要) Alter database open;
4:驗證
Select tablespace_name,file_name,bytes,status from dba_data_files where tablespace_name=’SYSTEM’;
 遷移非系統表
要求沒有活躍的還原段,臨時段,排序段等,才可以遷移
1:設定表空間離線
Alter tablespace USER_UNDO offline;
2:複製資料檔案到新磁碟下
host copy G:\ORACLEDB\TEMP\USER_UNDO.DBF G:\ORACLEDB\TEMP\USER_T.DBF
3:遷移資料檔案
Alter tablespace USER_UNDO rename datafile ‘G:\ORACLEDB\TEMP\USER_UNDO.DBF’ to ‘G:\ORACLEDB\TEMP\USER_T.DBF’;
4:聯機
Alter tablespace USER_UNDO online;
5:檢視
Select tablespace_name,file_name,bytes,status from dba_data_files where ta
blespace_name=’USER_UNDO’;

資料字典和本地管理的表空間
ORACLE9I中切換為本地管理
EXECUTE DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL(tbs_name);
切換到資料字典管理
EXECUTE DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_FROM_LOCAL(tbs_name)