oracle對查詢結果求和_Oracle 閃回技術詳解

概述

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

撤銷段(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');

閃回表可能會失敗,有可能有以下幾種情況:

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

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

c.閃回不能跨越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

長按二維碼關注公眾號

9012fbbc8d2d35c50050d1027e63cde7.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454515.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454515.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454515.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

html整人js代碼大全,Fool.js惡搞整人網頁特效jQuery插件

Fool.js是一個 jQuery 插件,包含了幾種頁面特效,可以用來在愚人節的時候整人,來實現更多的更變態的愚人功能,當然你也可以使用這個插件完成更多好看的效果。支持的特效消失的滾動條莫名其妙播放的音樂隨機消失的頁面元素不間斷的彈…

HDU - 5934

tarjan 視頻講解 /*** 題目鏈接:https://vjudge.net/problem/HDU-5934* 題意:給你n個炸彈,引爆每個炸彈會有一定的花費。每個炸彈給出坐標x,y,半徑r,引爆花費;* 引爆一個炸彈會把范圍內的炸…

Centos7-Lvs+Keepalived架構實驗詳解

Centos7-LvsKeepalived架構 LVSKeepalived 介紹 1 、 LVS LVS 是一個開源的軟件,可以實現 LINUX 平臺下的簡單負載均衡。 LVS 是 Linux Virtual Server 的縮寫,意思是 Linux 虛擬服務器。目前有三種 IP 負載均衡技術( VS/NAT 、 VS/TUN 和 …

python調用matlab環境配置、非常詳細!!!_[python][matlab]使用python調用matlab程序

問題引入 在做實驗的時候,需要用到python和matlab工具來進行不同的處理,比如在run神經網絡的時候,需要使用pytorch框架得到網絡的各個參數,在得到參數后需要使用matlab進行聚類規劃。之前的做法是用python腳本耦合其聯系&#xff…

html里寫js ajax嗎,js、ajax、jquery的區別是什么?

js、ajax、jquery的區別1、JS是一門前端語言。2、Ajax是一門技術,它提供了異步更新的機制,使用客戶端與服務器間交換數據而非整個頁面文檔,實現頁面的局部更新。3、jQuery是一個框架,它對JS進行了封裝,使其更方便使用。…

Flask 基礎

Flask是一個基于Python開發并且依賴 jinja2 模板和 Werkzeug WSGI 服務的一個微型框架,對于Werkzeug本質是Socket服務端,其用于接收http請求并對請求進行預處理,然后觸發Flask框架,開發人員基于Flask框架提供的功能對請求進行相應…

IIS 部署asp.net Core程序注意事項

Install the .NET Core Windows Server Hosting bundleInstall the.NET Core Runtime修改應用程序池的.net framework版本為無托管代碼轉載于:https://www.cnblogs.com/Qos8/p/7616036.html

泰安第一中學2021年高考成績查詢,等級考第一天結束 泰安部分考生已完成2021年高考...

6 月 9 日,山東新高考進入第三天,也是學業水平等級考試的第一天,物理、思想政治、化學三門選考科目的考試已全部完成。由于選考科目不同,考生結束高考的進程也不同,9 日下午,選考物理、思想政治、化學的考生…

基于FFMPEG 的跨平臺視頻編解碼研究

第33卷 第11期2011年11月武 漢 理 工 大 學 學 報JOURNALOF WUHANUNIVERSITYOFTECHNOLOGY Vol.33 No.11??????????????????????????????????????????????????Nov.2011DOI:10.3963/j.issn.1671-4431.2011.11.029基于FFMPEG 的…

python邏輯型數據也叫什么_Python入門 | 運算符和數據類型

自用總結。 零散知識 1.Python的計算方法:運算符、函數、方法 1) 方法與函數的區別: 方法與特定類型的對象有關,是屬于某個對象的函數,對象始終是該方法的第一個參數。e.g. islower()方法是檢查字符串中字符是否為小寫形式的方法&…

Flask 第三方組件之 WTForms

簡介 WTForms是一個支持多個web框架的form組件,主要用于對用戶請求數據進行驗證。 安裝: pip3 install wtforms 用戶登錄注冊示例 1. 用戶登錄 當用戶登錄時候,需要對用戶提交的用戶名和密碼進行多種格式校驗。如: 用戶不能為…

機器學習原理與算法(六) 支持向量機

版權聲明:本系列文章為博主原創文章,轉載請注明出處!謝謝! 本章索引: 從第3章的Logistic回歸算法開始,我們一直在討論分類問題。在各種不同的分類算法中,...,我們一直在討論如何分類…

讀《程序員的SQL金典》[2]--函數

一、數學函數 1.RAND SELECT RAND () ---0.302870228294199取0-1之間的隨機小數。 2.小數取整 CEILINT(data)舍掉小數部分并向上取整。FLOOR(data)舍掉小數部分并向下取整。SELECT TOP 3 FWeight, CEILING(FWeight ),FLOOR( FWeight) FROM T_PersonRound(m,d):四舍…

html div模塊前留空白,html – 3個DIV彼此相鄰,中間填充空白

您好我想問你如何將3 DIV放在一起,而中間一個填補第一和第三DIV之間的空白.我想在第一個NAD第三個DIV中有動態按鈕,我需要中間DIV來填充第一和第三個DIV之間的空間.我會破壞純CSS / HTML(沒有JavaScript)這是我的嘗試:http://jsfiddle.net/4smx3627/#wrapper{height…

mplayer安裝記錄 源碼分析

mplayer源碼下載地址: http://www.mplayerhq.hu/MPlayer/releases/ 下載最新的MPlayer-1.0rc4 #mkdir /usr/local/mplayer #mkdir /usr/local/codecs #cd MPlayer-1.0rc4 #./configure --prefix/usr/local/mplayer --codecsdir/usr/local/ codecs --langua…

python人臉識別代碼百度ai_python百度AI人臉識別API測試

1、注冊賬號 2、創建應用 3、得到AK和SK 4、用AK SK獲取access_token 可用下面的代碼: #!/usr/bin/python3.5 # encoding:utf-8 import requests # client_id 你的AK client_secret 你的SK host https://aip.baidubce.com/oauth/2.0/token?grant_typeclient_crede…

Flask 第三方組件之 SQLAlchemy

一、介紹 SQLAlchemy是一個基于Python實現的ORM框架。該框架建立在 DB API之上,使用關系對象映射進行數據庫操作,簡言之便是:將類和對象轉換成SQL,然后使用數據API執行SQL并獲取執行結果。 安裝:pip3 install sqlalc…

httpservlet獲取請求端IP地址

request.getRemoteAddr(); 轉載于:https://www.cnblogs.com/panxuejun/p/7623850.html

html 中怎樣顯示enum,JavaScript如何枚舉?

JavaScript中對象的屬性分為兩種:數據屬性和訪問器屬性。然后根據具體的上下文環境的不同,又可以將屬性分為:原型屬性和實例屬性。原型屬性是定義在對象的原型(prototype)中的屬性,而實例屬性一方面來自構造的函數中,然…

iperf測試網卡性能

Iperf是一個網絡性能測試工具。可以測試TCP和UDP帶寬質量,可以測量最大TCP帶寬,具有多種參數和UDP特性,可以報告帶寬,延遲抖動和數據包丟失 因為產品上確定要要用的PHY是千M的&a…