婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 記一次Oracle數據恢復過程

記一次Oracle數據恢復過程

熱門標簽:外呼電話系統用卡嗎 廣東營銷智能外呼系統商家 騰訊地圖標注要費用嗎 七日殺a19.5全地圖標注 N個你智能電銷機器人 電渠外呼系統 地圖標注怎么保存 高德地圖標注公司名字大全 車瑪仕極限運動場所地圖標注

事情的起因是,一個應用升級后,某一個操作導致一個表的幾個列全部被更新為同一值(忍不住又要嘮叨測試的重要性)。這樣的錯誤居然出現在應用代碼中,顯然是重大的BUG。那個是罪魁禍首的SQL,UPDATE語句,其WHERE條件僅僅只有一個where 1=1。
系統的維護人員稱是星期五出的錯,發現出錯是在星期天,也就是我恢復數據的日期,與聲稱的出錯時間已經隔了將近2天。開始嘗試用flashback query恢復數據,報ORA-01555錯誤,此路不通。維護人員說,星期五之前的RMAN備份已經被刪除了(又是一個備份恢復策略不當地例子),使用基于時間點的恢復也不可能了。剩下的一條路,只有使用log miner。還好歸檔文件還在數據庫服務器上。
這套庫是一套RAC數據庫,由于沒有人能確認操作發生在哪個節點,因此需要將一個節點下所有的歸檔復制到另一個節點上(如果沒有足夠的空間,可以使用NFS)。然后需要找到我們用于數據恢復的歸檔日志:

set linesize 170 pagesize 10000   
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';   
  
col name for a30   
col first_change for a10   
col next_change for a10   
  
select max(first_time) from v$archived_log   
where first_time to_date('200909251900','yyyymmddhh24mi'); --這里的時間為錯誤發生時估計的最早時間。   
  
select sequence#,first_time,name,to_char(first_change#,'xxxxxxxx') first_change,   
 to_char(next_change#,'xxxxxxxx') next_change   
 from v$archived_log   
where  first_time >=to_date('200909251707','yyyymmddhh24mi')   
order by 2;--這里的時間為前一SQL的max(first_time)結果   
  
 SEQUENCE# FIRST_TIME          NAME                           FIRST_CHAN NEXT_CHANG   
---------- ------------------- ------------------------------ ---------- ----------   
      4039 2009-09-25 17:07:10 /arch/db1_1_4039.arc          88ce7eff   88d1457c   
      4040 2009-09-26 12:24:52 /arch/db1_1_4040.arc          88d1457c   88d1459f   
      4041 2009-09-26 12:25:22 /arch/db1_1_4041.arc          88d1459f   88d156a4   
      4688 2009-09-26 12:37:59 /arch/db1_2_4688.arc          88d1457f   88d1464a   
      4689 2009-09-26 12:38:27 /arch/db1_2_4689.arc          88d1464a   88d1569c   
      4042 2009-09-26 12:54:44 /arch/db1_1_4042.arc          88d156a4   88d157e7   
      4043 2009-09-26 12:54:56 /arch/db1_1_4043.arc          88d157e7   88d1ab06   
      4690 2009-09-26 13:07:47 /arch/db1_2_4690.arc          88d1569c   88d1570b   
      4691 2009-09-26 13:08:00 /arch/db1_2_4691.arc          88d1570b   88d1ab09   
      4044 2009-09-26 15:27:32 /arch/db1_1_4044.arc          88d1ab06   88d1ab0d   
      4045 2009-09-26 15:27:35 /arch/db1_1_4045.arc          88d1ab0d   88d25091   
      4692 2009-09-26 15:40:36 /arch/db1_2_4692.arc          88d1ab09   88d1ab77   
      4693 2009-09-26 15:40:39 /arch/db1_2_4693.arc          88d1ab77   88d25094   
      4046 2009-09-26 22:24:07 /arch/db1_1_4046.arc          88d25091   88d250db   
      4047 2009-09-26 22:24:19 /arch/db1_1_4047.arc          88d250db   88d2515e   
      4048 2009-09-26 22:24:29 /arch/db1_1_4048.arc          88d2515e   88d25167   
      4049 2009-09-26 22:24:41 /arch/db1_1_4049.arc          88d25167   88d25cac   
      4694 2009-09-26 22:37:13 /arch/db1_2_4694.arc          88d25094   88d25147   
      4695 2009-09-26 22:37:25 /arch/db1_2_4695.arc          88d25147   88d2515b   
      4696 2009-09-26 22:37:33 /arch/db1_2_4696.arc          88d2515b   88d2516a   
      4697 2009-09-26 22:37:47 /arch/db1_2_4697.arc          88d2516a   88d25ca9   
      4050 2009-09-26 22:41:57 /arch/db1_1_4050.arc          88d25cac   88d25cde   
      4698 2009-09-26 22:55:01 /arch/db1_2_4698.arc          88d25ca9   88d25dcf   
      4699 2009-09-26 22:55:19 /arch/db1_2_4699.arc          88d25dcf   88dbd27e 
set linesize 170 pagesize 10000
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
col name for a30
col first_change for a10
col next_change for a10
select max(first_time) from v$archived_log
where first_time to_date('200909251900','yyyymmddhh24mi'); --這里的時間為錯誤發生時估計的最早時間。
select sequence#,first_time,name,to_char(first_change#,'xxxxxxxx') first_change,
 to_char(next_change#,'xxxxxxxx') next_change
 from v$archived_log
where  first_time >=to_date('200909251707','yyyymmddhh24mi')
order by 2;--這里的時間為前一SQL的max(first_time)結果
 SEQUENCE# FIRST_TIME          NAME                           FIRST_CHAN NEXT_CHANG
---------- ------------------- ------------------------------ ---------- ----------
      4039 2009-09-25 17:07:10 /arch/db1_1_4039.arc          88ce7eff   88d1457c
      4040 2009-09-26 12:24:52 /arch/db1_1_4040.arc          88d1457c   88d1459f
      4041 2009-09-26 12:25:22 /arch/db1_1_4041.arc          88d1459f   88d156a4
      4688 2009-09-26 12:37:59 /arch/db1_2_4688.arc          88d1457f   88d1464a
      4689 2009-09-26 12:38:27 /arch/db1_2_4689.arc          88d1464a   88d1569c
      4042 2009-09-26 12:54:44 /arch/db1_1_4042.arc          88d156a4   88d157e7
      4043 2009-09-26 12:54:56 /arch/db1_1_4043.arc          88d157e7   88d1ab06
      4690 2009-09-26 13:07:47 /arch/db1_2_4690.arc          88d1569c   88d1570b
      4691 2009-09-26 13:08:00 /arch/db1_2_4691.arc          88d1570b   88d1ab09
      4044 2009-09-26 15:27:32 /arch/db1_1_4044.arc          88d1ab06   88d1ab0d
      4045 2009-09-26 15:27:35 /arch/db1_1_4045.arc          88d1ab0d   88d25091
      4692 2009-09-26 15:40:36 /arch/db1_2_4692.arc          88d1ab09   88d1ab77
      4693 2009-09-26 15:40:39 /arch/db1_2_4693.arc          88d1ab77   88d25094
      4046 2009-09-26 22:24:07 /arch/db1_1_4046.arc          88d25091   88d250db
      4047 2009-09-26 22:24:19 /arch/db1_1_4047.arc          88d250db   88d2515e
      4048 2009-09-26 22:24:29 /arch/db1_1_4048.arc          88d2515e   88d25167
      4049 2009-09-26 22:24:41 /arch/db1_1_4049.arc          88d25167   88d25cac
      4694 2009-09-26 22:37:13 /arch/db1_2_4694.arc          88d25094   88d25147
      4695 2009-09-26 22:37:25 /arch/db1_2_4695.arc          88d25147   88d2515b
      4696 2009-09-26 22:37:33 /arch/db1_2_4696.arc          88d2515b   88d2516a
      4697 2009-09-26 22:37:47 /arch/db1_2_4697.arc          88d2516a   88d25ca9
      4050 2009-09-26 22:41:57 /arch/db1_1_4050.arc          88d25cac   88d25cde
      4698 2009-09-26 22:55:01 /arch/db1_2_4698.arc          88d25ca9   88d25dcf
      4699 2009-09-26 22:55:19 /arch/db1_2_4699.arc          88d25dcf   88dbd27e
嘗試找到數據被錯誤更新的時間點:

 
exec sys.dbms_logmnr.add_logfile(logfilename=>'/arch/db1_1_4038.arc');   
exec sys.dbms_logmnr.add_logfile(logfilename=>'/arch/db1_1_4039.arc');   
  
exec sys.dbms_logmnr.start_logmnr(options=>sys.dbms_logmnr.dict_from_online_catalog);   
  
col sql_redo for a50   
  
select scn,timestamp,username,sql_redo from v$logmnr_contents   
where operation='UPDATE' and upper(sql_redo) like '%TBL_FORM_FORM%'  
and sql_redo like '%SGS0900021BNc10%'  --這個值是UPDATE時某一列被更新后的值,用在這里便于查找。   
order by scn,timest   
exec sys.dbms_logmnr.end_logmnr; 
exec sys.dbms_logmnr.add_logfile(logfilename=>'/arch/db1_1_4038.arc');
exec sys.dbms_logmnr.add_logfile(logfilename=>'/arch/db1_1_4039.arc');
exec sys.dbms_logmnr.start_logmnr(options=>sys.dbms_logmnr.dict_from_online_catalog);
col sql_redo for a50
select scn,timestamp,username,sql_redo from v$logmnr_contents
where operation='UPDATE' and upper(sql_redo) like '%TBL_FORM_FORM%'
and sql_redo like '%SGS0900021BNc10%'  --這個值是UPDATE時某一列被更新后的值,用在這里便于查找。
order by scn,timest
exec sys.dbms_logmnr.end_logmnr;
很不幸的是,沒有找著需要的數據。再往后找了幾個日志,也沒找著。
如果一直找下去,顯然會消耗比較長的時間,業務也已經停止了。不過可以用一種簡單的方法來查找數據被錯誤更新發生的時間:一個比較大的表,通常段頭后面的那個塊,也就是存儲那個表的數據的第1個塊,通常是很少更新的,至少當時恢復的那個表是這樣一種情況。我們可以通過數據塊中ITL上的事務SCN來滿足我們的要求。

 
SQL> select tablespace_name,extent_id,file_id,block_id,blocks   
     from dba_extents where owner='XXX'  
     and segment_name='TBL_FORM_FORM'  
     order by extent_id;   
  
TABLESPACE_NAME   EXTENT_ID    FILE_ID   BLOCK_ID  BLOCKS   
---------------- ---------- ---------- ---------- -------   
XXXX                      0         16      25481     128   
XXXX                      1         17      23433     128   
XXXX                      2         18      21385     128   
XXXX                      3         19      19977     128   
XXXX                      4         16      23945     128   
XXXX                      5         17       8585     128   
XXXX                      6         18      14217     128   
XXXX                      7         19      18825     128   
  
SQL> alter system dump datafile 16 block 25482;   
  
System altered.   
  
Start dump data blocks tsn: 4 file#: 16 minblk 25482 maxblk 25482   
buffer tsn: 4 rdba: 0x0400638a (16/25482)   
scn: 0x0000.88e21027 seq: 0x02 flg: 0x00 tail: 0x10270602   
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data   
Block header dump:  0x0400638a   
 Object id on Block? Y   
 seg/obj: 0x40d8  csc: 0x00.88e20c40  itc: 2  flg: -  typ: 1 - DATA   
     fsl: 0  fnx: 0x0 ver: 0x01   
  
 Itl           Xid                  Uba         Flag  Lck        Scn/Fsc   
0x01   0x0010.011.0006ed74  0x03c002a0.2f48.07  C---    0  scn 0x0000.88d7af30   
0x02   0x0012.019.000027e0  0x03c00ede.05de.42  C---    0  scn 0x0000.44e2ee39 
SQL> select tablespace_name,extent_id,file_id,block_id,blocks
     from dba_extents where owner='XXX'
     and segment_name='TBL_FORM_FORM'
     order by extent_id;
TABLESPACE_NAME   EXTENT_ID    FILE_ID   BLOCK_ID  BLOCKS
---------------- ---------- ---------- ---------- -------
XXXX                      0         16      25481     128
XXXX                      1         17      23433     128
XXXX                      2         18      21385     128
XXXX                      3         19      19977     128
XXXX                      4         16      23945     128
XXXX                      5         17       8585     128
XXXX                      6         18      14217     128
XXXX                      7         19      18825     128
SQL> alter system dump datafile 16 block 25482;
System altered.
Start dump data blocks tsn: 4 file#: 16 minblk 25482 maxblk 25482
buffer tsn: 4 rdba: 0x0400638a (16/25482)
scn: 0x0000.88e21027 seq: 0x02 flg: 0x00 tail: 0x10270602
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data
Block header dump:  0x0400638a
 Object id on Block? Y
 seg/obj: 0x40d8  csc: 0x00.88e20c40  itc: 2  flg: -  typ: 1 - DATA
     fsl: 0  fnx: 0x0 ver: 0x01
 Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0010.011.0006ed74  0x03c002a0.2f48.07  C---    0  scn 0x0000.88d7af30
0x02   0x0012.019.000027e0  0x03c00ede.05de.42  C---    0  scn 0x0000.44e2ee39
從上面的結果可以看到,數據塊的ITL中,最新的事務其SCN為88d7af30,正處于最后一個歸檔日志的first_change#和last_change#之間,即88d25dcf和88dbd27e之間,難不成這個錯誤是今天早上才發生的?于是我挖掘最后1個歸檔日志,結果發生錯誤的確是發生在早上,也就是我開始進行恢復操作之前半個小時。

既然錯誤并沒有發生太久,同時這個系統也允許一定的數據丟失,那就使用flashback query,得到UPDATE操作之前的數據即可。

create table tbl_form_form_new   
as select * from tbl_form_form   
as of timestamp to_date('2009-09-27 09:08:00','yyyy-mm-dd hh24:mi:ss');   
--當然這里也可以按SCN進行閃回。 
create table tbl_form_form_new
as select * from tbl_form_form
as of timestamp to_date('2009-09-27 09:08:00','yyyy-mm-dd hh24:mi:ss');
--當然這里也可以按SCN進行閃回。
幸運的是,這次閃回查詢成功了。看起來足夠大的UNDO表空間還是有好處,至少我已經有數次用閃回查詢來恢復數據。

您可能感興趣的文章:
  • oracle drop table(表)數據恢復方法
  • oracle誤刪數據恢復方法小結
  • 最簡單的Oracle數據恢復 select as of使用方法
  • Oracle誤刪除表數據后的數據恢復詳解
  • oracle誤drop/update操作后的數據恢復測試

標簽:來賓 遼寧 棗莊 長沙 玉樹 大興安嶺 贛州 蘇州

巨人網絡通訊聲明:本文標題《記一次Oracle數據恢復過程》,本文關鍵詞  記,一次,Oracle,數據恢復,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《記一次Oracle數據恢復過程》相關的同類信息!
  • 本頁收集關于記一次Oracle數據恢復過程的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美性做爰猛烈叫床潮| 日韩网站在线看片你懂的| 欧美日韩亚州综合| 亚洲精品视频在线观看网站| 99国产麻豆精品| 亚洲一区免费观看| 91精品久久久久久久91蜜桃| 日韩av电影天堂| 久久久噜噜噜久久中文字幕色伊伊| 国产伦精品一区二区三区免费迷 | 成人免费视频一区二区| 中文字幕一区二区在线播放 | 不卡一区二区三区四区| 亚洲男同性恋视频| 日韩欧美一卡二卡| 成人免费毛片app| 一区二区三区久久| 欧美xxxx老人做受| 91免费看`日韩一区二区| 亚洲成人午夜影院| 亚洲国产精品成人综合色在线婷婷 | 91精品国产91久久综合桃花| 国产曰批免费观看久久久| 国产精品私人自拍| 91麻豆精品国产自产在线 | 欧美日韩激情一区二区| 久久精品国产亚洲a| 国产精品无人区| 9191国产精品| 91天堂素人约啪| 国内外成人在线| 五月激情综合色| 国产精品福利在线播放| 日韩欧美一区二区不卡| 色欧美日韩亚洲| 国产精品69毛片高清亚洲| 日韩和的一区二区| 亚洲制服丝袜av| 国产婷婷精品av在线| 欧美日本一道本| 99精品久久只有精品| 国产综合色在线视频区| 亚洲国产另类精品专区| 国产精品乱码人人做人人爱| 欧美成人精品福利| 91精品国产丝袜白色高跟鞋| 日本韩国精品在线| caoporen国产精品视频| 国产精品亚洲午夜一区二区三区| 日韩精品久久久久久| 亚洲一区在线视频| 夜夜嗨av一区二区三区四季av| 国产精品的网站| 自拍av一区二区三区| 国产亚洲视频系列| 久久久久国色av免费看影院| 2017欧美狠狠色| 精品日产卡一卡二卡麻豆| 欧美巨大另类极品videosbest| 欧美性色黄大片| 欧美性淫爽ww久久久久无| 一本大道久久精品懂色aⅴ| www.欧美色图| 成人高清视频在线观看| 国产成人在线免费| 成人久久久精品乱码一区二区三区| 国产91清纯白嫩初高中在线观看| 国产精品一级黄| 成人国产精品免费| 在线中文字幕不卡| 欧美日韩一区二区在线视频| 欧美日韩一级视频| 91麻豆精品91久久久久久清纯| 欧美一区二区视频在线观看2020 | 欧美激情一区二区| 国产精品传媒视频| 国产免费观看久久| 中文字幕在线一区| 一个色妞综合视频在线观看| 亚洲第四色夜色| 久久精品国产第一区二区三区| 加勒比av一区二区| 成人中文字幕电影| 色婷婷久久久亚洲一区二区三区 | 亚洲r级在线视频| 奇米亚洲午夜久久精品| 国产乱码字幕精品高清av| 99天天综合性| 91精品国产综合久久精品 | 久久久精品人体av艺术| 国产精品家庭影院| 日韩成人伦理电影在线观看| 国产成a人亚洲| 欧美日韩国产一区二区三区地区| 精品久久久久久久人人人人传媒| 国产精品美女一区二区| 天堂久久久久va久久久久| 天天综合网 天天综合色| 国产精品自在在线| 91麻豆精品国产91久久久更新时间| 国产精品视频观看| 人人爽香蕉精品| 91日韩精品一区| 2021中文字幕一区亚洲| 午夜精品一区二区三区三上悠亚| 国产成人超碰人人澡人人澡| 欧美一区二区在线观看| 最新不卡av在线| 国产一区二区精品久久99| 精品视频免费看| 亚洲激情图片一区| 国产suv精品一区二区883| 欧美一区二区三区四区高清| 亚洲乱码日产精品bd| 国产999精品久久久久久| 日韩久久精品一区| 热久久国产精品| 欧美精品tushy高清| 亚洲综合色丁香婷婷六月图片| 国产盗摄视频一区二区三区| 日韩美女在线视频| 香蕉加勒比综合久久| 色婷婷av一区二区三区大白胸| 国产日产亚洲精品系列| 精品影院一区二区久久久| 91精品国产综合久久小美女| 亚洲一区欧美一区| 色乱码一区二区三区88| 亚洲三级在线免费| 色综合久久天天| 亚洲欧美日韩系列| 色综合天天综合在线视频| 亚洲欧美怡红院| 91免费版在线看| 亚洲激情av在线| 欧美亚洲国产怡红院影院| 一区二区三区欧美日| 欧美羞羞免费网站| 丝袜诱惑制服诱惑色一区在线观看 | 欧美一区二区三区思思人| 五月婷婷综合网| 欧美一区二区三区成人| 蜜臀a∨国产成人精品| 欧美剧在线免费观看网站| 五月天国产精品| 日韩免费高清视频| 国产成人综合亚洲91猫咪| 亚洲视频免费观看| 欧美日韩中文另类| 久久精品国产亚洲aⅴ| 久久精品亚洲麻豆av一区二区| 成人综合婷婷国产精品久久免费| 日韩一区有码在线| 欧美日韩国产综合草草| 看电视剧不卡顿的网站| 国产日韩欧美一区二区三区乱码 | 视频一区在线视频| 免费在线成人网| 欧美日韩一级大片网址| 国产片一区二区| 91免费观看在线| 亚洲丝袜美腿综合| 国产成人av电影在线观看| 99久久99久久精品免费看蜜桃 | 亚洲蜜臀av乱码久久精品| 精品一区二区久久久| 久久婷婷久久一区二区三区| 久久精品国内一区二区三区| 精品国产青草久久久久福利| 日本不卡视频在线| 日本高清无吗v一区| 国产精品麻豆网站| 日本在线不卡视频| 在线视频中文字幕一区二区| 国产天堂亚洲国产碰碰| 国产99久久久久久免费看农村| 欧美一级欧美一级在线播放| 自拍偷拍国产精品| 麻豆精品国产传媒mv男同| 国产精品一品视频| 日韩免费性生活视频播放| 日本在线不卡一区| 一区二区在线观看视频在线观看| 久久久国产午夜精品| 这里只有精品视频在线观看| 日韩午夜av一区| 精品一区二区三区影院在线午夜| 日韩欧美另类在线| 99热国产精品| 日韩av网站在线观看| 中文字幕精品一区二区三区精品| 色噜噜偷拍精品综合在线| 九九精品一区二区| 亚洲成人av免费| 麻豆成人av在线| 美国精品在线观看| 国产精品影音先锋| 精品一区二区综合| 日韩电影在线看| 三级欧美在线一区|