1. 程式人生 > >冷備手工完全恢復(recover database,recover tablespace,recover datafile)

冷備手工完全恢復(recover database,recover tablespace,recover datafile)

冷備手工完全恢復


1.   手工完全恢復三種級別: 
recover database:所有或大部分datafile丟失,一般是在mount狀態完成。
recover tablespace:    非關鍵表空間損壞,表空間下某些資料檔案不能訪問,一般是在open下完成。
recover datafile:單一或少數資料檔案損壞,可以在mount或open 狀態完成。
四個關鍵檔案:1)system01.dbf, 2) undo tablespace,3)control file 4)current log file




2.  手工完全恢復前提: 1)有一套datafile全備, 2)使用當前控制檔案, 3)自上次備份以來的歸檔日誌和當前聯機日誌是完整的




3.  實驗1:(recover database )


3.1  檢視資料庫當前狀態,準備好冷備。
SQL> select * from andy;


ID
----------
1


--生成冷備指令碼
SQL> select 'ho cp ' || name || ' /home/oracle/coldbak' from v$controlfile;


'HOCP'||NAME||'/HOME/ORACLE/COLDBAK'
--------------------------------------------------------------------------------
ho cp /home/oracle/app/oradata/orcl/control01.ctl /home/oracle/coldbak
ho cp /home/oracle/app/flash_recovery_area/orcl/control02.ctl /home/oracle/coldbak


SQL> select 'ho cp ' || name || ' /home/oracle/coldbak' from v$datafile;


'HOCP'||NAME||'/HOME/ORACLE/COLDBAK'
--------------------------------------------------------------------------------
ho cp /home/oracle/app/oradata/orcl/system01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/sysaux01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/undotbs01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/users01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/tbtb01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/ogg01.dbf /home/oracle/coldbak


6 rows selected.


SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.


--冷備
SQL> ho cp /home/oracle/app/oradata/orcl/control01.ctl /home/oracle/coldbak
SQL> ho cp /home/oracle/app/flash_recovery_area/orcl/control02.ctl /home/oracle/coldbak
SQL> ho cp /home/oracle/app/oradata/orcl/system01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/sysaux01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/undotbs01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/users01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/tbtb01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/ogg01.dbf /home/oracle/coldbak


--檢查冷備
[
[email protected]
coldbak]$ ll
total 1997776
-rw-r-----. 1 oracle oinstall   9748480 Dec 10 06:22 control01.ctl
-rw-r-----. 1 oracle oinstall   9748480 Dec 10 06:25 control02.ctl
-rw-r-----. 1 oracle oinstall 408748032 Dec 10 06:32 ogg01.dbf
-rw-r-----. 1 oracle oinstall 639639552 Dec 10 06:31 sysaux01.dbf
-rw-r-----. 1 oracle oinstall 734011392 Dec 10 06:31 system01.dbf
-rw-r-----. 1 oracle oinstall 104865792 Dec 10 06:32 tbtb01.dbf
-rw-r-----. 1 oracle oinstall  99622912 Dec 10 06:32 undotbs01.dbf
-rw-r-----. 1 oracle oinstall  39329792 Dec 10 06:32 users01.dbf


SQL> startup;
ORACLE instance started.


SQL> insert into andy values(2);


1 row created.


SQL> commit;


Commit complete.


SQL> select * from andy;


ID
----------
1
2


3.2  模擬介質失敗,所有資料檔案丟失


[
[email protected]
orcl]$ rm -rf *.dbf  //資料庫在開啟的情況下就刪掉


SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup;
ORACLE instance started.


Total System Global Area 1068937216 bytes
Fixed Size   2220200 bytes
Variable Size 729812824 bytes
Database Buffers 331350016 bytes
Redo Buffers   5554176 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/home/oracle/app/oradata/orcl/system01.dbf'


3.3  完全恢復流程


--檢視需要恢復的檔案
SQL> select file#,error from v$recover_file; 


     FILE# ERROR
---------- -----------------------------------------------------------------
1 FILE NOT FOUND
2 FILE NOT FOUND
3 FILE NOT FOUND
4 FILE NOT FOUND
5 FILE NOT FOUND
6 FILE NOT FOUND


6 rows selected.


SQL> select file#,checkpoint_change# from v$datafile;


     FILE# CHECKPOINT_CHANGE#
---------- ------------------
1     1969481
2     1969481
3     1969481
4     1969481
5     1969481
6     1969481


6 rows selected.


SQL> select file#,checkpoint_change# from v$datafile_header; 


     FILE# CHECKPOINT_CHANGE#
---------- ------------------
1   0
2   0
3   0
4   0
5   0
6   0


6 rows selected.






a  首先還原所有資料檔案
[
[email protected]
orcl]$ cp /home/oracle/coldbak/*.dbf  /home/oracle/app/oradata/orcl/


b  恢復database
SQL> recover database;
Media recovery complete.


c  開啟資料庫
SQL>  alter database open;


Database altered.


d  驗證
SQL> select * from andy;


ID
----------
1
2




實驗2: recover tablespace (狀態:database open)


說明:針對的是非關鍵表空間的損壞,基於表空間的完全恢復實際上還是對其下的datafile的恢復


模擬這種情形非常實用,通常是某個非關鍵表空間下的資料檔案受損,但並沒有造成Oracle崩潰, 我們只需針對個別有問題的tablespace去做單獨的線上恢復操作,也就是說恢復時資料庫整體是online的,而區域性表空間是offline的,資料庫不需要shutdown。


1)瞭解一下當前狀態,有個 LZY 表空間
SQL> col file_name for a60
SQL> select file_id,file_name,tablespace_name from dba_data_files;


   FILE_ID FILE_NAME                                                    TABLESPACE_NAME
---------- ------------------------------------------------------------ -------------------------
         4 /home/oracle/app/oradata/orcl/users01.dbf                    USERS
         3 /home/oracle/app/oradata/orcl/undotbs01.dbf                  UNDOTBS1
         2 /home/oracle/app/oradata/orcl/sysaux01.dbf                   SYSAUX
         1 /home/oracle/app/oradata/orcl/system01.dbf                   SYSTEM
         5 /home/oracle/app/oradata/orcl/tbtb01.dbf                     LZY
         6 /home/oracle/app/oradata/orcl/ogg01.dbf                      GOLDGATE


6 rows selected.


2)準備實驗資料


SQL> create table andy.andydemo(id int) tablespace lzy;


Table created.


SQL> inset into andy.andydemo values(1);
SP2-0734: unknown command beginning "inset into..." - rest of line ignored.
SQL> insert into andy.andydemo values(1);


1 row created.


SQL> commit;


Commit complete.


SQL> select * from andy.andydemo;


        ID
----------
         1
3)模擬表空間損壞,資料庫open下,直接刪除表空間下的資料檔案   


SQL> ho rm -rf /home/oracle/app/oradata/orcl/tbtb01.dbf


4)查證該表空間上的表不可訪問了


SQL> alter system flush buffer_cache;   --清除data buffer


System altered.


SQL> select * from andydemo;
select * from andydemo
              *
ERROR at line 1:
ORA-01116: error in opening database file 5
ORA-01110: data file 5: '/home/oracle/app/oradata/orcl/tbtb01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3


5)看看scn的情況
SQL> select file#,checkpoint_change# from v$datafile;


     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1            1969484
         2            1969484
         3            1969484
         4            1969484
         5            1969484
         6            1969484


6 rows selected.


SQL> select file#,checkpoint_change# from v$datafile_header;


     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1            1969484
         2            1969484
         3            1969484
         4            1969484
         5                  0
         6            1969484


6 rows selected.


說明:
v$datafile是檢視來自控制檔案裡記錄的資料檔案scn資訊。 
v$datafile_header是檢視資料檔案頭中資料檔案scn資訊。


6)表空間offline   --immediate使表空間能立即離線,不等Oracle對任何資料檔案做檢查


SQL> alter tablespace lzy offline immediate;


Tablespace altered.


7)資料庫open下,使用備份還原這個表空間下的所有資料檔案。


SQL> ho cp /home/oracle/coldbak/tbtb01.dbf /home/oracle/app/oradata/orcl/


8)恢復tablespace


SQL> recover tablespace lzy;
Media recovery complete.


9)使表空間online


SQL> alter tablespace lzy online;


Tablespace altered.//注意:此時資料庫狀態一直是open的。


10) 檢驗


SQL> select * from andydemo;


ID
----------
1








實驗3: (recover datafile,database mount或open狀態)


恢復datafile, 同實驗2不同的是模擬UNDO檔案損壞: 因UNDO資料檔案也是關鍵檔案,所以只能在mount狀態下恢復。


1) 模擬環境:




SQL> delete andy.andy; //注意:刪掉了andy並提交,老值在UNDO裡。
3 rows deleted.
SQL>commit;


2)在open 狀態下刪除datafile
SQL> ho rm -rf /home/oracle/app/oradata/orcl/undotbs01.dbf


SQL> insert into andy.andy values(4);  /undo檔案已經不在了,dbwr未來得及重新整理,此條記錄在redo裡
SQL>commit;
                                                                                     
3)關閉資料庫
SQL> shutdown abort;
ORACLE instance shut down.//abort埋下伏筆,等到完全恢復時會做UNDO回滾。


4) 啟動資料庫mount
SQL> startup;
ORACLE instance started.


Total System Global Area 1068937216 bytes
Fixed Size   2220200 bytes
Variable Size 729812824 bytes
Database Buffers 331350016 bytes
Redo Buffers   5554176 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: '/home/oracle/app/oradata/orcl/undotbs01.dbf'


5)還原並恢復UNDO資料檔案


SQL> ho cp /home/oracle/coldbak/undotbs01.dbf /home/oracle/app/oradata/orcl/undotbs01.dbf


SQL> recover datafile 3
Media recovery complete.


6)開啟資料庫(會完成UNDO表空間資料的回滾)


SQL> alter database open;


Database altered.


7) 驗證
SQL> select * from andy;


ID
----------
4


總結:有全冷備條件下三種級別恢復流程。    (相應檔名視自己的環境而定)


recover database:


SQL> select file#,error from v$recover_file;
SQL> select file#,checkpoint_change# from v$datafile;
SQL> select file#,checkpoint_change# from v$datafile_header; 
SQL> ho cp /home/oracle/coldbak/*.dbf  /home/oracle/app/oradata/orcl/
SQL> recover database;
SQL>  alter database open;


recover tablespace:


SQL> select file#,error from v$recover_file;
SQL> select file_id,file_name,tablespace_name from dba_data_files;
SQL> select file#,checkpoint_change# from v$datafile;
SQL> select file#,checkpoint_change# from v$datafile_header;
SQL> alter tablespace lzy offline immediate;
SQL> ho cp /home/oracle/coldbak/tbtb01.dbf /home/oracle/app/oradata/orcl/
SQL> recover tablespace lzy;
SQL> alter tablespace lzy online;


recover datafile:


SQL> select file#,error from v$recover_file;
SQL> select file#,checkpoint_change# from v$datafile;
SQL> select file#,checkpoint_change# from v$datafile_header;
SQL> ho cp /home/oracle/coldbak/undotbs01.dbf /home/oracle/app/oradata/orcl/undotbs01.dbf
SQL> recover datafile 3
SQL> alter database open;




OK,轉載請標明出處。

相關推薦

手工完全恢復recover databaserecover tablespacerecover datafile

冷備手工完全恢復 1.   手工完全恢復三種級別:  recover database:所有或大部分datafile丟失,一般是在mount狀態完成。 recover tablespace:    非關鍵表空間損壞,表空間下某些資料檔案不能訪問,一般是在open下完成。 r

實現多次不完全恢復RAC環境需要將另一節點關閉

chang hang startup 節點 lec star med immediate 關閉 #查看以resetlogs打開的歷史SQL> SELECT a.INCARNATION#,a.RESETLOGS_CHANGE#,to_char(a.RESETLOGS_T

oracle資料庫如何手工完全恢復操作?總結

oracle資料庫如何手工完全恢復操作? 1.當全部或大部分資料檔案損壞時,需在mount 下進行“資料庫還原恢復”操作: 具體為手工在作業系統中,通過cp 還原受損的 dbf,不一定需要還原全部資料檔案,可以通過查詢v$recover_file來確定哪些檔案需要被還原。

配置設作為DHCP中繼中繼與服務器處於同一網絡

hit ack relay alt 二層交換機 動態 white asi from 作業提要一、拓撲圖二、組網需求如上圖所示,某企業將DHCP服務器部署在核心層設備上,DHCP服務器與企業內的終端不在同一個網段。企業希望使用該DHCP服務器為終端動態分配IP地址。三、配置思

Jira+Confluence機環境部署遷移環境、雙機數據同步記錄

之前 操作 環境 enc .html 信息 環境部署 遷移 www 之前在公司機房的一臺服務器上部署了一套Jira+Confluence環境,由於很多資料和運維信息都在上面做的分享記錄,而該環境部署在單機,所以安全起見,考慮再部署一套備機環境,實現雙機實時同步環境。下面

git tag 標籤完全用法如何更好的管理你的分支

打標籤 同大多數 VCS 一樣,Git 也可以對某一時間點上的版本打上標籤。人們在釋出某個軟體版本(比如 v1.0 等等)的時候,經常這麼做。 本節我們一起來學習如何列出所有可用的標籤,如何新建標籤,以及各種不同型別標籤之間的差別。 列顯已有的標籤

oracle數據庫中的手工備份和恢復

ber back red hat dia 11g lte recovery pro || 我的操作系統是red hat5.5 32位系統oracle11g 以我的系統為例: 冷備狀態下,數據庫必須是關閉的,但是我們現在要做一個實驗,在開庫的狀態下分別查詢出: 1.sho

oracle 11g 手工

ora-01157 啟動 temp over res 備份日誌 blog lock start 查看數據庫是否處於非歸檔模式關閉數據庫shutdown immediate備份控制文件和數據文件(沒有備份日誌文件,建議一起備份) [oracle@enmoedu1 PROD]$

MySQL第四天用戶授權與撤銷完全備份和完全恢復

運維day04一、用戶授權與撤銷數據庫管理員密碼設置?1.1修改數據庫管理員本機登錄密碼[root@db2 ~]# mysqladmin -hlocalhost -uroot -p password "123456"Enter password: mysqladmin: [Warning]

數據庫恢復database restore之兵不血刃——半小時恢復客戶數據庫

oracle11g ora 設置環境變量 ceo 出了 ice art work sqlplus 昨天,一個客戶打打來電話,說他們的數據庫壞了,不能用了,需要我幫助恢復下,這馬上要放假了,居然出了這事兒,自己也不太喜歡恢復數據庫這類,尤其是他們的數據庫是個win上的庫,但心

2.7備份與還原--在完全恢復模式下事務日誌的角色

ges 需要 很多 對數 for 事情 mage .com .html 簡介 生產環境下的數據是如果可以寫在資產負債表上的話,我想這個資產所占的數額一定不會小。而墨菲定律(事情如果有變壞的可能,無論這種可能性有多小,它總會發生)仿佛是給DBA量身定做的。在上篇文章介

解決 ‘Win7&Win10系統電腦檔案誤刪除且清空回收站條件下檔案完美恢復完全免費

1.引言     估計很多朋友都和我一樣,硬碟太滿了或者腦子一抽筋,立刻把檔案刪除並且清空了回收站,過了一會,忽然腦門一拍,馬上又想恢復資料了,怎麼辦?於是,我和大部人的做法一樣,瘋狂百度,發現,彈出來的是某某資料恢復大叔啊,是出來好幾個,但是無一例外,都有短板,要麼不要臉

SQL Server中事務日誌管理的步驟第5級:完全恢復模式管理日誌

維護計劃 recover 最小 替代 關心 每日 工作方式 檢查 耗時 SQL Server中事務日誌管理的步驟,第5級:完全恢復模式管理日誌 作者:Tony Davis,2012/01/27 系列 本文是進階系列的一部分:SQL Server中事務日誌管理的步驟 當事情進

Oracle database和client 安裝教程轉自部落格園用於

** database ** 1.先到Oracle官網上下載11g oracle Database 11g 第 2 版 (11.2.0.1.0) 標準版、標準版 1 以及企業版 適用於 Microsoft Windows (x64) 的 Oracle Datab

恢復到特定點時間點、scn、日誌序列號rman不完全恢復

將資料庫、表空間、資料檔案等恢復至恢復備份集儲存時間中的任何一個時間點/SCN/日誌序列(一般是日誌挖掘找到誤操作點),但須謹慎,操作前一定需要做好備份,具備條件的情況下最好先恢復到異機,避免業務停機時間。 前提:已經有資料庫備份 (作者已經提前準備了備份,這裡不進行備

第四章:手工完全恢復

一般是資料庫啟動不起來的,所以是在mount下進行4.1 不完全恢復的特點:            1)讓整個database 回到過去某個時間點,不能避免資料丟失。       2)想跳過壞日誌而繼續恢復所有其他工作是不可能的,前滾沒有這個功能(考點)。      3)必須

MySQL自動備份和手工恢復可實現定時備份、保留最近7天、異地備份

以下是windows下的批處理: 1set hour_str=%time:~0,2%2if"%hour_str:~0,1%"==""set"hour_str=0%hour_str:~1%"3set fileName=%date:~0,4%-%date:~5,2%-%dat

ORACLE檔案恢復

1、恢復資料庫服務 ORADIM -DELETE -SID HDQTLS  --刪除資料庫服務 ORADIM -NEW -SID HDQTLS -STARTMODE A -SYSPWD FUTURE -PFILE D:\data\pfile\init.ORA  --建立資

RMAN不完全恢復方法恢復到資料庫某一時間點

RMAN不完全恢復方法 試驗目的:利用RMAN完成對資料庫的不完全恢復(將資料庫恢復到某個時間點) 試驗步驟:         1.RMAN備份資料庫:backup database;   2. 記錄當前時間: SQL> select to_c

oracle11G Windows恢復

oracle11g 後臺 修改 備恢 創建 新建庫 設置 參數 控制 現有Windows oracle 冷備全部數據文件,全部的控制文件,全部的redo日誌文件。丟失參數文件恢復思路:指定恢復原庫的sidC:\>set oracle_sid=orcl設置環境變量的目地