邪恶八进制信息安全团队技术讨论组's Archiver

pub!1c 2006-2-20 09:22

[转载]备份与恢复测试

信息来源:邪恶八进制信息安全团队([url]www.eviloctal.com[/url])

pub!1c 2006-2-20 09:24

<TABLE style="TABLE-LAYOUT: fixed; WORD-WRAP: break-word" height="100%" cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top><SPAN class=bold><SPAN class=smalltxt></SPAN></SPAN><B><BR>#########################################################<BR>#              [1] 控制文件损坏(rman和常规恢复)          #<BR>#########################################################<BR><BR>准备工作<BR>~~~~~~~~<BR>备份<BR>~~~~<BR>C:\Documents and Settings\lifeng.fang>rman nocatalog target "sys/sunsdl"<BR><BR>恢复管理器: 版本9.2.0.1.0 - Production<BR><BR>Copyright (c) 1995, 2002, Oracle Corporation.All rights reserved.<BR><BR>连接到目标数据库: PDF (DBID=3171861129) --新的ID2334768642<BR>正在使用目标数据库控制文件替代恢复目录<BR><BR>RMAN> configure controlfile autobackup on;<BR><BR>新的 RMAN 配置参数:<BR>CONFIGURE CONTROLFILE AUTOBACKUP ON;<BR>已成功存储新的 RMAN 配置参数<BR>RMAN> configure controlfile autobackup format for device type disk to 'c:\temp\%<BR>F';<BR><BR>新的 RMAN 配置参数:<BR>CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'c:\temp\%F';<BR>已成功存储新的 RMAN 配置参数<BR><BR>RMAN><BR><BR>RMAN> backup database;<BR><BR>启动 backup 于 25-2月 -05<BR>分配的通道: ORA_DISK_1<BR>通道 ORA_DISK_1: sid=12 devtype=DISK<BR>分配的通道: ORA_DISK_2<BR>通道 ORA_DISK_2: sid=13 devtype=DISK<BR>通道 ORA_DISK_1: 正在启动 full 数据文件备份集<BR>通道 ORA_DISK_1: 正在指定备份集中的数据文件<BR>输入数据文件 fno=00002 name=C:\ORACLE\ORADATA\PDF\UNDOTBS01.DBF<BR>输入数据文件 fno=00003 name=C:\ORACLE\ORADATA\PDF\INDX01.DBF<BR>输入数据文件 fno=00005 name=C:\ORACLE\ORADATA\PDF\USERS01.DBF<BR>通道 ORA_DISK_1: 正在启动段 1 于 25-2月 -05<BR>通道 ORA_DISK_2: 正在启动 full 数据文件备份集<BR>通道 ORA_DISK_2: 正在指定备份集中的数据文件<BR>输入数据文件 fno=00001 name=C:\ORACLE\ORADATA\PDF\SYSTEM01.DBF<BR>输入数据文件 fno=00004 name=C:\ORACLE\ORADATA\PDF\TOOLS01.DBF<BR>通道 ORA_DISK_2: 正在启动段 1 于 25-2月 -05<BR>通道 ORA_DISK_1: 已完成段 1 于 25-2月 -05<BR>段 handle=C:\ORACLE\ORA92\DATABASE\07GDKT8C_1_1 comment=NONE<BR>通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:56<BR>通道 ORA_DISK_2: 已完成段 1 于 25-2月 -05<BR>段 handle=C:\ORACLE\ORA92\DATABASE\08GDKT8C_1_1 comment=NONE<BR>通道 ORA_DISK_2: 备份集已完成, 经过时间:00:00:57<BR>完成 backup 于 25-2月 -05<BR><BR>启动 Control File and SPFILE Autobackup 于 25-2月 -05<BR>段 handle=C:\TEMP\C-3171861129-20050225-00 comment=NONE<BR>完成 Control File and SPFILE Autobackup 于 25-2月 -05<BR><BR>RMAN><BR>  <BR>~~~~~~~~~~~  <BR>常规备份<BR>~~~~~~~~~~~<BR>备份数据文件cp C:\ORACLE\ORADATA\PDF\* C:\ORACLE\ORADATA\bak<BR>备份控制文件                    <BR>###################################################<BR># [1.1] 有老的备份数据备份和控制文件trace<BR>###################################################<BR>SQL> alter session set tracefile_identifier=fanglf<BR>2;<BR><BR>会话已更改。<BR><BR>SQL> alter database backup controlfile to trace;<BR><BR>数据库已更改。<BR><BR>SQL>alter database backup controlfile to 'c:\temp\controlfile.bak';<BR><BR>数据库已更改。<BR><BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR>我们也可以使用RMAN来拷贝备份控制文件<BR>RMAN> copy CURRENT CONTROLFILE TO 'c:\cf.cpy';<BR><BR>启动 copy 于 03-3月 -05<BR>分配的通道: ORA_DISK_1<BR>通道 ORA_DISK_1: sid=16 devtype=DISK<BR>通道 ORA_DISK_1: 已复制当前的控制文件<BR>输出文件名=C:\CF.CPY<BR>完成 copy 于 03-3月 -05<BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR><BR><BR>SQL> col name format a50<BR>SQL> select * from v$controlfile;<BR><BR>STATUSNAME<BR>------- --------------------------------------------------<BR>  C:\ORACLE\ORADATA\PDF\CONTROL01.CTL<BR>  C:\ORACLE\ORADATA\PDF\CONTROL02.CTL<BR>  C:\ORACLE\ORADATA\PDF\CONTROL03.CTL <<-此时仍然可以使用<BR>~~~~~~~~~~~~~~~~<BR>模拟控制文件损坏<BR>~~~~~~~~~~~~~~~~  <BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  <BR>使用ULTRAEDIT编辑CONTROL01.CTL部分数据 <BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <BR>SQL> select * from v$controlfile;<BR><BR>STATUSNAME<BR>------- ------------------------------------------------<BR>  C:\ORACLE\ORADATA\PDF\CONTROL01.CTL<BR>  C:\ORACLE\ORADATA\PDF\CONTROL02.CTL<BR>  C:\ORACLE\ORADATA\PDF\CONTROL03.CTL<BR><BR>SQL><BR>SQL> create table test (a int,v varchar(200));<BR><BR>使用ULTRAEDIT编辑清空CONTROL01.CTL大部分数据 <BR>SQL> select * from v$controlfile;<<-出现异常<BR>select * from v$controlfile<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-12571: TNS: 包写入程序失败 <BR> <BR>~~~~~~~~~~~~~~~~  <BR>在alert中显示<BR>~~~~~~~~~~~~~~~~<BR>Fri Feb 25 11:51:56 2005<BR>Errors in file c:\oracle\admin\pdf\bdump\pdf_ckpt_2556.trc:<BR>ORA-00227: corrupt block detected in controlfile: (block 1, # blocks 1)<BR>ORA-00202: controlfile: 'C:\ORACLE\ORADATA\PDF\CONTROL01.CTL'<BR><BR>CKPT: terminating instance due to error 227<BR>Fri Feb 25 11:51:58 2005<BR>Errors in file c:\oracle\admin\pdf\bdump\pdf_pmon_3084.trc:<BR>ORA-00227: corrupt block detected in controlfile: (block , # blocks )<BR><BR>Instance terminated by CKPT, pid = 2556  <BR>~~~~~~~~~~~~~~~~<BR>在trace文件中显示<BR>~~~~~~~~~~~~~~~~<BR><BR>Corrupt block relative dba: 0x00000001 (file 0, block 1)<BR>Completely zero block found during control file header read<BR>*** 2005-02-25 11:51:55.000<BR>ksedmp: internal or fatal error<BR>ORA-00202: controlfile: 'C:\ORACLE\ORADATA\PDF\CONTROL01.CTL'<BR><BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR>这里我模拟把3个控制文件都破坏<BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR><BR>启动数据库时提示<BR>SQL> startup<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>ORA-00205: ?????????????????????<BR><BR>恢复实例<BR>###################################################<BR># [测试1] --使用trace恢复 shutdown abort<BR>###################################################<BR>SQL> shutdown abort<BR>ORACLE 例程已经关闭。<BR>SQL> startup nomount<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>SQL><BR><BR><BR>SQL> CREATE CONTROLFILE REUSE DATABASE "PDF" NORESETLOGSARCHIVELOG<BR>2--SET STANDBY TO MAXIMIZE PERFORMANCE<BR>3  MAXLOGFILES 5<BR>4  MAXLOGMEMBERS 3<BR>5  MAXDATAFILES 100<BR>6  MAXINSTANCES 1<BR>7  MAXLOGHISTORY 226<BR>8LOGFILE<BR>9  GROUP 1 'C:\ORACLE\ORADATA\PDF\REDO01.LOG'SIZE 100M,<BR>10  GROUP 2 'C:\ORACLE\ORADATA\PDF\REDO02.LOG'SIZE 100M,<BR>11  GROUP 3 'C:\ORACLE\ORADATA\PDF\REDO03.LOG'SIZE 100M<BR>12-- STANDBY LOGFILE<BR>13DATAFILE<BR>14  'C:\ORACLE\ORADATA\PDF\SYSTEM01.DBF',<BR>15  'C:\ORACLE\ORADATA\PDF\UNDOTBS01.DBF',<BR>16  'C:\ORACLE\ORADATA\PDF\INDX01.DBF',<BR>17  'C:\ORACLE\ORADATA\PDF\TOOLS01.DBF',<BR>18  'C:\ORACLE\ORADATA\PDF\USERS01.DBF'<BR>19CHARACTER SET ZHS16GBK<BR>20;<BR><BR>控制文件已创建<BR>SQL> alter database open;<BR>alter database open<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-01113: ?? 1 ??????<BR>ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\PDF\SYSTEM01.DBF'<BR><BR>SQL> startup<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>数据库装载完毕。<BR>ORA-01113: 文件 1 需要介质恢复<BR>ORA-01110: 数据文件 1: 'C:\ORACLE\ORADATA\PDF\SYSTEM01.DBF'<BR><BR><BR>SQL> recover database ;--因为是shutdown abort关闭,所以需要恢复<BR>完成介质恢复。<BR>SQL> alter database open;<BR><BR>数据库已更改。<BR>###################################################<BR># [测试2] --使用trace恢复 正常shutdown <BR>###################################################<BR>SQL> insert into test select rownum,'aaaaaaaaaaaaaaaaaaaaaa' from dba_objects;<BR><BR>已创建6165行。<BR><BR>SQL> /<BR><BR>已创建6165行。<BR><BR>SQL> insert into test select * from test;<BR><BR>已创建12330行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> shutdown<BR>数据库已经关闭。<BR>已经卸载数据库。<BR>ORACLE 例程已经关闭。<BR><BR>SQL> startup nomount<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>SQL><BR><BR><BR>SQL> CREATE CONTROLFILE REUSE DATABASE "PDF" NORESETLOGSARCHIVELOG<BR>2--SET STANDBY TO MAXIMIZE PERFORMANCE<BR>3  MAXLOGFILES 5<BR>4  MAXLOGMEMBERS 3<BR>5  MAXDATAFILES 100<BR>6  MAXINSTANCES 1<BR>7  MAXLOGHISTORY 226<BR>8LOGFILE<BR>9  GROUP 1 'C:\ORACLE\ORADATA\PDF\REDO01.LOG'SIZE 100M,<BR>10  GROUP 2 'C:\ORACLE\ORADATA\PDF\REDO02.LOG'SIZE 100M,<BR>11  GROUP 3 'C:\ORACLE\ORADATA\PDF\REDO03.LOG'SIZE 100M<BR>12-- STANDBY LOGFILE<BR>13DATAFILE<BR>14  'C:\ORACLE\ORADATA\PDF\SYSTEM01.DBF',<BR>15  'C:\ORACLE\ORADATA\PDF\UNDOTBS01.DBF',<BR>16  'C:\ORACLE\ORADATA\PDF\INDX01.DBF',<BR>17  'C:\ORACLE\ORADATA\PDF\TOOLS01.DBF',<BR>18  'C:\ORACLE\ORADATA\PDF\USERS01.DBF'<BR>19CHARACTER SET ZHS16GBK<BR>20;<BR><BR>控制文件已创建<BR>SQL> alter database open;<BR>         <BR>数据库已更改。 <BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <BR>我们看到如果是正常数据库down机的,<BR>那么使用noresetlog创建控制文件后<BR>直接可以打开数据库<BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <BR>SQL> select count(*) from test;<BR><BR>COUNT(*)<BR>----------<BR> 24660<BR> <BR>用trace完成了数据库的完全恢复 <BR><BR>SQL> select * from v$tempfile;<BR><BR>未选定行<BR><BR>SQL> select name from v$tablespace;<BR><BR>NAME<BR>------------------------------<BR>SYSTEM<BR>UNDOTBS1<BR>INDX<BR>TOOLS<BR>USERS<BR>TEMP<BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR>注意我们可以看到由于重建了控制文件,<BR>临时表空间的临时文件没有了<BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR>###################################################<BR># [测试3] --使用控制文件备份来恢复<BR>###################################################<BR>~~~~~~~~~~~~~~~~<BR>还原备份控制文件<BR>~~~~~~~~~~~~~~~~<BR>C:\Documents and Settings\lifeng.fang>copy c:\temp\controlfile.bak<BR>C:\oracle\oradata\pdf\CONTROL01.CTL<BR>已复制   1 个文件。<BR><BR>C:\Documents and Settings\lifeng.fang>copy c:\temp\controlfile.bak<BR>C:\oracle\oradata\pdf\CONTROL02.CTL<BR>已复制   1 个文件。<BR><BR>C:\Documents and Settings\lifeng.fang>copy c:\temp\controlfile.bak<BR>C:\oracle\oradata\pdf\CONTROL03.CTL<BR>已复制   1 个文件。<BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR>备份控制文件不会存有关于联机日志文件<BR>和数据文件结束SCN,因此不会在恢复时使<BR>用联机日志文件,并因此将数据文件假定了<BR>一个无穷大的结束SCN,所以要休整他,必须<BR>resetlogs,但是我们可以在例子[测试5.1]中可以看到<BR>我们可以强制应用在线日志实现完全恢复<BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR><BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR>当数据库用normal或immediate关闭时,发<BR>出检查点处理,这将为每个数据文件在控制<BR>文件中设置相应的结束SCN,使其等于数据<BR>文件头中对应的开始SCN<BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR><BR>SQL> startup<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDpdf.ORA' <BR><BR>SQL> recover database;<BR>ORA-00283: ??????????<BR>ORA-01610: ?? BACKUP CONTROLFILE ??????????<BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR>数据文件头中原有检查点计数器决不会大于<BR>当前控制文件中的检查点计数器,所以必须在<BR>恢复时指定USINGBACKUP CONTROLFILE,<BR>这样就会基于备份控制文件的信息<BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR>    <BR>SQL> alter database open resetlogs;<BR>alter database open resetlogs<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-01152: ?? 1 ????????????<BR>ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\PDF\SYSTEM01.DBF'<BR><BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR>这时,没有进行恢复,检查到当前数据文件头<BR>的开始SCN和控制文件的结束SCN不一致需要<BR>进行恢复<BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR><BR><BR>这里无法恢复数据库<BR>而采用第1钟方法执行成功<BR><BR>###################################################<BR># [测试4] 我们现在模拟备份控制文件,同时备份部分数据文件先于备份<BR>#   控制文件的数据文件<BR>###################################################<BR>SQL> shutdown immediate<BR>数据库已经关闭。<BR>已经卸载数据库。<BR><BR>copy SYSTEM01.DBF 复件 SYSTEM01.DBF<BR>alter database backup controlfile to 'c:\temp\controlfile1.bak';<BR><BR>SQL> shutdown immediate<BR>数据库已经关闭。<BR>已经卸载数据库。<BR>C:\Documents and Settings\lifeng.fang>copy c:\temp\controlfile1.bak C:\oracle\or<BR>adata\pdf\CONTROL01.CTL<BR>已复制   1 个文件。<BR><BR>C:\Documents and Settings\lifeng.fang>copy c:\temp\controlfile1.bak C:\oracle\or<BR>adata\pdf\CONTROL02.CTL<BR>已复制   1 个文件。<BR><BR>C:\Documents and Settings\lifeng.fang>copy c:\temp\controlfile1.bak C:\oracle\or<BR>adata\pdf\CONTROL03.CTL<BR>已复制   1 个文件。<BR><BR>SQL> startup<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>数据库装载完毕。<BR>ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项<BR><BR>SQL> startup mount<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>数据库装载完毕。<BR>SQL> recover database using backup controlfile;<BR>ORA-00279: 更改 1069041 (在 02/25/2005 15:36:00 生成) 对于线程 1 是必需的<BR>ORA-00289: 建议: C:\ORACLE\ORA92\RDBMS\ARC00012.001<BR>ORA-00280: 更改 1069041 对于线程 1 是按序列 # 12 进行的<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR>auto<BR>ORA-00308: 无法打开存档日志 'C:\ORACLE\ORA92\RDBMS\ARC00012.001'<BR>ORA-27041: 无法打开文件<BR>OSD-04002: 无法打开文件<BR>O/S-Error: (OS 2) 系统找不到指定的文件。<BR><BR><BR>ORA-00308: 无法打开存档日志 'C:\ORACLE\ORA92\RDBMS\ARC00012.001'<BR>ORA-27041: 无法打开文件<BR>OSD-04002: 无法打开文件<BR>O/S-Error: (OS 2) 系统找不到指定的文件。<BR><BR><BR>SQL> alter database open;<BR>alter database open<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项<BR><BR><BR>SQL> alter database open resetlogs;<BR>alter database open resetlogs<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-01113: 文件 1 需要介质恢复<BR>ORA-01110: 数据文件 1: 'C:\ORACLE\ORADATA\PDF\SYSTEM01.DBF'<BR><BR><BR>SQL> recover database using backup controlfile until cancel;<BR>ORA-00279: 更改 1069041 (在 02/25/2005 15:36:00 生成) 对于线程 1 是必需的<BR>ORA-00289: 建议: C:\ORACLE\ORA92\RDBMS\ARC00012.001<BR>ORA-00280: 更改 1069041 对于线程 1 是按序列 # 12 进行的<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR>cancel<BR>ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误<BR>ORA-01152: 文件 2 没有从完备的旧备份中恢复<BR>ORA-01110: 数据文件 2: 'C:\ORACLE\ORADATA\PDF\UNDOTBS01.DBF'<BR><BR><BR>ORA-01112: 未启动介质恢复<BR><BR><BR>SQL> alter database open resetlogs;<BR>alter database open resetlogs<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-01152: 文件 2 没有从完备的旧备份中恢复<BR>ORA-01110: 数据文件 2: 'C:\ORACLE\ORADATA\PDF\UNDOTBS01.DBF'<BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR>虽然在备份控制文件前备份了SYSTEM文件,但是<BR>其他文件没有备份,而有超过控制文件检查点SCN<BR>的信息,不能恢复成功<BR>如果有只读表空间,使用备份控制文件恢复,<BR>要先offline 参见备份与恢复手册<BR><BR>对于使用备份控制文件进行恢复由于默认是所有<BR>数据文件联机的,而且resetlogs时需要写数据<BR>文件的,那么只读文件恢复时,由于只读文件不<BR>需要恢复,就要强制将他offline;<BR>所以在选取控制文件时也要注意,如果选取了当<BR>时正好是只读状态的控制文件时,必须将数据文<BR>件offline ,而使得在切换前为读写状态时的数<BR>据无法恢复,反之同理<BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR><BR>#######################################################<BR># [测试5]我们现在模拟控制文件损坏,将备份控制文件前,先备份所有数据文件<BR>#######################################################<BR><BR>copy SYSTEM01.DBF 复件 SYSTEM01.DBF<BR>copy UNDOTBS01.DBF 复件 UNDOTBS01.DBF<BR>copy TOOLS01.DBF 复件 TOOLS01.DBF<BR>copy USERS01.DBF 复件 USERS01.DBF<BR>copy INDX01.DBF  复件 INDX01.DBF<BR><BR>SQL>alter database backup controlfile to 'c:\temp\controlfile2.bak';<BR>                        <BR>数据库已更改。  <BR><BR>替换老的控制文件<BR><BR>SQL> insert into test select * from test;<BR><BR>已创建24660行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> select count(*) from test;<BR><BR>COUNT(*)<BR>----------<BR> 49320<BR>SQL> shutdown<BR>数据库已经关闭。<BR>已经卸载数据库。<BR>ORACLE 例程已经关闭。<BR><BR>copy c:\temp\controlfile2.bak C:\oracle\oradata\pdf\CONTROL01.CTL<BR>copy c:\temp\controlfile2.bak C:\oracle\oradata\pdf\CONTROL02.CTL<BR>copy c:\temp\controlfile2.bak C:\oracle\oradata\pdf\CONTROL03.CTL                   <BR><BR>rename SYSTEM01.DBF复件 SYSTEM01.DBFSYSTEM01.DBF-->>临时文件可以不要<BR>rename UNDOTBS01.DBF 复件 UNDOTBS01.DBF UNDOTBS01.DBF <BR>rename TOOLS01.DBF 复件 TOOLS01.DBF TOOLS01.DBF <BR>rename USERS01.DBF 复件 USERS01.DBF USERS01.DBF <BR>rename INDX01.DBF  复件 INDX01.DBF  INDX01.DBF<BR><BR>SQL> startup mount<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>数据库装载完毕。 <BR><BR>SQL> recover database using backup controlfile until cancel;<BR>ORA-00279: 更改 1069386 (在 02/25/2005 15:47:59 生成) 对于线程 1 是必需的<BR>ORA-00289: 建议: C:\ORACLE\ORA92\RDBMS\ARC00013.001<BR>ORA-00280: 更改 1069386 对于线程 1 是按序列 # 13 进行的<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR>auto -->>使用auto恢复也是成功<BR>ORA-00308: 无法打开存档日志 'C:\ORACLE\ORA92\RDBMS\ARC00013.001'<BR>ORA-27041: 无法打开文件<BR>OSD-04002: 无法打开文件<BR>O/S-Error: (OS 2) 系统找不到指定的文件。<BR><BR><BR>ORA-00308: 无法打开存档日志 'C:\ORACLE\ORA92\RDBMS\ARC00013.001'<BR>ORA-27041: 无法打开文件<BR>OSD-04002: 无法打开文件<BR>O/S-Error: (OS 2) 系统找不到指定的文件。<BR><BR><BR>SQL> recover database using backup controlfile until cancel; -->>这个cancel是表示每次应用一个日志时都提示一下,直到输入cancel后结束<BR>ORA-00279: 更改 1069386 (在 02/25/2005 15:47:59 生成) 对于线程 1 是必需的<BR>ORA-00289: 建议: C:\ORACLE\ORA92\RDBMS\ARC00013.001<BR>ORA-00280: 更改 1069386 对于线程 1 是按序列 # 13 进行的<BR><BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR>cancel通常好于change和time的恢复<BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR>cancel--输入cancel恢复成功 -->>cancel选项允许每次前滚一个日志文件,当需要停止恢复时,输入cancel<BR>           ,在这种方式下不会自动运用联机日志文件.<BR>介质恢复已取消。<BR>SQL> alter database open resetlogs;<BR><BR>数据库已更改。<BR>SQL> select CHECKPOINT_CHANGE# from v$database;<BR><BR>CHECKPOINT_CHANGE#<BR>------------------<BR>   1069388<BR>   <BR>SQL> select count(*) from test;<BR><BR>COUNT(*)<BR>----------<BR> 24660--丢失了数据<BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <BR>那我们使用备份控制文件恢复,是不是一定恢复不了在线日志中的数据吗?<BR>答案是错误的,其实也能完全恢复(当然我们用trace更好) <BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR><BR>#######################################################<BR># [测试5.1]我们现在模拟控制文件损坏,有控制文件备份,先于控制文件备份的所有数据文件备份<BR>#  使用在线日志进行完全恢复<BR>#######################################################<BR>SQL> startup<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>数据库装载完毕。<BR>数据库已经打开。<BR>SQL> create table arch (status varchar(2)) tablespace users;<BR><BR>表已创建。<BR><BR>SQL> alter system switch logfile;<BR><BR>系统已更改。<BR><BR>SQL> insert into arch select 'ok' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> insert into arch select * from arch;<BR><BR>已创建6166行。<BR><BR>SQL> /<BR><BR>已创建12332行。<BR><BR>SQL> /<BR><BR>已创建24664行。<BR><BR>SQL> /<BR><BR>已创建49328行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> alter system switch logfile;<BR><BR>系统已更改。<BR><BR>SQL> insert into arch select 'no' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;<BR><BR>  GROUP#SEQUENCE# ARC STATUS<BR>---------- ---------- --- ----------------<BR>   1    5 NOCURRENT<BR>   2    3 YES ACTIVE<BR>   3    4 YES ACTIVE<BR><BR>SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;<BR><BR>RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#<BR>------------------- -------------------<BR>    68658     69410<BR><BR>SQL> shutdown<BR>数据库已经关闭。<BR>已经卸载数据库。<BR>ORACLE 例程已经关闭。<BR><BR>还原备份控制文件,还原所有备份数据文件<BR>SQL> startup mount<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>数据库装载完毕。<BR>SQL> alter database open;<BR>alter database open<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-00314: 日志 1 (线程 1),预计序号与不匹配<BR>ORA-00312: 联机日志 1 线程 1: 'C:\ORACLE\ORADATA\TESTDB\REDO01.LOG'<BR><BR><BR>SQL> recover database using backup controlfile until cancel;<BR>ORA-00279: 更改 69257 (在 02/28/2005 11:08:18 生成) 对于线程 1 是必需的<BR>ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF<BR>ORA-00280: 更改 69257 对于线程 1 是按序列 # 3 进行的<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR>cancel<BR>介质恢复已取消。<BR>SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;<BR><BR>RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#<BR>------------------- -------------------<BR>    68658     69257<BR><BR>SQL> recover database using backup controlfile until cancel;<BR>ORA-00279: 更改 69257 (在 02/28/2005 11:08:18 生成) 对于线程 1 是必需的<BR>ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF<BR>ORA-00280: 更改 69257 对于线程 1 是按序列 # 3 进行的<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR><BR>ORA-00279: 更改 69362 (在 03/04/2005 11:21:25 生成) 对于线程 1 是必需的<BR>ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF<BR>ORA-00280: 更改 69362 对于线程 1 是按序列 # 4 进行的<BR>ORA-00278: 此恢复不再需要日志文件 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF'<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR><BR>ORA-00279: 更改 69408 (在 03/04/2005 11:21:26 生成) 对于线程 1 是必需的<BR>ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF<BR>ORA-00280: 更改 69408 对于线程 1 是按序列 # 5 进行的<BR>ORA-00278: 此恢复不再需要日志文件 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF'<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR><BR>ORA-00308: 无法打开存档日志 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'<BR>ORA-27041: 无法打开文件<BR>OSD-04002: 无法打开文件<BR>O/S-Error: (OS 2) 系统找不到指定的文件。<BR><BR><BR>SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;<BR><BR>RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#<BR>------------------- -------------------<BR>    68658     69408<BR>    <BR>~~~~~~~~~~~~~~    <BR>到此是不完全恢复<BR>那我们是不是可以<BR>应用在线日志呢,那<BR>我们先应用SEQUENCE=3和4<BR>的日志C:\oracle\oradata\testdb\REDO02.LOG<BR>C:\oracle\oradata\testdb\REDO03.LOG<BR>我们可以看到恢复时这个文件不需要<BR>~~~~~~~~~~~~~~~    <BR><BR>SQL> recover database using backup controlfile until cancel;<BR>ORA-00279: 更改 69408 (在 03/04/2005 11:21:26 生成) 对于线程 1 是必需的<BR>ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF<BR>ORA-00280: 更改 69408 对于线程 1 是按序列 # 5 进行的<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR>C:\oracle\oradata\testdb\REDO02.LOG<BR>ORA-00310: 存档日志包含序列 3;要求序列 5<BR>ORA-00334: 归档日志: 'C:\ORACLE\ORADATA\TESTDB\REDO02.LOG'<BR><BR><BR>SQL> recover database using backup controlfile until cancel;<BR>ORA-00279: 更改 69408 (在 03/04/2005 11:21:26 生成) 对于线程 1 是必需的<BR>ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF<BR>ORA-00280: 更改 69408 对于线程 1 是按序列 # 5 进行的<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR>C:\oracle\oradata\testdb\REDO03.LOG<BR>ORA-00310: 存档日志包含序列 4;要求序列 5<BR>ORA-00334: 归档日志: 'C:\ORACLE\ORADATA\TESTDB\REDO03.LOG'<BR><BR><BR>SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;<BR><BR>RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#<BR>------------------- -------------------<BR>    68658     69408<BR><BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR>我们看到非活动在线日志没有被应用<BR>我们应用SEQUENCE=5<BR>的日志C:\oracle\oradata\testdb\REDO01.LOG<BR>我们可以看到恢复时这个文件是需要的<BR>~~~~~~~~~~~~~~~  <BR>SQL> recover database using backup controlfile until cancel;<BR>ORA-00279: 更改 69408 (在 03/04/2005 11:21:26 生成) 对于线程 1 是必需的<BR>ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF<BR>ORA-00280: 更改 69408 对于线程 1 是按序列 # 5 进行的<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR>C:\oracle\oradata\testdb\REDO01.LOG --这步是关键<BR>已应用的日志。<BR>完成介质恢复。<BR>SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;<BR><BR>RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#<BR>------------------- -------------------<BR>    68658     69418 --在SEQUENCE=5中的SCN被应用了<BR><BR>SQL> alter database open resetlogs;<BR><BR>数据库已更改。<BR><BR>SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;<BR><BR>RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#<BR>------------------- -------------------<BR>    69418     69516<BR><BR>SQL> select count(*),status from arch group by status;<BR><BR>COUNT(*) ST<BR>---------- --<BR>  6166 no<BR> 98656 ok<BR>-->>完全恢复<BR>~~~~~~~~~~~~~~~~~~~~~~~~~~<BR>这里主要是由于应用了活动在线日志<BR>C:\oracle\oradata\testdb\REDO01.LOG的恢复<BR>~~~~~~~~~~~~~~~~~~~~~~~~~~<BR>#######################################################<BR># [测试6]那我们看看,有老的数据文件备份,备份控制文件后插<BR>#入的数据在shutdown abort后能不能恢复<BR>#######################################################<BR>SQL> startup<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>数据库装载完毕。<BR>数据库已经打开。<BR>SQL> create table arch (status varchar(2)) tablespace users;<BR><BR>表已创建。<BR><BR>SQL> alter system switch logfile;<BR><BR>系统已更改。<BR><BR>SQL> insert into arch select 'ok' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> insert into arch select * from arch;<BR><BR>已创建6166行。<BR><BR>SQL> /<BR><BR>已创建12332行。<BR><BR>SQL> /<BR><BR>已创建24664行。<BR><BR>SQL> /<BR><BR>已创建49328行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> alter system switch logfile;<BR><BR>系统已更改。<BR><BR>SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;<BR><BR>RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#<BR>------------------- -------------------<BR>    68658     69611<BR><BR>SQL><BR>SQL> insert into arch select 'no' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;<BR><BR>RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#<BR>------------------- -------------------<BR>    68658     69611<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;<BR><BR>RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#<BR>------------------- -------------------<BR>    68658     69611<BR><BR>SQL> shutdown abort<BR>ORACLE 例程已经关闭。<BR>SQL> exit<BR>从Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production<BR>With the Partitioning, OLAP and Oracle Data Mining options<BR>JServer Release 9.2.0.1.0 - Production中断开<BR><BR>C:\Documents and Settings\lifeng.fang>sqlplus "sys/sunsdl as sysdba"<BR><BR>SQL*Plus: Release 9.2.0.1.0 - Production on 星期三 3月 2 14:25:25 2005<BR><BR>Copyright (c) 1982, 2002, Oracle Corporation.All rights reserved.<BR><BR>已连接到空闲例程。<BR><BR>SQL> startup mount<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>数据库装载完毕。<BR>SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;<BR><BR>RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#<BR>------------------- -------------------<BR>    68658     69360<BR><BR>SQL> recover database using backup controlfile;<BR>ORA-00279: 更改 69456 (在 03/02/2005 10:26:30 生成) 对于线程 1 是必需的<BR>ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF<BR>ORA-00280: 更改 69456 对于线程 1 是按序列 # 3 进行的<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR><BR>ORA-00279: 更改 69564 (在 03/02/2005 14:23:19 生成) 对于线程 1 是必需的<BR>ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF<BR>ORA-00280: 更改 69564 对于线程 1 是按序列 # 4 进行的<BR>ORA-00278: 此恢复不再需要日志文件 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR><BR>ORA-00279: 更改 69610 (在 03/02/2005 14:23:21 生成) 对于线程 1 是必需的<BR>ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF<BR>ORA-00280: 更改 69610 对于线程 1 是按序列 # 5 进行的<BR>ORA-00278: 此恢复不再需要日志文件 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR><BR>ORA-00308: 无法打开存档日志 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'<BR>ORA-27041: 无法打开文件<BR>OSD-04002: 无法打开文件<BR>O/S-Error: (OS 2) 系统找不到指定的文件。<BR><BR><BR>SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;<BR><BR>RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#<BR>------------------- -------------------<BR>    68658     69610<BR><BR>SQL> recover database using backup controlfile until change 69620;--我们看到CONTROLFILE_CHANGE#为69610,那我随便加大这个值69620试试看能不能恢复到69610以后<BR>ORA-00279: 更改 69610 (在 03/02/2005 14:23:21 生成) 对于线程 1 是必需的<BR>ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF<BR>ORA-00280: 更改 69610 对于线程 1 是按序列 # 5 进行的<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR><BR>ORA-00308: 无法打开存档日志 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'<BR>ORA-27041: 无法打开文件<BR>OSD-04002: 无法打开文件<BR>O/S-Error: (OS 2) 系统找不到指定的文件。<BR><BR><BR>SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;<BR><BR>RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#<BR>------------------- -------------------<BR>    68658     69610<BR>    <BR>SQL> recover database using backup controlfile until change 69620;<BR>ORA-00279: 更改 69610 (在 03/02/2005 14:23:21 生成) 对于线程 1 是必需的<BR>ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF<BR>ORA-00280: 更改 69610 对于线程 1 是按序列 # 5 进行的<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR><BR>ORA-00308: 无法打开存档日志 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'<BR>ORA-27041: 无法打开文件<BR>OSD-04002: 无法打开文件<BR>O/S-Error: (OS 2) 系统找不到指定的文件。<BR><BR><BR>SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;<BR><BR>RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#<BR>------------------- -------------------<BR>    68658     69610<BR><BR>~~~~~~~~~~~~~~<BR>这里如果在线日志没有<BR>损坏,那么可以应用在线<BR>日志完全恢复<BR>~~~~~~~~~~~~~~<BR><BR>SQL> alter database open resetlogs;<BR><BR>数据库已更改。<BR><BR>SQL> select count(*),status from arch group by status;<BR><BR>COUNT(*) ST<BR>---------- --<BR> 98656 ok-->>不能恢复status = no ,这部分数据在在线日志中的,但是until cancel+ backup controlfile不前滚在线日志文件<BR><BR>~~~~~~~~~~~~~~~~~~~<BR>经过测试也可以用5.1的方法<BR>应用在线日志进行完全恢复<BR>~~~~~~~~~~~~~~~~~~~<BR>SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;<BR><BR>RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#-->>奇怪这里值变成我要until change的值了<BR>------------------- -------------------<BR>    69610     69720<BR><BR>SQL> select count(*),status from arch group by status;<BR><BR>COUNT(*) ST<BR>---------- --<BR> 98656 ok<BR></B></TD></TR></TBODY></TABLE>
<P></P>

pub!1c 2006-2-20 09:24

<P><BR><BR><STRONG>#######################################################<BR># [测试7]那我们看看,有老的数据文件备份,备份控制文件后插<BR>#入的数据在正常shutdown 后能不能恢复<BR>#######################################################      <BR><BR>测试结果同上.<BR>通过create controlfile方法才能完全恢复<BR>也可以参考[测试5.1]<BR><BR>      <BR><BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR>我们注意到,在这里仍然可以用resetlogs<BR>前的trace来进行控制文件恢复,因为结构<BR>没有变动. <BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR><BR>#######################################################<BR># [测试8]那我们看看,有老的数据文件备份,插<BR>#入的数据在正常shutdown 后用create controlfile noresetlogs<BR>#方法来恢复控制文件,能不能恢复<BR>#######################################################   <BR>SQL> STARTUP<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>数据库装载完毕。<BR>数据库已经打开。<BR>SQL> create table arch (status varchar(2)) tablespace users;<BR><BR>表已创建。<BR><BR>SQL> alter system switch logfile;<BR><BR>系统已更改。<BR><BR>SQL> insert into arch select 'ok' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> insert into arch select * from arch;<BR><BR>已创建6166行。<BR><BR>SQL> /<BR><BR>已创建12332行。<BR><BR>SQL> /<BR><BR>已创建24664行。<BR><BR>SQL> /<BR><BR>已创建49328行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> alter system switch logfile;<BR><BR>系统已更改。<BR><BR>SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;<BR><BR>RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#<BR>------------------- -------------------<BR>    68658     69607<BR><BR>SQL> insert into arch select 'no' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> shutdown<BR>数据库已经关闭。<BR>已经卸载数据库。<BR>ORACLE 例程已经关闭。<BR>~~~~~~~~~~~~~~~~~~~~~~~~<BR>删除控制文件<BR>删除USERS01.DBF<BR>~~~~~~~~~~~~~~~~~~~~~~~~<BR>SQL> STARTUP NOMOUNT<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR><BR>SQL> CREATE CONTROLFILE REUSE DATABASE "TESTDB" NORESETLOGSARCHIVELOG<BR><BR>2--SET STANDBY TO MAXIMIZE PERFORMANCE<BR>3  MAXLOGFILES 5<BR>4  MAXLOGMEMBERS 3<BR>5  MAXDATAFILES 100<BR>6  MAXINSTANCES 1<BR>7  MAXLOGHISTORY 226<BR>8LOGFILE<BR>9  GROUP 1 'C:\ORACLE\ORADATA\TESTDB\REDO01.LOG'SIZE 100M,<BR><BR>10  GROUP 2 'C:\ORACLE\ORADATA\TESTDB\REDO02.LOG'SIZE 100M,<BR><BR>11  GROUP 3 'C:\ORACLE\ORADATA\TESTDB\REDO03.LOG'SIZE 100M<BR><BR>12-- STANDBY LOGFILE<BR>13DATAFILE<BR>14  'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF',<BR><BR>15  'C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF',<BR><BR>16  'C:\ORACLE\ORADATA\TESTDB\INDX01.DBF',<BR><BR>17  'C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF',<BR><BR>18  'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF'<BR><BR>19CHARACTER SET ZHS16GBK<BR>20;<BR><BR>控制文件已创建<BR><BR>SQL> ALTER DATABASE OPEN;<BR>ALTER DATABASE OPEN<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-01113: ?? 5 ??????<BR>ORA-01110: ???? 5: 'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF'<BR><BR><BR>SQL> RECOVER DATABASE;<BR>完成介质恢复。<BR>SQL> ALTER DATABASEOPEN;<BR><BR>数据库已更改。<BR><BR>SQL> select count(*),status from arch group by status;<BR><BR>COUNT(*) ST<BR>---------- --<BR>  6166 no<BR> 98656 ok<BR>完全恢复了<BR><BR><BR><BR><BR><BR><BR><BR> <BR>#########################################################<BR># [1.2] 有RMAN的autobackup,catalog异常       <BR>#########################################################   <BR><BR>SQL> startup nomount<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>SQL> exit<BR><BR>C:\Documents and Settings\lifeng.fang>rman nocatalog target "sys/sunsdl"<BR><BR>恢复管理器: 版本9.2.0.1.0 - Production<BR><BR>Copyright (c) 1995, 2002, Oracle Corporation.All rights reserved.<BR><BR>连接到目标数据库: pdf(未安装)<BR>正在使用目标数据库控制文件替代恢复目录<BR><BR>RMAN> restore controlfile from autobackup;<BR><BR>启动 restore 于 25-2月 -05<BR><BR>分配的通道: ORA_DISK_1<BR>通道 ORA_DISK_1: sid=13 devtype=DISK<BR>RMAN-00571: ===========================================================<BR>RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============<BR>RMAN-00571: ===========================================================<BR>RMAN-03002: failure of restore command at 02/25/2005 17:21:52<BR>RMAN-06495: must explicitly specify DBID with SET DBID command<BR><BR>RMAN> exit<BR><BR>所以要使用RMAN,那么必须预先知道DBID<BR><BR>如果我们知道(DBID=3171861129)<BR>RMAN> set dbid=3171861129-->>注意如果startup nomount在RMAN上执行就不需要指定DBID<BR><BR>正在执行命令: SET DBID<BR><BR>RMAN> restore controlfile from autobackup;<BR><BR>启动 restore 于 25-2月 -05<BR><BR>分配的通道: ORA_DISK_1<BR>通道 ORA_DISK_1: sid=13 devtype=DISK<BR>通道 ORA_DISK_1: 寻找以下日期的自动备份: 20050225<BR>通道 ORA_DISK_1: 寻找以下日期的自动备份: 20050224<BR>通道 ORA_DISK_1: 寻找以下日期的自动备份: 20050223<BR>通道 ORA_DISK_1: 寻找以下日期的自动备份: 20050222<BR>通道 ORA_DISK_1: 寻找以下日期的自动备份: 20050221<BR>通道 ORA_DISK_1: 寻找以下日期的自动备份: 20050220<BR>通道 ORA_DISK_1: 寻找以下日期的自动备份: 20050219<BR>通道 ORA_DISK_1: 没有找到 7 天之内的自动备份<BR>RMAN-00571: ===========================================================<BR>RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============<BR>RMAN-00571: ===========================================================<BR>RMAN-03002: failure of restore command at 02/25/2005 17:26:46<BR>RMAN-06172: no autobackup found or specified handle is not a valid copy or piece<BR>由于catalog坏了,所以备份信息没有了,但是自动控制文件备份提供了特殊的格式,可以不读取catalog或者控制文件信息<BR>来恢复控制文件<BR>我们看到,现在RMAN不能自动找到自动备份的路径.<BR><BR>RMAN> SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/temp/%F';-->>通过指定的路径就可以恢复了<BR><BR>正在执行命令: SET CONTROLFILE AUTOBACKUP FORMAT<BR><BR>RMAN> restore controlfile from autobackup ;<BR><BR>启动 restore 于 25-2月 -05<BR><BR>使用通道 ORA_DISK_1<BR>通道 ORA_DISK_1: 寻找以下日期的自动备份: 20050225<BR>通道 ORA_DISK_1: 已找到的自动备份: /temp/c-3171861129-20050225-00<BR>通道 ORA_DISK_1: 从自动备份复原控制文件已完成<BR>正在复制控制文件<BR>输出文件名=C:\ORACLE\ORADATA\PDF\CONTROL01.CTL<BR>输出文件名=C:\ORACLE\ORADATA\PDF\CONTROL02.CTL<BR>输出文件名=C:\ORACLE\ORADATA\PDF\CONTROL03.CTL<BR>完成 restore 于 25-2月 -05<BR><BR><BR><BR>==>>用冷备来恢复数据库<BR>用冷备的控制文件和数据文件<BR>SQL> shutdown<BR>ORA-01109: ??????<BR><BR><BR>已经卸载数据库。<BR>ORACLE 例程已经关闭。<BR>SQL> startup<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'<BR><BR><BR>SQL> select count(*) from tab;<BR>select count(*) from tab<BR>       *<BR>ERROR 位于第 1 行:<BR>ORA-01219: ??????: ???????/?????<BR><BR><BR>SQL> alter database open;<BR>alter database open<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-00314: ?? 1 (?? 1)?????????<BR>ORA-00312: ???? 1 ?? 1: 'C:\ORACLE\ORADATA\TESTDB\REDO01.LOG'-->>这里REDO是无用的,但是因为没有对REDO进行备份,存在他就打不开<BR><BR><BR>SQL> alter database open resetlogs;<BR>alter database open resetlogs<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-01139: RESETLOGS ???????????????<BR><BR><BR>SQL> alter database open noresetlogs;<BR>alter database open noresetlogs<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-01139: RESETLOGS ???????????????<BR><BR><BR>SQL> alter database open;<BR>alter database open<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-00314: ?? 1 (?? 1)?????????<BR>ORA-00312: ???? 1 ?? 1: 'C:\ORACLE\ORADATA\TESTDB\REDO01.LOG'<BR><BR><BR>SQL>alter database clear logfile group 1;<BR><BR>数据库已更改。<BR><BR>SQL>alter database clear logfile group 2;<BR><BR>数据库已更改。<BR><BR>SQL>alter database clear logfile group 3;<BR>alter database clear logfile group 3<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-00350: ?? 3 (?? 1) ?????<BR>ORA-00312: ???? 3 ?? 1: 'C:\ORACLE\ORADATA\TESTDB\REDO03.LOG'<BR><BR><BR>SQL> alter database open;<BR>alter database open<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-00338: ?? 3 (?? 1) ???????<BR>ORA-00312: ???? 3 ?? 1: 'C:\ORACLE\ORADATA\TESTDB\REDO03.LOG'<BR><BR><BR>SQL>alter database clear UNARCHIVED logfile group 3;<BR>alter database clear UNARCHIVED logfile group 3<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-00338: ?? 3 (?? 1) ???????<BR>ORA-00312: ???? 3 ?? 1: 'C:\ORACLE\ORADATA\TESTDB\REDO03.LOG'<BR><BR>方法1<BR>SQL> recover database using backup controlfile;<BR>ORA-00279: ?? 48540 (? 02/28/2005 10:06:38 ??) ???? 1 ????<BR>ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF<BR>ORA-00280: ?? 48540 ???? 1 ???? # 3 ???<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR>auto<BR>ORA-00279: ?? 68658 (? 02/28/2005 10:22:51 ??) ???? 1 ????<BR>ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF<BR>ORA-00280: ?? 68658 ???? 1 ???? # 4 ???<BR>ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF'<BR><BR><BR>ORA-00308: ???????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF'<BR>ORA-27041: ??????<BR>OSD-04002: N^7(4r?*ND<~<BR>O/S-Error: (OS 2) O5M3UR2;5=V86(5DND<~!#<BR><BR><BR>SQL> alter database open resetlogs;<BR>alter database open resetlogs<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-01113: ?? 1 ??????<BR>ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'<BR><BR><BR>SQL> recover database using backup controlfile using cancel;<BR>ORA-01906: ?? BACKUP ???<BR><BR><BR>SQL> recover database using backup controlfile until cancel;<BR>ORA-00279: ?? 68658 (? 02/28/2005 10:22:51 ??) ???? 1 ????<BR>ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF<BR>ORA-00280: ?? 68658 ???? 1 ???? # 4 ???<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR>cancel<BR>介质恢复已取消。<BR>SQL><BR>SQL> alter database open resetlogs;<BR><BR>数据库已更改。<BR>####################################################<BR># [方法2] --使用带resetlogs的创建控制文件trace<BR>####################################################<BR>SQL> startup nomount<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>SQL> CREATE CONTROLFILE REUSE DATABASE "TESTDB" RESETLOGSARCHIVELOG--这里我们用了resetlogs<BR>2--SET STANDBY TO MAXIMIZE PERFORMANCE<BR>3  MAXLOGFILES 5<BR>4  MAXLOGMEMBERS 3<BR>5  MAXDATAFILES 100<BR>6  MAXINSTANCES 1<BR>7  MAXLOGHISTORY 226<BR>8LOGFILE<BR>9  GROUP 1 'C:\ORACLE\ORADATA\TESTDB\REDO01.LOG'SIZE 100M,<BR>10  GROUP 2 'C:\ORACLE\ORADATA\TESTDB\REDO02.LOG'SIZE 100M,<BR>11  GROUP 3 'C:\ORACLE\ORADATA\TESTDB\REDO03.LOG'SIZE 100M<BR>12-- STANDBY LOGFILE<BR>13DATAFILE<BR>14  'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF',<BR>15  'C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF',<BR>16  'C:\ORACLE\ORADATA\TESTDB\INDX01.DBF',<BR>17  'C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF',<BR>18  'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF'<BR>19CHARACTER SET ZHS16GBK<BR>20;<BR><BR>控制文件已创建<BR><BR>SQL> alter database open resetlogs;<BR><BR>数据库已更改。<BR>~~~~~~~~~~~~~~~<BR>这将丢失部分数据<BR>~~~~~~~~~~~~~~~<BR><BR>#############################################<BR># [方法3] 使用noresetlog的trace来恢复<BR>#############################################<BR>SQL> shutdown abort<BR>ORACLE 例程已经关闭。<BR>SQL> startup nomount<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>SQL><BR><BR><BR>SQL> CREATE CONTROLFILE REUSE DATABASE "PDF" NORESETLOGSARCHIVELOG<BR>2--SET STANDBY TO MAXIMIZE PERFORMANCE<BR>3  MAXLOGFILES 5<BR>4  MAXLOGMEMBERS 3<BR>5  MAXDATAFILES 100<BR>6  MAXINSTANCES 1<BR>7  MAXLOGHISTORY 226<BR>8LOGFILE<BR>9  GROUP 1 'C:\ORACLE\ORADATA\PDF\REDO01.LOG'SIZE 100M,<BR>10  GROUP 2 'C:\ORACLE\ORADATA\PDF\REDO02.LOG'SIZE 100M,<BR>11  GROUP 3 'C:\ORACLE\ORADATA\PDF\REDO03.LOG'SIZE 100M<BR>12-- STANDBY LOGFILE<BR>13DATAFILE<BR>14  'C:\ORACLE\ORADATA\PDF\SYSTEM01.DBF',<BR>15  'C:\ORACLE\ORADATA\PDF\UNDOTBS01.DBF',<BR>16  'C:\ORACLE\ORADATA\PDF\INDX01.DBF',<BR>17  'C:\ORACLE\ORADATA\PDF\TOOLS01.DBF',<BR>18  'C:\ORACLE\ORADATA\PDF\USERS01.DBF'<BR>19CHARACTER SET ZHS16GBK<BR>20;<BR><BR>控制文件已创建<BR>SQL> alter database open;<BR>alter database open<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-01113: ?? 1 ??????<BR>ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\PDF\SYSTEM01.DBF'<BR><BR>SQL> startup<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>数据库装载完毕。<BR>ORA-01113: 文件 1 需要介质恢复<BR>ORA-01110: 数据文件 1: 'C:\ORACLE\ORADATA\PDF\SYSTEM01.DBF'<BR><BR><BR>SQL> recover database ;--因为是shutdown abort关闭,所以需要恢复<BR>完成介质恢复。<BR>SQL> alter database open;<BR><BR>数据库已更改。<BR>#############################################<BR># [方法4] 那我们对数据库的数据文件控制文件和<BR>#   在线日志文件都做备份会需要恢复吗?<BR>#############################################<BR><BR>SQL> startup<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>数据库装载完毕。<BR>数据库已经打开。<BR>SQL> shutdown<BR>数据库已经关闭。<BR>已经卸载数据库。<BR>ORACLE 例程已经关闭。<BR><BR>将控制文件,数据文件,在线日志文件都进行备份<BR>SQL> startup<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>数据库装载完毕。<BR>数据库已经打开。<BR>SQL> select count(*) from test;<BR><BR>COUNT(*)<BR>----------<BR> 12330<BR><BR>SQL> create table arch (status varchar(2));<BR><BR>表已创建。<BR><BR>SQL> alter system switch logfile;<BR><BR>系统已更改。<BR><BR>SQL> insert into arch select 'ok' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> shutdown<BR>数据库已经关闭。<BR>已经卸载数据库。<BR>ORACLE 例程已经关闭。<BR><BR>将控制文件,数据文件,在线日志文件都进行还原<BR>SQL> startup<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>数据库装载完毕。<BR>数据库已经打开。<BR>SQL> select count(*) from test;<BR><BR>COUNT(*)<BR>----------<BR> 12330<BR><BR>SQL> select count(*) from arch;<BR>select count(*) from arch<BR>       *<BR>ERROR 位于第 1 行:<BR>ORA-00942: 表或视图不存在<BR>SQL> archive log list<BR>数据库日志模式    存档模式<BR>自动存档     启用<BR>存档终点    C:\oracle\oradata\testdb\archive<BR>最早的概要日志序列 1<BR>下一个存档日志序列 3<BR>当前日志序列   3<BR><BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR>数据库冷备份如果包括所有数据<BR>文件控制文件和在线日志,那么<BR>数据库可以直接打开,如果没有在<BR>线日志,那么需要create controlfile<BR>... resetlogs;<BR>或者recover database until cancel;<BR>alter database open resetlogs;<BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR><BR>#####################################################<BR>#但是由于在线日志也被覆盖了,前面的归档3和在序列4已<BR>#经没有应用,那么我们序列4虽然被强制覆盖了,那么3其实<BR>#是被归档了,那么我们建的arch表是不是可以恢复出来呢?<BR>#这里我们看看能不能备份(做完冷备份后的控制文件)控制<BR>#文件来进行恢复<BR>#[测试5] 我们模拟在线日志损坏,使用备份控制文件,有数据文件的备份的恢复<BR>####################################################<BR><BR>SQL>create table arch (status varchar(2));<BR><BR>表已创建。<BR><BR>SQL>alter system switch logfile;<BR><BR>系统已更改。<BR><BR>SQL>insert into arch select 'ok' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR><BR>alter database backup controlfile to 'C:\oracle\oradata\testdb\bak2\controlfile.ctl';<BR>SQL> shutdown<BR>数据库已经关闭。<BR>已经卸载数据库。<BR>ORACLE 例程已经关闭。<BR><BR>拷贝原来的冷备份中的数据文件和在线日志(其实在线日志没有用啦),不拷贝原来冷备份的控制文件<BR><BR>SQL> startup mount<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>数据库装载完毕。<BR>SQL> recover database using backup controlfile;<BR>ORA-00279: 更改 69257 (在 02/28/2005 11:08:18 生成) 对于线程 1 是必需的<BR>ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF<BR>ORA-00280: 更改 69257 对于线程 1 是按序列 # 3 进行的<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR>auto<BR>ORA-00279: 更改 69776 (在 02/28/2005 11:23:24 生成) 对于线程 1 是必需的<BR>ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF<BR>ORA-00280: 更改 69776 对于线程 1 是按序列 # 4 进行的<BR>ORA-00278: 此恢复不再需要日志文件 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF<BR><BR><BR>ORA-00308: 无法打开存档日志 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF'<BR>ORA-27041: 无法打开文件<BR>OSD-04002: 无法打开文件<BR>O/S-Error: (OS 2) 系统找不到指定的文件。<BR><BR><BR>SQL> alter database open;<BR>alter database open<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项<BR><BR><BR>SQL> alter database open resetlogs;<BR>alter database open resetlogs<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-01113: 文件 1 需要介质恢复<BR>ORA-01110: 数据文件 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'<BR><BR><BR>SQL> recover database using backup controlfile until cancel;<BR>ORA-00279: 更改 69776 (在 02/28/2005 11:23:24 生成) 对于线程 1 是必需的<BR>ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF<BR>ORA-00280: 更改 69776 对于线程 1 是按序列 # 4 进行的<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR>cancel<BR>介质恢复已取消。<BR>SQL> alter database open resetlogs;<BR><BR>数据库已更改。<BR><BR>SQL> select count(*) from arch;<BR><BR>COUNT(*)<BR>----------<BR>   0<BR><BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~成功了,结果是有表arch,但没有数据,也就是没有应用在线日志,其实这里如果不还原在线日志(反而来搅乱),<BR>我们是可以recover database 进行完全恢复的,因为控制文件其实也是当前的,如果使用后面备份的控制文件,<BR>因为该控制文件已经在建arch表之后,也能进行恢复<BR><BR>上面的方法也是在在线日志被破坏后,有原来的冷备份(或热备份时),使用当前的控制文件(其实已经不是当前的了,<BR>我们在后面可以看到使用了usingbackup controlfile)可以还原到最后的归档日志,只是丢失在线日志的数据.<BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR><BR><BR><BR><BR><BR><BR><BR>################################<BR>[1.3] 有RMAN的备份,catalog正常 <BR>################################                      <BR>  --需要建立一个catalog库 <BR>  <BR>  <BR>  <BR>  <BR>################################  <BR>[1.4] 控制文件损坏,有trace,非活动在<BR>  线日志损坏<BR>################################<BR><BR>SQL> archive log list<BR>数据库日志模式    存档模式<BR>自动存档     启用<BR>存档终点    C:\oracle\oradata\testdb\archive<BR>最早的概要日志序列 0<BR>下一个存档日志序列 1<BR>当前日志序列   1<BR>SQL> select count(*) from test;<BR><BR>COUNT(*)<BR>----------<BR> 12330<BR><BR>SQL> create table arch (status varchar(2));<BR><BR>表已创建。<BR><BR>SQL> alter system switch logfile;<BR><BR>系统已更改。<BR><BR>SQL> insert into arch select 'ok' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR>SQL> archive log list<BR>数据库日志模式    存档模式<BR>自动存档     启用<BR>存档终点    C:\oracle\oradata\testdb\archive<BR>最早的概要日志序列 1<BR>下一个存档日志序列 2<BR>当前日志序列   2<BR>SQL><BR>  SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;<BR><BR>  GROUP#SEQUENCE# ARC STATUS<BR>---------- ---------- --- ----------------<BR>   1    2 NOCURRENT    <BR>   2    0 YES UNUSED<BR>   3    1 YES INACTIVE    --非在线日志<BR>GROUP#    MEMBER<BR>----------  ----------------------------------------<BR>3        C:\ORACLE\ORADATA\TESTDB\REDO03.LOG   <BR>用ultraedit破坏日志3   <BR><BR>SQL> insert into arch select 'ok' from dba_objects;<BR><BR>已创建6166行。             -->>非在线日志破坏了,数据库仍然能执行<BR><BR>SQL> alter system switch logfile;<BR>系统已更改。<BR>   <BR>SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;<BR><BR>  GROUP#SEQUENCE# ARC STATUS<BR>---------- ---------- --- ----------------<BR>   1    2 YES ACTIVE<BR>   2    3 NOCURRENT<BR>   3    1 YES INACTIVE<BR>SQL> alter system switch logfile;-->>当切换到日志组3时报错<BR>alter system switch logfile<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-03113: 通信通道的文件结束<BR>  <BR>###########################<BR># [方法1] 使用clear group<BR>###########################<BR>SQL> startup mount<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>数据库装载完毕。<BR>SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;<BR><BR>  GROUP#SEQUENCE# ARC STATUS<BR>---------- ---------- --- ----------------<BR>   1    2 YES ACTIVE<BR>   2    3 NOINVALIDATED<BR>   3    0 YES UNUSED<BR><BR>SQL> alter database clear logfile group 3;<BR>alter database clear logfile group 3<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-00344: 无法重新创建联机日志 'C:\ORACLE\ORADATA\TESTDB\REDO03.LOG'<BR>ORA-27041: 无法打开文件<BR>OSD-04002: 无法打开文件<BR>O/S-Error: (OS 32) 进程无法访问文件,因为另一个程序正在使用此文件。<BR><BR><BR>SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;<BR><BR>  GROUP#SEQUENCE# ARC STATUS<BR>---------- ---------- --- ----------------<BR>   1    2 YES ACTIVE<BR>   2    3 NOINVALIDATED<BR>   3    0 YES CLEARING --上面的语句已经执行了clear功能<BR>   <BR>SQL> alter database open;<BR><BR>数据库已更改。    <BR><BR>SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;<BR><BR>  GROUP#SEQUENCE# ARC STATUS<BR>---------- ---------- --- ----------------<BR>   1    4 NOCURRENT<BR>   2    3 YES INACTIVE<BR>   3    0 YES CLEARING  --直接跳过损坏的日志组<BR>   <BR>   <BR>SQL> select count(*) from arch;<BR><BR>COUNT(*)<BR>----------<BR>  6166  -->>数据没有丢失<BR>  <BR>###########################<BR># [方法2] 使用trace resetlogs<BR>###########################<BR>SQL> create table arch (status varchar(2));<BR><BR>表已创建。<BR><BR>SQL> alter system switch logfile;<BR><BR>系统已更改。<BR><BR>SQL> insert into arch select 'ok' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL>commit;<BR><BR>提交完成。<BR><BR>SQL> archive log list<BR>数据库日志模式    存档模式<BR>自动存档     启用<BR>存档终点    C:\oracle\oradata\testdb\archive<BR>最早的概要日志序列 1<BR>下一个存档日志序列 2<BR>当前日志序列   2<BR>SQL> insert into arch select 'ok' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> alter system switch logfile;<BR><BR>系统已更改。<BR><BR>SQL> insert into arch select 'no' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;<BR><BR>  GROUP#SEQUENCE# ARC STATUS<BR>---------- ---------- --- ----------------<BR>   1    2 YES ACTIVE<BR>   2    1 YES INACTIVE<BR>   3    3 NOCURRENT<BR><BR>SQL> archive log list<BR>数据库日志模式    存档模式<BR>自动存档     启用<BR>存档终点    C:\oracle\oradata\testdb\archive<BR>最早的概要日志序列 1<BR>下一个存档日志序列 3<BR>当前日志序列   3<BR>SQL><BR>SQL>shutdown <BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR>这时因为是正常shutdown,arch表状态等于<BR>no的数据已经写到数据文件中了<BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR>模拟日志2错误<BR><BR>SQL> startup nomount<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGSAR<BR>2--SET STANDBY TO MAXIMIZE PERFORMANCE<BR>3  MAXLOGFILES 5<BR>4  MAXLOGMEMBERS 3<BR>5  MAXDATAFILES 100<BR>6  MAXINSTANCES 1<BR>7  MAXLOGHISTORY 226<BR>8LOGFILE<BR>9  GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG'SIZE 10<BR>10  GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'SIZE 10<BR>11  GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG'SIZE 10<BR>12-- STANDBY LOGFILE<BR>13DATAFILE<BR>14  'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',<BR>15  'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',<BR>16  'C:\ORACLE\ORADATA\testdb\INDX01.DBF',<BR>17  'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',<BR>18  'C:\ORACLE\ORADATA\testdb\USERS01.DBF'<BR>19CHARACTER SET ZHS16GBK<BR>20;<BR><BR>控制文件已创建<BR><BR>SQL> alter database open resetlogs;<BR><BR>数据库已更改。<BR><BR>SQL> select count(*),status from arch group by status;<BR><BR>COUNT(*) ST<BR>---------- --<BR>  6166 no    -->>我们发现这里在线日志中的数据没有丢失<BR> 12332 ok                  <BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <BR>在这里用resetlogs和noresetlogs创建控制文件都不会丢失数据了,<BR>因为正常shutdown数据已经写到数据文件中了<BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR><BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  <BR>那么我们假想使用了老的数据备份,那么在前滚的时候会用到这部分数据吗?<BR>我们在模拟日志2出错后,复制数据文件备份.<BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR><BR>###############################################<BR># [测试3] 数据文件损坏,控制文件损坏,有trace ,<BR>#   使用resetlogs,非在线日志损坏<BR>###############################################<BR><BR>SQL> create table arch (status varchar(2));--归档1<BR><BR>表已创建。<BR><BR>SQL> alter system switch logfile; <BR><BR>系统已更改。<BR><BR>SQL> insert into arch select 'ok' from dba_objects; --在归档2<BR><BR>已创建6166行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> insert into arch select 'ok' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> alter system switch logfile;<BR><BR>系统已更改。<BR><BR>SQL> insert into arch select 'no' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;<BR><BR>  GROUP#SEQUENCE# ARC STATUS<BR>---------- ---------- --- ----------------<BR>   1    2 YES ACTIVE<BR>   2    1 YES INACTIVE<BR>   3    3 NOCURRENT<BR><BR>SQL><BR>SQL><BR>SQL> shutdown<BR>数据库已经关闭。<BR>已经卸载数据库。<BR>ORACLE 例程已经关闭。<BR><BR>这里模拟日志文件组2错误,控制文件损坏,数据文件损坏<BR>SQL><BR>SQL> startup mount<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'<BR><BR><BR>SQL> shutdown<BR>ORA-01109: ??????<BR><BR><BR>已经卸载数据库。<BR>ORACLE 例程已经关闭。<BR><BR>还原数据文件<BR>SQL> startup nomount<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>SQL>CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGSARCHIVELOG<BR>2 --SET STANDBY TO MAXIMIZE PERFORMANCE<BR>3   MAXLOGFILES 5<BR>4   MAXLOGMEMBERS 3<BR>5   MAXDATAFILES 100<BR>6   MAXINSTANCES 1<BR>7   MAXLOGHISTORY 226<BR>8 LOGFILE<BR>9 GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG'SIZE 100M,<BR>10 GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'SIZE 100M,<BR>11 GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG'SIZE 100M<BR>12 -- STANDBY LOGFILE<BR>13 DATAFILE<BR>14 'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',<BR>15 'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',<BR>16 'C:\ORACLE\ORADATA\testdb\INDX01.DBF',<BR>17 'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',<BR>18 'C:\ORACLE\ORADATA\testdb\USERS01.DBF'<BR>19 CHARACTER SET ZHS16GBK<BR>20 ;<BR><BR>控制文件已创建<BR><BR>SQL> alter database mount<BR>2;<BR>alter database mount<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-01100: ??????<BR><BR><BR>SQL> shutdown<BR>ORA-01109: ??????<BR><BR><BR>已经卸载数据库。<BR>ORACLE 例程已经关闭。<BR>SQL> startup mount<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>数据库装载完毕。<BR>SQL> recover database using backup controlfile using cancel;<BR>ORA-01906: 需要 BACKUP 关键字<BR><BR><BR>SQL> recover database using backup controlfile until cancel;<BR>ORA-00279: 更改 69257 (在 02/28/2005 11:08:18 生成) 对于线程 1 是必需的<BR>ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF<BR>ORA-00280: 更改 69257 对于线程 1 是按序列 # 3 进行的<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR>cancel<BR>介质恢复已取消。<BR>SQL> alter database open resetlogs;<BR><BR>数据库已更改。<BR><BR>SQL>select count(*),status from arch group by status;<BR>select count(*),status from arch group by status<BR>         *<BR>ERROR 位于第 1 行:<BR>ORA-00942: 表或视图不存在<BR><BR><BR>SQL> select count(*) from arch; <BR>select count(*) from arch<BR>       *<BR>ERROR 位于第 1 行:<BR>ORA-00942: 表或视图不存在<BR><BR><BR>SQL> select count(*) from test;<BR><BR>COUNT(*)<BR>----------<BR> 12330    <BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <BR>用resetlogs就不会完全恢复了,因为数据文件也还原了,<BR>所以要读在线日志进行前滚,可现在是resetlogs<BR>那我们用noresetlogs来创建控制文件会怎么样呢?<BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR>###############################################<BR># [测试4] 数据文件损坏,控制文件损坏,有trace ,<BR>#   使用noresetlogs,非在线日志损坏 ,shutdown abort<BR>############################################### <BR> <BR>SQL> shutdown<BR>ORA-01109: 数据库未打开<BR><BR><BR>已经卸载数据库。<BR>ORACLE 例程已经关闭。<BR>SQL> startup<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'<BR><BR><BR>SQL> alter database open;<BR><BR>数据库已更改。<BR><BR>SQL> create table arch (status varchar(2)) tablespace users;<BR><BR>表已创建。<BR><BR>SQL> alter system switch logfile;<BR><BR>系统已更改。<BR><BR>SQL> insert into arch select 'ok' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> insert into arch select * from arch;<BR><BR>已创建6166行。<BR><BR>SQL> /<BR><BR>已创建12332行。<BR><BR>SQL> /<BR><BR>已创建24664行。<BR><BR>SQL> /<BR><BR>已创建49328行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> alter system switch logfile;<BR><BR>系统已更改。<BR><BR>SQL> insert into arch select 'no' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;<BR><BR>  GROUP#SEQUENCE# ARC STATUS<BR>---------- ---------- --- ----------------<BR>   1    5 NOCURRENT<BR>   2    3 YES INACTIVE<BR>   3    4 YES ACTIVE<BR><BR>SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;<BR><BR>RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#<BR>------------------- -------------------<BR>    68658     69641<BR><BR>SQL> shutdown abort<BR>ORACLE 例程已经关闭。<BR>SQL> startup<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>ORA-01991: ???????'C:\oracle\ora92\DATABASE\PWDtestdb.ORA'<BR><BR><BR>SQL> alter database open;<BR><BR>数据库已更改。<BR><BR>SQL> insert into arch select 'af' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;<BR><BR>  GROUP#SEQUENCE# ARC STATUS<BR>---------- ---------- --- ----------------<BR>   1    5 YES INACTIVE<BR>   2    6 NOCURRENT<BR>   3    4 YES INACTIVE<BR><BR>SQL> shutdown abort<BR>ORACLE 例程已经关闭。<BR>SQL> exit<BR>从Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production<BR>With the Partitioning, OLAP and Oracle Data Mining options<BR>JServer Release 9.2.0.1.0 - Production中断开<BR><BR>C:\Documents and Settings\lifeng.fang>sqlplus "sys/sunsdl as sysdba"<BR><BR>SQL*Plus: Release 9.2.0.1.0 - Production on 星期三 3月 2 16:29:44 2005<BR><BR>Copyright (c) 1982, 2002, Oracle Corporation.All rights reserved.<BR><BR>已连接到空闲例程。<BR><BR>SQL> startup nomount<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGSARCHIVELOG<BR>2--SET STANDBY TO MAXIMIZE PERFORMANCE<BR>3  MAXLOGFILES 5<BR>4  MAXLOGMEMBERS 3<BR>5  MAXDATAFILES 100<BR>6  MAXINSTANCES 1<BR>7  MAXLOGHISTORY 226<BR><BR>8LOGFILE<BR>9  GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG'SIZE 100M,<BR>10  GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'SIZE 100M,<BR>11  GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG'SIZE 100M--这个非在线日志丢了<BR>12-- STANDBY LOGFILE<BR>13DATAFILE<BR>14  'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',<BR>15  'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',<BR>16  'C:\ORACLE\ORADATA\testdb\INDX01.DBF',<BR>17  'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',<BR>18  'C:\ORACLE\ORADATA\testdb\USERS01.DBF'<BR>19CHARACTER SET ZHS16GBK<BR>20;<BR>CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGSARCHIVELOG<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-01503: CREATE CONTROLFILE ??<BR>ORA-01565: ????'C:\ORACLE\ORADATA\testdb\REDO03.LOG'???<BR>ORA-27041: ??????<BR>OSD-04002: N^7(4r?*ND<~<BR>O/S-Error: (OS 2) O5M3UR2;5=V86(5DND<~!#<BR><BR><BR>SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGSARCHIVELOG<BR>2--SET STANDBY TO MAXIMIZE PERFORMANCE<BR>3  MAXLOGFILES 5<BR>4  MAXLOGMEMBERS 3<BR>5  MAXDATAFILES 100<BR>6  MAXINSTANCES 1<BR>7  MAXLOGHISTORY 226<BR><BR>8LOGFILE<BR>9  GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG'SIZE 100M,<BR>10  GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'SIZE 100M --删除日志3<BR>11-- STANDBY LOGFILE<BR>12DATAFILE<BR>13  'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',<BR>14  'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',<BR>15  'C:\ORACLE\ORADATA\testdb\INDX01.DBF',<BR>16  'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',<BR>17  'C:\ORACLE\ORADATA\testdb\USERS01.DBF'<BR>18CHARACTER SET ZHS16GBK<BR>19;<BR><BR>控制文件已创建<BR><BR>SQL> alter database open;<BR>alter database open<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-01113: ?? 1 ??????<BR>ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'<BR><BR><BR>SQL> recover database ;<BR>ORA-00279: ?? 69456 (? 03/02/2005 10:26:30 ??) ???? 1 ????<BR>ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF<BR>ORA-00280: ?? 69456 ???? 1 ???? # 3 ???<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR>auto<BR>ORA-00279: ?? 69594 (? 03/02/2005 16:27:24 ??) ???? 1 ????<BR>ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF<BR>ORA-00280: ?? 69594 ???? 1 ???? # 4 ???<BR>ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF'<BR><BR><BR>已应用的日志。<BR>完成介质恢复。<BR>SQL> alter database open;<BR><BR>数据库已更改。<BR><BR>SQL> select count(*),status from arch group by status;<BR><BR>COUNT(*) ST<BR>---------- --<BR>  6166 af<BR>  6166 no<BR> 98656 ok<BR>这种情况配合noresetlogs可以完全恢复.</STRONG><BR><BR><BR></P>

pub!1c 2006-2-20 09:24

<BR><BR><STRONG>################################                        <BR># [1.5] 有trace,活动在线日志损坏  <BR>################################ <BR>################################                    <BR># [1.5.1] 有trace,活动在线日志损坏,正常shutdown或是当前的数据文件 <BR>################################<BR>SQL> create table arch (status varchar(2));<BR><BR>表已创建。<BR><BR>SQL> alter system switch logfile;<BR><BR>系统已更改。<BR><BR>SQL> insert into arch select 'ok' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> insert into arch select 'ok' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> alter system switch logfile;<BR><BR>系统已更改。<BR><BR>SQL> insert into arch select 'no' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;<BR><BR>  GROUP#SEQUENCE# ARC STATUS<BR>---------- ---------- --- ----------------<BR>   1    2 YES ACTIVE<BR>   2    1 YES ACTIVE<BR>   3    3 NOCURRENT<BR> <BR>SQL> shutdown--正常关闭数据库<BR>数据库已经关闭。<BR>已经卸载数据库。<BR>ORACLE 例程已经关闭。<BR><BR><BR>此时模拟删除当前在线日志组3<BR>SQL><BR>SQL><BR>SQL> startup nomount<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGSARCHIVELOG<BR>2--SET STANDBY TO MAXIMIZE PERFORMANCE<BR>3  MAXLOGFILES 5<BR>4  MAXLOGMEMBERS 3<BR>5  MAXDATAFILES 100<BR>6  MAXINSTANCES 1<BR>7  MAXLOGHISTORY 226<BR>8LOGFILE<BR>9  GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG'SIZE 100M,<BR>10  GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'SIZE 100M,<BR>11  GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG'SIZE 100M<BR>12-- STANDBY LOGFILE<BR>13DATAFILE<BR>14  'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',<BR>15  'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',<BR>16  'C:\ORACLE\ORADATA\testdb\INDX01.DBF',<BR>17  'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',<BR>18  'C:\ORACLE\ORADATA\testdb\USERS01.DBF'<BR>19CHARACTER SET ZHS16GBK<BR>20;<BR><BR>控制文件已创建<BR><BR>SQL> alter database open resetlogs;<BR><BR>数据库已更改。<BR>  <BR>SQL> select count(*),status from arch group by status;<BR><BR>COUNT(*) ST<BR>---------- --<BR>  6166 no<BR> 12332 ok<BR><BR>-->>没有丢失任何数据,因为你的数据都已经写到数据文件里了 <BR><BR>#########################################                 <BR># [1.5.2] 有trace,活动在线日志损坏,shutdown abort 或是非当前的数据文件<BR>    ,当前在线日志文件损坏    <BR>#########################################<BR><BR>####################################################<BR>[测试1] shutdown abort,备份控制文件或者resetlog的trace,<BR>没有数据文件备份,采用强制打开数据库的方法<BR>####################################################<BR>SQL> create table arch (status varchar(2));    <BR>                   <BR>表已创建。                 <BR><BR>SQL> alter system switch logfile;<BR><BR>系统已更改。<BR><BR>SQL> insert into arch select 'ok' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> insert into arch select 'ok' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> alter system switch logfile;<BR>SQL> insert into arch select 'no' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR>SQL>select GROUP#,SEQUENCE#,archived, STATUS from v$log;<BR><BR>GROUP#SEQUENCE# ARC STATUS<BR>---------- ---------- --- ----------------<BR>   1    2 YES ACTIVE<BR>   2    3 NOCURRENT<BR>   3    1 YES INACTIVE<BR><BR>SQL> insert into arch select 'no' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> shutdown abort<BR>ORACLE 例程已经关闭。<BR><BR>SQL> startup<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>数据库装载完毕。<BR>ORA-00313: 无法打开日志组 1 (线程 1) 的成员<BR>ORA-00312: 联机日志 1 线程 1: 'C:\ORACLE\ORADATA\TESTDB\REDO01.LOG'<BR>ORA-27047: 无法读取文件的标题块<BR>OSD-04006: ReadFile() 失败, 无法读取文件<BR>O/S-Error: (OS 38) 到达文件结尾。<BR><BR><BR>SQL> alter database clear logfile group 1;<BR>alter database clear logfile group 1<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-01624: 线程1的紧急恢复需要日志1<BR>ORA-00312: 联机日志 1 线程 1: 'C:\ORACLE\ORADATA\TESTDB\REDO01.LOG'<BR><BR>SQL> startup nomount<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGSARCHIVELOG<BR>2--SET STANDBY TO MAXIMIZE PERFORMANCE<BR>3  MAXLOGFILES 5<BR>4  MAXLOGMEMBERS 3<BR>5  MAXDATAFILES 100<BR>6  MAXINSTANCES 1<BR>7  MAXLOGHISTORY 226<BR>8LOGFILE<BR>9  GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG'SIZE 100M,<BR>10  GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'SIZE 100M,<BR>11  GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG'SIZE 100M<BR>12-- STANDBY LOGFILE<BR>13DATAFILE<BR>14  'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',<BR>15  'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',<BR>16  'C:\ORACLE\ORADATA\testdb\INDX01.DBF',<BR>17  'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',<BR>18  'C:\ORACLE\ORADATA\testdb\USERS01.DBF'<BR>19CHARACTER SET ZHS16GBK<BR>20;<BR><BR>控制文件已创建<BR><BR>SQL> alter database open resetlogs;<BR>alter database open resetlogs<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-01194: ??1?????????????<BR>ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'<BR><BR>SQL> recover database using backup controlfile until cancel;<BR>ORA-00279: ?? 70123 (? 02/28/2005 15:22:05 ??) ???? 1 ????<BR>ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF<BR>ORA-00280: ?? 70123 ???? 1 ???? # 3 ???<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR>cancel<BR>ORA-01547: ??: RECOVER ??? OPEN RESETLOGS ???????<BR>ORA-01194: ??1?????????????<BR>ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'<BR><BR><BR>ORA-01112: ???????<BR><BR>我们看到如果是abort DOWN机的话,打开数据库都需要应用在线活动日志<BR><BR>这时必须加隐含参数强制打开数据库,并进行导出,重建数据库,导入业务数据<BR><BR>SQL> show parameter spfile                          <BR>                                    <BR>NAME           TYPE  VALUE                  <BR>------------------------------------ ----------- -----------------------------          <BR>spfile           string  %ORACLE_HOME%\DATABASE\SPFILE          <BR>                 ORACLE_SID%.ORA              <BR>                                    <BR>                                    <BR>SQL> create pfile='pfiletest.ora' from spfile;                    <BR>                                    <BR>文件已创建。                                <BR>                                    <BR>SQL> create pfile='c:\pfiletest.ora' from spfile;                   <BR>                                    <BR>文件已创建。                                <BR>编辑c:\pfiletest.ora                            <BR>增加三个参数                                <BR>                                    <BR>_allow_resetlogs_corruption=true                        <BR>_corrupted_rollback_segments=true                         <BR>_offline_rollback_segments=true                         <BR>                                    <BR>SQL> shutdown immediate                           <BR>ORA-01109: 数据库未打开                           <BR>                                    <BR>                                    <BR>已经卸载数据库。                              <BR>ORACLE 例程已经关闭。                             <BR>SQL>                                  <BR>SQL>                                  <BR>SQL>                                  <BR>SQL> startup pfile='c:\pfiletest.ora'                       <BR>ORACLE 例程已经启动。                             <BR>                                    <BR>Total System Global Area135338868 bytes                     <BR>Fixed Size       453492 bytes                     <BR>Variable Size     109051904 bytes                     <BR>Database Buffers   25165824 bytes                     <BR>Redo Buffers     667648 bytes                     <BR>数据库装载完毕。                              <BR>ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项               <BR>                                    <BR>                                    <BR>SQL> alter database open resetlogs;                       <BR>alter database open resetlogs                         <BR>*                                   <BR>ERROR 位于第 1 行:                              <BR>ORA-01092: ORACLE 例程终止。强行断开连接                      <BR>                                    <BR>                                    <BR>SQL>                                  <BR>SQL>                                  <BR>SQL> exit                                 <BR>从Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production                <BR>With the Partitioning, OLAP and Oracle Data Mining options                <BR>JServer Release 9.2.0.1.0 - Production中断开                    <BR>                                    <BR>C:\>sqlplus "/as sysdba"                            <BR>                                    <BR>SQL*Plus: Release 9.2.0.1.0 - Production on 星期五 12月 31 14:03:09 2004            <BR>                                    <BR>Copyright (c) 1982, 2002, Oracle Corporation.All rights reserved.             <BR>                                    <BR>已连接到空闲例程。                              <BR>                                    <BR>SQL> startup pfile='c:\pfiletest.ora'                       <BR>ORACLE 例程已经启动。                             <BR>                                    <BR>Total System Global Area135338868 bytes                     <BR>Fixed Size       453492 bytes                     <BR>Variable Size     109051904 bytes                     <BR>Database Buffers   25165824 bytes                     <BR>Redo Buffers     667648 bytes                     <BR>数据库装载完毕。                              <BR>数据库已经打开。                              <BR>SQL>                                  <BR><BR><BR>####################################################<BR># [测试2] shutdown abort,resetlog的trace,<BR>#   有数据文件备份,当前在线日志损坏,控制文件损坏,有trace<BR>####################################################<BR>SQL> create table arch (status varchar(2)) tablespace users;<BR><BR>表已创建。<BR><BR>SQL> alter system switch logfile;<BR><BR>系统已更改。<BR><BR>SQL> insert into arch select 'ok' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> insert into arch select * from arch;<BR><BR>已创建6166行。<BR><BR>SQL> /<BR><BR>已创建12332行。<BR><BR>SQL> /<BR><BR>已创建24664行。<BR><BR>SQL> /<BR><BR>已创建49328行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> alter system switch logfile;<BR><BR>系统已更改。<BR><BR>SQL> insert into arch select 'no' from dba_objects;<BR><BR>已创建6166行。<BR><BR>SQL> commit;<BR><BR>提交完成。<BR><BR>SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;<BR><BR>  GROUP#SEQUENCE# ARC STATUS<BR>---------- ---------- --- ----------------<BR>   1    5 NOCURRENT<BR>   2    3 YES ACTIVE<BR>   3    4 NOACTIVE<BR><BR>SQL> shutdown abort<BR>ORACLE 例程已经关闭。<BR>SQL> startup nomount<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGSARCHIVELOG<BR><BR>2--SET STANDBY TO MAXIMIZE PERFORMANCE<BR><BR>3  MAXLOGFILES 5<BR><BR>4  MAXLOGMEMBERS 3<BR><BR>5  MAXDATAFILES 100<BR><BR>6  MAXINSTANCES 1<BR><BR>7  MAXLOGHISTORY 226<BR><BR>8LOGFILE<BR>9  GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'SIZE 100M,<BR><BR>10  GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG'SIZE 100M<BR><BR>11-- STANDBY LOGFILE<BR><BR>12DATAFILE<BR><BR>13  'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',<BR><BR>14  'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',<BR><BR>15  'C:\ORACLE\ORADATA\testdb\INDX01.DBF',<BR><BR>16  'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',<BR><BR>17  'C:\ORACLE\ORADATA\testdb\USERS01.DBF'<BR><BR>18CHARACTER SET ZHS16GBK<BR><BR>19;<BR>CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGSARCHIVELOG<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-01503: CREATE CONTROLFILE ??<BR>ORA-01192: ??????????<BR><BR>~~~~~~~~~~~~~~~~~~~~~~<BR>如果是NORESETLOGS,那么他要检查当前的在线日志,而现在没有了<BR><BR>SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGSARCHIVELOG<BR><BR>2--SET STANDBY TO MAXIMIZE PERFORMANCE<BR><BR>3  MAXLOGFILES 5<BR><BR>4  MAXLOGMEMBERS 3<BR><BR>5  MAXDATAFILES 100<BR><BR>6  MAXINSTANCES 1<BR><BR>7  MAXLOGHISTORY 226<BR><BR>8LOGFILE<BR><BR>9  GROUP 1 'C:\ORACLE\ORADATA\testdb\REDO01.LOG'SIZE 100M,<BR><BR>10  GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'SIZE 100M,<BR><BR>11  GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG'SIZE 100M<BR><BR>12-- STANDBY LOGFILE<BR><BR>13DATAFILE<BR><BR>14  'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',<BR><BR>15  'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',<BR><BR>16  'C:\ORACLE\ORADATA\testdb\INDX01.DBF',<BR><BR>17  'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',<BR><BR>18  'C:\ORACLE\ORADATA\testdb\USERS01.DBF'<BR><BR>19CHARACTER SET ZHS16GBK<BR><BR>20;<BR>CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGSARCHIVELOG<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-01503: CREATE CONTROLFILE ??<BR>ORA-01565: ????'C:\ORACLE\ORADATA\testdb\REDO01.LOG'???-->>这个文件不在了<BR>ORA-27041: ??????<BR>OSD-04002: N^7(4r?*ND<~<BR>O/S-Error: (OS 2) O5M3UR2;5=V86(5DND<~!#<BR><BR><BR>SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGSARCHIVELOG<BR><BR>2--SET STANDBY TO MAXIMIZE PERFORMANCE<BR><BR>3  MAXLOGFILES 5<BR><BR>4  MAXLOGMEMBERS 3<BR><BR>5  MAXDATAFILES 100<BR><BR>6  MAXINSTANCES 1<BR><BR>7  MAXLOGHISTORY 226<BR><BR>8LOGFILE<BR>9  GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'SIZE 100M,<BR><BR>10  GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG'SIZE 100M<BR><BR>11-- STANDBY LOGFILE<BR><BR>12DATAFILE<BR><BR>13  'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',<BR><BR>14  'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',<BR><BR>15  'C:\ORACLE\ORADATA\testdb\INDX01.DBF',<BR><BR>16  'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',<BR><BR>17  'C:\ORACLE\ORADATA\testdb\USERS01.DBF'<BR><BR>18CHARACTER SET ZHS16GBK<BR><BR>19;<BR>CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGSARCHIVELOG<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-01503: CREATE CONTROLFILE ??<BR>ORA-00200: ????????<BR>ORA-00202: ????: 'C:\oracle\oradata\testdb\control01.ctl'--这个文件不能被覆盖,删除三个控制文件<BR>ORA-27086: skgfglk: ?????? - ?????<BR>OSD-04002: N^7(4r?*ND<~<BR>O/S-Error: (OS 5) >\>x7CNJ!#<BR><BR><BR>SQL> shutdown<BR>ORA-01507: ??????<BR><BR><BR>ORACLE 例程已经关闭。<BR>SQL> startup nomount<BR>ORACLE 例程已经启动。<BR><BR>Total System Global Area101784276 bytes<BR>Fixed Size       453332 bytes<BR>Variable Size    75497472 bytes<BR>Database Buffers   25165824 bytes<BR>Redo Buffers     667648 bytes<BR>SQL> CREATE CONTROLFILE REUSE DATABASE "testdb" RESETLOGSARCHIVELOG<BR><BR>2--SET STANDBY TO MAXIMIZE PERFORMANCE<BR><BR>3  MAXLOGFILES 5<BR><BR>4  MAXLOGMEMBERS 3<BR><BR>5  MAXDATAFILES 100<BR><BR>6  MAXINSTANCES 1<BR><BR>7  MAXLOGHISTORY 226<BR><BR>8LOGFILE<BR>9  GROUP 2 'C:\ORACLE\ORADATA\testdb\REDO02.LOG'SIZE 100M,<BR><BR>10  GROUP 3 'C:\ORACLE\ORADATA\testdb\REDO03.LOG'SIZE 100M<BR><BR>11-- STANDBY LOGFILE<BR><BR>12DATAFILE<BR><BR>13  'C:\ORACLE\ORADATA\testdb\SYSTEM01.DBF',<BR><BR>14  'C:\ORACLE\ORADATA\testdb\UNDOTBS01.DBF',<BR><BR>15  'C:\ORACLE\ORADATA\testdb\INDX01.DBF',<BR><BR>16  'C:\ORACLE\ORADATA\testdb\TOOLS01.DBF',<BR><BR>17  'C:\ORACLE\ORADATA\testdb\USERS01.DBF'<BR><BR>18CHARACTER SET ZHS16GBK<BR><BR>19;<BR><BR>控制文件已创建<BR><BR>SQL> alter database open;<BR>alter database open<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-01589: ??????????? RESETLOGS ? NORESETLOGS ??<BR><BR><BR>SQL> alter database open resetlogs;<BR>alter database open resetlogs<BR>*<BR>ERROR 位于第 1 行:<BR>ORA-01152: ?? 1 ????????????<BR>ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'<BR><BR><BR>SQL> recover database using backup controlfile until cancel;<BR>ORA-00279: ?? 69456 (? 03/02/2005 10:26:30 ??) ???? 1 ????<BR>ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF<BR>ORA-00280: ?? 69456 ???? 1 ???? # 3 ???<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR><BR>ORA-00279: ?? 69616 (? 03/02/2005 16:53:52 ??) ???? 1 ????<BR>ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF<BR>ORA-00280: ?? 69616 ???? 1 ???? # 4 ???<BR>ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF'<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR><BR>ORA-00279: ?? 69661 (? 03/02/2005 16:53:54 ??) ???? 1 ????<BR>ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF<BR>ORA-00280: ?? 69661 ???? 1 ???? # 5 ???<BR>ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF'<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR><BR>ORA-00308: ???????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'<BR>ORA-27041: ??????<BR>OSD-04002: N^7(4r?*ND<~<BR>O/S-Error: (OS 2) O5M3UR2;5=V86(5DND<~!#<BR><BR><BR>SQL> recover database using backup controlfile until cancel;<BR>ORA-00279: ?? 69661 (? 03/02/2005 16:53:54 ??) ???? 1 ????<BR>ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF<BR>ORA-00280: ?? 69661 ???? 1 ???? # 5 ???<BR><BR><BR>指定日志: {<RET>=suggested | filename | AUTO | CANCEL}<BR>cancel<BR>介质恢复已取消。<BR>SQL> alter database open resetlogs;<BR><BR>数据库已更改。<BR><BR>SQL> select count(*),status from arch group by status;<BR><BR>COUNT(*) ST<BR>---------- --<BR> 98656 ok--还原了部分数据,但不能还原在线日志中的数据<BR><BR><B