記錄一次ORACLE的不完全恢復

2021-09-22 04:06:09 字數 2404 閱讀 8485

前言:之前說過一句話,備份有時候就是用於資料庫的恢復,雖然很多時候都用不上。但是你永遠不知道什麼時候會用上,這就是備份的意義;

昨天晚上10點多的時候,突然朋友打**過來,要幫忙做乙個資料庫基於時間點的恢復。

具體的業務場景是這樣的:2023年2月7日12:00的時候有乙個錯誤的操作,導致使用者的資料被覆蓋。但是由於各種原因,到21:00的時候才發現;現在需要恢復乙個資料庫到2023年2月7日的12:00:00;

整理了一下思路,就開始馬上幹活,不到乙個小時整個資料庫就恢復完成了。

因為時間過去了9個小時,所以業務肯定已經做了很多操作,所以不能恢復到目前的資料庫上面,而要恢復到另外一台資料庫上面(不管什麼時候,都不建議直接覆蓋恢復到目前的生產庫上面):

一、思考需要的資源

1.1 資料庫的全備;

1.2 歸檔日誌的備份;

1.3 另外一台用於恢復的機器(同樣的作業系統、同乙個版本的資料庫、足夠的空間)

二、當前可以提供的資源

2.1 該資料庫每天5:00有做乙個資料庫全備;

2.2 目前有個測試系統用於開發的測試使用,符合作業系統、資料庫版本、空間的要求;

2.3 由於要恢復到12:00,所以需要進行資料庫歸檔日誌的備份;

三、實際的操作如下:

3.1 手工進行歸檔日誌和控制檔案的備份

指令碼:run

3.2 傳送引數檔案、備份檔案到測試

scp *20150207   [email protected]:/backup/

(資料庫全備和歸檔日誌的備份到測試機的/backup這個資料夾)

3.3 按照pfile的內容建立相應的資料夾

3.4 啟動資料庫到nomount狀態

a、設定系統的環境變數,指令碼: export oracle_sid=orcl

b、啟動資料庫到nomount狀態,指令碼:sqlplus > startup nomount;

3.5 進行控制檔案的恢復,(需要指定最後備份的那個控制檔案)

run

allocate channel ch1 device type disk;

restore controlfile from '/backup/orcl_control_21879_1_20150207';

release channel ch1;

3.6 啟動到mount狀態,進行資料庫的restore;

run

allocate channel ch1 device type disk;

allocate channel ch2 device type disk;

alter database mount;

restore database from tag=tag20150207t040022;

release channel ch1;

release channel ch2;

3.7 進行資料庫基於時間點的recover;

run{

allocate channel ch1 device type disk;

allocate channel ch2 device type disk;

set until time "to_date('2015-02-07 12:00:01','yyyy-mm-dd hh24:mi:ss')";

recover database;

release channel ch1;

release channel ch2;

3.8 以read only的方式開啟資料庫

sql> alter database open read only;

說明:一般進行不完全恢復的時候都是以resetlogs的方式開啟資料庫的,但是我們這裡以read only的方式開啟,是基於如下考慮的:雖然業務已經提供了要恢復的時間點,但是為了以防萬一這個時間點有問題,我們以read only方式開啟的時候,萬一時間點不對,還可以繼續往後進行recover,而且這個資料庫也是用來查詢的,不會進行資料操作;

3.9 在正式庫上面建立乙個dblink指向還原的這個資料庫,這樣便於業務人員可以直接在正式庫上面進行有問題表的資料的比對;

總結:

1、以上就是整個恢復的過程,看似很簡單,但是也許你並不知道,我每個月都有在做模擬的資料庫的恢復,並記錄各種場景使用的指令碼,台上一分鐘,台下很多功;

2、需要跟業務溝通清楚需要恢復的場景,避免做無用功,在做災難恢復時的場景跟救火的場景很相似的,時間寶貴;

3、一般情景下是不建議任何人員直接連線資料庫進行修改,因為太多的這種操作都是直接誤運算元據庫導致的;

4、還是強調一下資料庫備份的重要性,備份總是要有的,萬一哪天用到了;

oracle技術部落格:oracle 獵人筆記               資料庫技術群:367875324 (請備註oracle管理 )  

oracle基於時間點的不完全恢復

下面我們做乙個實驗,演示如何對oracle進行基於時間點的不完全恢復 在實驗之前請確保資料庫具有有效備份 獲取此時的時間並記錄下來 sql select to char sysdate,yyyy mm dd hh24 mi ss from dual to char sysdate,yy 2014 0...

ORACLE之不完全恢復 基於時間的恢復

記錄當前資訊,插入一行資料 5 再觀察時間和scn號,再插入一行資料 6 再觀察時間和scn號,每次執行後都記錄這些資訊。commit sql alter session set nls date format yyyy mm dd hh24 mi ss session altered.sql se...

一種不完全認同的職場觀念

身在職場,感慨良多。尤其是對於一些自己不認同的觀念,更是想發一番感慨。無奈人與人之間最難的就是溝通,通常自己說一句能被一圈的人說一百句來回還。還是閉口的好,但是思想還是有的,思維還在繼續,對一些事情的思考不流露出來時間久了自己也不記得了。職場上有一種觀念,上司肯定比下屬強,或者同等條件下,同事公升遷...