如果一個表空間是隻讀表空間,那麼在該表空間上隻能進行讀操作而不能做DML操作,也就是說在這個表空間上的資料是不會變化的,是以就可以将該表空間的備份從日常的例行備份中取消,而隻是在該表空間改為隻讀表空間之後做一次備份就夠了。這不但減少了資料庫系統的維護工作量還使系統的負荷減輕。還有操作隻讀表空間上的資料時不會産生重做操作也不用加鎖,這也就提高了系統的效率。
在這裡需要指出的是在将一個表空間改為隻讀表空間之前和之後,最好将資料庫的控制檔案做備份,因為表空間的狀态的變化會寫到控制檔案中,表空間改為隻讀表空間之前和之後的控制檔案中記錄的這個表空間的狀态資訊是不一樣的。
與非目前的還原表空間相似,臨時表空間也可以不做備份。如果屬于某個臨時表空間的檔案損壞或丢失,該臨時表空間将不能使用。此時,如果有SQL語句使用這一臨時表空間(如大規模排序),Oracle資料庫系統就會報錯。丢失臨時檔案并不影響Oracle資料庫的啟動,Oracle資料庫可以在丢失臨時檔案的情況下正常打開。在這種情況下,Oracle資料庫系統會自動地建立丢失的臨時檔案,同時Oracle會将相關的資訊寫入報警檔案(alert log)。
下面還是通過例子來示範這種恢複的方法。首先必須應SYS使用者登入Oracle資料庫系統,因為在後面的操作中要關閉資料庫。SQL> conn system/yang as sysdba
已連接配接。
SQL> select file#,ts#,name
2 from v$tempfile;
FILE# TS# NAME
---------- ---------- ------------------------------------------
1 3 F:\APP\YANG\ORADATA\ORACL\TEMP01.DBF
SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
接下來,利用作業系統工具,在作業系統上删除臨時表空間TEMP所對應的臨時檔案(作業系統檔案)F:\APP\YANG\ORADATA\ORACL\TEMP01.DBF 。随後,立即啟動Oracle資料庫系統。
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 535662592 bytes
Fixed Size 1334380 bytes
Variable Size 146801556 bytes
Database Buffers 381681664 bytes
Redo Buffers 5844992 bytes
資料庫裝載完畢。
資料庫已經打開。
1 3 F:\APP\YANG\ORADATA\ORACL\TEMP01.DBF
顯示輸出的結果可以看出:臨時表空間TEM和與之所對應的臨時檔案F:\APP\YANG\ORADATA\ORACL\TEMP01.DBF 現在都健在。列出所有表空間以及與之對應的狀态資訊
SQL> select tablespace_name,status,contents
2 from dba_tablespaces;
TABLESPACE_NAME STATUS CONTENTS
------------------------------ --------- ---------
SYSTEM ONLINE PERMANENT
SYSAUX ONLINE PERMANENT
UNDOTBS1 ONLINE UNDO
TEMP ONLINE TEMPORARY
USERS ONLINE PERMANENT
EXAMPLE ONLINE PERMANENT
已選擇6行。
到此為止,可以确信我們已經成功的恢複了臨時表空間TEMP。