oracle 中的閃回

来源:https://www.cnblogs.com/newxiaobai/archive/2018/01/11/8267822.html
-Advertisement-
Play Games

概述: 閃回技術是Oracle強大資料庫備份恢復機制的一部分,在資料庫發生邏輯錯誤的時候,閃回技術能提供快速且最小損失的恢復(多數閃回功能都能在資料庫聯機狀態下完成)。需要註意的是,閃回技術旨在快速恢復邏輯錯誤,對於物理損壞或是介質丟失的錯誤,閃回技術就回天乏術了,還是得藉助於Oracle一些高級的 ...


概述:

  閃回技術是Oracle強大資料庫備份恢復機制的一部分,在資料庫發生邏輯錯誤的時候,閃回技術能提供快速且最小損失的恢復(多數閃回功能都能在資料庫聯機狀態下完成)。需要註意的是,閃回技術旨在快速恢復邏輯錯誤,對於物理損壞或是介質丟失的錯誤,閃回技術就回天乏術了,還是得藉助於Oracle一些高級的備份恢復工具如RAMN去完成(這才是Oracle強大備份恢復機制的精髓所在啊)

撤銷段(UNDO SEGMENT)

  在講閃回技術前,需要先瞭解Oracle中一個邏輯結構--撤銷段。因為大部分閃回技術都需要依賴撤銷段中的撤銷數據。撤銷數據是反轉DML語句結果所需的信息,只要某個事務修改了數據,那麼更新前的原有數據就會被寫入一個撤銷段。(事務回滾也會用到撤銷段中的數據)。事務啟動時,Oracle 會為其分配一個撤銷段,事務和撤銷段存在多對一的關係,即一個事務只能對應一個撤銷段,多個事務可以共用一個撤銷段(不過在資料庫正常運行時一般不會發生這種情況)。

閃回技術

  Oracle提供了四種可供使用的閃回技術(閃回查詢,閃回刪除,閃回歸檔,閃回資料庫),每種都有不同的底層體繫結構支撐,但其實這四種不同的閃回技術部分功能是有重疊的,使用時也需要根據實際場景合理選擇最合適的閃回功能。

閃回查詢(Flashback Query)

    a.基本閃回查詢

    功能描述:可以查詢過去某個時間段的資料庫狀態。

    工作原理:Oracle 會提取所需要的撤銷數據(前提是撤銷是可用的,即撤銷數據還沒被覆蓋)進行回滾,但這種回滾是臨時的,僅針對當前session可見。

    SQL> select * from dept as of timestamp to_timestamp('2016-09-10 11:00:00','yyyy-mm-dd hh24:mi:ss');
    b.閃回表

    功能描述:可將某個表回退到過去某個時間點

    工作原理:同樣,Oracle會先去查詢撤銷段,提取過去某個時間點之後的所有變更,構造反轉這些變更的SQL語句進行回退,閃回操作是一個單獨的事務,所以若由於撤銷數據過期之類的原因導致無法閃回,整個操作會回滾,不會存在不一致的狀態。

    步驟:

    1.啟用表閃迴首先要在表上支持行移動(在數據字典中設置標識來標識該操作可能會改變行ID,即同一條數據閃回成功後主鍵都一樣,但行ID其實已經發生變化了)   

    SQL> alter table emp enable row movement;
    2.閃回表操作      

    SQL> flashback table dept to timestamp to_timestamp('2016-09-10 11:00:00','yyyy-mm-dd hh24:mi:ss');
    閃回表可能會失敗,有可能有以下幾種情況:

      違反了資料庫約束,比如用戶不小心刪除了子表中的數據,現在想利用閃回表技術進行回退,恰好在這中間,父表中與該數據對應的那條記錄也被刪除了,在這種情況下,由於違反了外鍵約束,導致閃回表操作失敗了;

      撤銷數據失效,比如用於支撐閃回操作的撤銷數據被覆蓋了,這種情況閃回表操作自然會失敗;

      閃回不能跨越DDL,即在閃回點和當前點之間,表結構有過變更,這種情況閃回操作也會失敗。

    註意:上述閃回功能都是基於撤銷數據的,而撤銷數據是會被重寫的(Expired會被重寫,Active不會被重寫),所以,在需要使用這幾種閃回功能去恢複數據的時候(確切地說,是需要使用基於撤銷數據的閃回功能時),最短時間發現錯誤,第一時間執行閃回操作,才能最大程度地保證閃回功能的成功。

閃回刪除(Flashback Drop)

  功能描述:閃回刪除可以輕鬆將一個已經被Drop的表還原回來。相應的索引,資料庫約束也會被還原(除了外鍵約束)

  原理描述:Drop命令其實是Rename命令,早期的Oracle版本(10g之前),閃回刪除意味著從數據字典中刪除了該表的所有引用,雖然表中數據可能還存在,但已成了孤魂野鬼,沒法進行恢復了,10g版本之後,Drop命令則僅僅是一個Rename操作,所以恢復就很容易了。

  

  閃回刪除操作執行命令很簡單

    SQL> flashback table emp to before
  如果要還原的表名在當前系統中已經被占用,也可以在閃回刪除的時候對錶重命名

    SQL> flashback table emp to before drop rename to emp_new
  也可以通過回收站查看當前用戶那些表被刪除了,每個用戶都有一個回收站,這個回收站是個邏輯結構,它不是一塊獨立的存儲空間,它存在在當前表空間內,所以如果有別的操作需要空間,比如現在需要創建一張表,沒有足夠空間可用,回收站中的數據就會被清理,這也是導致閃回刪除失敗的原因。

    SQL> SHOW RECYCLEBIN;
  徹底刪除表,閃回刪除也無能為力

    SQL> DROP TABLE EMP PURGE;
  清空回收站

    SQL> PURGE RECYCLEBIN;
  註意:閃回刪除只針對Drop命令,註意區分truncate操作和drop操作,truncate稱為表截斷,會清空表中數據(調節Oracle高水位線實現),表結構不受影響,速度很快,弊端是此過程不會產生任何撤銷數據或是重做日誌,如果誤刪,恢復異常麻煩,要慎重使用。而Drop則會刪除數據+表結構,閃回刪除僅針對Drop操作。

閃回數據歸檔(Flashback Data Archive )

   功能描述:閃回數據歸檔可使表具有回退到過去任何時間點的能力,前面提到的閃回查詢,閃回表都會受限於撤銷數據是否失效,如果撤銷數據被覆蓋重寫了,閃回操作自然會失敗,閃回刪除則受限於表空間是否有足夠可用空間,而閃回數據歸檔,則沒有這些限制。

   創建閃回歸檔

   1.創建一個用戶閃回數據歸檔的表空間,當然,也可以使用已經存在的表空間。

    SQL> create tablespace test_tb datafile 'test.dbf' size 20m;
   2.創建一個保留時間為2年的閃回歸檔

     SQL> create flashback archive test_fa tablespace test_tb retention 2 year;
   

   為scott用戶下的emp表啟用閃回歸檔

   1.賦予用戶歸檔的許可權

     SQL> grant flashback archive on test_fa to scott;
   2.連接用戶

     SQL> conn scott/tiger;
   3.為emp表啟用閃回歸檔

     SQL> alter table emp flashback archive test_fa;
  至此,emp表就擁有了可以查詢或回退到過去2年任意時間點的能力!

閃回資料庫(Flashback Database)

   功能描述:閃回資料庫可將整個資料庫回退到過去某個時間點,閃回表是某張表的時空穿梭,閃回資料庫則是整個資料庫的時空穿梭。當然,閃回點之後的所有工作就丟失了,其實就相當於資料庫的不完整恢復,所以只能以resetlogs模式打開資料庫。閃回資料庫會造成停機時間,當然相比於傳統備份恢復機制,恢復過程會快很多。

   工作原理:閃回資料庫不使用撤銷數據,使用另外一種機制來保留回退所需要的恢複數據,當啟用閃回資料庫,發生變化的數據塊會不斷從資料庫緩衝區緩存中複製到閃回緩衝區,然後,稱為恢覆寫入器(Recovery Writer)的後臺進程會將這些數據刷新到磁碟中的閃回日誌文件中。閃回的過程,則是一個 提取閃回日誌-->將塊映像複製回數據文件 的過程。

   配置閃回資料庫(閃回資料庫要求資料庫為歸檔模式)

    1.指定閃回恢復區,也就是存放閃回日誌的位置,但閃回恢復區不僅僅是為了存放閃回日誌,Oracle的很多備份恢復技術都用到這個區域,比如控制文件的自動備份等都會存放到此區域。

   SQL> alter system set db_recovery_file_dest ='/flash_recovery_area';
     2.指定恢復區大小

   SQL> alter system set db_recovery_file_dest_size=4G;
    3.指定閃回日誌保留時間為2小時,即通過閃回操作,可以將資料庫回退到前兩小時內的任意時間點

   SQL> alter system set db_flashback_retention_target=120;
    4.有序關閉資料庫--mount模式下啟用閃回資料庫--打開資料庫

複製代碼
   SQL> shutdown immediate;

   SQL> startup mount;

   SQL> alter database flashback on;

   SQL> alter database open;
複製代碼
  至此,閃回資料庫配置完成!

  

   使用閃回資料庫功能

複製代碼
   SQL> shutdown immediate;

   SQL> startup mount;

   SQL> flashback database to timestamp sysdate-60/1440;

   SQL> alter database open resetlogs;
複製代碼
  

總結

  本文列舉了四類閃回技術,其中,閃回查詢,包括基本閃回查詢,閃回表等技術都依賴於撤銷數據(還有一類閃回技術為閃回事務,可以對指定事務進行閃回操作,原理類似,藉助於撤銷數據來構建用於反轉事務的SQL語句),依賴於撤銷數據,則自然受限於撤銷數據的保留時間,可能會由於撤銷數據被覆寫而導致閃回失敗。閃回刪除,則是由於10g版本後對錶的刪除僅表現為一個rename操作,引入回收站的概念,但此回收站僅是當前表空間的一塊邏輯劃分,所以會受限於當前表空間的可用空間的限制;閃回歸檔可提供查詢或回退到過去任意時間點的功能,閃回資料庫則是一中更極端的資料庫恢復功能,相當於不完整恢復,依賴於閃回日誌。 

以上文章為轉載原文:https://www.cnblogs.com/chengxiao/p/5860823.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天主要是資料庫,然後哎,白天做了一件蠢事,惹得一個小姐姐心情不好。。。 今天把模擬題做完了,老師自己都說出的有問題。。。。 但是現在自己很多語法也記不住,特別是存儲過程和觸發器、視圖,這些重點考察的語法。好像都有as吧 第6題始終沒有解決,我還沒完全想明白,到底是為什麼錯了。 輸出結果是這個: 自 ...
  • 連接資料庫: 輸入資料庫密碼即可登陸。 查看mysql版本信息: 查看當前時間: 實現Windows與Ubuntu虛擬機之間的文件互傳問題。 其實很簡單就是需要安裝一個VMware tools即可。 打開文件管理就有一個VM的tar包,沒有的話就需要多掛一個cd驅動器。 右鍵,設置, 我有兩個cd驅 ...
  • (scott賬戶) SELECT * FROM scott.dept;--4SELECT * FROM scott.emp;--14 /**笛卡爾積內連接(等值連接)外連接(非等值連接)自連接*/ --笛卡爾積--當查詢數據時沒有使用連接條件,會查出所有關聯數據--4*14=56SELECT * F ...
  • 今天新部署Cloudera Manager Hadoop(CDH)集群 發現祖國江山一片紅,所有服務都報時鐘偏差 1、查看各伺服器,時鐘是否正確 發現並無問題 2、查看CDH主機配置————主機時鐘偏差閾值 尼瑪,這個預設值警告是2s,嚴重是10s,仔細查看界面後面的描述如下: 這是主機運行狀況測試 ...
  • .Net MongoDB LBS地理位置定位 開發過程,實現商家按距離排序 前言: 在使用美團點外賣,看電影,找好吃的時候,經常會註意到軟體有一個按距離排序,找離我最近的商家,心中有一些疑問,.Net+Sql Server是如何做到這一需求的?發現使用關係型資料庫Sql Server實現這一需求是有 ...
  • 一 前言 以往公司開發的地理信息系統數據都是存儲在oracle中,然而在地圖數據的分析和計算中一直存在不小的問題,所以今次我們嘗試使用PostgreSQL+PostGIS來解決這一問題。 本篇筆記的目的就是記錄在研究這一開發路徑期間的“學習的內容”、“遇到的問題和解決過程”以及“簡單的實踐內容”以備 ...
  • --scott用戶不能使用,使用system登錄--修改用戶scott賬戶解鎖ALTER USER SCOTT ACCOUNT UNLOCK;--重新設置密碼identified被識別的alter user scott identified by tiger; --選擇 所有欄位 scott用戶部門 ...
  • Kettle使用心得彙總系列一 一、kettle實現的功能: kettle可以實現從不同數據源(excel、資料庫、文本文件等)獲取數據,然後將數據進行整合、轉換處理,可以再將數據輸出到指定的位置(excel、資料庫、文本文件)等; 通過kettle處理大量數據非常方便,如果window伺服器或者L ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...