掃描二維碼
隨時(shí)隨地手機(jī)看文章
引言
傳統(tǒng)上,誤刪除了 Oracle數(shù)據(jù)庫中的重要表或表中的記 錄,提交(COMMIT)成功后,再想恢復(fù)被誤刪除的表格或 表格中的數(shù)據(jù),那只能釆用數(shù)據(jù)庫備份和恢復(fù)技術(shù),其步驟為: 首先利用誤刪除前備份的全部數(shù)據(jù)文件和控制文件將數(shù)據(jù)庫 還原到備份狀態(tài),再應(yīng)用在線重做日志文件和歸檔日志文件, 將數(shù)據(jù)庫恢復(fù)到誤刪除前的狀態(tài),即執(zhí)行數(shù)據(jù)庫的不完全恢 復(fù),這樣做不但需要數(shù)據(jù)庫全備份,且操作復(fù)雜,耗費(fèi)時(shí)間 較長(zhǎng),在恢復(fù)期間數(shù)據(jù)庫還必需關(guān)閉,不能使用。從Oracle 9i開始,利用新提供的閃回功能,被誤刪除的表或表中的數(shù) 據(jù)恢復(fù)可以更加方便、快捷。Oracle閃回功能在10 g、11 g又 分別得到了加強(qiáng)。
1閃回技術(shù)的功能
為了演示閃回功能,先在sql*plus中執(zhí)行以下語句,創(chuàng)建 測(cè)試表testta,表中插入3條新記錄后,提交插入事務(wù)。
SQL>CREATE TABLE testta( id INT,name VARCHAR2(4));
SQL>INSERT INTO testta VALUES。,'aaaa'); SQL>INSERT INTO testta VALUES(2,'bbbb'); SQL>INSERT INTO testta VALUES。,'cccc'); SQL>COMMIT ;
再執(zhí)行以下語句,設(shè)置顯示當(dāng)前時(shí)間:
SQL>SET TIME ON
刪除testta表中全部3條記錄:
14 : 11 : 29 SQL>DELETE testta ;
提交刪除事務(wù):
14 : 12 : 30 SQL>COMMIT ;
收稿日期:2014-01-08
14 : 12 : 34 SQL> SELECT * FROM testta ;
表testta中已沒有記錄。由于刪除事務(wù)已提交成功,如想 恢復(fù)被刪除的記錄,傳統(tǒng)的方法只能是執(zhí)行數(shù)據(jù)庫的不完全 恢復(fù)?,F(xiàn)在釆用閃回?cái)?shù)據(jù)庫(Flashback Database)的方法恢 復(fù)刪除數(shù)據(jù),操作如下。
關(guān)閉數(shù)據(jù)庫,將數(shù)據(jù)庫設(shè)置到裝載(mount)狀態(tài)。
14 : 14 : 47 SQL>SHUTDOWN IMMEDIATE
14 : 15 : 04 SQL>STARTUP MOUNT
利用閃回?cái)?shù)據(jù)庫的方法,將數(shù)據(jù)庫整體調(diào)整到刪除數(shù)據(jù) 前的某一時(shí)間。
14 : 16 : 10 SQL>FLASHBACK DATABASE TO TIMESTAMP TO_DATE( '2013-12-23 14 : 11 : 27',,yyyy-mm-dd hh24 : mi: ss'); 使用RESETLOGS選項(xiàng),打開數(shù)據(jù)庫。
14 : 17 : 07 SQL>ALTER DATABASE OPEN RESETLOGS;
查詢testta表內(nèi)容。
14 : 17: 42 SQL>SELECT * FROM testta ;
執(zhí)行后,部分顯示結(jié)果如下:
ID NAME
aaaa
bbbb
cccc
結(jié)果顯示說明,testta表中被刪除的數(shù)據(jù)已經(jīng)恢復(fù)。
2閃回?cái)?shù)據(jù)庫的操作
閃回?cái)?shù)據(jù)庫就像數(shù)據(jù)庫上的倒帶按鈕,可以把整個(gè)數(shù)據(jù) 庫回退到過去的某個(gè)時(shí)點(diǎn)狀態(tài),其最終結(jié)果就像執(zhí)行了不完整恢復(fù)。因此,閃回?cái)?shù)據(jù)庫不但能恢復(fù)像以上例子中被刪除表中的記錄,也能恢復(fù)被刪除的表、視圖等數(shù)據(jù)庫其他對(duì)象,還能恢復(fù)被刪除了的用戶等。但此種方法也有其局限性,一是恢復(fù)到過去某一時(shí)間點(diǎn)后,則數(shù)據(jù)庫的全部?jī)?nèi)容都被恢復(fù)到當(dāng)時(shí)時(shí)間點(diǎn)狀態(tài),如果只是誤刪除了某個(gè)表中的記錄,而只想恢復(fù)該表的內(nèi)容,則不宜采用閃回?cái)?shù)據(jù)庫的方法 ;二是采用閃回?cái)?shù)據(jù)庫的方法,必須要先關(guān)閉數(shù)據(jù)庫。為了克服閃回?cái)?shù)據(jù)庫的缺陷,可采用以下閃回表(Flashback Table)的方法,恢復(fù)被刪除的記錄,操作如下:
創(chuàng)建測(cè)試表 testtb,在表中插入 3 條新記錄后,提交插入事務(wù) :
14 :43 :09 SQL> CREATE TABLE testtb( id INT,
name
VARCHAR2(4)) ;
1 4 :4 3 :2 0 S Q L > I N S E R T I N T O t e s t t b
VALUES(1,’aaaa’) ;
1 4 :4 3 :2 0 S Q L > I N S E R T I N T O t e s t t b
VALUES(2,’bbbb’) ;
1 4 :4 3 :2 0 S Q L > I N S E R T I N T O t e s t t b
VALUES(3,’cccc’) ;
14 :43 :20 SQL> COMMIT;
刪除 testtb 表中全部 3 條記錄 :
14 :44 :16 SQL>DELETE testtb ;
提交刪除事務(wù) :
14 :44 :26 SQL>COMMIT;
14 :44 :28 SQL> SELECT * FROM testtb ;
刪除事務(wù)已提交成功,testtb 表中已沒有記錄?,F(xiàn)采用閃回表的方法恢復(fù)刪除數(shù)據(jù)。
閃回表的前提是啟動(dòng)被操作表的行移動(dòng)(ROW MOVEMENT)特性。先啟動(dòng)表 testtb 的行移動(dòng)特性 :
14 :44 :32 SQL> ALTER TABLE testtb ENABLE ROW
MOVEMENT;
利用閃回表的方法,將 testtb 表恢復(fù)到刪除數(shù)據(jù)前的某一時(shí)間。
14 :45 :27 SQL> FLASHBACK TABLE testtb TO
TIMESTAMP TO_TIMESTAMP(‘
2013-12-23 14 :44 :
00’,
‘
YYYY-MM-DD HH24 :MI :SS’) ;
查詢 testtb 表內(nèi)容 :
14 :45 :28 SQL>SELECT * FROM testtb ;
執(zhí)行后,部分顯示結(jié)果如下:
ID NAME
---------- ----
1 aaaa
2 bbbb
3 cccc
結(jié)果顯示說明,testtb 表中被刪除的數(shù)據(jù)已經(jīng)恢復(fù)。
3 閃回表
閃回表能夠恢復(fù)指定表中的記錄內(nèi)容,而不改變數(shù)據(jù)庫其他對(duì)象的內(nèi)容。但數(shù)據(jù)恢復(fù)中,閃回表必須啟用被操作表的行移動(dòng)特性,且只能進(jìn)行閃回表的 DML 操作,不能進(jìn)行閃回 DDL 操作。如果用戶刪除了(DROP)表,則不能采用閃回表的方法恢復(fù),此時(shí)可以有采用上面介紹的閃回?cái)?shù)據(jù)庫的方法恢復(fù)整個(gè)數(shù)據(jù)庫,也可以采用以下閃回刪除(Flashback Drop)的方法,其操作如下:
創(chuàng)建測(cè)試表 testtc,表中插入 3 條新記錄后,提交插入事務(wù) :
16 :10 :43 SQL> CREATE TABLE testtc( id INT,
name
VARCHAR2(4)) ;
1 6 :1 0 :4 4 S Q L > I N S E R T I N T O t e s t t c
VALUES(1,’aaaa’) ;
1 6 :1 0 :4 4 S Q L > I N S E R T I N T O t e s t t c
VALUES(2,’bbbb’) ;
1 6 :1 0 :4 4 S Q L > I N S E R T I N T O t e s t t c
VALUES(3,’cccc’) ;
16 :10 :46 SQL>COMMIT;
刪除 testtb 表 :
16 :11 :55 SQL> DROP TABLE testtc ;
從回收站中閃回刪除的 testtc 表 :
16 :12 :34 SQL> FLASHBACK TABLE testtc TO
BEFORE DROP;
查詢 testtc 表內(nèi)容 :
16 :13 :19 SQL> SELECT * FROM testtc ;
執(zhí)行后,部分顯示結(jié)果如下:
ID NAME
---------- ----
1 aaaa
2 bbbb
3 cccc
結(jié)果顯示說明,被刪除 testtc 表已從回收站中恢復(fù)。
Oracle 在刪除一個(gè)表時(shí),并不立即丟棄它,而是把它放在回收站中,并保留盡可能長(zhǎng)的時(shí)間。閃回刪除能夠像Windows 操作系統(tǒng)一樣,將回收站中被刪除的對(duì)象方便地恢復(fù),但閃回刪除只能恢復(fù)表、索引等對(duì)象,對(duì)于用戶等對(duì)象,閃回刪除無能為力。
通過以上驗(yàn)證可能看出,采用閃回技術(shù),可以針對(duì)行級(jí) 和事務(wù)級(jí)發(fā)生過變化的數(shù)據(jù)進(jìn)行恢復(fù),縮短數(shù)據(jù)恢復(fù)的時(shí)間, 且操作簡(jiǎn)單,這樣做大大提高了數(shù)據(jù)庫恢復(fù)的效率。
4結(jié)語
最后,我們需要再說明以下幾點(diǎn):一是閃回技術(shù)具有強(qiáng) 大且簡(jiǎn)便的數(shù)據(jù)庫恢復(fù)功能,是否就不需要再做數(shù)據(jù)庫備份 和不完全恢復(fù)了呢?答案是否定的,因?yàn)楫?dāng)出現(xiàn)介質(zhì)損壞時(shí), 任何閃回方法都是毫無用處,此時(shí),只能執(zhí)行標(biāo)準(zhǔn)的備份、還 原與恢復(fù)過程;二是要實(shí)現(xiàn)各種閃回功能,必須要先對(duì)數(shù)據(jù) 庫進(jìn)行相應(yīng)設(shè)置,如啟動(dòng)閃回?cái)?shù)據(jù)庫、啟動(dòng)數(shù)據(jù)庫的“回收站”、 啟動(dòng)表的行移動(dòng)等;三是除了以上介紹的3種閃回技術(shù)外,還要有閃回版本查詢(Flashback Version Query)、閃回事務(wù)查詢 (Flashback Transaction Query)、閃回查詢(Flashback Query) 和閃回?cái)?shù)據(jù)歸檔(Flashback Data Archive)等閃回方法。
20211120_6198f2c06decf__閃回技術(shù)在數(shù)據(jù)庫誤刪除中的應(yīng)用
5G領(lǐng)先讓我們信心大增,但是這不能成為我們高枕無憂的理由。隨著我們認(rèn)識(shí)到通訊技術(shù)在科技領(lǐng)域的重要性之后,競(jìng)爭(zhēng)必然會(huì)更加激烈起來。在5G還未成熟的年代,通訊商們就已經(jīng)開始將目光瞄準(zhǔn)了6G,并開始相關(guān)的研發(fā)和布局。
關(guān)鍵字: 5G 6G 虛擬數(shù)字世界小米智能家居現(xiàn)在已經(jīng)能實(shí)現(xiàn)聯(lián)動(dòng)和自動(dòng)化了,比如指紋鎖進(jìn)屋就打開窗簾電視,播放天氣預(yù)報(bào),根據(jù)設(shè)定溫度決定是否打開空調(diào),根據(jù)空氣質(zhì)量檢測(cè)儀決定是否打開新風(fēng)機(jī)~結(jié)合人體移動(dòng)和光線傳感器開燈就更是不用說了~最近也在搞全屋智能化,...
關(guān)鍵字: 全屋智能 溫度感應(yīng) 小米擁有 5G、人工智能、物聯(lián)網(wǎng)等新技術(shù)的支撐,智能家居行業(yè)逐漸從單品智能邁入全屋智能階段 。其由于全屋智能產(chǎn)品特殊性,落地安裝涉及到方案場(chǎng)景設(shè)計(jì)、布線,安裝,施工、后期維護(hù)更新等多個(gè)環(huán)節(jié),整體最好的實(shí)施路徑是通過房屋整體裝...
關(guān)鍵字: 全屋智能 5G 物聯(lián)網(wǎng)5G時(shí)代,我們實(shí)現(xiàn)了彎道超車,一躍超越高通,愛立信,領(lǐng)先于世界?,F(xiàn)如今,5G正在全世界加速普及和應(yīng)用。通訊和實(shí)業(yè)的結(jié)合,已助力生產(chǎn)效率進(jìn)一步提高,讓我們的生活變得更加美好。
關(guān)鍵字: 5G 6G 中國移動(dòng)