兄弟刚用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: {
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: {
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: {
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
至此,彻底搞定