1. 程式人生 > >資料檔案的恢復

資料檔案的恢復

ORA-01110: data file 103:'/XX/XX_48.DBF'

你想要open資料庫,oracle會開啟所有檔案,並進行一致性處理,所以會報上述錯誤。所以oracle只進入mount狀態,這時oracle開啟控制檔案,讀取database的結構資訊。

·情況之一:資料庫沒有歸檔和備份

如果redo.log記錄了該表空間物件的所有操作,並且沒有被其他內容迴圈使用,則下面的語句是可以恢復的,但是實際應用中這種理想狀態基本不存在。

SQL>alter database datafile 8 offline drop;

Database altered.

SQL> alter database create datafile 8 as 'D:\TP_HOSPITAL.DBF';

Database altered.

SQL> recover datafile 8;

Media recovery complete.

SQL> alter database open;

Database altered.

實際情況,無法依賴redo.log進行恢復的,這種情況只能損失部分資料換取資料庫的執行正常。

實際情況會遇到如下問題:

SQL> recover datafile 8;

ORA-00279: 更改 3270928 (在 12/02/2011 14:27:46 生成) 對於執行緒 1 是必需的

ORA-00289: 建議:E:\ORACLE\ARCHIVE\ARC00102_0756222529.001

ORA-00280: 更改 3270928 (用於執行緒 1) 在序列 #102 中

指定日誌: {<RET>=suggested | filename | AUTO | CANCEL}

auto

ORA-00308: 無法開啟歸檔日誌'E:\ORACLE\ARCHIVE\ARC00102_0756222529.001'

ORA-27041: 無法開啟檔案

OSD-04002: 無法開啟檔案

O/S-Error: (OS 2) 系統找不到指定的檔案。

ORA-00308: 無法開啟歸檔日誌'E:\ORACLE\ARCHIVE\ARC00102_0756222529.001'

ORA-27041: 無法開啟檔案

OSD-04002: 無法開啟檔案

O/S-Error: (OS 2) 系統找不到指定的檔案。所以目前的方法是,將資料檔案offline drop後,將資料庫open,然後查出哪些表在該資料檔案所在的表空間上,檢查這些表是否正常,如果不正常的話,則匯出這些表的資料,然後在資料庫上刪除表,然後將匯出的資料再匯入到oracle,這樣該表就正常了。操作步驟,參考如下:

查詢可能受影響的表:(spool x.txt spool off後可以檢視命令結果)

SELECT T.SEGMENT_NAME, T.OWNER, T.PARTITION_NAME
FROM DBA_SEGMENTS T
WHERE TABLESPACE_NAME = 'TP_HOSPITAL'
   AND T.OWNER = 'HOSPITAL'
   AND SEGMENT_TYPE LIKE '%TABLE%';

匯出該表的資料:

exp XXX/[email protected] file=/XXX/20091217_XXX.dmp log=/XXX/XXX.logtables=(XXX);

刪除該表:

drop table XXX;

匯入該表資料:

imp XXX/[email protected] file=/XXX/20091217_XXX.dmp tables=(XXX);

這樣處理一定會損失部分資料的。匯入完畢以後,檢視該表是否正常,如有特殊需要則特殊處理。

注:如果涉及到的表太多,不想一個一個表匯出的話,那麼就將這個庫exp出來,然後drop掉該模式(並drop掉該模式下所有的物件),然後重建該模式以及給出大小適當的表空間,然後將匯出的模式匯入回去。

非歸檔模式下恢復利用offline drop命令誤刪除的資料檔案

2010-02-23 16:46:33

眾所周知,非歸檔模式下,聯機日誌並不歸檔。可能大多數的網友一直以來都會有這樣的模糊認識。資料庫作recover時,只能利用歸檔日誌和current redo log聯機日誌。實際上所有的聯機日誌都是可以用的。此文介紹在非檔模式下,恢復利用offline drop命令誤刪除的資料檔案。offline drop命令相當於把一個數據檔案至於離線狀態,並且需要恢復或再也不使用此資料檔案了。所在,在OS級別並不是刪除資料檔案的意思。但是要在非檔模式下恢復此資料檔案的前提是,聯機日誌中自資料檔案建立以來的所有聯機日誌都沒有被覆蓋。下面是整個實驗過程,並且注意,在整個恢復的過程中注意從檢視中獲得的資料檔案狀態的變化:

SQL> archive log list;
Database logmode             No Archive Mode
Automaticarchival            Disabled
Archivedestination           c:\arc
Oldest online log sequence     7
Current logsequence           9

SQL> set linesize 200
SQL> select * from v$log;

    GROUP#    THREAD# SEQUENCE#      BYTES    MEMBERS ARCSTATUS          FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ----------------------------- ----------
        1         1          8  52428800          1 YESINACTIVE               730667 2008:01:15 08:57:55
        2         1          9  52428800          1 NO  CURRENT                755863 2008:01:15 11:49:53
        3         1          7  52428800          1 YESINACTIVE               696036 2008:01:14 12:30:46

SQL>
SQL> alter tablespace users add datafile 'C:\ORADATA\TEST\TEST\users03.dbf'size 5M;

Tablespace altered.

SQL> alter system switch logfile;

System altered.

SQL> select * from v$log;

    GROUP#    THREAD# SEQUENCE#      BYTES    MEMBERS ARCSTATUS          FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ----------------------------- ----------
        1         1          8  52428800          1 YES INACTIVE               730667 2008:01:15 08:57:55
        2         1          9  52428800          1 NO  ACTIVE                 755863 2008:01:15 11:49:53
        3         1         10  52428800          1 NO CURRENT                768362 2008:01:18 15:19:46 

在作業系統層刪除6號資料檔案後,對6號資料檔案作offlinedrop操作 

SQL> alter database datafile 'C:\ORADATA\TEST\TEST\users03.dbf' offlinedrop;

Database altered.

SQL>

檢視資料檔案狀態,當對資料檔案執行offline drop 命令後,資料檔案狀態變為recover

SQL> select file#,status,name from v$datafile order by 3;

     FILE# STATUS  NAME
---------- -------------------------------------------------------------------------------
         3 ONLINE C:\ORADATA\TEST\TEST\SYSAUX01.DBF
         1 SYSTEM C:\ORADATA\TEST\TEST\SYSTEM01.DBF
         5 ONLINE C:\ORADATA\TEST\TEST\TBS_UNDO_01.DBF
         4 ONLINE C:\ORADATA\TEST\TEST\USERS01.DBF
         2 ONLINE C:\ORADATA\TEST\TEST\USERS02.DBF
         6 RECOVERC:\ORADATA\TEST\TEST\USERS03.DBF
SQL>

根據控制檔案中的資訊,重新建立6號資料檔案
SQL> alter database create datafile 6;

Database altered.

在執行完建立命令後,資料檔案狀態仍然為recover,此時資料檔案中只有非常簡單的資訊

SQL> select file#,status,name from v$datafile order by 3;

     FILE# STATUS  NAME
---------- -------------------------------------------------------------------------------
         3 ONLINE C:\ORADATA\TEST\TEST\SYSAUX01.DBF
         1 SYSTEM C:\ORADATA\TEST\TEST\SYSTEM01.DBF
         5 ONLINE C:\ORADATA\TEST\TEST\TBS_UNDO_01.DBF
         4 ONLINE C:\ORADATA\TEST\TEST\USERS01.DBF
         2 ONLINE C:\ORADATA\TEST\TEST\USERS02.DBF
         6 RECOVER C:\ORADATA\TEST\TEST\USERS03.DBF

因為聯機日誌還未被覆蓋,儘管處於非歸檔模式,仍然可以對6號資料檔案作恢復

SQL> recover datafile 6;
Media recovery complete.
SQL>

資料檔案狀態變為offline
SQL> select file#,status,name from v$datafile order by 3;

     FILE# STATUS  NAME
---------- ------- -------------------------------------------------------
         3 ONLINE C:\ORADATA\TEST\TEST\SYSAUX01.DBF
         1 SYSTEM C:\ORADATA\TEST\TEST\SYSTEM01.DBF
         5 ONLINE C:\ORADATA\TEST\TEST\TBS_UNDO_01.DBF
         4 ONLINE C:\ORADATA\TEST\TEST\USERS01.DBF
         2 ONLINE C:\ORADATA\TEST\TEST\USERS02.DBF
         6 OFFLINEC:\ORADATA\TEST\TEST\USERS03.DBF

在對資料檔案作online操作後,資料檔案恢復正常
SQL> alter database datafile 6 online;

Database altered.

SQL> select file#,status,name from v$datafile order by 3;

     FILE# STATUS  NAME
---------- ------- ----------------------------------------------
         3 ONLINE C:\ORADATA\TEST\TEST\SYSAUX01.DBF
         1 SYSTEM C:\ORADATA\TEST\TEST\SYSTEM01.DBF
         5 ONLINE C:\ORADATA\TEST\TEST\TBS_UNDO_01.DBF
         4 ONLINE  C:\ORADATA\TEST\TEST\USERS01.DBF
         2 ONLINE C:\ORADATA\TEST\TEST\USERS02.DBF
         6 ONLINE C:\ORADATA\TEST\TEST\USERS03.DBF

  從上面恢復的整個過程可以看出,儘管資料庫處於非歸檔模式,只要資料檔案建立以來的聯機日誌還沒有被覆蓋,資料檔案就可以恢復出來

�增加:emctl start dbconsole和isqlplusctl start。

相關推薦

linux下誤刪資料檔案恢復

linux下檔案被刪除可以用很多工具進行恢復,例如undelete(適合ext2,ext3)、giis(不能恢復安裝giis之前的檔案)、ext3grep(僅限ext3)、R-linux(支援ext3,但是需要作業系統是32位的)。還有testdisk等等就不一一介紹了。需

ORA-03113: 通訊通道的檔案結尾以及用備份的資料檔案恢復原資料庫的解決方案

環境:win 2003 + oracle 10g 情景: 2013年4月7號晚上20點30分左右,資料庫伺服器莫名down了,開發人員嘗試啟動instance,報錯ORA-01034: ORACLE not availableORA-27101: shared memor

oracle備份之rman_恢復資料檔案

測試環境:redhat 5.5 oracle 11g 測試步驟: 1.備庫 2.插資料 3.刪dbf 4.關閉並啟動到mount 5.restore 6.recover 7.開啟 RMAN> backup database; Starting back

oracle rman恢復資料檔案路徑不一致

編輯恢復指令碼:vi recover.txt run{allocate channel c1 type sbt;allocate channel c2 type sbt;allocate channel c3 type sbt;allocate channel c4 type sbt;allocate ch

MySQL僅從.frm和.ibd檔案恢復資料

前言 MySQL的資料庫其相關檔案都會存放在安裝目錄下data資料夾下的同命資料夾中,不同的儲存引擎建立的表其檔案也不一樣,下面來認識

資料檔案還在的情況下 進行資料庫恢復

今天在為windows作業系統恢復資料時,碰到了如圖問題 此時我已經通過源庫的spfile生成了pfile,並修改過pfile裡的相關路徑, 將資料庫啟到mount狀態了 。 原因: 根據報錯可以看出,資料檔案的目錄不對,通過 select name from v$d

linux誤刪資料檔案恢復

--------------建立測試表 [[email protected] ~]$ sqlplus / as sysdba SQL>create user test identified by test default tablespace users;

使用.iba檔案恢復mysql資料庫資料

在liunx上操作的 測試資料庫名稱:testdb 恢復的表名:testtable 1、停止mysql  (service mysqld stop)服務,my.conf 加上    innodb_force_recovery=1 ,啟動mysql  (service

ORA-27041: unable to open file--恢復被rm意外刪除資料檔案

當資料庫中的某個資料檔案被誤刪除之後,DBA可以選擇使用已有的備份進行還原與恢復,下文為DBA提供了另一種選擇,已經通過測試環境進行了相關測試,該方法是個不錯的選擇。轉自http://www.xifenfei.com/2289.html一.模擬資料檔案刪除[[email&#

redis 使用rdb檔案恢復資料

只在單臺redis恢復,未使用叢集。 注意3個配置引數: appendonly no dbfilename dump.rdb dir /var/lib/redis appendonly 設定成no,redis啟動時會把/var/lib/redis

MySQL如何利用ibd檔案恢復資料

前言 資料庫丟失之痛 磁碟壞道、斷電等意外不是常態,但遇上了就足夠你“驚心動魄”! 如果是資料庫損壞造成的資料丟失,Binlog也不可用了,怎麼辦?~~ 為了在短時間內無損恢復資料以保證業務穩定性,除了利用binlog,我們還修煉了一招新的恢復技能! 正文 還記得我們之前寫過的《只需一招,讓失控的研

G盤無法訪問此卷不包含可識別的檔案系統,裡面的資料如何恢復

    此卷不包含可識別的檔案系統說明這個盤的檔案系統結構損壞了。在平時如果資料不重要,那麼可以直接格式化就能用了。但是有的時候裡面的資料很重要,那麼就必須先恢復出資料再格式化。具體恢復方法可以看正文了解(不格式化的恢復方法)工具/軟體:AuroraDataRecovery步

linux平臺通過lsof命令恢復被誤刪的oracle資料檔案

背景:測試環境suse12作業系統,開發人員誤刪了/home/oracle下面的資料檔案             oracle狀態看起來一切正常,但資料檔案已經被rm掉。 恢復方法:通過lsof命令找到被刪除的資料檔案,拷貝出來

[MySQL] 利用 MySql日誌檔案 恢復資料

2. 要想通過日誌恢復資料庫,在你的my.cnf檔案裡應該有如下的定義,log-bin=mysql-bin,這個是必須的.binlog-do-db=db_test,這個是指定哪些資料庫需要日誌,如果有多個數據庫就每行一個,如果不指定的話預設就是所有資料庫. [mysqld]  log-bin=mysql

資料恢復】重建分割槽表恢復檔案-恢復diskpart clean

這個 恢復範例 將引導你一步一步地用TestDisk來恢復丟失的分割槽和修復一個毀壞的分割槽。閱讀了這個指南之後,你就可以恢復自己的資料了。我們很歡迎本TestDisk手冊 的其他語言翻譯版本。 問題舉例 我們有一個容量 36GB 的硬碟,包含著3個分割槽。 但是很不幸地; NTFS主分割槽的boot扇

資料檔案狀態處於recover,恢復正常

查詢資料檔案的狀態:    select T.FILE#,T.STATUS,T.NAME from v$datafile t; 此時發現部分檔案狀態處於recover狀態,導致資料庫不可用 原因:意外斷電,或者使用了刪除命令導致資料檔案處於不可用異常 解決方法: 使用ora

【迅龍資料恢復高手】誤刪除的檔案,誤格式化的分割槽,提示未被格式化,丟失分割槽可以使用迅龍硬碟資料恢復軟體(誤刪檔案恢復工具)進行恢復。 迅龍硬碟資料恢復軟體(誤刪檔案恢復工具)支援所有原因丟失的檔案、掃描速度快、恢復效果好

誤刪除的檔案,誤格式化的分割槽,提示未被格式化,丟失分割槽可以使用迅龍硬碟資料恢復軟體(誤刪檔案恢復工具)進行恢復。 迅龍硬碟資料恢復軟體(誤刪檔案恢復工具)支援所有原因丟失的檔案、掃描速度快、恢復效果好... (adsbygoogle = window.

mysql通過mysql-bin檔案恢復資料

mysql-bin00xxx檔案(/var/lib/mysql/mysql-bin00xxx)是資料庫的操作日誌檔案,一定情況下可以利用操作日誌檔案來恢復資料,例如一個表中之前插入了1條資料,之後給誤刪除了,這時可以在操作日誌檔案找到之前插入的資料,以此來恢復資料。 my

oracle 表空間的資料檔案丟失或損壞的恢復

表空間的資料檔案丟失或損壞的恢復 select ts#,file#,name from v$datafile; 查看錶空間和編號 刪除一個表空間檔案 此時關閉資料庫 再開

linux ext3 ext4 檔案系統 rm -rf刪除後資料快速恢復

linux ext3 ext4 rm -rf刪除後資料快速恢復辦法: rm -rf 後一定不要再在所在分割槽上增加和修改檔案!!!否則會把已刪除檔案覆蓋掉!!! 1.檢視磁碟檔案系統格式:ext3 [[email protected]_45_128_cento