oracle 只有數據文件時的恢復

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

oracle數據恢復:只有數據文件的狀況下;
情況描述:當Oracle的控制文件丟失或損壞,但數據文件無缺時,能夠經過重建控制文件的方式對數據庫實例進行恢復。恢復方法以下:
1、備份數據文件
1、安裝Oracle,安裝過程當中不要建立數據庫。
2、安裝好後,用DBCA(Database Configuration Assistant)建立與丟失的實例相同名稱的實例。建立實例時數據庫名和實例名要和丟失前的一致。數據文件與控制文件的信息能夠從 (admin\xxxx\bdump\alert_xxxx.log)文件找到,其中xxxx爲數據庫名,參照這個文件裏的CREATE CONTROLFILE 語句段。還要注意建立實例時的歸檔模式及非歸檔模式,若是admin\zhxt\bdump\alert_xxxx.log文件中的CREATE CONTROLFILE 那一行最後是NOARCHIVELOG,則爲非歸檔模式,如爲ARCHIVELOG,則爲歸檔模式,沒有則保持沒有
3、關閉Oracle(個人方法,在服務裏將ORACLE的有關服務改成手動,重啓機子),用備份出來的數據文件覆蓋新建的數據文件,並將新生成的控制文 件及重作日誌文件刪除。
4、啓動Oracle有監聽(在服務裏將ORACLE有關的服務開啓)
5、用sys用戶鏈接到oracle
Sqlplus /nolog
SQL>conn sys/sys as sysdba;
6、關閉數據庫
SQL> shutdown immediate;
7、起動數據庫,但不掛載數據文件
SQL> startup nomount;
8、重建控制文件,重建控制文件的腳本能夠從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

這一語句有幾個地方須要修改:
一、   由於重作日誌文件已丟失,因此要將第一句的,NORESETLOGS 改成 RESETLOGS
二、   LOGFILE段的幾個重作日誌文件指定爲實際但願的位置
三、   DATAFILE段的數據文件改成數據文件實際的位置,注意這裏不要包括臨時表空間用到的文件,不然會出錯。

執行修改後的腳本。若是提示控制文件建立完成,則能夠進行下一步操做。

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


則須要將重建日誌文件中DATAFILE段中TEMP01這行刪除,由於它是臨時表空間,能夠在建立後用alter database語句加上。再次執行重建控制文件的腳本。

9、建立控制文件成功後,執行如下語句打開數據庫,加上RESETLOGS參數是爲了從新生成重作日誌文件。
SQL> alter database open RESETLOGS;
若是出現如下錯誤:sql

    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-08session

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


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 #18app


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

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

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>
10、將臨時表空間加入到實例上
SQL> alter tablespace TEMP add tempfile 'E:\oradata\zhxt\TEMP01.DBF' reuse;

11、退出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

至此,徹底搞定



asdtiang 2010-01-12 17:41 發表評論
相關文章
相關標籤/搜索