国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

9i新特性之Flashback Query的應用-------------針對DML誤操作的恢復(1

2024-07-21 02:11:38
字體:
來源:轉載
供稿:網友
  • 本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。
  •  
    9i新特性之flashback query的應用-------------針對dml誤操作的恢復

     

    作者:劉穎博

    時間:2003-12-29

    mail:[email protected],請指正

     

    轉載請注明出處及作者

     

    在9i之前,如果出現dml的誤操作,只能通過備份來完成基于時間點的恢復,9i給提供了一個新的特性flashback query,我們可以應用此特性,可以很方便的實現恢復。但是要注意的是,flashback query 僅僅是一個查詢的機制,不會真正的undo任何數據。

     

    1.       什么是flashback query?

    利用oracle 多版本讀一致的特性通過undo 來提供所需的前鏡像中的數據。通過這個功能,可以看到歷史數據,甚至用歷史數據來修復誤操作引起的錯誤。可以通過指定時間或者scn 來檢索需要的數據。{uses oracle's multiversion read-consistency capabilities to restore data by applying undo as needed. you can view and repair historical data, and you can perform queries on the database as of a certain wall clock time or user-specified system commit number (scn).}

    可以理解成,oracle在之前的版本中就已經存在了flashback query了,之前我們把它稱為多版本的讀一致性。(多版本特性提供跨多個用戶會話的一致性視圖,oracle不執行dirty read)

    2.       準備工作

    the best way:數據庫處于automatic undo management 狀態(也有文章說必須,我查找了oracle文檔應用了這個詞prerequisite<先決條件>,同時在asktom上我也查找到相應的解釋,指明最好是自動undo管理,手動的undo管理也是可以的,并且有例子)

    最大可以閃回查詢的時間段由undo_retention 初始化參數(單位為秒)指定,參看下面執行命令

    sql> show parameter undo

     

    name                              type        value

    ------------------------------------ ----------- ------------------------------

    undo_management                    string      auto

    undo_retention                       integer     600

    undo_suppress_errors                 boolean     false

    undo_tablespace                      string      undotbs1

    sql>

    這是一個可以動態的修改的參數,可以通過alter system set undo_retention =<seconds>;來修改參數值

    比較顯然的是,你設置了相對大的undo_retention,就必須設置足夠大的undo rollback segments。

    3.    如何使用flashback query?

    我們可以通過兩種方式來使用flashback query:

    用sql

    使用select 語句的as of 來進行閃回查詢,語法如下:

    as of  scn ( timestamp) expr

     

    通過關鍵詞 as of 可以對表,視圖,物化視圖 進行flashback query,可以制定scn或者timestamp,其中timestamp是9i中出現的,可以有毫秒的時間單位,如

    sql> select systimestamp from dual;

     

    systimestamp

    ---------------------------------------------------------------------------

    29-12月-03 10.15.05.171000 下午 +08:00

     

    下面,進行一個例子:

    sql> connect scott/tiger

    已連接。

    sql> create table test (id number(1));

     

    表已創建。

     

    sql> insert into test values (1);

     

    已創建 1 行。

     

    sql> insert into test values (2);

     

    已創建 1 行。

     

    sql> commit;

     

    提交完成。

     

    sql> select * from test;

     

            id

    ----------

             1

             2

     

    sql> delete from test where id=1;

     

    已刪除 1 行。

     

    sql> commit;

     

    提交完成。

    sql> select * from test;

     

            id

    ----------

             2

    sql> select * from test as of timestamp (systimestamp -interval'10'second);

     

            id

    ----------

             1

             2

    sql> insert into test (select * from test as of timestamp (systimestamp -interva

    l'10'second) where id =1);

     

    已創建 1 行。

     

    sql> commit;

     

    提交完成。

     

    sql> select * from test;

     

            id

    ----------

             2

             1

    現在,利用了flashback query 我們恢復了test表中被誤刪除的記錄。當然我們可以通過一些其他的方法,類似于建立一個中間表等,進行這種少量數據的dml誤操作的恢復.




     
    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 邳州市| 巩留县| 新巴尔虎左旗| 定陶县| 二连浩特市| 保靖县| 长阳| 蓝田县| 尼玛县| 怀安县| 乌海市| 崇仁县| 海阳市| 平遥县| 裕民县| 长乐市| 盈江县| 临沭县| 那曲县| 上饶县| 平塘县| 乌鲁木齐市| 桂阳县| 大庆市| 永靖县| 鹿泉市| 汪清县| 惠安县| 赫章县| 吐鲁番市| 长顺县| 武宣县| 乐安县| 磐安县| 汾西县| 浪卡子县| 龙游县| 双鸭山市| 奈曼旗| 西宁市| 德格县|