qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請?jiān)L問 http://qaseven.github.io/

          數(shù)據(jù)庫失敗類型之用戶錯(cuò)誤

           數(shù)據(jù)庫失敗的類型分為幾大類。對(duì)于每種失敗來說,Oracle都會(huì)提供適當(dāng)?shù)慕鉀Q方法。

            所有失敗類型最好被記錄在一個(gè)服務(wù)級(jí)別協(xié)議內(nèi),同時(shí)在程序手冊中還要記錄解決失敗的相關(guān)步驟。

            第四種失敗類型:用戶錯(cuò)誤

            就Oracle而言,所關(guān)心的是事務(wù)。對(duì)于DML錯(cuò)誤來說,用戶在提交之前發(fā)現(xiàn)錯(cuò)誤時(shí)仍然有機(jī)會(huì)回滾錯(cuò)誤的語句。但是對(duì)于DDl語句來說,用戶是無法回滾錯(cuò)誤的語句。

            因?yàn)椋琧ommit被內(nèi)置到DDL語句中。

            解決用戶錯(cuò)誤的理想方式是首先防止這些錯(cuò)誤的出現(xiàn)。培訓(xùn)用戶只是其中的一部分工作,不過最重要的是設(shè)計(jì)軟件。從而使任何用戶進(jìn)程都不允許用戶執(zhí)行不存在where子句的update語句。然而設(shè)計(jì)最完美的軟件也沒法防止用戶發(fā)出與指定業(yè)務(wù)不相符的sql語句。Oracle為修正用戶錯(cuò)誤的dba提供了許多可用的方法,不過使用這些方法通常極為困難,尤其是用戶錯(cuò)誤在一段時(shí)間內(nèi)未被報(bào)告時(shí)更是如此。可能的技術(shù)包括閃回查詢,閃回刪除,閃回?cái)?shù)據(jù)庫和不完全恢復(fù)。

            閃回查詢時(shí)針對(duì)過去某時(shí)存在的數(shù)據(jù)庫所運(yùn)行的查詢。通過使用撤銷數(shù)據(jù),可以只為當(dāng)前會(huì)話構(gòu)造讀一致性的數(shù)據(jù)庫。

            如下:有一位用戶不小心刪除了emp表中的所有行,并提交了刪除操作,那么隨后通過針對(duì)5分鐘之前的表執(zhí)行子查詢檢索這些行。

          SQL> delete from emp;
          15 rows deleted.
          SQL> commit;
          Commit complete.
          SQL> select count(*) from emp;
          COUNT(*)
          ----------
          0
          SQL> insert into emp (select * from emp as of timestamp(sysdate-5/1440));
          15 rows created.
          SQL> select count(*) from emp;
          COUNT(*)
          ----------
          15
          (2)利用閃回刪除來恢復(fù)被刪掉的表
          如下:
          SQL> drop table emp;
          Table dropped.
          SQL> select count(*) from emp;
          select count(*) from emp
          *
          ERROR at line 1:
          ORA-00942: table or view does not exist
          SQL> flashback table emp to before drop;
          Flashback complete.
          SQL> select count(*) from emp;
          COUNT(*)
          ----------
          15

            對(duì)于撤銷用戶錯(cuò)誤來說,不完全恢復(fù)與閃回?cái)?shù)據(jù)庫是作用更為顯著的方法。使用上述任一種方法,整個(gè)數(shù)據(jù)庫會(huì)返回發(fā)生錯(cuò)誤前的時(shí)刻。前面介紹的其他方法在保持?jǐn)?shù)據(jù)庫其他部分不發(fā)生變化的情況只撤銷錯(cuò)誤的事務(wù)。但是,一旦執(zhí)行了數(shù)據(jù)庫的不完全恢復(fù)或閃回操作,就會(huì)失去從返回到的時(shí)刻開始的所有工作,而不僅僅失去錯(cuò)誤的事務(wù)。

          posted on 2013-08-02 11:43 順其自然EVO 閱讀(620) 評(píng)論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2013年8月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 阳谷县| 厦门市| 舞钢市| 永春县| 探索| 澄城县| 南召县| 梨树县| 万盛区| 长治县| 嘉鱼县| 安国市| 灌南县| 新和县| 阿克陶县| 平陆县| 恭城| 台安县| 新平| 桦川县| 留坝县| 东兰县| 临夏县| 罗定市| 象山县| 武山县| 柯坪县| 江门市| 蛟河市| 康定县| 江山市| 上林县| 南皮县| 广饶县| 巴彦县| 宝鸡市| 桃园市| 辽源市| 阿拉善盟| 安化县| 昌都县|