Oracle數(shù)據(jù)文件和臨時文件的管理
一、數(shù)據(jù)文件概述
在Oracle數(shù)據(jù)庫中,SYSTEM和SYSAUX表空間至少需要包含一個數(shù)據(jù)文件,此外還將包含多個其他表空間及與其相關(guān)的數(shù)據(jù)文件和臨時文件。Oracle的數(shù)據(jù)文件和臨時文件是操作系統(tǒng)文件,屬于數(shù)據(jù)庫物理結(jié)構(gòu)范疇,用于存儲數(shù)據(jù)庫中的邏輯結(jié)構(gòu)的數(shù)據(jù)。在創(chuàng)建表空間時,必須明確的為每個表空間指定數(shù)據(jù)文件。
Oracle通過兩種方式為文件分配編號:絕對文件號,用于唯一標(biāo)識數(shù)據(jù)庫中的數(shù)據(jù)文件,絕對文件號可以通過v$datafile或v$tempfile視圖的FILE#列查詢,也可以通過DBA_DATA_FILES或DBA_TEMP_FILES視圖的FILE_ID列查詢;相對文件號,用于唯一標(biāo)識表空間內(nèi)的數(shù)據(jù)文件。大多數(shù)情況下,絕對文件編號和相對文件編號都是相等的,但當(dāng)數(shù)據(jù)庫中的數(shù)據(jù)文件數(shù)量超出了一個閾值(比如1023),那么他們就不再相等了。大文件表空間數(shù)據(jù)文件的相對文件號總為1024。
查詢數(shù)據(jù)文件的絕對文件號和相對文件號:
數(shù)據(jù)庫所能夠創(chuàng)建的數(shù)據(jù)文件數(shù)量受CREATE DATABASE ... MAXDATAFILES語句和DB_FILES參數(shù)的影響。另外,還應(yīng)注意操作系統(tǒng)在創(chuàng)建文件數(shù)量方面的強制限制。在實例啟動過程中,Oracle將根據(jù)初始化參數(shù)DB_FILES分配SGA中用于保存數(shù)據(jù)文件信息的空間,實例可以根據(jù)這個參數(shù)值來決定所能創(chuàng)建的***文件的數(shù)量。該參數(shù)可以修改,但必須重啟數(shù)據(jù)庫方可生效,該參數(shù)在實例的整個生命周期中有效。
表空間中包含的數(shù)據(jù)文件的數(shù)據(jù)量的多少,最終會影響到數(shù)據(jù)庫的性能。Oracle允許的在線文件數(shù)量超過了操作系統(tǒng)的默認(rèn)限制,DBWn進程能夠打開所有的在線數(shù)據(jù)文件,并有能力緩存所有處理中的文件,當(dāng)打開文件數(shù)據(jù)量達到操作系統(tǒng)的默認(rèn)限制時,Oracle將自動關(guān)閉文件。這可能會對性能產(chǎn)生負(fù)面的影響,建議調(diào)整操作系統(tǒng)的默認(rèn)限制值,使其大于數(shù)據(jù)庫的在線文件數(shù)量。
二、為表空間創(chuàng)建和添加文件為表空間創(chuàng)建和添加數(shù)據(jù)文件的方法在之前已經(jīng)學(xué)習(xí)過了,這里僅簡要回顧一下。
1、在創(chuàng)建表空間的同時創(chuàng)建數(shù)據(jù)文件
2、為已存在的表空間添加數(shù)據(jù)文件
三、修改數(shù)據(jù)文件大小
使用自動擴展子句為表空間添加數(shù)據(jù)文件:
打開數(shù)據(jù)文件自動擴展:
關(guān)閉數(shù)據(jù)文件自動擴展:
手動RESIZE數(shù)據(jù)文件大小:
四、修改數(shù)據(jù)文件可用性可以通過執(zhí)行數(shù)據(jù)文件的在線和離線操作修改數(shù)據(jù)文件的可用性,離線的數(shù)據(jù)文件不能被數(shù)據(jù)庫所訪問,直到它恢復(fù)在線狀態(tài)之前。只讀表空間中的數(shù)據(jù)文件也可以被離線或在線,只讀表空間內(nèi)的數(shù)據(jù)文件的在線或離線不影響表空間自身的狀態(tài),不管怎么樣,在表空間未處于讀寫狀態(tài)之前,這些文件都是不可寫的。
1、歸檔模式下的數(shù)據(jù)文件離線
2、非歸檔模式下的數(shù)據(jù)文件離線在非歸檔模式下使用alter database ... offline for drop語句離線數(shù)據(jù)文件。offline關(guān)鍵字標(biāo)記該數(shù)據(jù)文件離線,不論其是否損壞,所以可以打開數(shù)據(jù)庫;for drop關(guān)鍵字標(biāo)記該數(shù)據(jù)文件隨后被刪除,該數(shù)據(jù)文件不能再次恢復(fù)到在線狀態(tài)。(實際上,在在線日志組還未發(fā)生切換之前,還是可以恢復(fù)到在線狀態(tài)的)
- SQL> alter database datafile 'D:\app\Manganese\oradata\orcl\test01.dbf' offline for drop;
數(shù)據(jù)庫已更改。
- SQL> alter system switch logfile;
系統(tǒng)已更改。
- SQL> alter system switch logfile;
系統(tǒng)已更改。
- SQL> alter system switch logfile;
系統(tǒng)已更改。
第 1 行出現(xiàn)錯誤:
ORA-01113: 文件 7 需要介質(zhì)恢復(fù)
ORA-01110: 數(shù)據(jù)文件 7: 'D:\APP\MANGANESE\ORADATA\ORCL\TEST01.DBF'
SQL> recover datafile 7;
ORA-00279: 更改 1108304 (在 03/19/2014 15:44:41 生成) 對于線程 1 是必需的
ORA-00289: 建議:
D:\APP\MANGANESE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2014_03_19\O1_MF_1_9_%U_.ARC
ORA-00280: 更改 1108304 (用于線程 1) 在序列 #9 中
指定日志: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 無法打開歸檔日志
'D:\APP\MANGANESE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2014_03_19\O1_MF_1_9_%U_.ARC'ORA-27041: 無法打開文件OSD-04002: 無法打開文件O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件。
ORA-00308: 無法打開歸檔日志'D:\APP\MANGANESE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2014_03_19\O1_MF_1_9_%U_.ARC'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統(tǒng)找不到指定的文件。
3、修改表空間內(nèi)所有數(shù)據(jù)文件和臨時文件的可用性
五、重命名(修改存儲位置)數(shù)據(jù)文件1、將包含數(shù)據(jù)文件的表空間離線。
2、使用操作系統(tǒng)命令修改數(shù)據(jù)文件名。
3、使用alter database ... rename datafile ...語句改變數(shù)據(jù)庫中的數(shù)據(jù)文件名。
4、備份數(shù)據(jù)庫。
示例一:重命名同一表空間內(nèi)的數(shù)據(jù)文件
示例二:重命名不同表空間中的數(shù)據(jù)文件
從表空間內(nèi)刪除數(shù)據(jù)文件:
從數(shù)據(jù)庫中刪除數(shù)據(jù)文件:
注意:1、從字典管理遷移到本地管理的只讀表空間內(nèi)的數(shù)據(jù)文件時不能被刪除的。除此之外,其他的只讀表空間內(nèi)的數(shù)據(jù)文件可以刪除。
2、系統(tǒng)表空間內(nèi)的數(shù)據(jù)文件無法被刪除。
3、如果一個本地管理的表空間被離線,則其內(nèi)的數(shù)據(jù)文件無法被刪除。
4、如果表空間內(nèi)僅包含一個數(shù)據(jù)文件,該數(shù)據(jù)文件無法被刪除。
5、如果數(shù)據(jù)文件不為空,該數(shù)據(jù)文件無法被刪除。
6、刪除數(shù)據(jù)文件必須保證數(shù)據(jù)塊處于打開狀態(tài)。