1炒考、開(kāi)啟瓤帚、關(guān)閉閃回策略
開(kāi)啟閃回需要數(shù)據(jù)庫(kù)在歸檔模型下,所以首先需要開(kāi)啟歸檔怯邪。并且在mount狀態(tài)下澄步。
所有操作不能再PLSQL中操作,需要在SQL Plus中連接系統(tǒng)管理員角色后操作
首先查看是否開(kāi)啟閃回:select flashback_on from V$database;
如果已經(jīng)開(kāi)啟了閃回,無(wú)須執(zhí)行下面的操作县恕。
設(shè)置閃回區(qū)大欣萋!:
SQL> alter system set db_recovery_file_dest_size=30G scope=both;
設(shè)置閃回區(qū)位置:
SQL> alter system set db_recovery_file_dest='/相對(duì)地址' scope=both;
設(shè)置閃回目標(biāo)為5天,以分鐘為單位鸯旁,每天為1440分鐘:
SQL> alter system set db_flashback_retention_target=7200 scope=spfile;
關(guān)閉數(shù)據(jù)庫(kù)
SQL> shutdown immediate;
啟動(dòng)到mount方式
SQL> startup mount;
如果歸檔沒(méi)有打開(kāi)苞冯,打開(kāi)歸檔[因?yàn)閒lashback依賴(lài)Media recovery,所以在打開(kāi)flashback之前必須先啟用歸檔]
SQL> alter database archivelog;
打開(kāi)閃回策略
SQL> alter database flashback on;
打開(kāi)數(shù)據(jù)庫(kù)
SQL> alter database open;
再進(jìn)行確認(rèn):
SQL> select flashback_on from V$database;
二、關(guān)閉閃回?cái)?shù)據(jù)庫(kù)特性:
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database flashback off;
SQL> alter database open;
注意:不開(kāi)啟閃回策略鸠删,不能進(jìn)行數(shù)據(jù)庫(kù)級(jí)別的閃回抱完,但是可以進(jìn)行基于回收站的表級(jí)的閃回,例如:1刃泡、閃回drop后的表:flashback table 表名 to before drop [rename to 表名2];
2巧娱、閃回刪掉的數(shù)據(jù):先要開(kāi)啟row movement:alter table emp enable row movement;然后閃回:flashback table 表名 to timestamp(systimestamp - interval '1' hour) 如果不開(kāi)啟row movement,則可以:insert into 表名 select * from 表名 as of timestamp(systimestamp - interval '1' hour)
3.1閃回?cái)?shù)據(jù)庫(kù)
SQL >flashback database to time to_date(xxx);
SQL >flashback database to time TO_TIMESTAMP (xxx);
SQL >flashback database to scn xxx
SQL >flashback database to sequence xxx thread 1
SQL>flashback database to timestamp(sysdate-1/24)
3.2閃回表
先要開(kāi)啟row movement
SQL>alter table emp enable row movement;
SQL >FLASHBACK TABLE tablename TO TIMESTAMP (JUL-07-2013, 02:33:00)
SQL >FLASHBACK TABLE employee TO SCN 133456;
SQL >FLASHBACK TABLE t1 TO TIMESTAMP '2013-03-03 12:05:00' ENABLE TRIGGERS;
閃回表可以分為兩種情況烘贴,一種是閃回到指定時(shí)間或SCN,一種是drop閃回
閃回到指定時(shí)間或SCN:
SQL>flashback table emp to timestampto_timestamp
('2013-09-12 08:00:00','yyyy-mm-ddhh24:mi:ss');
SQL>flashback table emp to scn 11064241;
DROP閃回:
如果誤對(duì)表做了drop操作禁添,可用下面的方法閃回
SQL>flashback table s_emp1 to before drop;
可以以下面的方法閃回
SQL>flashback table flashbacktable to before drop rename to a;
SQL>flashback table "回收站實(shí)體名"to before drop;
--閃回表后表的索引也會(huì)回來(lái),但是索引名還是在recyclebin中顯示的名字桨踪,所以使用 alterindex“ bin$xxx” rename to xxxx命令修改索引名稱(chēng)老翘。
SQL>alter index "BIN$s6TKiw4uafDgRAAVF3jtoA==$0" rename to PK_PC_STIM_INJ_ENHANCE_MON
3.3查詢(xún)閃回(flashbackquery)
delete數(shù)據(jù)庫(kù)里的數(shù)據(jù)都刪除了以后,還commit锻离,采用下面的方法實(shí)現(xiàn)數(shù)據(jù)的還原
·查詢(xún)過(guò)去某指定時(shí)間點(diǎn)數(shù)據(jù)庫(kù)中的數(shù)據(jù)铺峭。
SQL>select* from emp as of timestamp to_timestamp('2013-07-05 08:00:00','yyyy-mm-ddhh24:mi:ss');
·刪除表后將數(shù)據(jù)添加到原表中
SQL>insertinto emp select * from emp
as of timestamp to_timestamp
('2013-07-05 08:00:00','yyyy-mm-ddhh24:mi:ss');
3.4 刪除閃回(flashbackdrop)
閃回被dropped的基表,
·顯示回收站信息
SQL>show recyclebin
--select* from user_recyclebin
·徹底刪除基表
SQL>drop table s_emp1 purge ;
----徹底刪除一個(gè)表用PURGE汽纠,這樣的刪除的表不能閃回卫键。
·清除回收站
SQL>purge recyclebin;
·查數(shù)據(jù)庫(kù)選項(xiàng)產(chǎn)品:
SQL>select * from V$option;
· truncate刪除后不保留存儲(chǔ)空間虱朵,而Delete刪除后莉炉,保留存儲(chǔ)空間,如果要?jiǎng)h掉這些存儲(chǔ)空間碴犬,以釋放空間絮宁,可以執(zhí)行以下命令:
SQL>alterttable emp deallocate unused;
·如果還要保留一部分,可以用:
SQL>alterttable emp deallocate unused 200k;
4.關(guān)于數(shù)據(jù)閃回的幾點(diǎn)說(shuō)明[系統(tǒng)]表空間數(shù)據(jù)不得閃回實(shí)體在數(shù)據(jù)庫(kù)保存時(shí)間不可保證服协,保留時(shí)間取決于系統(tǒng)運(yùn)行狀況绍昂,可能是幾秒鐘,也可能是幾個(gè)月蚯涮。*基表閃回時(shí)治专,建立在表上的約束不可保證