日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle 原理: 闪回 flashback

發布時間:2024/10/14 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle 原理: 闪回 flashback 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、9i中的閃回查詢方法

二、10g的閃回版本查詢方法

三、10g閃回事物查詢方法和恢復數據

四、10g閃回表

五、10g閃回刪除

六、10g閃回數據庫


一、9i中的閃回查詢方法

? ? ? 可以按照時間點或者SCN(System Change Number)向前查詢,獲取修改前的數據。閃回查詢依賴于回滾段中存儲的數據前鏡像,通過設置undo_retention參數前鏡像保留的時間。

? ? ?select ...? ?as of scn |timestamp

例如現有表中有8行數據:

在回滾段保留時間還生效的情況下,知道想要恢復到的確切時間可以

delete salary_tbl where employer_nm like '雇傭者導入1'; commit ; select * from salary_tbl as of timestamp to_date('20200723 22:45:30','yyyymmdd hh24:mi:ss');

檢查點查詢:需要去估計檢查點的值

select current_scn from v$database; --查詢當前檢查點 delete salary_tbl where employer_nm like '雇傭者導入1'; commit ; select * from salary_tbl as of scn 8681060;

利用閃回查詢恢復數據

create table salary_tbl_bak as select * from salary_tbl as of timestamp to_date('20200723 22:45:30','yyyymmdd hh24:mi:ss'); truncate table salary_tbl; insert into salary_tbl select * from salary_tbl_bak; drop table salary_tbl_bak;

二、10g的閃回版本查詢方法

10g 提供了閃回版本可以在時間段內不同版本進行查詢。

select? ...? from ... versions between?

其中select 可以選擇偽劣,查詢ID,SCN號等

select versions_startTime,versions_endtime,versions_xid,versions_operation,salary_tbl.employer_nm,salary_tbl.department,salary_tbl.salary,salary_tbl.leader_nm from salary_tbl versions between timestamp minvalue and maxvalue

其中 version_xid代表事物Id ,version_operation 可以看見操作類型

三、10g閃回事物查詢方法和恢復數據

? ??alter database add supplemental log data;? ?----啟用最小附加日志

select * from flashback_transaction_query where TABLE_NAME='SALARY_TBL' order by start_timestamp desc;

這張視圖的作用如下

comment on table SYS.FLASHBACK_TRANSACTION_QUERY is 'Description of the flashback transaction query view'; comment on column SYS.FLASHBACK_TRANSACTION_QUERY.XID is 'Transaction identifier'; comment on column SYS.FLASHBACK_TRANSACTION_QUERY.START_SCN is 'Transaction start SCN'; comment on column SYS.FLASHBACK_TRANSACTION_QUERY.START_TIMESTAMP is 'Transaction start timestamp'; comment on column SYS.FLASHBACK_TRANSACTION_QUERY.COMMIT_SCN is 'Transaction commit SCN'; comment on column SYS.FLASHBACK_TRANSACTION_QUERY.COMMIT_TIMESTAMP is 'Transaction commit timestamp'; comment on column SYS.FLASHBACK_TRANSACTION_QUERY.LOGON_USER is 'Logon user for transaction'; comment on column SYS.FLASHBACK_TRANSACTION_QUERY.UNDO_CHANGE# is '1-based undo change number'; comment on column SYS.FLASHBACK_TRANSACTION_QUERY.OPERATION is 'forward operation for this undo'; comment on column SYS.FLASHBACK_TRANSACTION_QUERY.TABLE_NAME is 'table name to which this undo applies'; comment on column SYS.FLASHBACK_TRANSACTION_QUERY.TABLE_OWNER is 'owner of table to which this undo applies'; comment on column SYS.FLASHBACK_TRANSACTION_QUERY.ROW_ID is 'rowid to which this undo applies'; comment on column SYS.FLASHBACK_TRANSACTION_QUERY.UNDO_SQL is 'SQL corresponding to this undo';

特別注意:UNDO_SQL是事物回滾的SQL;只要按照COMMIT_TIMESTAMP 排一個序就能夠知道提交事物的歷史情況。

想要恢復否個表的數據:首先通過 TABLE_NAME 進行篩選,COMMIT_TIMESTAMP排個序,想要恢復到什么位置上一個個執行UNDO_SQL 就可以

?

四、10g閃回表

?10g可以把表里的數據回退到某個時刻,或者SCN。前提是必須啟用行遷移

? ? alter ?table ?salary_tbl enable row movement;

然后可以進行表閃回。

flashback table table_name??to timestamp|SCN

flashback table salary_tbl to timestamp timestamp'2020-7-23 22:00:00'

?

五、10g閃回刪除

oracle? 也有像回收站這樣的東西,用來裝已經被刪除的數據。 啟用回收站,回收站只放普通用戶的刪除表,所以SYS用戶,SYSTEM表空間是不會放在這里的;

alter session set?recylcebin=on

>>show recyclebin?

flashback table <tablename> to before drop;? ? --閃回刪除

drop table <tablename> purge;? --------徹底刪除

purge recyclebin ;---------清空回收站

-----查詢原來的表名和回收站情況 select * from tab where TABTYPE='TABLE'; select * from recyclebin; --------刪除一張表------------ create table salary_tbl_bak as select * from salary_tbl; drop table salary_tbl_bak; ------閃回---------- flashback table salary_tbl_bak to before drop;

在Oracle 中如果重復刪除相同的表,那么閃回的表就是最近刪除的表 或者可以直接select <"在recyclebin中的表名">? ?雙引號

?

六、10g閃回數據庫

如果數據庫出現物理錯誤,如硬盤損壞,那么閃回數據庫在此處不適用。如果數據庫出現邏輯錯誤,那么可以通過閃回數據庫進行恢復回退。之前的閃回都是利用回滾段閃回,而閃回數據庫是利用日志進行返回。

1.數據庫需為歸檔模式

? >>shutdown immediate;

? >>startup mount

?>>alter database archivelog

?>> alter database open

2.配置閃回恢復區

? ?show parameter DB_RECOVE

3.配置閃回保留時間(單位:分鐘)

show parameter db_flashback_reten

4.在mount狀態,啟用數據庫閃回 alter database flashback on ;

此時你可以在db_recovery_file_dest參數值下的目錄中看見閃回需要用到的文件;

5.在mount狀態下閃回數據庫

?flashback database? to timestamp | scn

現有一張表,此時的時間是?select systimestamp from dual; ----?26-7月 -20 03.14.24.153000 下午 +08:00

執行drop table salary_tbl;

總結

以上是生活随笔為你收集整理的Oracle 原理: 闪回 flashback的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。