Oracle數據庫的備份與恢復方案
出處:互聯網
數據庫的備份和恢復是指為保護一個數據庫免于數據損失或者在發生數據損失后進行數據重新創建的各種策略和步驟、方法。數據備份幾乎是任何計算機系統中絕對必需的組成部分。意外斷電、系統或服務器崩潰、用戶失誤、磁盤損壞甚至數據中心的災難性丟失都可能造成數據庫文件的破壞或丟失。而這些文件往往包含著珍貴的數據,經不得任何損失。數據庫管理員必須對此有所準備。在這種情況下,備份與恢復占了舉足輕重的位置。
1.1 如何啟動ARCHIVELOG模式?
系統環境:
1、操作系統:Windows 2000 Server,機器內存128M
2、數據庫: Oracle 8i R2 (8.1.6) for NT 企業版
3、安裝路徑:C:ORACLE
實現步驟:
1、管理器
SVRMGR> connect internal
SVRMGR> shutdown
SVRMGR> startup mount [dbname]
SVRMGR> alter database [dbname] archivelog; --起用歸檔模式
SVRMGR> archive log start --啟動自動歸檔模式,重起數據庫后,按init.ora配置
SVRMGR> alter database [dbname] open; --打開數據庫
SVRMGR> exit
2、修改數據庫初始化參數文件,定義歸檔模式(自動)、歸檔日志文件保存路徑、歸檔日志文件命名方法
3、重新啟動數據庫
具體實例:
C:>svrmgrl
Oracle Server Manager Release 3.1.6.0.0 - Production
版權所有 (c) 1997,1999,Oracle Corporation。保留所有權利。
Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
With the Partitioning option
JServer Release 8.1.6.0.0 - Production
SVRMGR> connect internal
連接成功。
SVRMGR> shutdown
已關閉數據庫。
已卸下數據庫。
已關閉 ORACLE 實例。
SVRMGR> startup mount
已啟動 ORACLE 實例。
系統全局區域合計有 57124108個字節
Fixed Size 70924個字節
Variable Size 40198144個字節
Database Buffers 16777216個字節
Redo Buffers 77824個字節
已裝入數據庫。
SVRMGR> alter database archivelog;
語句已處理。
SVRMGR> archive log start
語句已處理。
SVRMGR> alter database open;
語句已處理。
SVRMGR> alter system switch logfile; --強制系統進行日志切換,可馬上觀察到歸檔日志的產生語句已處理。
SVRMGR> exit
服務器管理程序結束。
修改數據庫參數文件c:oracleadminoradbpfileinit.ora,
取消以下語句的#注釋
log_archive_start = true
log_archive_dest_1 = "location=C:Oracleoradataoradbarchive"
log_archive_format = %%ORACLE_SID%%T%TS%S.ARC
關閉數據庫,重新啟動
查看C:Oracleoradataoradbarchive目錄下,可以看到類似ORADBT001S01201.ARC的文件,說明歸檔成功
解釋init.ora參數文件中關于歸檔重做日志參數項的含義:
歸檔模式是自動還是手工,true為自動,false為手工
log_archive_start = true
歸檔日志文件所保存的路徑
log_archive_dest_1 = "location=C:Oracleoradataoradbarchive"
歸檔日志文件的命名方法
log_archive_format = %%ORACLE_SID%%T%TS%S.ARC
歸檔命令:
啟動自動歸檔模式,系統重起后,將按init.ora中的參數log_archive_start的值設置歸檔方式
SVRMGR> archive log start
啟動手工歸檔模式
SVRMGR> archive log stop
查看歸檔信息:重做日志是否歸檔方式、是自動歸檔還是手工歸檔、歸檔路徑、最舊的聯機日志循序號...
SVRMGR> archive log list
歸檔一個已滿,但沒有歸檔的聯機重做日志
SVRMGR> archive log next
歸檔所有已滿,但沒有歸檔的聯機重做日志
SVRMGR> archive log all
注意:一個事務即使不被提交,也會被寫入到重做日志中
1.2 如何使用歸檔日志進行完全恢復?
系統環境:
1、操作系統:Windows 2000 Server,機器內存128M
2、數據庫: Oracle 8i R2 (8.1.6) for NT 企業版
3、安裝路徑:C:ORACLE
模擬現象:
先將數據庫設置為歸檔模式
SQL*Plus
--創建實驗表空間
create tablespace test datafile
"c:test.ora" size 5M
AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED
default storage (initial 128K next 1M pctincrease 0)
/
--創建實驗用戶
drop user test cascade;
create user test identified by test default tablespace test;
grant connect,resource to test;
conn test/test
create table a(a number);
insert into a values(1);
insert into a select * from a; --反復插入,達到10萬條
commit;
拷貝test.ora為test1.ora文件
insert into a select * from a; --20萬條
commit;
關閉數據庫
shutdown
刪除test.ora文件,把test1.ora拷貝為test.ora。
重新啟動數據庫
這時,可以mount上,但無法打開,因為現在使用的數據文件是舊的
只有10萬條記錄,與控制文件中記載的log number不一樣
startup mount
需要recover database,使數據庫記錄重新恢復到當前的20萬條
C:>svrmgrl
svrmgrl>connect internal
svrmgrl>shutdown
svrmgrl>startup mount
svrmgrl>set autorecovery on
svrmgrl>recover database;
svrmgrl>alter database open;
conn test/test
select count(*) from a; --數據又恢復到20萬條
conn system/manager
--刪除實驗表空間
alter tablespace test offline;
drop tablespace test INCLUDING CONTENTS;
1.3 沒有備份、只有歸檔日志,如何恢復數據文件?
系統環境:
1、操作系統:Windows 2000 Server,機器內存128M
2、數據庫: Oracle 8i R2 (8.1.6) for NT 企業版
3、安裝路徑:C:ORACLE
模擬現象:
可通過重建數據文件來恢復,前提是歸檔日志文件保存完整
先將數據庫設置為歸檔模式
SQL*Plus
conn system/manager
--創建實驗表空間
create tablespace test datafile
"c:test.ora" size 5M
AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED
default storage (initial 128K next 1M pctincrease 0)
/
--創建實驗用戶
drop user test cascade;
create user test identified by test default tablespace test;
grant connect,resource to test;
conn test/test
create table a(a number);
insert into a values(1);
insert into a select * from a; --反復插入,達到100萬條
commit;
--關閉數據庫
SVRMGR> connect internal
SVRMGR> alter system switch logfile; --強制歸檔
SVRMGR> alter system switch logfile;
SVRMGR> alter system switch logfile;
SVRMGR> shutdown
--操作系統下刪除test.ora文件
--重新啟動數據庫
SVRMGR> connect internal
SVRMGR> startup
這時,可以mount上,但無法打開,因為數據文件test.ora不存在,
顯示錯誤如下:
ORA-01157: ????/?????? 8 - ??? DBWR ????
ORA-01110: ???? 8: "C:TEST.ORA"
SVRMGR> connect internal
SVRMGR> startup mount
SVRMGR> alter database create datafile "c:test.ora";
SVRMGR> set autorecovery on
SVRMGR> recover datafile "c:test.ora";
SVRMGR> alter database open;
conn test/test
select count(*) from a; --數據又恢復到100萬條
--刪除實驗表空間
conn system/manager
alter tablespace test offline;
drop tablespace test INCLUDING CONTENTS;
drop user test;
如果是非歸檔模式,也可以運用以上方法,
前提是:輸入記錄所占空間的大小不超過所有聯機日志文件的大小
即:用聯機日志文件來恢復
1.4 聯機熱備份失敗后,如何打開數據庫?
系統環境:
1、操作系統:Windows 2000
2、數據庫: Oracle 8i R2 (8.1.6) for NT 企業版
3、安裝路徑:C:ORACLE
錯誤現象:
進行聯機熱備份時,服務器發生故障,如掉電,重新啟動服務器,
啟動數據庫時,無法打開數據庫,Oracle要求進行介質恢復,
因為表空間還處在熱備份狀態。
模擬現象及解決方法:
先將數據庫設置為歸檔模式
C:>svrmgrl
svrmgrl>connect internal
svrmgrl>alter tablespace 表空間名 begin backup;
--表空間熱備模式沒結束就強行關閉數據庫,造成錯誤
svrmgrl>shutdown abort
svrmgrl>startup mount
--將此表空間的數據文件在沒打開數據庫時置成end backup模式
svrmgrl>alter database datafile "表空間的數據文件名" end backup;
--或執行表空間介質恢復
svrmgrl>recover tablespace 表空間名;
svrmgrl>alter database open;
1.5 某個數據文件損壞,如何打開數據庫?
系統環境:
1、操作系統:Windows 2000 Server,機器內存128M
2、數據庫: Oracle 8i R2 (8.1.6) for NT 企業版
3、安裝路徑:C:ORACLE
錯誤現象:
因誤操作,數據庫中某一數據文件被誤刪,
控制面板的Oracle相關服務顯示已啟動,但用SQL*Plus無法連接,
顯示以下錯誤
ORA-01033: ORACLE initialization or shutdown in progress
模擬現象:
create tablespace test datafile
"c:test.ora" size 5M
AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED
default storage (initial 128K next 1M pctincrease 0)
/
關閉所有服務stop.bat
net stop "OracleWebAssistant0"
net stop "OracleOraHome81TNSListener"
net stop "OracleServiceORADB"
shutdown
c
在操作系統中刪除test.ora文件
重新啟動服務start.bat
net start "OracleWebAssistant0"
net start "OracleOraHome81TNSListener"
net start "OracleServiceORADB"
服務里OracleServiceORADB顯示已啟動,但用SQL*Plus無法連接,
顯示ORA-01033: ORACLE initialization or shutdown in progress
解決方法:
先讓該數據文件脫機,就可以打開數據庫
C:>svrmgrl
svrmgrl>connect internal
svrmgrl>shutdown
svrmgrl>startup mount
d
--ARCHIVELOG模式命令,文件名要大寫
svrmgrl>alter database datafile "C:TEST.ORA" offline;
--NOARCHIVELOG模式命令
svrmgrl>alter database datafile "C:TEST.ORA" offline drop;
svrmgrl>alter database open;
--查詢數據文件聯、脫機狀態
SQL> select file#,name,status from v$datafile;
SQL> drop tablespace test;
表空間已丟棄。
_allow_resetlogs_corruption=true
本文來自各大博客,版權歸原作者所有!
文章信息如下:
引用源博文網址:http://maxz.itpub.net/post/17787/188561
發布日期:Tue, 08 08 2006 13:18:55
返回首頁 注冊成為博客
Copyright © 1990-2006
posted on 2007-05-12 20:39
★yesjoy★ 閱讀(1076)
評論(0) 編輯 收藏 所屬分類:
數據庫備份/恢復方案