熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle數據庫備份與恢復精華資料集錦

2022-06-13   來源: Oracle 
主要介紹了Oracle數據庫備份與恢復的具體方法及相關案例詳細內容請大家參考下文

  冷備份

  備份步驟

  冷備份具有很多優良特性快速方便以及高效一次完整的冷備份步驟是

  

  首先關閉數據庫(shutdown normal)

  

  拷貝相關文件到安全區域(利用操作系統命令拷貝數據庫的所有的數據文件日志文件控制文件參數文件口令文件等(包括路徑))

  

  重新啟動數據庫(startup)

  

  以上的步驟可以用一個腳本來完成操作

  

  su oracle < sqlplus /nolog

  connect / as sysdba

  shutdown immediate;

  !cp 文件 備份位置(所有的日志數據控制及參數文件);

  startup;

  exit;

  

  恢復步驟

  恢復的時候相對比較簡單了我停掉數據庫將文件拷貝回相應位置重啟數據庫就可以了當然也可以用腳本來完成

  

  熱備份

  備份步驟

  當需要做一個精度比較高的備份而且我們的數據庫不可能停掉(少許訪問量)時這個情況下我們就需要歸檔方式下的備份就是下面討論的熱備份熱備份可以非常精確的備份表空間級和用戶級的數據由於它是根據歸檔日志的時間軸來備份恢復的理論上可以恢復到前一個操作甚至就是前一秒的操作具體步驟如下

  

  通過視圖v$database查看數據庫是否在Archive模式下:

  

  SQL> select log_mode from v$database;

  

  如果不是Archive模式

  

  則設定數據庫運行於歸檔模式下SQL>shutdown immediate

  

  SQL>startup mount

  SQL> alter database archivelog;

  SQL> alter database open;

  

  如果Automaticarchival顯示為Enabled則數據庫歸檔方式為自動歸檔否則需要手工歸檔或者將歸檔方式修改為自動歸檔

  正常shutdown數據庫在參數文件中initora中加入如下參數

  

  SQL>shutdown immediate

  

  修改initora

  

  LOG_ARCHIVE_START=TRUE

  LOG_ARCHIVE_DEST=ORACLE_HOME/admin/o/arch(歸檔日值存放位置可以自己定義)

  SQL>startup

  

  然後重新啟動數據庫此時Oracle數據庫將以自動歸檔的方式工作在Archive模式下其中參數LOG_ARCHIVE_DEST是指定的歸檔日志文件的路徑建議與Oracle數據庫文件存在不同的硬盤一方面減少磁盤I/O競爭另外一方面也可以避免數據庫文件所在硬盤毀壞之後的文件丟失歸檔路徑也可以直接指定為磁帶等其它物理存儲設備但可能要考慮讀寫速度可寫條件和性能等因素

  

  注意當數據庫處在ARCHIVE模式下時一定要保證指定的歸檔路徑可寫否則數據庫就會掛起直到能夠歸檔所有歸檔信息後才可以使用另外為創建一個有效的備份當數據庫在創建時必須履行一個全數據庫的冷備份就是說數據庫需要運行在歸檔方式然後正常關閉數據庫備份所有的數據庫組成文件這一備份是整個備份的基礎因為該備份提供了一個所有數據庫文件的拷貝(體現了冷備份與熱備份的合作關系以及強大的能力)

  

  

  

  備份表空間文件

  

  a首先修改表空間文件為備份模式 ALTER TABLESPACE tablespace_name BEGIN BACKUP;

  

  b然後拷貝表空間文件到安全區域 !CP tablespace_name D_PATH;

  

  c最後將表空間的備份模式關閉 ALTER TABLESPACE tablespace_name END BACKUP;

  

  對歸檔日志文件的備份

  

  停止歸檔進程-->備份歸檔日志文件-->啟動歸檔進程

  

  如果日志文檔比較多我們將它們寫入一個文件成為一個恢復的參考$ files `ls <歸檔文件路徑>/arch*dbf`;export files

  

  備份控制文件:

  

  SQL> alter database backup controlfile to controlfile_back_name(一般用的方式) reuse;

  

  當然我們也可以將上面的東東寫為一個腳本在需要的時候執行就可以了:

  

  腳本范例

  

  su oracle < sqlplus /nolog

  connect / as sysdba

  ALTER TABLESPACE tablespace_name BEGIN BACKUP

  

  !CP tablespace_name D_PATH

  

  ALTER TABLESPACE tablespace_name END BACKUP

  

  alter database backup controlfile to controlfile_back_name(一般用的方式) reuse;

  

  !files `ls <歸檔文件路徑>/arch*dbf`;export files 恢復步驟

  熱備份的恢復對於歸檔方式數據庫的恢復要求不但有有效的日志備份還要求有一個在歸檔方式下作的有效的全庫備份歸檔備份在理論上可以無數據丟失但是對於硬件以及操作人員的要求都比較高在我們使用歸檔方式備份的時候全庫物理備份也是非常重要的歸檔方式下數據庫的恢復要求從全備份到失敗點所有的日志都要完好無缺

  

  恢復步驟LOG_ARCHIVE_DEST_

  shutdown數據庫

  將全備份的數據文件放到原來系統的目錄中

  將全備份到失敗點的所有歸檔日志放到參數LOG_ARCHIVE_DEST_所指定的位置

  利用sqlplus登陸到空實例(connect / as sysdba)

  然後 startup mount

  set autorecovery on

  recover database;

  alter database open;

  

  這樣熱恢復就算完工

  

  Windows平台的oracle備份(Veritas BE)

  通過Backup Exec實施Oracle災難恢復很簡單

  

  需要的數據

  FULL CLOSED備份

  

  shutdown數據庫(不要用shutdown abort強行關閉)實施一個文件級備份備份全部的Oracle相關文件包括Windows系統文件系統狀態和Oracle程序文件和數據文件等內容

  

  這個冷備份對於快速恢復Oracle數據庫系統非常關鍵如果沒有它系統被破壞後只能重新安裝再恢復這要比直接恢復冷備份慢得多也更復雜

  

  每當數據庫或表單的物理結構或邏輯結構有變化時都應該重新創建這個冷備份

  

   FULL ONLINE備份

  

  這個備份要通過Backup Exec Agent for Oracle Server來完成要備份全部表空間歸檔日志和控制文件通過這種方式備份Oracle會將所有緩存內容寫入文件將online redo log做歸檔所以數據庫備份中包含的是備份時數據庫的即時點信息完整而且有效以後做恢復時可以恢復到最後一次FULL ONLINE備份的狀態

  

  恢復過程

   重新安裝Windows系統和Remote Agent for Windows Server為恢復Oracle服務器准備環境

  

   恢復最後一次FULL CLOSED備份重新啟動計算機

  

  此時Windows系統Oracle數據庫系統都是完整的只是Oracle數據庫中可能不是最新的數據Backup Exec Agent for Oracle Server也不用重新安裝了

  

   用SQLPlus用SYS以sysdba身份連接到數據庫系統關閉數據庫

  

  shutdown immediate + < enter >

  

   通過介質服務器恢復最新的FULL ONLINE備份恢復作業屬性的高級選項中確保選中了Restore over Existing files(覆蓋現存文件) 選項

  

  要想成功的恢復數據庫在最後一次FULL CLOSED備份之後的所有redo log必須都已經成功歸檔並備份少了哪一個數據庫就無法恢復到最後的FULL ONLI NE備份時的狀態

  

  通過Oracle的alert log可以看到數據庫的恢復需要哪些歸檔日志以及你應該把它們恢復到什麼位置

  

   恢復完成後用SYS用戶以sysdba身份連接到數據庫將數據庫加載到mount階段

  

  startup mount + < enter >

  

   數據庫mount完成後執行recover過程

  

  recover database using backup controlfile + < enter >

  

  數據庫會提示你需要哪些日志

  

  ORA: Change generated at needed for thread

  

  ORA: Suggestion : \Oracle_Home\Oradata\\%SID%TARC

  

  ORA: {=Suggested | filename | AUTO | FROM logsource | CANCEL}

  最簡單的方法是選自動恢復

  auto + < enter >

  系統會在initora文件中定義的位置上查找所有必需的日志並依次應用它們最後一個要應用的日志是online redo log實際上它並不包括任何的transaction只有一個SCN可以略過但是自動恢復過程會因為找不到相應的文件而報錯

  ORA cannot open archived log

  E\ORACLE\ORADATA\KIMSTAD\ARCHIVE\KIMSTADTARC

  ORA unable to open file

  OSD unable to open file

  O/SError (OS ) The system cannot find the file specified

  為此輸入以下命令(until cancel參數使我們可以在需要的時候中止恢復過程)

  recover database until cancel using backup controlfile +

  這樣在數據庫恢復的最後階段再次提示前面的錯誤時我們就可以中止恢復過程

  cancel + < enter >

  這時除了最後一個online redo log以外所有的commit transaction都已經提交到數據庫之中了完成後會顯示

  Media recovery canceled

  實際上恢復過程已經正常完成了

  最後是打開數據庫並同步日志序列號

  alter database open resetlogs + < enter >

  至此Oracle數據庫被成功恢復到最後一次Full Online備份

  說明Oracle i可以用internal賬號完成DBA操作i取消了internal賬號SYS賬號代替它了為了以DBA身份登錄啟動SQL Plus時應該加nolog參數進入之後再登錄connect username/password as sysdba

  具體示例

   用Oracle數據庫的熱備份來重建數據庫

  為了檢驗我為公司開發的Oracle數據庫在線自動備份系統我根據Oracle數據庫在線自動備份系統產生的備份文件來重建和恢復Oracle數據庫為了讓大家共享其方法和步驟(也適合於用其它方式對Oracle做的熱備份進行重建數據庫)現整理如下

  一系統環境

  本次測試所使用的系統環境如下

   硬件環境

  服務器Dell PowerEdge (CPUPⅢ MHz 內存MB 硬盤GB)

   軟件環境

  操作系統UnixWare

  數據庫 Oracle for Unix 企業版SIDora

  Oracle安裝路徑/home/oracle

  備份文件所有數據庫文件控制文件初始化文件數據庫備份以來的所有歸檔日志文件

  二恢復步驟

  下面根據從用戶處帶回來的備份數據在一台新的服務器重建Oracle數據庫其詳細步驟如下

   創建數據庫恢復使用的環境

  在新的Dell服務器上安裝與原來的數據庫服務器相同的操作系統UnixWare 然後安裝與原數據庫相同版本的Oracle for Unix 企業版

   刪除新服務器上的Oracle實例

  啟動新數據庫服務器上的Oracle在sqlplus中查找到數據庫文件的路徑並保存在當前路徑下的文件file_nametxt中

  $ sqlplus system/manager

  SQL> spool file_nametxt

  SQL> select file_name from sysdba_data_files

  SQL> spool end

  SQL>exit

  關閉新服務器的Oracle然後根據文件file_nametxt中的路徑刪除新裝的Oracle實例的所有數據庫文件

  注從本步開始所有操作都是用Oracle用戶登錄操作系統(Unix)後進行文中所有的黑色粗體號字符(標題除外)的語句可以直接執行黑色傾斜粗體號字符的語句需要修改後執行

   恢復數據庫文件

  把備份的所有數據庫文件用Ftp上傳新的數據庫服務器中的相同路徑下如果原來的路徑已不存在可以拷貝到其他路徑下恢復時詳細處理方法見步驟中<>

   恢復初始化參數文件

  把備份的initSIDora文件用Ftp上傳到新數據庫服務器中Oracle實例的initSIDora文件位置覆蓋之其位置一般在$ORACLE_HOME/dbs目錄下

   恢復控制文件

  把備份的ControlFilebak文件用Ftp上傳到新數據庫服務器中Oracle實例的各個鏡像路徑下並按初始化參數文件initSIDora中的該項的位置和名稱命名

  control_files = (/home/oracle/app/oracle/oradata/ora/controlctl /home/oracle/app/oracle/oradata/ora/controlctl/home/oracle/app/oracle/oradata/ora/controlctl

  其路徑如有變動在初始化參數文件initSIDora中修改如上內容的路徑和名稱使其實際路徑與該參數的路徑一致

   恢復歸檔日志文件

  把數據庫備份後的歸檔日志用Ftp上傳到新數據庫服務器的相同路徑下路徑如有變動可以根據初始化參數文件initSIDora中如下位置進行修改使其實際路徑與該參數的路徑一致

  log_archive_dest_ = location=/home/oracle/app/oracle/admin/ora/arch

   恢復數據庫

  經過以上個步驟把所有的備份文件已經上傳到了新數據庫服務器中下面開始根據這些文件恢復並啟動數據庫先在操作系統的提示符下做如下操作

  $svrmgrl

  SVRMGR>connect internal

  SVRMGR>startup mount

  <> 創建口令文件

  如果原來的數據庫配置了口令文件並且在mount數據庫時報如下錯誤

  ORA error opening password file /home/oracle/app/oracle/product//dbs/orapw

  可以到/home/oracle/app/oracle/product//dbs/路徑下用以下命令創建口令文件

  orapwd

  其用法如下

  Usage orapwd file= password= entries=

  where

  file name of password file (mand)(口令文件的命名方式為orapwSID)

  password password for SYS and INTERNAL (mand)

  entries maximum number of distinct DBA and OPERs (opt)

  There are no spaces around the equalto (=) character

  例如 orapwd file=orapwora password=manager

  

  

  

  然後重新執行如下語句mount數據庫

  

  SVRMGR>startup mount

  

  <> 修改數據庫文件的路徑

  

  如果在上述的步驟中修改了恢復的數據庫文件的路徑可以用如下語句對數據庫文件重新命名

  

  alter database rename file old_file to new_file;

  

  如把原來路徑/home/oracle/app/oracle/oradata/ora下的文件systemdbf改到了/u/oracle/app/oracle/oradata/ora

  

  SVRMGR>alter database rename file

  

  /home/oracle/app/oracle/oradata/ora/systemdbf

  

  to /u/oracle/app/oracle/oradata/ora/systemdbf;

  

  按照上面的方法把所有修改路徑的數據庫文件重新命名

  

  <> 根據控制文件和歸檔日志文件恢復數據庫

  

  下面開始用控制文件和歸檔日志文件恢復數據庫

  

  SVRMGR>recover database using backup controlfile until cancel;

  

  出現如下提示

  

  ORA: change generated at // :: needed for thread

  

  ORA: suggestion: /home/oracle/app/oracle/admin/ora/arch/arch__arc

  

  ORA: change for thread is in sequence #

  

  Specify log: {=suggested | filename | AUTO | CANCEL}輸入

  

  auto

  

  如果有如下提示則表示成功

  

  ORA: change generated at // :: needed for thread

  

  ORA: suggestion: /home/oracle/app/oracle/admin/ora/arch/arch__arc

  

  ORA: change for thread is in sequence #

  

  ORA: log file /home/oracle/app/oracle/admin/ora/arch/arch__arc noy

  

  Log applied

  

  意外處理如果其它提示可能是需要的日志文件不存在檢查ORA中該文件是否存在

  

  直到出現如下提示

  

  ORA: change generated at // :: needed for thread

  

  ORA: suggestion: /home/oracle/app/oracle/admin/ora/arch/arch__arc

  

  ORA: change for thread is in sequence #

  

  ORA: log file /home/oracle/app/oracle/admin/ora/arch/arch__arc noy

  

  ORA: cannot open archived log /home/oracle/app/oracle/admin/ora/arch

  

  /arch__arc

  

  ORA: unable to obtain file status

  

  Intel SVR UNIX Error: : No such file or directory

  

  Additional information:

  

  <> 重置日志

  

  SVRMGR>alter database open resetlogs;

  

  意外處理如果提示創建日志的路徑不存在按提示路徑創建目錄然後再重置日志

  

  <> 重啟數據庫完成恢復

  

  SVRMGR>shutdown immediate

  

  SVRMGR>startup

  

  ORACLE instance started

  

  Total System Global Area bytes

  

  Fixed Size bytes

  

  Variable Size bytes

  

  Database Buffers bytes

  

  Redo Buffers bytes

  

  Database mounted

  

  Database opened

  

  數據庫正常打開數據庫重建恢復成功

  

  

  

   Oraclei RMAN 備份及恢復步驟

  

  

  在這裡沒有討論多麼深入的RMAN技術也沒有告訴大家這樣去編寫備份腳本這並不是我的初衷我只想把我會的寫出來和大家一起學習一起進步謝謝

  

  切換服務器歸檔模式如果已經是歸檔模式可跳過此步

  %sqlplus /nolog (啟動sqlplus)

  SQL> conn / as sysdba (以DBA身份連接數據庫)

  SQL> shutdown immediate; (立即關閉數據庫)

  SQL> startup mount (啟動實例並加載數據庫但不打開)

  SQL> alter database archivelog; (更改數據庫為歸檔模式)

  SQL> alter database open; (打開數據庫)

  SQL> alter system archive log start; (啟用自動歸檔)

  SQL> exit (退出)

  

  連接

  %rman target=rman/rman@mydb (啟動恢復管理器)

  

  基本設置

  RMAN> configure default device type to disk; (設置默認的備份設備為磁盤)

  RMAN> configure device type disk parallelism ; (設置備份的並行級別通道數)

  RMAN> configure channel device type disk fromat /backup/backup_%U; (設置備份的文件格式只適用於磁盤設備)

  RMAN> configure channel device type disk fromat /backup/backup_%U; (設置備份的文件格式只適用於磁盤設備)

  RMAN> configure controlfile autobackup on; (打開控制文件與服務器參數文件的自動備份)

  RMAN> configure controlfile autobackup format for device type disk to /backup/ctl_%F; (設置控制文件與服務器參數文件自動備份的文件格式)

  

  查看所有設置

  RMAN> show all

  

  查看數據庫方案報表

  RMAN> report schema;

  

  備份全庫

  RMAN> backup database plus archivelog delete input; (備份全庫及控制文件服務器參數文件與所有歸檔的重做日志並刪除舊的歸檔日志)

  

  

  備份表空間

  RMAN> backup tablespace system plus archivelog delete input; (備份指定表空間及歸檔的重做日志並刪除舊的歸檔日志)

  

  備份歸檔日志

  RMAN> backup archivelog all delete input;

  

  復制數據文件

  RMAN> copy datafile to /oracle/dbs/py;

  

  查看備份和文件復本

  RMAN> list backup;

  

  驗證備份

  RMAN> validate backupset ;

  

  從自動備份中恢復服務器參數文件

  RMAN> shutdown immediate; (立即關閉數據庫)

  RMAN> startup nomount; (啟動實例)

  RMAN> restore spfile to pfile /backup/mydbora from autobackup; (從自動備份中恢復服務器參數文件)

  

  從自動備份中恢復控制文件

  RMAN> shutdown immediate; (立即關閉數據庫)

  RMAN> startup nomount; (啟動實例)

  RMAN> restore controlfile to /backup from autobackup; (從自動備份中恢復控制文件)

  

  恢復和復原全數據庫

  RMAN> shutdown immediate; (立即關閉數據庫)

  RMAN> exit (退出)

  %mv /oracle/dbs/tbs_f /oracle/dbs/tbs_bak (將數據文件重命名)

  %mv /oracle/dbs/tbs_f /oracle/dbs/tbs_bak (將數據文件重命名)

  %mv /oracle/dbs/tbs_f /oracle/dbs/tbs_bak (將數據文件重命名)

  %mv /oracle/dbs/tbs_f /oracle/dbs/tbs_bak (將數據文件重命名)

  %rman target=rman/rman@mydb (啟動恢復管理器)

  RMAN> startup pfile=/oracle/admin/mydb/pfile/initmydbora (指定初始化參數文件啟動數據庫)

  RMAN> restore database; (還原數據庫)

  RMAN> recover database; (恢復數據庫)

  RMAN> alter database open; (打開數據庫)

  

  恢復和復原表空間

  RMAN> sql alter tablespace users offline immediate; (將表空間脫機)

  RMAN> exit (退出恢復管理器)

  %mv /oracle/dbs/usersdbf /oracle/dbs/usersbak (將表空間重命名)

  %rman target=rman/rman@mydb (啟動恢復管理器)

  RMAN> restore tablespace users; (還原表空間)

  RMAN> recover tablespace users; (恢復表空間)

  RMAN> sql alter tablespace users online; (將表空間聯機)

  

  增量備份與恢復

  第一天的增量基本備份

  RMAN> backup incremental level= database plus archivelog delete input;

  第二天的增量差異備份

  RMAN> backup incremental level= database plus archivelog delete input;

  第三天的增量差異備份

  RMAN> backup incremental level= database plus archivelog delete input;

  第四天的增量差異備份

  RMAN> backup incremental level= database plus archivelog delete input;

  第五天的增量差異備份

  RMAN> backup incremental level= database plus archivelog delete input;

  第六天的增量差異備份

  RMAN> backup incremental level= database plus archivelog delete input;

  第七天的增量差異備份

  RMAN> backup incremental level= database plus archivelog delete input;

  

  增量恢復

  RMAN> shutdown immediate;

  RMAN> exit

  %mv /oracle/dbs/tbs_f /oracle/dbs/tbs_bak

  %mv /oracle/dbs/tbs_f /oracle/dbs/tbs_bak

  %mv /oracle/dbs/tbs_f /oracle/dbs/tbs_bak

  %mv /oracle/dbs/tbs_f /oracle/dbs/tbs_bak

  %rman target=rman/rman@mydb

  RMAN> startup pfile=/oracle/admin/mydb/pfile/initmydbora

  RMAN> restore database;

  RMAN> recover database;

  RMAN> alter database open;


From:http://tw.wingwit.com/Article/program/Oracle/201311/18584.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.