數(shù)據(jù)文件DataFile ①
?
??? 學(xué)習(xí)了TableSpace之后,當(dāng)然就要學(xué)習(xí)DataFile啦,初學(xué)者可能對(duì)這兩者的概念有一點(diǎn)模糊,其實(shí)很簡單,tablespace是邏輯的存儲(chǔ)單位,datafile是物理的存儲(chǔ)單位,而且一個(gè)tablespace可以對(duì)應(yīng)多個(gè)datafile,但一個(gè)datafile只能對(duì)應(yīng)一個(gè)tablespace。Tablespace的知識(shí)點(diǎn)比較簡單,主要是有兩塊:一是本地管理、二是對(duì)文件的操作。
?
?
一、DataFile管理準(zhǔn)則
?
??? 1、初始參數(shù)DB_FILES
?
??? DB_FILES指出了數(shù)據(jù)文件信息保留的SGA空間數(shù)量,所以也指出了可以為該實(shí)例創(chuàng)建的數(shù)據(jù)文件的最大編號(hào)。
??? 注:更改DB_FILES值需要重啟實(shí)例后才可生效。
?
??? DB_FILES太小,則在關(guān)閉數(shù)據(jù)庫前無法添加超過限制數(shù)量的數(shù)據(jù)文件,太大則消耗內(nèi)存。
?
??? 2、添加DataFile到表空間
?
??? 添加DataFile到表空間需要遵循一下的條件:
?
??? * 操作系統(tǒng)對(duì)一個(gè)進(jìn)程能夠同時(shí)打開的文件數(shù)加以限制
??? * 操作系統(tǒng)對(duì)數(shù)據(jù)文件的數(shù)量和大小加以限制
??? * Oracle對(duì)實(shí)例打開的數(shù)據(jù)庫文件最大數(shù)量有限制(與操作系統(tǒng)有關(guān))
??? * 不能超過DB_FILES所指定的數(shù)據(jù)文件數(shù)量
??? * CREATE DATABASE/CONTROLFILE 中 MAXDATAFILES子句的影響
?
??? 3、考慮性能的影響
?
??? 4、確定數(shù)據(jù)文件的大小
?
??? SYSTEM表空間的數(shù)據(jù)文件至少需要150M來包括數(shù)據(jù)字典和回滾段。
??? 如果安裝了Oracle的其他產(chǎn)品,則可能還需要額外的空間。
?
??? 5、適當(dāng)放置數(shù)據(jù)文件
?
??? 數(shù)據(jù)文件全部放在一個(gè)磁盤驅(qū)動(dòng)器可能會(huì)引起競爭,有條件可以分開存放。
?
??? 6、與重做日志文件分開存儲(chǔ)
?
??? 數(shù)據(jù)文件與重做日志文件存放在一個(gè)磁盤容易造成全部數(shù)據(jù)丟失,盡量分開存放。或保存多個(gè)重做日志文件。
?
?
二、創(chuàng)建和添加DataFile
?
??? CREATE TABLESPACE? --創(chuàng)建表空間及其數(shù)據(jù)文件
??? CREATE TEMPORARY TABLESPACE? --創(chuàng)建臨時(shí)表空間及其臨時(shí)文件
??? ALTER TABLESPACE ... ADD DATAFILE? --添加一個(gè)數(shù)據(jù)文件
??? ALTER TABLESPACE ... ADD TEMPFILE? --添加一個(gè)臨時(shí)文件
??? CREATE DATABASE? --創(chuàng)建數(shù)據(jù)庫和關(guān)聯(lián)的數(shù)據(jù)文件
??? ALTER DATABASE ... CREATE DATAFILE? --創(chuàng)建一個(gè)新的空的數(shù)據(jù)文件代替原來的
?
??? 注:推薦指定文件全名,否則按系統(tǒng)默認(rèn)會(huì)比較混亂。
?
?
三、改變DataFile大小
?
??? 1、啟用/禁用數(shù)據(jù)文件的自動(dòng)盤區(qū)
?
??? 自動(dòng)盤區(qū)指DataFile可以在額定的范圍內(nèi)自動(dòng)增長,這樣可以減少表空間用完時(shí)立即干預(yù)的必要,也可以確保應(yīng)用程序不會(huì)因?yàn)榉峙浔P區(qū)而失敗或暫停。
?
??? 查詢數(shù)據(jù)文件是否為自動(dòng)盤區(qū),可以查詢DBA_DATA_FILES視圖的AUTOEXTENSIBLE字段。
?
??? 要將數(shù)據(jù)文件設(shè)置成自動(dòng)盤區(qū),可以在以下語句中加入 AUTOEXTEND ON 子句:
??? CREATE DATABASE ...
??? CREATE TABLESPACE ...
??? ALTER TABLESPACE ...
?
??? 添加的舉例:
?
??? ALTER TABLESPACE users
??? ADD DATAFILE '/u02/oracle/rbdb1/users03.dbf' SIZE 10M
??? AUTOEXTEND ON
??? NEXT 512K
??? MAXSIZE 250M;
?
??? 禁用的例子:
?
??? ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/users03.dbf'
??? AUTOEXTEND OFF;
?
?
??? 2、手動(dòng)調(diào)整DataFile
?
??? 使用以下語句來手動(dòng)改變DataFile的大小:
??? ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/stuff01.dbf'
??? RESIZE 100M;
?
?
四、修改數(shù)據(jù)文件可用性
?
??? 要使DataFile脫機(jī)或聯(lián)機(jī),有兩種方法:
?
??? ① ALTER DATABASE 語句修改單獨(dú)的DataFile
??? ② ALTER TABLESPACE 語句修改所有的DataFile
?
? ? 1、在ARCHIVRLOG模式下的更改DataFile狀態(tài)
?
??? ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/stuff01.dbf' ONLINE;
??? ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/stuff01.dbf' OFFLINE;
?
??? 注:只有在ARCHIVELOG模式下才可使用ALTER DATABASE來更改DataFile
?
??? 2、在NOARCHIVELOG模式下使DataFile脫機(jī)
?
??? 由于在NOARCHIVELOG模式下,數(shù)據(jù)文件脫機(jī)后會(huì)造成數(shù)據(jù)的遺失,所以只能使用ALTER DATABASE語句下帶有DATAFILE和OFFLINE DROP子句的選項(xiàng)將該DataFile直接取消,例如該DataFile只包含臨時(shí)段數(shù)據(jù),并沒有備份時(shí)
?
??? ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/users3.dbf' OFFLINE DROP;
?
??? 3、修改TableSpace中所有DataFile或TempFile的可用性
?
??? ALTER TABLESPACE ... DATAFILE {ONLINE|OFFLINE}
??? ALTER TABLESPACE ... TEMPFILE {ONLINE|OFFLINE}
?
??? 注:修改某TableSpace中的所有數(shù)據(jù)文件,但是TableSpace本身的狀態(tài)不改變。
?
??? 總結(jié):
?
??? ① ALTER TABLESPACE可以在數(shù)據(jù)庫裝載狀態(tài)時(shí)發(fā)布,無需打開
??? ② 涉及到系統(tǒng)表空間、撤銷表空間、默認(rèn)臨時(shí)表空間時(shí),必須是未打開的數(shù)據(jù)庫
??? ③ ALTER DATABASE DATAFILE 語句中必須填入文件全名
?