大魚

          誤刪除了oracle表的數據,恢復方法

          同事找回時操作的數據庫為oracle 10g , 之前刪除方式為delete 不曉得trancate好使不

           SCN(系統改變號),它的英文全拼為:System Change Number ,它是數據庫中非常重要的一個數據結構。
            SCN提供了Oracle的內部時鐘機制,可被看作邏輯時鐘,這對于恢復操作是至關重要的
            注釋:Oracle 僅根據 SCN 執行恢復。
            它定義了數據庫在某個確切時刻提交的版本。在事物提交時,它被賦予一個唯一的標示事物的SCN 。一些人認為 SCN 是指, System Commit Number ,而通常 SCN 在提交時才變化,所以很多情況下,
            這兩個名詞經常被交替使用。
            究竟是哪個詞其實對我們來說并不是最重要的,重要的是我們知道 SCN 是 Oracle 內部的時鐘機制, Oracle 通過 SCN 來維護數據庫的一致性,并通過SCN 實施 Oracle 至關重要的恢復機制。
            具體執行流程我們可從以下幾個示例圖中體會;
            1.原表記錄 $ sqlplus eygle/eygle
            SQL*Plus: Release 10.1.0.2.0 - Production on Wed Mar 30 08:52:04 2005
            Copyright (c) 1982, 2004, Oracle. All rights reserved.
            Connected to:
            Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - 64bit Production
            With the Partitioning, OLAP and Data Mining options

            SQL>select count(*) from t1;
            COUNT(*)
            ----------
            9318
            2.誤刪除所有記錄
            并且提交更改。
            SQL>delete from t1;
            9318 rows deleted.
            SQL>commit;
            Commit complete.
            SQL>select count(*) from t1;
            COUNT(*)
            ----------
            0
            3.獲得當前SCN
            如果能夠確切知道刪除之前SCN最好,如果不知道,可以進行閃回查詢嘗試.
            SQL>select dbms_flashback.get_system_change_number from dual;
            GET_SYSTEM_CHANGE_NUMBER
            ------------------------
            10671006
            SQL>select count(*) from t1 as of scn 10671000;
            COUNT(*)
            ----------
            0
            SQL>select count(*) from t1 as of scn 10670000;
            COUNT(*)
            ----------
            9318
            我們看到在SCN=10670000時,數據都在。
            4.恢復數據.
            SQL>insert into t1 select * from t1 as of scn 10670000;
            9318 rows created.
            SQL>commit;
            Commit complete.
            SQL>select count(*) from t1;
            COUNT(*)
            ----------
            9318
            文章2
            誤刪數據后的還原
            select timestamp_to_scn(to_timestamp('2009-03-13 09:00:00','YYYY-MM-DD HH:MI:SS')) from dual;
            結果:13526973
            將刪除時間轉換為scn
            select * from reportinfo
            AS OF SCN 13526973

            將reportinfo表中的scn點的數據取出
            然后可以根據這個數據進行還原操作
            create table reporttest as select * from reportinfo where 1=0;
            insert into reporttest select * from reportinfo AS OF SCN 13526973;

            --上面兩句應該可以合成一句
            --create table reporttest as select * from reportinfo AS OF SCN 13526973;
            這是reporttest表中就是scn點的reportinfo數據.處理即可

          posted on 2010-10-20 22:20 大魚 閱讀(486) 評論(0)  編輯  收藏 所屬分類: oracle

          主站蜘蛛池模板: 铅山县| 喀喇沁旗| 潍坊市| 普格县| 错那县| 池州市| 惠水县| 玉龙| 波密县| 富平县| 科技| 江城| 阿克苏市| 博乐市| 娱乐| 长顺县| 黄冈市| 南通市| 上虞市| 大兴区| 玛多县| 盐边县| 永嘉县| 遂平县| 呼和浩特市| 黑龙江省| 吐鲁番市| 阜平县| 民勤县| 睢宁县| 呼图壁县| 老河口市| 萍乡市| 米泉市| 河间市| 浦东新区| 菏泽市| 曲松县| 鄂温| 日喀则市| 英超|