求还原oracle数据库的方法 要具体步骤,数据文件,日志文件都在 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先备份再操作常见的数据库不能启动的原因: (蓝色字体为sqlplus界面操作,红色为注释)一、日志文件丢失或损坏 日志文件的恢复: 1、非归档模式 SQL>startup mount; SQL>select * from v$logfile;如果日志文件丢失了,手工建上相应的日志文件放在原处(新建一个文本文件,改为相应的日志名就可以了) SQL>Select * from v$log; 查看日志文件当前状态SQL>alter database clear logfile group N; (N为非当前状态组号,把所有非当前状态的日志进行恢复);(语句的作用是把该日志文件,清空为标准空日志文件) SQL>recover database until cancel; (恢复当前日志) SQL>alter database open resetlogs; 如果是单个日志文件损坏 SQL>startup mount; SQL>alter database clear logfile group N; SQL>alter database open; 2、归档模式 与上面操作大致一样如果如果alter database clear logfile group N 执行不成功就改为:alter database clear unarchived logfile group N特别要注意的:alter database open resetlogs;Resetlogs: 表示一个数据库逻辑生存期结束和一个数据库逻辑生存期的开始. 每次使用resetlogs时,SCN计数器不会被重置,oracle会重置其它计数器(如日志序列号),同时还会重置重做日志的内容. 如果当前日志文件损坏无法通过recover database until cancel恢复就用第三种方式处理。3、当前日志文件损坏的处理办法:SQL>startup mount;SQL>create pfile=’d:\orace_test\pfile.txt’ from spfile; (8i及以前版本直接找到参数文件复制一份就可以了)SQL>shutdown immediate;编辑生成的pfile,加入_allow_resetlogs_corruption=TRUESQL>startup mount pfile=’d:\oracle_test\pfile.txt’;SQL>alter database open resetlogs;数据库被打开后,马上执行一个full export shutdown数据库重建库 import并完成恢复 建议执行一下ANALYZE TABLE ...VALIDATE STRUCTURE CASCADE; 说明: 1、该恢复方法是没有办法之后的恢复方法,一般情况下建议不要采用,因为该方法 可能导致数据库的不一致 2、该方法也丢失数据,未写入数据文件的已提交或未提交数据。 3、建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为 任何数据的丢失对于生产来说都是不容许的二、密码文件的丢失与损坏 在一些特殊情况下会改变密码文件如:重建控制文件或密码文件被修改。 c:>orapwd file=’home\database\PWDSID’ password=123三、控制文件丢失或损坏 如果控制文件只丢失或损坏一个,可以复制一个替换损坏或丢失控制文件. 如果所有控制文件损坏了就进行下面的操作。 1、非归档模式 1.有控制文件备份的情况下 复制备份的控制文件,替换丢失的数据文件(用控制文件名命名)SQL>startup;SQL>recover database using backup controlfile; 看到这个提示时输入相应的日志文件路径如: 'D:\ORACLE\ORADATA\TEST9\REDO01.LOG'如果输入的文件有误会出现下面图片 如果出现上面错误就再重复一次SQL> recover database using backup controlfile until cancel;输入正确的日志后会出现 SQL>alter database open resetlogs; 2.没有控制文件备份的情况下方法1: 原来控制文件处不能有相应的控制文件Sql> startup nomount;Sql>CREATE CONTROLFILE REUSE DATABASE test9 NORESETLOGS NOARCHIVELOG MAXLOGFILES 64 MAXLOGMEMBERS 2 MAXDATAFILES 254 MAXINSTANCES 32 MAXLOGHISTORY 113 LOGFILE (根据自己日志文件进行设置,把所有的日志文件添加进去) 注意日志文件size与日志一致 GROUP 1 'D:\ORACLE\ORADATA\TEST9\REDO01.LOG' SIZE 1048576 , GROUP 2 'D:\ORACLE\ORADATA\TEST9\REDO02.LOG' SIZE 1048576 , GROUP 3 'D:\ORACLE\ORADATA\TEST9\REDO03.LOG' SIZE 1048576 DATAFILE (根据自己数据库数据文件进行设置,把所有的数据文件名添加进去)'D:\ORACLE\ORADATA\TEST9\SYSTEM01.DBF','D:\ORACLE\ORADATA\TEST9\UNDOTBS01.DBF','D:\ORACLE\ORADATA\TEST9\CWMLITE01.DBF','D:\ORACLE\ORADATA\TEST9\DRSYS01.DBF','D:\ORACLE\ORADATA\TEST9\EXAMPLE01.DBF','D:\ORACLE\ORADATA\TEST9\INDX01.DBF','D:\ORACLE\ORADATA\TEST9\ODM01.DBF','D:\ORACLE\ORADATA\TEST9\TOOLS01.DBF','D:\ORACLE\ORADATA\TEST9\USERS01.DBF','D:\ORACLE\ORADATA\TEST9\XDB01.DBF'CHARACTER SET ZHS16GBK ;按回车后,如果出现‘控制文件已创建’的提示时就表示创建成功如果没有成功,(根据自己数据库的字符集进行设置)SQL> shutdown immediate;SQL>startup mount;SQL>recover database using backup controlfile until cancel; 看到这个提示时输入相应的日志文件路径如: 'D:\ORACLE\ORADATA\TEST9\REDO01.LOG'如果输入的文件有误会出现下面图片 如果出现上面错误就再重复一次SQL> recover database using backup controlfile until cancel;输入正确的日志后会出现 SQL>alter database open resetlogs;如果这种办法无法新建控制文件,可能用下面一种方法创建控制文件 方法2: SQL>startup nomount;Sql>CREATE CONTROLFILE SET DATABASE test9 NORESETLOGS NOARCHIVELOG MAXLOGFILES 64 MAXLOGMEMBERS 2 MAXDATAFILES 254 MAXINSTANCES 32 MAXLOGHISTORY 113 LOGFILE GROUP 1 'D:\ORACLE\ORADATA\TEST9\REDO01.LOG' SIZE 1048576 , GROUP 2 'D:\ORACLE\ORADATA\TEST9\REDO02.LOG' SIZE 1048576 , GROUP 3 'D:\ORACLE\ORADATA\TEST9\REDO03.LOG' SIZE 1048576 DATAFILE 'D:\ORACLE\ORADATA\TEST9\SYSTEM01.DBF','D:\ORACLE\ORADATA\TEST9\UNDOTBS01.DBF','D:\ORACLE\ORADATA\TEST9\CWMLITE01.DBF','D:\ORACLE\ORADATA\TEST9\DRSYS01.DBF','D:\ORACLE\ORADATA\TEST9\EXAMPLE01.DBF','D:\ORACLE\ORADATA\TEST9\INDX01.DBF','D:\ORACLE\ORADATA\TEST9\ODM01.DBF','D:\ORACLE\ORADATA\TEST9\TOOLS01.DBF','D:\ORACLE\ORADATA\TEST9\USERS01.DBF','D:\ORACLE\ORADATA\TEST9\XDB01.DBF'CHARACTER SET ZHS16GBK ; Sql>CREATE CONTROLFILE SET DATABASE test9 RESETLOGS NOARCHIVELOG MAXLOGFILES 64 MAXLOGMEMBERS 2 MAXDATAFILES 254 MAXINSTANCES 32 MAXLOGHISTORY 113 LOGFILE (根据自己日志文件进行设置,把所有的日志文件添加进去) 注意日志文件size与日志一致 GROUP 1 'D:\ORACLE\ORADATA\TEST9\REDO01.LOG' SIZE 1048576 , GROUP 2 'D:\ORACLE\ORADATA\TEST9\REDO02.LOG' SIZE 1048576 , GROUP 3 'D:\ORACLE\ORADATA\TEST9\REDO03.LOG' SIZE 1048576 DATAFILE (根据自己数据库数据文件进行设置,把所有的数据文件名添加进去)'D:\ORACLE\ORADATA\TEST9\SYSTEM01.DBF','D:\ORACLE\ORADATA\TEST9\UNDOTBS01.DBF','D:\ORACLE\ORADATA\TEST9\CWMLITE01.DBF','D:\ORACLE\ORADATA\TEST9\DRSYS01.DBF','D:\ORACLE\ORADATA\TEST9\EXAMPLE01.DBF','D:\ORACLE\ORADATA\TEST9\INDX01.DBF','D:\ORACLE\ORADATA\TEST9\ODM01.DBF','D:\ORACLE\ORADATA\TEST9\TOOLS01.DBF','D:\ORACLE\ORADATA\TEST9\USERS01.DBF','D:\ORACLE\ORADATA\TEST9\XDB01.DBF'CHARACTER SET ZHS16GBK ;SQL> startup mount SQL> recover database using backup controlfile until cancel; SQL> alter database open resetlogs; 2、归档模式 (操作与非归档一致) 四、数据文件的丢失或损坏 1、非归档模式 1、非系统表空间数据文件损坏 表空间唯一数据文件损坏 SQL>startup mount; SQL>alter database drop tablesapce space_name 表空间一个数据文件损坏 SQL>startup mount; SQL>alter database datafile ‘filepath’ offline drop ; SQL>alter database open; 2、系统表空间数据文件损坏 临时表空间丢失或损坏 删除损坏数据文件,再为表空间添加一个数据文件。 回滚表空间丢失或损坏 2、归档模式 五、oracle软件配置环境或者是其它原因 常见的数据库不能启动的原因: (蓝色字体为sqlplus界面操作,红色为注释)一、日志文件丢失或损坏 日志文件的恢复: 1、非归档模式 SQL>startup mount; SQL>select * from v$logfile;如果日志文件丢失了,手工建上相应的日志文件放在原处(新建一个文本文件,改为相应的日志名就可以了) SQL>Select * from v$log; 查看日志文件当前状态SQL>alter database clear logfile group N; (N为非当前状态组号,把所有非当前状态的日志进行恢复);(语句的作用是把该日志文件,清空为标准空日志文件) SQL>recover database until cancel; (恢复当前日志) SQL>alter database open resetlogs; 如果是单个日志文件损坏 SQL>startup mount; SQL>alter database clear logfile group N; SQL>alter database open; 2、归档模式 与上面操作大致一样如果如果alter database clear logfile group N 执行不成功就改为:alter database clear unarchived logfile group N特别要注意的:alter database open resetlogs;Resetlogs: 表示一个数据库逻辑生存期结束和一个数据库逻辑生存期的开始. 每次使用resetlogs时,SCN计数器不会被重置,oracle会重置其它计数器(如日志序列号),同时还会重置重做日志的内容. 如果当前日志文件损坏无法通过recover database until cancel恢复就用第三种方式处理。3、当前日志文件损坏的处理办法:SQL>startup mount;SQL>create pfile=’d:\orace_test\pfile.txt’ from spfile; (8i及以前版本直接找到参数文件复制一份就可以了)SQL>shutdown immediate;编辑生成的pfile,加入_allow_resetlogs_corruption=TRUESQL>startup mount pfile=’d:\oracle_test\pfile.txt’;SQL>alter database open resetlogs;数据库被打开后,马上执行一个full export shutdown数据库重建库 import并完成恢复 建议执行一下ANALYZE TABLE ...VALIDATE STRUCTURE CASCADE; 说明: 1、该恢复方法是没有办法之后的恢复方法,一般情况下建议不要采用,因为该方法 可能导致数据库的不一致 2、该方法也丢失数据,未写入数据文件的已提交或未提交数据。 3、建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为 任何数据的丢失对于生产来说都是不容许的二、密码文件的丢失与损坏 在一些特殊情况下会改变密码文件如:重建控制文件或密码文件被修改。 c:>orapwd file=’home\database\PWDSID’ password=123三、控制文件丢失或损坏 如果控制文件只丢失或损坏一个,可以复制一个替换损坏或丢失控制文件. 如果所有控制文件损坏了就进行下面的操作。 1、非归档模式 1.有控制文件备份的情况下 复制备份的控制文件,替换丢失的数据文件(用控制文件名命名)SQL>startup;SQL>recover database using backup controlfile; 看到这个提示时输入相应的日志文件路径如: 'D:\ORACLE\ORADATA\TEST9\REDO01.LOG'如果输入的文件有误会出现下面图片 如果出现上面错误就再重复一次SQL> recover database using backup controlfile until cancel;输入正确的日志后会出现 SQL>alter database open resetlogs; 2.没有控制文件备份的情况下方法1: 原来控制文件处不能有相应的控制文件Sql> startup nomount;Sql>CREATE CONTROLFILE REUSE DATABASE test9 NORESETLOGS NOARCHIVELOG MAXLOGFILES 64 MAXLOGMEMBERS 2 MAXDATAFILES 254 MAXINSTANCES 32 MAXLOGHISTORY 113 LOGFILE (根据自己日志文件进行设置,把所有的日志文件添加进去) 注意日志文件size与日志一致 GROUP 1 'D:\ORACLE\ORADATA\TEST9\REDO01.LOG' SIZE 1048576 , GROUP 2 'D:\ORACLE\ORADATA\TEST9\REDO02.LOG' SIZE 1048576 , GROUP 3 'D:\ORACLE\ORADATA\TEST9\REDO03.LOG' SIZE 1048576 DATAFILE (根据自己数据库数据文件进行设置,把所有的数据文件名添加进去)'D:\ORACLE\ORADATA\TEST9\SYSTEM01.DBF','D:\ORACLE\ORADATA\TEST9\UNDOTBS01.DBF','D:\ORACLE\ORADATA\TEST9\CWMLITE01.DBF','D:\ORACLE\ORADATA\TEST9\DRSYS01.DBF','D:\ORACLE\ORADATA\TEST9\EXAMPLE01.DBF','D:\ORACLE\ORADATA\TEST9\INDX01.DBF','D:\ORACLE\ORADATA\TEST9\ODM01.DBF','D:\ORACLE\ORADATA\TEST9\TOOLS01.DBF','D:\ORACLE\ORADATA\TEST9\USERS01.DBF','D:\ORACLE\ORADATA\TEST9\XDB01.DBF'CHARACTER SET ZHS16GBK ;按回车后,如果出现‘控制文件已创建’的提示时就表示创建成功如果没有成功,(根据自己数据库的字符集进行设置)SQL> shutdown immediate;SQL>startup mount;SQL>recover database using backup controlfile until cancel; 看到这个提示时输入相应的日志文件路径如: 'D:\ORACLE\ORADATA\TEST9\REDO01.LOG'如果输入的文件有误会出现下面图片 如果出现上面错误就再重复一次SQL> recover database using backup controlfile until cancel;输入正确的日志后会出现 SQL>alter database open resetlogs;如果这种办法无法新建控制文件,可能用下面一种方法创建控制文件 方法2: SQL>startup nomount;Sql>CREATE CONTROLFILE SET DATABASE test9 NORESETLOGS NOARCHIVELOG MAXLOGFILES 64 MAXLOGMEMBERS 2 MAXDATAFILES 254 MAXINSTANCES 32 MAXLOGHISTORY 113 LOGFILE GROUP 1 'D:\ORACLE\ORADATA\TEST9\REDO01.LOG' SIZE 1048576 , GROUP 2 'D:\ORACLE\ORADATA\TEST9\REDO02.LOG' SIZE 1048576 , GROUP 3 'D:\ORACLE\ORADATA\TEST9\REDO03.LOG' SIZE 1048576 DATAFILE 'D:\ORACLE\ORADATA\TEST9\SYSTEM01.DBF','D:\ORACLE\ORADATA\TEST9\UNDOTBS01.DBF','D:\ORACLE\ORADATA\TEST9\CWMLITE01.DBF','D:\ORACLE\ORADATA\TEST9\DRSYS01.DBF','D:\ORACLE\ORADATA\TEST9\EXAMPLE01.DBF','D:\ORACLE\ORADATA\TEST9\INDX01.DBF','D:\ORACLE\ORADATA\TEST9\ODM01.DBF','D:\ORACLE\ORADATA\TEST9\TOOLS01.DBF','D:\ORACLE\ORADATA\TEST9\USERS01.DBF','D:\ORACLE\ORADATA\TEST9\XDB01.DBF'CHARACTER SET ZHS16GBK ; Sql>CREATE CONTROLFILE SET DATABASE test9 RESETLOGS NOARCHIVELOG MAXLOGFILES 64 MAXLOGMEMBERS 2 MAXDATAFILES 254 MAXINSTANCES 32 MAXLOGHISTORY 113 LOGFILE (根据自己日志文件进行设置,把所有的日志文件添加进去) 注意日志文件size与日志一致 GROUP 1 'D:\ORACLE\ORADATA\TEST9\REDO01.LOG' SIZE 1048576 , GROUP 2 'D:\ORACLE\ORADATA\TEST9\REDO02.LOG' SIZE 1048576 , GROUP 3 'D:\ORACLE\ORADATA\TEST9\REDO03.LOG' SIZE 1048576 DATAFILE (根据自己数据库数据文件进行设置,把所有的数据文件名添加进去)'D:\ORACLE\ORADATA\TEST9\SYSTEM01.DBF','D:\ORACLE\ORADATA\TEST9\UNDOTBS01.DBF','D:\ORACLE\ORADATA\TEST9\CWMLITE01.DBF','D:\ORACLE\ORADATA\TEST9\DRSYS01.DBF','D:\ORACLE\ORADATA\TEST9\EXAMPLE01.DBF','D:\ORACLE\ORADATA\TEST9\INDX01.DBF','D:\ORACLE\ORADATA\TEST9\ODM01.DBF','D:\ORACLE\ORADATA\TEST9\TOOLS01.DBF','D:\ORACLE\ORADATA\TEST9\USERS01.DBF','D:\ORACLE\ORADATA\TEST9\XDB01.DBF'CHARACTER SET ZHS16GBK ;SQL> startup mount SQL> recover database using backup controlfile until cancel; SQL> alter database open resetlogs; 2、归档模式 (操作与非归档一致) 四、数据文件的丢失或损坏 1、非归档模式 1、非系统表空间数据文件损坏 表空间唯一数据文件损坏 SQL>startup mount; SQL>alter database drop tablesapce space_name 表空间一个数据文件损坏 SQL>startup mount; SQL>alter database datafile ‘filepath’ offline drop ; SQL>alter database open; 2、系统表空间数据文件损坏 临时表空间丢失或损坏 删除损坏数据文件,再为表空间添加一个数据文件。 回滚表空间丢失或损坏 2、归档模式 五、oracle软件配置环境或者是其它原因 你现在的数据库状态是怎样的,startup的时候能启动到什么状态启动的alert文件有什么错误。根据这些来选择恢复策略。==================================================================Inthirties关注Oracle数据库 维护 优化,安全,备份,恢复,迁移,故障处理如果你需要帮助或想和我一起学习的请联系联系方式QQ:370140387QQ群: 85837884(注明:数据库)电子邮件:[email protected]网站: http://www.inthirties.com 求这个sql语句怎么写! 菜鸟求助:JDBC连Oracle 11g问题???就是连不上。 SQL效率求助! 这样的SQL语句, 还能有哪些写法,哪最写法运行时速度最快? 这么show user为空啊? 临时表在删除时,提示被占用,如何解决? 有一个字段含有固定10位字符,如何实现查询最后一位和倒数第二位相同的记录呢? 求简单的对一个表删除某一字段,更改某一字段的sql命令 DTS 能把sqlserver中约束倒到oracle中吗? 急,各位,如何用VB处理大数据到Oracle中去? [救助]修改compatible 参数后程序包体无法运行 请教,oracle不同版本间数据的导入导出,在线等
再操作常见的数据库不能启动的原因:
(蓝色字体为sqlplus界面操作,红色为注释)
一、日志文件丢失或损坏
日志文件的恢复:
1、非归档模式
SQL>startup mount;
SQL>select * from v$logfile;
如果日志文件丢失了,手工建上相应的日志文件放在原处
(新建一个文本文件,改为相应的日志名就可以了)
SQL>Select * from v$log;
查看日志文件当前状态
SQL>alter database clear logfile group N;
(N为非当前状态组号,把所有非当前状态的日志进行恢复);
(语句的作用是把该日志文件,清空为标准空日志文件)
SQL>recover database until cancel;
(恢复当前日志)
SQL>alter database open resetlogs; 如果是单个日志文件损坏
SQL>startup mount;
SQL>alter database clear logfile group N;
SQL>alter database open; 2、归档模式
与上面操作大致一样如果
如果alter database clear logfile group N 执行不成功
就改为:alter database clear unarchived logfile group N特别要注意的:alter database open resetlogs;
Resetlogs:
表示一个数据库逻辑生存期结束和一个数据库逻辑生存期的开始.
每次使用resetlogs时,SCN计数器不会被重置,oracle会重置其它计数器(如日志序列号),同时还会重置重做日志的内容. 如果当前日志文件损坏无法通过recover database until cancel恢复就用第三种方式处理。3、当前日志文件损坏的处理办法:
SQL>startup mount;
SQL>create pfile=’d:\orace_test\pfile.txt’ from spfile;
(8i及以前版本直接找到参数文件复制一份就可以了)
SQL>shutdown immediate;
编辑生成的pfile,加入_allow_resetlogs_corruption=TRUE
SQL>startup mount pfile=’d:\oracle_test\pfile.txt’;
SQL>alter database open resetlogs;数据库被打开后,马上执行一个full export
shutdown数据库
重建库
import并完成恢复
建议执行一下ANALYZE TABLE ...VALIDATE STRUCTURE CASCADE;
说明:
1、该恢复方法是没有办法之后的恢复方法,一般情况下建议不要采用,因为该方法
可能导致数据库的不一致
2、该方法也丢失数据,未写入数据文件的已提交或未提交数据。
3、建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为
任何数据的丢失对于生产来说都是不容许的
二、密码文件的丢失与损坏
在一些特殊情况下会改变密码文件如:重建控制文件或密码文件被修改。
c:>orapwd file=’home\database\PWDSID’ password=123三、控制文件丢失或损坏
如果控制文件只丢失或损坏一个,可以复制一个替换损坏或丢失控制文件.
如果所有控制文件损坏了就进行下面的操作。
1、非归档模式
1.有控制文件备份的情况下
复制备份的控制文件,替换丢失的数据文件(用控制文件名命名)
SQL>startup;
SQL>recover database using backup controlfile;
看到这个提示时输入相应的日志文件路径如:
'D:\ORACLE\ORADATA\TEST9\REDO01.LOG'
如果输入的文件有误会出现下面图片
如果出现上面错误就再重复一次
SQL> recover database using backup controlfile until cancel;
输入正确的日志后会出现
SQL>alter database open resetlogs; 2.没有控制文件备份的情况下
方法1:
原来控制文件处不能有相应的控制文件
Sql> startup nomount;
Sql>
CREATE CONTROLFILE REUSE DATABASE test9 NORESETLOGS NOARCHIVELOG
MAXLOGFILES 64
MAXLOGMEMBERS 2
MAXDATAFILES 254
MAXINSTANCES 32
MAXLOGHISTORY 113
LOGFILE
(根据自己日志文件进行设置,把所有的日志文件添加进去)
注意日志文件size与日志一致
GROUP 1 'D:\ORACLE\ORADATA\TEST9\REDO01.LOG' SIZE 1048576 ,
GROUP 2 'D:\ORACLE\ORADATA\TEST9\REDO02.LOG' SIZE 1048576 ,
GROUP 3 'D:\ORACLE\ORADATA\TEST9\REDO03.LOG' SIZE 1048576
DATAFILE
(根据自己数据库数据文件进行设置,把所有的数据文件名添加进去)
'D:\ORACLE\ORADATA\TEST9\SYSTEM01.DBF',
'D:\ORACLE\ORADATA\TEST9\UNDOTBS01.DBF',
'D:\ORACLE\ORADATA\TEST9\CWMLITE01.DBF',
'D:\ORACLE\ORADATA\TEST9\DRSYS01.DBF',
'D:\ORACLE\ORADATA\TEST9\EXAMPLE01.DBF',
'D:\ORACLE\ORADATA\TEST9\INDX01.DBF',
'D:\ORACLE\ORADATA\TEST9\ODM01.DBF',
'D:\ORACLE\ORADATA\TEST9\TOOLS01.DBF',
'D:\ORACLE\ORADATA\TEST9\USERS01.DBF',
'D:\ORACLE\ORADATA\TEST9\XDB01.DBF'
CHARACTER SET ZHS16GBK ;按回车后,如果出现‘控制文件已创建’的提示时就表示创建成功
如果没有成功,
(根据自己数据库的字符集进行设置)
SQL> shutdown immediate;
SQL>startup mount;
SQL>recover database using backup controlfile until cancel;
看到这个提示时输入相应的日志文件路径如:
'D:\ORACLE\ORADATA\TEST9\REDO01.LOG'
如果输入的文件有误会出现下面图片
如果出现上面错误就再重复一次
SQL> recover database using backup controlfile until cancel;
输入正确的日志后会出现
SQL>alter database open resetlogs;如果这种办法无法新建控制文件,可能用下面一种方法创建控制文件
方法2:
SQL>startup nomount;
Sql>
CREATE CONTROLFILE SET DATABASE test9 NORESETLOGS NOARCHIVELOG
MAXLOGFILES 64
MAXLOGMEMBERS 2
MAXDATAFILES 254
MAXINSTANCES 32
MAXLOGHISTORY 113
LOGFILE
GROUP 1 'D:\ORACLE\ORADATA\TEST9\REDO01.LOG' SIZE 1048576 ,
GROUP 2 'D:\ORACLE\ORADATA\TEST9\REDO02.LOG' SIZE 1048576 ,
GROUP 3 'D:\ORACLE\ORADATA\TEST9\REDO03.LOG' SIZE 1048576
DATAFILE
'D:\ORACLE\ORADATA\TEST9\SYSTEM01.DBF',
'D:\ORACLE\ORADATA\TEST9\UNDOTBS01.DBF',
'D:\ORACLE\ORADATA\TEST9\CWMLITE01.DBF',
'D:\ORACLE\ORADATA\TEST9\DRSYS01.DBF',
'D:\ORACLE\ORADATA\TEST9\EXAMPLE01.DBF',
'D:\ORACLE\ORADATA\TEST9\INDX01.DBF',
'D:\ORACLE\ORADATA\TEST9\ODM01.DBF',
'D:\ORACLE\ORADATA\TEST9\TOOLS01.DBF',
'D:\ORACLE\ORADATA\TEST9\USERS01.DBF',
'D:\ORACLE\ORADATA\TEST9\XDB01.DBF'
CHARACTER SET ZHS16GBK ;
Sql>
CREATE CONTROLFILE SET DATABASE test9 RESETLOGS NOARCHIVELOG
MAXLOGFILES 64
MAXLOGMEMBERS 2
MAXDATAFILES 254
MAXINSTANCES 32
MAXLOGHISTORY 113
LOGFILE
(根据自己日志文件进行设置,把所有的日志文件添加进去)
注意日志文件size与日志一致
GROUP 1 'D:\ORACLE\ORADATA\TEST9\REDO01.LOG' SIZE 1048576 ,
GROUP 2 'D:\ORACLE\ORADATA\TEST9\REDO02.LOG' SIZE 1048576 ,
GROUP 3 'D:\ORACLE\ORADATA\TEST9\REDO03.LOG' SIZE 1048576
DATAFILE
(根据自己数据库数据文件进行设置,把所有的数据文件名添加进去)
'D:\ORACLE\ORADATA\TEST9\SYSTEM01.DBF',
'D:\ORACLE\ORADATA\TEST9\UNDOTBS01.DBF',
'D:\ORACLE\ORADATA\TEST9\CWMLITE01.DBF',
'D:\ORACLE\ORADATA\TEST9\DRSYS01.DBF',
'D:\ORACLE\ORADATA\TEST9\EXAMPLE01.DBF',
'D:\ORACLE\ORADATA\TEST9\INDX01.DBF',
'D:\ORACLE\ORADATA\TEST9\ODM01.DBF',
'D:\ORACLE\ORADATA\TEST9\TOOLS01.DBF',
'D:\ORACLE\ORADATA\TEST9\USERS01.DBF',
'D:\ORACLE\ORADATA\TEST9\XDB01.DBF'
CHARACTER SET ZHS16GBK ;
SQL> startup mount
SQL> recover database using backup controlfile until cancel;
SQL> alter database open resetlogs;
2、归档模式 (操作与非归档一致)
四、数据文件的丢失或损坏
1、非归档模式
1、非系统表空间数据文件损坏
表空间唯一数据文件损坏
SQL>startup mount;
SQL>alter database drop tablesapce space_name
表空间一个数据文件损坏
SQL>startup mount;
SQL>alter database datafile ‘filepath’ offline drop ;
SQL>alter database open;
2、系统表空间数据文件损坏
临时表空间丢失或损坏
删除损坏数据文件,再为表空间添加一个数据文件。
回滚表空间丢失或损坏
2、归档模式
五、oracle软件配置环境或者是其它原因
(蓝色字体为sqlplus界面操作,红色为注释)
一、日志文件丢失或损坏
日志文件的恢复:
1、非归档模式
SQL>startup mount;
SQL>select * from v$logfile;
如果日志文件丢失了,手工建上相应的日志文件放在原处
(新建一个文本文件,改为相应的日志名就可以了)
SQL>Select * from v$log;
查看日志文件当前状态
SQL>alter database clear logfile group N;
(N为非当前状态组号,把所有非当前状态的日志进行恢复);
(语句的作用是把该日志文件,清空为标准空日志文件)
SQL>recover database until cancel;
(恢复当前日志)
SQL>alter database open resetlogs; 如果是单个日志文件损坏
SQL>startup mount;
SQL>alter database clear logfile group N;
SQL>alter database open; 2、归档模式
与上面操作大致一样如果
如果alter database clear logfile group N 执行不成功
就改为:alter database clear unarchived logfile group N特别要注意的:alter database open resetlogs;
Resetlogs:
表示一个数据库逻辑生存期结束和一个数据库逻辑生存期的开始.
每次使用resetlogs时,SCN计数器不会被重置,oracle会重置其它计数器(如日志序列号),同时还会重置重做日志的内容. 如果当前日志文件损坏无法通过recover database until cancel恢复就用第三种方式处理。3、当前日志文件损坏的处理办法:
SQL>startup mount;
SQL>create pfile=’d:\orace_test\pfile.txt’ from spfile;
(8i及以前版本直接找到参数文件复制一份就可以了)
SQL>shutdown immediate;
编辑生成的pfile,加入_allow_resetlogs_corruption=TRUE
SQL>startup mount pfile=’d:\oracle_test\pfile.txt’;
SQL>alter database open resetlogs;数据库被打开后,马上执行一个full export
shutdown数据库
重建库
import并完成恢复
建议执行一下ANALYZE TABLE ...VALIDATE STRUCTURE CASCADE;
说明:
1、该恢复方法是没有办法之后的恢复方法,一般情况下建议不要采用,因为该方法
可能导致数据库的不一致
2、该方法也丢失数据,未写入数据文件的已提交或未提交数据。
3、建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为
任何数据的丢失对于生产来说都是不容许的
二、密码文件的丢失与损坏
在一些特殊情况下会改变密码文件如:重建控制文件或密码文件被修改。
c:>orapwd file=’home\database\PWDSID’ password=123三、控制文件丢失或损坏
如果控制文件只丢失或损坏一个,可以复制一个替换损坏或丢失控制文件.
如果所有控制文件损坏了就进行下面的操作。
1、非归档模式
1.有控制文件备份的情况下
复制备份的控制文件,替换丢失的数据文件(用控制文件名命名)
SQL>startup;
SQL>recover database using backup controlfile;
看到这个提示时输入相应的日志文件路径如:
'D:\ORACLE\ORADATA\TEST9\REDO01.LOG'
如果输入的文件有误会出现下面图片
如果出现上面错误就再重复一次
SQL> recover database using backup controlfile until cancel;
输入正确的日志后会出现
SQL>alter database open resetlogs; 2.没有控制文件备份的情况下
方法1:
原来控制文件处不能有相应的控制文件
Sql> startup nomount;
Sql>
CREATE CONTROLFILE REUSE DATABASE test9 NORESETLOGS NOARCHIVELOG
MAXLOGFILES 64
MAXLOGMEMBERS 2
MAXDATAFILES 254
MAXINSTANCES 32
MAXLOGHISTORY 113
LOGFILE
(根据自己日志文件进行设置,把所有的日志文件添加进去)
注意日志文件size与日志一致
GROUP 1 'D:\ORACLE\ORADATA\TEST9\REDO01.LOG' SIZE 1048576 ,
GROUP 2 'D:\ORACLE\ORADATA\TEST9\REDO02.LOG' SIZE 1048576 ,
GROUP 3 'D:\ORACLE\ORADATA\TEST9\REDO03.LOG' SIZE 1048576
DATAFILE
(根据自己数据库数据文件进行设置,把所有的数据文件名添加进去)
'D:\ORACLE\ORADATA\TEST9\SYSTEM01.DBF',
'D:\ORACLE\ORADATA\TEST9\UNDOTBS01.DBF',
'D:\ORACLE\ORADATA\TEST9\CWMLITE01.DBF',
'D:\ORACLE\ORADATA\TEST9\DRSYS01.DBF',
'D:\ORACLE\ORADATA\TEST9\EXAMPLE01.DBF',
'D:\ORACLE\ORADATA\TEST9\INDX01.DBF',
'D:\ORACLE\ORADATA\TEST9\ODM01.DBF',
'D:\ORACLE\ORADATA\TEST9\TOOLS01.DBF',
'D:\ORACLE\ORADATA\TEST9\USERS01.DBF',
'D:\ORACLE\ORADATA\TEST9\XDB01.DBF'
CHARACTER SET ZHS16GBK ;按回车后,如果出现‘控制文件已创建’的提示时就表示创建成功
如果没有成功,
(根据自己数据库的字符集进行设置)
SQL> shutdown immediate;
SQL>startup mount;
SQL>recover database using backup controlfile until cancel;
看到这个提示时输入相应的日志文件路径如:
'D:\ORACLE\ORADATA\TEST9\REDO01.LOG'
如果输入的文件有误会出现下面图片
如果出现上面错误就再重复一次
SQL> recover database using backup controlfile until cancel;
输入正确的日志后会出现
SQL>alter database open resetlogs;如果这种办法无法新建控制文件,可能用下面一种方法创建控制文件
方法2:
SQL>startup nomount;
Sql>
CREATE CONTROLFILE SET DATABASE test9 NORESETLOGS NOARCHIVELOG
MAXLOGFILES 64
MAXLOGMEMBERS 2
MAXDATAFILES 254
MAXINSTANCES 32
MAXLOGHISTORY 113
LOGFILE
GROUP 1 'D:\ORACLE\ORADATA\TEST9\REDO01.LOG' SIZE 1048576 ,
GROUP 2 'D:\ORACLE\ORADATA\TEST9\REDO02.LOG' SIZE 1048576 ,
GROUP 3 'D:\ORACLE\ORADATA\TEST9\REDO03.LOG' SIZE 1048576
DATAFILE
'D:\ORACLE\ORADATA\TEST9\SYSTEM01.DBF',
'D:\ORACLE\ORADATA\TEST9\UNDOTBS01.DBF',
'D:\ORACLE\ORADATA\TEST9\CWMLITE01.DBF',
'D:\ORACLE\ORADATA\TEST9\DRSYS01.DBF',
'D:\ORACLE\ORADATA\TEST9\EXAMPLE01.DBF',
'D:\ORACLE\ORADATA\TEST9\INDX01.DBF',
'D:\ORACLE\ORADATA\TEST9\ODM01.DBF',
'D:\ORACLE\ORADATA\TEST9\TOOLS01.DBF',
'D:\ORACLE\ORADATA\TEST9\USERS01.DBF',
'D:\ORACLE\ORADATA\TEST9\XDB01.DBF'
CHARACTER SET ZHS16GBK ;
Sql>
CREATE CONTROLFILE SET DATABASE test9 RESETLOGS NOARCHIVELOG
MAXLOGFILES 64
MAXLOGMEMBERS 2
MAXDATAFILES 254
MAXINSTANCES 32
MAXLOGHISTORY 113
LOGFILE
(根据自己日志文件进行设置,把所有的日志文件添加进去)
注意日志文件size与日志一致
GROUP 1 'D:\ORACLE\ORADATA\TEST9\REDO01.LOG' SIZE 1048576 ,
GROUP 2 'D:\ORACLE\ORADATA\TEST9\REDO02.LOG' SIZE 1048576 ,
GROUP 3 'D:\ORACLE\ORADATA\TEST9\REDO03.LOG' SIZE 1048576
DATAFILE
(根据自己数据库数据文件进行设置,把所有的数据文件名添加进去)
'D:\ORACLE\ORADATA\TEST9\SYSTEM01.DBF',
'D:\ORACLE\ORADATA\TEST9\UNDOTBS01.DBF',
'D:\ORACLE\ORADATA\TEST9\CWMLITE01.DBF',
'D:\ORACLE\ORADATA\TEST9\DRSYS01.DBF',
'D:\ORACLE\ORADATA\TEST9\EXAMPLE01.DBF',
'D:\ORACLE\ORADATA\TEST9\INDX01.DBF',
'D:\ORACLE\ORADATA\TEST9\ODM01.DBF',
'D:\ORACLE\ORADATA\TEST9\TOOLS01.DBF',
'D:\ORACLE\ORADATA\TEST9\USERS01.DBF',
'D:\ORACLE\ORADATA\TEST9\XDB01.DBF'
CHARACTER SET ZHS16GBK ;
SQL> startup mount
SQL> recover database using backup controlfile until cancel;
SQL> alter database open resetlogs;
2、归档模式 (操作与非归档一致)
四、数据文件的丢失或损坏
1、非归档模式
1、非系统表空间数据文件损坏
表空间唯一数据文件损坏
SQL>startup mount;
SQL>alter database drop tablesapce space_name
表空间一个数据文件损坏
SQL>startup mount;
SQL>alter database datafile ‘filepath’ offline drop ;
SQL>alter database open;
2、系统表空间数据文件损坏
临时表空间丢失或损坏
删除损坏数据文件,再为表空间添加一个数据文件。
回滚表空间丢失或损坏
2、归档模式
五、oracle软件配置环境或者是其它原因
startup的时候能启动到什么状态
启动的alert文件有什么错误。根据这些来选择恢复策略。
==================================================================
Inthirties关注Oracle数据库 维护 优化,安全,备份,恢复,迁移,故障处理如果你需要帮助或想和我一起学习的请联系
联系方式QQ:370140387
QQ群: 85837884(注明:数据库)
电子邮件:[email protected]
网站: http://www.inthirties.com