<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    瘋狂

    STANDING ON THE SHOULDERS OF GIANTS
    posts - 481, comments - 486, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    oracle 閃回

    Posted on 2011-09-07 16:11 瘋狂 閱讀(450) 評(píng)論(0)  編輯  收藏 所屬分類: database
    flashback table與9i的flashback query相似,利用undo信息來恢復(fù)一個(gè)或者一些表到現(xiàn)在以前的一個(gè)時(shí)間點(diǎn)(一個(gè)快照)。Undo相關(guān)參數(shù)如下,需要確保AUM與足夠的retention值。

      SQL> show parameter undo
      NAME TYPE VALUE
      ------------------------------------
      undo_management string AUTO
      undo_retention integer 900
      undo_tablespace string UNDOTBS1
      首先要說明的是,flashback table不等于flashback query,所謂query,僅僅是查詢以前的一個(gè)快照點(diǎn)而已,并不改變當(dāng)前表的狀態(tài),而flashback table不一樣,將改變當(dāng)前表及附屬對(duì)象一起回到以前的時(shí)間點(diǎn)。
      其實(shí)9i的flashback query在10g中也有了新的變化,10g中可以簡(jiǎn)單的利用以下語句實(shí)現(xiàn)flashback query,而不再需要象9i那樣需要調(diào)用DBMS_FLASHBACK包。
      SELECT * FROM TABLENAME AS OF TIMESTAMP
      TO_TIMESTAMP('2003-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS')
      WHERE ……;

      10g的flashback table有如下特性
      · 在線操作
      · 恢復(fù)到指定時(shí)間點(diǎn)或者SCN的任何數(shù)據(jù).
      · 自動(dòng)恢復(fù)相關(guān)屬性,如索引,觸發(fā)器等
      · 滿足分布式的一致性
      · 滿足數(shù)據(jù)一致性,所有相關(guān)對(duì)象將自動(dòng)一致
      語法為:
      FLASHBACK TABLE tablename TO TIMESTAMP (JUL-07-2003, 02:33:00)
      FLASHBACK TABLE employee TO SCN 123456;
      FLASHBACK TABLE t1 TO TIMESTAMP '2003-03-03 12:05:00' ENABLE TRIGGERS;
      其中ENABLE TRIGGERS表示觸發(fā)器恢復(fù)之后為enable狀態(tài),而默認(rèn)為disable狀態(tài)。

      注意:如果需要flashback一個(gè)表,需要保證
      需要有flashback any table的系統(tǒng)權(quán)限或者是該表的flashback對(duì)象權(quán)限。
      需要有該表的SELECT, INSERT, DELETE, ALTER權(quán)限
      必須保證該表ROW MOVEMENT

      下面,我們用一個(gè)詳細(xì)的例子來說明這個(gè)過程:
      16:16:51 SQL> create user flash identified by flash;
      User created.
      16:17:04 SQL> grant connect,resource to flash;
      Grant succeeded.
      16:17:19 SQL> connect flash/flash;
      Connected.
      16:26:35 SQL> create table t1 as select * from all_objects;
      Table created.
      16:37:24 SQL> create table t2 as select * from t1;
      Table created.

      16:37:35 SQL> select count(*) from t1;
      COUNT(*)
      ----------
      38949
      16:37:43 SQL> select count(*) from t2;
      COUNT(*)
      ----------
      38949
      16:38:06 SQL> create index inx_test1 on T1 (object_name);
      Index created.
      16:39:55 SQL> create index inx_test2 on T1 (object_id);
      Index created.
      16:40:47 SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
      TO_CHAR(SYSDATE,'YY
      -------------------
      2004-04-06 16:41:18
      以上獲得一個(gè)時(shí)間戳,假定我們要恢復(fù)該表到這個(gè)時(shí)間,那么以下對(duì)該表的操作都將被前滾。
      16:41:18 SQL> drop index inx_test1;
      Index dropped.
      16:41:33 SQL> delete from t1;
      38949 rows deleted.
      16:41:46 SQL> commit;
      Commit complete.
      16:41:49 SQL> truncate table t2;
      Table truncated.

      在以上的操作中,我們delete一個(gè)表,然后truncate一個(gè)表,下面,我們將來看看flashback table的效果,能恢復(fù)到什么程度
      16:37:55 SQL> ALTER TABLE t1 ENABLE ROW MOVEMENT;
      Table altered.
      16:38:03 SQL> ALTER TABLE t2 ENABLE ROW MOVEMENT;
      Table altered.

      16:43:10 SQL> flashback table t1 TO TIMESTAMP to_timestamp('2004-04-06 16:41:18','yyyy-mm-dd hh24:mi:ss');
      Flashback complete.
      16:43:49 SQL> flashback table t2 TO TIMESTAMP to_timestamp('2004-04-06 16:41:18','yyyy-mm-dd hh24:mi:ss');
      flashback table t2 TO TIMESTAMP to_timestamp('2004-04-06 16:41:18','yyyy-mm-dd hh24:mi:ss')
      *
      ERROR at line 1:
      ORA-01466: unable to read data - table definition has changed

      我們可以發(fā)現(xiàn),執(zhí)行delete操作的表是可以恢復(fù)的,而執(zhí)行truncate操作的表是不可以恢復(fù)的,這正好也說明了flashback table利用undo的結(jié)論。
      看看我們的結(jié)果:
      SQL> select count(*) from t1;
      COUNT(*)
      ----------
      38949
      SQL> select count(*) from t2;
      COUNT(*)
      ----------
      0

      SQL> select t.index_name from user_indexes t where t.table_name='T1';
      INDEX_NAME
      ------------------------------
      INX_TEST2
      還可以看到,對(duì)于drop的索引,也是沒有辦法恢復(fù)的,因?yàn)閐rop并不記錄undo,所以所謂索引的恢復(fù),僅僅是相關(guān)索引樹的改變而不能找回刪除掉的索引。

    -----------------------其他
    閃回某個(gè)字段的修改:首先我們?cè)趐l/sql里面郵件查看表最后的LAST_DDL_TIME,然后可以閃回到這個(gè)時(shí)間之前的每一個(gè)值。
    update tablename t set t.columname=(select columname  from
    tablename   as of  timestamp to_date('2011-9-7 10:05:07','yyyy-mm-dd hh24:mi:ss') where id=t.id)

    有的閃回需要啟動(dòng)表的移動(dòng)功能才能閃回
    alter table tablename  enable row movement;
    flashback table tablename TO TIMESTAMP to_timestamp('2011-11-14 16:30:18','yyyy-mm-dd hh24:mi:ss');
    主站蜘蛛池模板: 亚洲av无码片vr一区二区三区| 亚洲伦理一二三四| 一区二区3区免费视频| 国产一级特黄高清免费大片| 亚洲国产精品无码第一区二区三区| 成人免费a级毛片无码网站入口| 亚洲国产日产无码精品| 青青青国产在线观看免费| 亚洲成在人线中文字幕| 久久精品免费全国观看国产| 亚洲人成网站在线在线观看| 国产免费AV片无码永久免费| 春意影院午夜爽爽爽免费| 国产亚洲?V无码?V男人的天堂| 成人性生交大片免费看中文| 久久亚洲春色中文字幕久久久| 一本岛高清v不卡免费一三区| 亚洲色偷偷色噜噜狠狠99| 亚洲AV无码成H人在线观看| 中文字幕视频在线免费观看| 久久精品亚洲精品国产色婷| 男男AV纯肉无码免费播放无码| 狠狠入ady亚洲精品| 精品国产亚洲男女在线线电影 | 亚洲成人免费电影| 欧洲精品免费一区二区三区| 久草免费福利在线| 91亚洲精品自在在线观看| 国产伦精品一区二区三区免费迷 | 国产亚洲色婷婷久久99精品91| 永久免费av无码入口国语片| 亚洲伊人久久大香线蕉| 亚洲国产电影av在线网址| 香港a毛片免费观看| 老司机亚洲精品影院在线观看| 亚洲国产精品无码久久久秋霞2| 国产一卡2卡3卡4卡2021免费观看| 免费国产a理论片| 亚洲国产成人无码av在线播放| 亚洲国产综合无码一区二区二三区| 日本免费一区二区三区四区五六区|