shutdown immediate;sql>startup mount;sql>alter database archivelog;2.建立閃回區(qū)sql>alter system set db_recovey_file..."/>
您好,登錄后才能下訂單哦!
一?啟用閃回?cái)?shù)據(jù)庫
1.啟用歸檔模式
sql>shutdown immediate;
sql>startup mount;
sql>alter database archivelog;
2.建立閃回區(qū)
sql>alter system set db_recovey_file_dest='/opt/oracle/flash_recovery_area' scope=both;
sql>alter system set db_recovery_file_dest_size=3g scope=both;
3.設(shè)置閃回?cái)?shù)據(jù)庫的數(shù)據(jù)保留周期為一天,以min為單位
sql>alter system set db_flashback_retention_target=1440;
4.啟用閃回日志
sql>alter database flashback on;
sql>alter database open;
二?使用scn閃回?cái)?shù)據(jù)庫
1.查詢數(shù)據(jù)庫系統(tǒng)當(dāng)前的scn(記下此scn)
sql>select current_scn from v$database;
2.改變數(shù)據(jù)庫的當(dāng)前狀態(tài),模擬創(chuàng)建表test1,并插入1條數(shù)據(jù)
create table test1(id number,name char(20));
insert into test1 values(1,'data');
commit;
3.進(jìn)行閃回?cái)?shù)據(jù)庫恢復(fù),將數(shù)據(jù)庫恢復(fù)到創(chuàng)建表之前的狀態(tài)
SQL> select OLDEST_FLASHBACK_SCN from v$FLASHBACK_DATABASE_LOG;(查看scn)
shutdown immediate
startup mount;
flashback database to scn 之前查到的scn
4.最后使用resetlogs選項(xiàng)打開數(shù)據(jù)庫
alter database open resetlogs;
5.驗(yàn)證數(shù)據(jù)庫的狀態(tài)(test1表應(yīng)該不存在)
SQL> select from test1;
select from test1
*
ERROR at line 1:
ORA-00942: table or view does not exist
6.按照指定時(shí)間閃回?cái)?shù)據(jù)庫
1)設(shè)置顯示日期格式
alter session set nls_date_format='yyyy-mm-dd hh34:mi:ss';
select sysdate from dual;(查看系統(tǒng)時(shí)間)
2)改變數(shù)據(jù)庫的當(dāng)前狀態(tài),模擬創(chuàng)建表test2,并插入1條記錄
sql>set time on;
sql>create table test2(id number,name char(20));
sql>insert into test2 values(1,'data');
sql>commit;
sql>shutdown immediate;
sql>startup mount;
sql>flashback database to timestamp(to_timestamp('......'));(....即為前面查看到系統(tǒng)時(shí)間)
sal>alter database open resetlogs;
sql>select * from test2;
ERROR at line 1:
ORA-00942: table or view does not exist(顯示test2表不存在)
說明:閃回?cái)?shù)據(jù)庫操作的限制
1)數(shù)據(jù)文件損壞或丟失等介質(zhì)故障不能使用閃回?cái)?shù)據(jù)庫進(jìn)行恢復(fù)。閃回?cái)?shù)據(jù)庫只能基于當(dāng)前正常運(yùn)行的數(shù)據(jù)文件。
2)閃回?cái)?shù)據(jù)庫功能啟動后,如果發(fā)生數(shù)據(jù)庫控制文件重建或利用備份恢復(fù)控制文件,則不能使用閃回?cái)?shù)據(jù)庫
3)不能使用閃回?cái)?shù)據(jù)庫進(jìn)行數(shù)據(jù)文件收縮操作
4)不能使用閃回?cái)?shù)據(jù)庫將數(shù)據(jù)庫恢復(fù)到閃回日志中可獲得最早的SCN之前的SCNM,因?yàn)殚W回日志文件在一定條件下被刪除,而不是始終保存在閃回恢復(fù)區(qū)中
三、閃回表
閃回表可將表恢復(fù)到特定的時(shí)間點(diǎn)或者指定的SCN
閃回表實(shí)際上是對表進(jìn)行DML操作的過程
數(shù)據(jù)庫保持聯(lián)機(jī)
為了使用數(shù)據(jù)庫閃回表功能,必須滿足下列條件:
用戶具有FLASHBACK ANY TABLE系統(tǒng)權(quán)限,或者具有所操作表的FLASHBACK對象權(quán)限
用戶具有所操作表的SELECT,INSERT,DELETE,ALTER對象權(quán)限
啟動被操作表的ROW MOVEMENT特性,可以采用下列方式進(jìn)行
ALTER TABLE table ENABLE ROW MOVEMENT;
注意
SYS用戶或以AS SYSDBA身份登錄的用戶不能執(zhí)行閃回表操作
1.使用scott用戶登錄
sql>alter user scott account unlock;
sql>alter user scott identified by 123456;
sql>grant connect,resource to scott;
sql>conn scott/123456;
set time on;
sql>create table test3(id number,name char(20));
sql>insert into test3 values(1,'zhang');
commit;
sql>insert into test3 values(2,'zhao');
commit;
sql>insert into test3 values(3,'wang');
commit;
以sys身份連接數(shù)據(jù)庫,并授予scott用戶select any dictionary的權(quán)限,并最后以scott身份查看當(dāng)前的scn
conn / as sysdba
grant select any dictionary to scott;
SQL>set time on
sql>conn scott/123456;
sql>select current_scn from v$database;記下此scn
sql>update test3 set name='liu' where id=1;
sql>commit;
sql>select from test3;
sql>delete from test3 where id=3;
sql>commit;
sql>select from test3
2.啟動test3表的row movement特性
sql>alter table test3 enable row movement;
sql>flashback table test3 to timestamp to_timestamp(。。。。);
四、閃回刪除
閃回刪除可恢復(fù)使用DROP TABLE語句刪除的表,是一種對意外刪除的表的恢復(fù)機(jī)制
閃回刪除功能的實(shí)現(xiàn)主要是通過數(shù)據(jù)庫中的“回收站”(Recycle Bin)技術(shù)實(shí)現(xiàn)的
為了使用閃回刪除技術(shù),必須開啟數(shù)據(jù)庫的“回收站”
啟動“回收站”
查看“回收站”
閃回刪除的基本語法為
FLASHBACK TABLE [schema.]table TO BEFORE DROP [RENAME TO table]
注意
不支持SYS用戶,SYSTEM表空間下的對象也不能從回收站里拿到。故使用SYS或者SYSTEM用戶登錄時(shí),查詢?yōu)榭?/p>
1.啟動回收站,將參數(shù)recyclebin設(shè)置為on,在默認(rèn)情況下回收站已經(jīng)啟動
SQL> conn / as sysdba;
sql>show parameter recyclebin;
sql>alter system set recyclebin=on deferred;
2.查看回收站,不支持從sys用戶,system表空間的對象也不能從回收站里拿到,所以要切換到scott用戶測試
sql>conn scott/123456;
create table test4(id number,name char(20));
sql>insert into test4 values(3,'wang')
sql>commit;
sql>drop table test4;
sql>select object_name,original_name,type from user_recyclebin;
閃回表并重命名為new_test4
sql>flashback table test4 to before drop rename to new_test4;
五?閃回查詢
sql>conn scott/123456;
sql>alter session set nls_date_format='yyyy-mm-dd hh34:mi:ss';
sql>set time on;
sql>select empno,sal from scott.emp where empno=7844;
sql>update scott.emp set sal=2000 where empno=7844;
sql>commit;
sql>update scott.emp set sal=2500 where empno=7844;
sql>update scott.emp set sal=3000 where empno=7844;
sql>commit;
查詢7844員工前一個小時(shí)的工資值
sql>select empno,sal from scott.emp as of timestamp sysdate-1/24 where empno=7844
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。