Oracle 只有.dbf數據文件進行資料庫恢復 (轉)

来源:http://www.cnblogs.com/chinafly/archive/2017/12/14/8040077.html
-Advertisement-
Play Games

由於資料庫伺服器崩潰,造成了無法進入系統進行資料庫備份,只能把oracle相關文件拷貝出來。對於拷貝出來的文件在測試機上進行一次不完全恢復,具體流程如下所示: 1、安裝oracle 10g服務端並創建一個與要進行恢復的資料庫相同名稱的實例(db_name,sid,字元集一樣,因為在創建控制文件時,會 ...


由於資料庫伺服器崩潰,造成了無法進入系統進行資料庫備份,只能把oracle相關文件拷貝出來。對於拷貝出來的文件在測試機上進行一次不完全恢復,具體流程如下所示: 1、安裝oracle 10g服務端並創建一個與要進行恢復的資料庫相同名稱的實例(db_name,sid,字元集一樣,因為在創建控制文件時,會判斷你要恢復的dbf文件中文件頭信息中的資料庫名是否與所在的實例名是否一樣) 2、以sysdba身份進行備份控制項文件到udmp目錄的trace文件(語句:alter database backup controlfile to trace) 3、Shutdown immediate停止資料庫,備份當前~\oracle\product\10.2.0\oradata目錄中的文件,接著刪除這些文件並把需恢復的資料庫的所有.dbf文件拷到此目錄下。其中 system01.dbf,sysaux01.dbf和存儲真實數據的.dbf文件是必要的 (只要DBF就可以了,日誌和控制文件不要)。 4、以sysdba進入並執行startup nomount。把資料庫啟動到nomount狀態。 5、從第2步備份出來trace文件中拷貝CREATE CONTROLFILE部分語句來重建控制文件。此處應根據實際情況增刪表空間文件記錄,如以下黑體部分則為新增記錄。 CREATE CONTROLFILE   set Database ocp  Resetlogs   MAXLOGFILES 16   MAXLOGMEMBERS 3   MAXDATAFILES 100   MAXINSTANCES 8   MAXLOGHISTORY 292 LOGFILE GROUP 1 'C:\oracle\product\10.2.0\oradata\ocp\RED001.LOG'SIZE 50M, GROUP 2 'C:\oracle\product\10.2.0\oradata\ocp\RED002.LOG'SIZE 50M, GROUP 3 'C:\oracle\product\10.2.0\oradata\ocpRED003.LOG'SIZE 50M DATAFILE 'D:\oradata\SYSTEM01.DBF',--要恢復的數據所在的dbf文件 'D:\oradata\UNDOTBS01.DBF',--要恢復的數據所在的dbf文件 'D:\oradata\SYSAUX01.DBF',--要恢復的數據所在的dbf文件 'D:\oradata\USERS01.DBF',--要恢復的數據所在的dbf文件 'D:\oradata\EXAMPLE01.DBF',--要恢復的數據所在的dbf文件 'D:\oradata\HYGEIA01.DBF',--要恢復的數據所在的dbf文件 'D:\oradata\HYGEIA02.DBF',--要恢復的數據所在的dbf文件 'D:\oradata\HYGEIA03.DBF'--要恢復的數據所在的dbf文件 CHARACTER SET ZHS16GBK 6 alter database open  resetlogs; 7 重新創建臨時表空間 8 查看恢復後結果     第二種情況(其實要恢複數據庫只要system01.dbf,sysaux01.dbf和存儲真實數據的.dbf文件) 1、安裝oracle 10g服務端並創建一個與要進行恢復的資料庫相同名稱的實例(db_name,sid,字元集一樣,因為在創建控制文件時,會判斷你要恢復的dbf文件中文件頭信息中的資料庫名是否與所在的實例名是否一樣) 2、以sysdba身份進行備份控制項文件到udmp目錄的trace文件(語句:alter database backup controlfile to trace) 3、Shutdown immediate停止資料庫,備份當前~\oracle\product\10.2.0\oradata目錄中的文件,接著刪除這些文件並把需恢復的資料庫的所有.dbf文件拷到此目錄下。其中 system01.dbf,sysaux01.dbf和存儲真實數據的.dbf文件是必要的 (只要DBF就可以了,日誌和控制文件不要)。 4、以sysdba進入並執行startup nomount。把資料庫啟動到nomount狀態。 5、從第2步備份出來trace文件中拷貝CREATE CONTROLFILE部分語句來重建控制文件。此處應根據實際情況增刪表空間文件記錄,如以下黑體部分則為新增記錄。 CREATE CONTROLFILE   set Database ocp  resetlogs   MAXLOGFILES 16   MAXLOGMEMBERS 3   MAXDATAFILES 100   MAXINSTANCES 8   MAXLOGHISTORY 292 LOGFILE GROUP 1 'D:\oracle\product\10.2.0\oradata\ocp\RED001.LOG'SIZE 50M, GROUP 2 'D:\oracle\product\10.2.0\oradata\ocp\RED002.LOG'SIZE 50M, GROUP 3 'D:\oracle\product\10.2.0\oradata\ocp\RED003.LOG'SIZE 50M DATAFILE 'D:\oracle\product\10.2.0\oradata\ocp\SYSTEM01.DBF',--損壞的資料庫的system表空間的數據文件 'D:\oracle\product\10.2.0\oradata\ocp\SYSAUX01.DBF',--損壞的資料庫的sysaux表空間的數據文件 'D:\oracle\product\10.2.0\oradata\ocp\HYGEIA01.DBF',--要恢復的數據所在的dbf文件 'D:\oracle\product\10.2.0\oradata\ocp\HYGEIA02.DBF', --要恢復的數據所在的dbf文件 'D:\oracle\product\10.2.0\oradata\ocp\HYGEIA03.DBF'  --要恢復的數據所在的dbf文件 CHARACTER SET ZHS16GBK   6、Shutdown immediate 7、在admin\pfile目錄下的init.ora裡加入隱含參數: _allow_resetlogs_corruption=true _allow_terminal_recovery_corruption=true undo_tablespace='SYSTEM' undo_management='MANUAL' 8、執行startup pfile='D:\oracle\product\10.2.0\admin\orcl\pfile\init.ora(文件名和目錄按照實際情況而定)' mount force; 9、Recover database\ recover database until cancel進行介質恢復。 10、    Alter database open resetlogs打開資料庫可能不成功:此處出現了ORA-03113 " ORA-03113: 通信通道的文件結尾"的錯誤提示。 11、    重新啟動資料庫(startup) ,結果出現以下錯誤提示: ora-01113:文件1需要介質恢復 ora-01110:數據文件1:'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF' 12、    從新恢復表空間文件recover datafile D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF(其它表空間文件可能也需要恢復) 13、    alter database open; 資料庫已更新 14.重新創建UNDOTBS1表空間 create undo tablespace undotbs1 DATAFILE 'D:\oracle\product\10.2.0\oradata\orcl\undotbs01.dbf' SIZE 200M 15、Shutdown immediate 16、在admin\pfile目錄下的init.ora裡加入隱含參數: 刪除_allow_resetlogs_corruption=true 刪除_allow_terminal_recovery_corruption=true undo_tablespace='UNDOTBS1' undo_management='AUTO' 17.startup pfile='D:\oracle\product\10.2.0\admin\orcl\pfile\init.ora 18、    full export備份資料庫。 19 重新創建臨時表空間 20 查看恢復後結果     篇二。。。。。。。。。。。。。。。。  

兄弟剛用ORACLE,因為IP地址變了下,玩了半天,只剩下數據文件了,網上查了一天資料,終於搞定,成功將數據文件恢復到新的資料庫中。(主要 是以前沒玩過,花了我一天半的時間,哎,書到用時方恨少啊)

oracle數據恢復:只有數據文件的情況下;
狀況描述:當Oracle的控制文件丟失或損壞,但數據文件完好時,可以通過重建控制文件的方式對資料庫實例進行恢復。恢復方法如下:
一、備份數據文件
一、安裝Oracle,安裝過程中不要創建資料庫。
二、安裝好後,用DBCA(Database Configuration Assistant)創建與丟失的實例相同名稱的實例。創建實例時資料庫名和實例名要和丟失前的一致。數據文件與控制文件的信息可以從 (admin\xxxx\bdump\alert_xxxx.log)文件找到,其中xxxx為資料庫名,參照這個文件里的CREATE CONTROLFILE 語句段。還要註意創建實例時的歸檔模式及非歸檔模式,如果admin\zhxt\bdump\alert_xxxx.log文件中的CREATE CONTROLFILE 那一行最後是NOARCHIVELOG,則為非歸檔模式,如為ARCHIVELOG,則為歸檔模式,沒有則保持沒有
三、關閉Oracle(我的方法,在服務里將ORACLE的有關服務改為手動,重啟機子),用備份出來的數據文件覆蓋新建的數據文件,並將新生成的控制文 件及重做日誌文件刪除。
四、啟動Oracle有監聽(在服務里將ORACLE有關的服務開啟)
五、用sys用戶連接到oracle
Sqlplus /nolog
SQL>conn sys/sys as sysdba;
六、關閉資料庫
SQL> shutdown immediate;
七、起動資料庫,但不掛載數據文件
SQL> startup nomount;
八、重建控制文件,重建控制文件的腳本可以從admin\xxxx\bdump\alert_xxxx.log)文件找到,搜索 CREATE CONTROLFILE 語句,如果存在多處這樣的語句,則使用最後的。
控制文件的腳本類似如下語句:

CREATE CONTROLFILE REUSE DATABASE "zhxt" NORESETLOGS NOARCHIVELOG
-- SET STANDBY TO MAXIMIZE PERFORMANCE
    MAXLOGFILES 50
    MAXLOGMEMBERS 5
    MAXDATAFILES 100
    MAXINSTANCES 1
    MAXLOGHISTORY 226
LOGFILE
GROUP 1 'E:\ORADATA\zhxt\REDO01.LOG' SIZE 100M,
GROUP 2 'E:\ORADATA\zhxt\REDO02.LOG' SIZE 100M,
GROUP 3 'E:\ORADATA\zhxt\REDO03.LOG' SIZE 100M
-- STANDBY LOGFILE
DATAFILE
'E:\ORADATA\zhxt\RKXT.ORA',
'E:\ORADATA\zhxt\SYSTEM01.DBF',
'E:\ORADATA\zhxt\TOOLS01.DBF',
'E:\ORADATA\zhxt\TYZHXTTBS.ORA',
'E:\ORADATA\zhxt\UNDOTBS01.DBF',
'E:\ORADATA\zhxt\USERS01.DBF',
CHARACTER SET ZHS16GBK

這一語句有幾個地方需要修改:
1、   因為重做日誌文件已丟失,所以要將第一句的,NORESETLOGS 改為 RESETLOGS
2、   LOGFILE段的幾個重做日誌文件指定為實際希望的位置
3、   DATAFILE段的數據文件改為數據文件實際的位置,註意這裡不要包括臨時表空間用到的文件,否則會出錯。

執行修改後的腳本。如果提示控制文件創建完成,則可以進行下一步操作。

結果系統報錯:
ORA-01503: CREATE CONTROLFILE ??
ORA-01160: ???? data file
ORA-01110: ???? : 'D:\oracle\oradata\cicdb\TEMP01.DBF'


則需要將重建日誌文件中DATAFILE段中TEMP01這行刪除,因為它是臨時表空間,可以在創建後用alter database語句加上。再次執行重建控制文件的腳本。

九、創建控制文件成功後,執行以下語句打開資料庫,加上RESETLOGS參數是為了重新生成重做日誌文件。
SQL> alter database open RESETLOGS;
如果出現以下錯誤:

    alter database open resetlogs
*
第 1 行出現錯誤:
ORA-01194: 文件 1 需要更多的恢復來保持一致性
ORA-01110: 數據文件 1:
'D:ORACLEPRODUCT10.2.0ORADATAORACLE10GSYSTEM01.DBF'
解決方法如下:
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: 'F:SUNSYSTEM01.DBF'


SQL> set wrap off
SQL> set lin 300
SQL> select * from v$recover_file;

FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
---------- ------- ------- ----------------------------------------------------------------- ---------- ----------
1 ONLINE ONLINE 476049 08-JAN-08
2 ONLINE ONLINE 476049 08-JAN-08
3 ONLINE ONLINE 476049 08-JAN-08
4 ONLINE ONLINE 476049 08-JAN-08

SQL> recover database until cancel;
ORA-00283: recovery session canceled due to errors
ORA-01610: recovery using the BACKUP CONTROLFILE option must be done


SQL> recover database using backup controlfile until cancel;
ORA-00279: change 476049 generated at 01/08/2008 19:13:19 needed for thread 1
ORA-00289: suggestion : F:ORACLEFLASH_RECOVERY_AREASUNARCHIVELOG2008_01_08O1_MF_1_18_%U_.ARC
ORA-00280: change 476049 for thread 1 is in sequence #18


Specify log: {=suggested | filename | AUTO | CANCEL}

ORA-00308: cannot open archived log 'F:ORACLEFLASH_RECOVERY_AREASUNARCHIVELOG2008_01_08O1_MF_1_18_%

U_.ARC'
ORA-27041: unable to open file
OSD-04002: ????????????
O/S-Error: (OS 2) ??????????????????????


ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: 'F:SUNSYSTEM01.DBF'


SQL> recover database using backup controlfile until cancel;
ORA-00279: change 476049 generated at 01/08/2008 19:13:19 needed for thread 1
ORA-00289: suggestion : F:ORACLEFLASH_RECOVERY_AREASUNARCHIVELOG2008_01_08O1_MF_1_18_%U_.ARC
ORA-00280: change 476049 for thread 1 is in sequence #18


Specify log: {=suggested | filename | AUTO | CANCEL}
E:oracleoradatasunsunredo01.log
ORA-00310: archived log contains sequence 17; sequence 18 required
ORA-00334: archived log: 'E:ORACLEORADATASUNSUNREDO01.LOG'


ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: 'F:SUNSYSTEM01.DBF'


SQL> recover database using backup controlfile until cancel;
ORA-00279: change 476049 generated at 01/08/2008 19:13:19 needed for thread 1
ORA-00289: suggestion : F:ORACLEFLASH_RECOVERY_AREASUNARCHIVELOG2008_01_08O1_MF_1_18_%U_.ARC
ORA-00280: change 476049 for thread 1 is in sequence #18


Specify log: {=suggested | filename | AUTO | CANCEL}
E:oracleoradatasunsunredo02.log
Log applied.
Media recovery complete.
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open


SQL> alter database open resetlogs;

Database altered.

SQL>
十、將臨時表空間加入到實例上
SQL> alter tablespace TEMP add tempfile 'E:\oradata\zhxt\TEMP01.DBF' reuse;

十一、退出sqlplus,重啟oracle,測試是否成功

如何更改Oracle的預設監聽埠(1521) 
Oracle 的預設監聽埠為1521,你可以方便的依照下列步驟修改為其他埠:
[oracle@dbserver2 admin]$ cd $ORACLE_HOME/network/admin 
[oracle@dbserver2 admin]$ vi listener.ora 
修改這個文檔中的1521埠為你需要的埠your port 
[oracle@dbserver2 admin]$ lsnrctl stop 
[oracle@dbserver2 admin]$ lsnrctl start

這時雖然用sqlplus能連上,但用程式是連不上的,在CMD下,netstat -an 查看時,1521埠是未開啟的
解決方法如下(實際上是第三種,用手動啟動資料庫監聽就OK了):

程式報錯:Io 異常: The Network Adapter could not establish the connection
這個異常的出現一般與資料庫和你的PC的設置有關

這種異常的出現大致上有下麵幾種:
1。IP錯誤。
在設置URL時錯誤,例如:jdbc:oracle:thin:@192.168.0.36:1521:sharp
資料庫伺服器不正確:ping 伺服器IP是否正確。不正確,將URL更改為正確
埠號錯誤:一般不會錯誤。
進行一下操作:在DOS上鍵入sqlplus,檢查oracle是否開啟
一卻正常,執行下麵第2步。
2。防火牆
如果機器上安裝有放火牆,可能是伺服器埠號屏蔽而造成的。關閉防火牆後,嘗試重新連接。
仍然不行,執行第3步。
3。資料庫監聽未啟動 修改PC上註冊表中的ImagePath值。
以下是以現在主流的資料庫ORACLE為例
重新手動啟動資料庫監聽:
1:開始 → 運行→ 輸入CMD→ 進入DOS命令提示界面
d:>lsnrctl
LSNRCTL> status
或者
LSNRCTL> start

至此,完全搞定


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • linux第三天學習1.putty介紹和使用2.硬連接和符號連接3.sudo的使用4.job的使用5.磁碟分區使用6.主機名查看和修改7.配置主機名和IP地址的映射8.關機重啟命令9.命令嵌套10.創建用戶11.Linux環境變數相關問題許可權 r //100 = 4 //文件:讀取內容 //文件夾: ...
  • PHPWord是用純PHP提供了一組類寫入和從不同的文檔格式的文件閱讀庫。PHPWord的當前版本支持微軟的Office Open XML(OOXML或處理OpenXML),用於Office應用程式OASIS開放文檔格式(OpenDocument格式或ODF)和富文本格式(RTF)。 ...
  • 1 .首先登錄搜狗輸入法Linux官網https://pinyin.sogou.com/linux/?r=pinyin,下載64bit輸入法安裝包。2.打開終端,輸入命令先安裝一個叫Gdebi輔助工具,命令如下:正常情況下終端會提醒你按(Y/N)來決定是否真的安裝,我們輸入“Y”,然後按回車鍵繼續。 ...
  • //先要理解這四個概念,這是一個提交代碼的流動軌跡:1.工作區(編輯器)-經過add到2- 2.暫存區 (緩存)- 經過commit3-3.本地倉庫 (本地項目)-經過 push4-4.遠程倉庫 (線上項目 ) //拉取遠程(這裡預設擁有項目許可權)$ git clone <項目地址> //拉取遠程分 ...
  • 一、解壓文件到當前目錄 命令:tar -zxvf mysql....tar.gz 二、移動解壓完成的文件夾到目標目錄並更名mysql 命令:mv mysql-版本號 /usr/local/mysql 添加系統mysql組和mysql用戶 添加系統mysql組 sudo groupadd mysql ...
  • 花了3個晚上,把這個章節看完,受益匪淺。 1. 最有用的應該是與中斷相關的錯誤,優先排查中斷優先順序設置。 2. 堆棧溢出檢查,可能用到,一般先把堆棧設置的足夠大,只要沒有溢出就是好事,溢出了,掌握了棧溢出鉤子函數排錯很方便。 3. 相關的問題應該儘量不會出現,畢竟只要需要列印調試信息的情況下才使用, ...
  • 1.mongodb下載地址https://www.mongodb.com/download-center#community 2.安裝 3.在D:\MongoDB目錄下創建db和log兩個文件夾,並創建環境變數,如下圖所 4.以超級管理員的身份打開cmd,以auth的方式註冊服務sc create ...
  • 我們知道Redis支持五種數據類型, 分別是字元串、哈希表(map)、列表(list)、集合(set)和有序集合,和Java的集合框架類似,不同數據類型的數據結構實也是不一樣的。 1.Redis中的redisObject對象 Redis是使用C編寫的,內部實現了一個struct結構體redisObj ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...