您的位置:首页 > 数据库

数据库出现ORA-00283/ORA-01610的问题

2015-08-13 14:36 441 查看
处理过程可以参照http://www.itpub.net/viewthread.php?tid=1010027&extra=&page=1

下面我把问题的处理做一个小的总结,希望有所帮助

问题主要是:resetlogs/noresetlogs与控制文件方面的(参照eygle的书)

第一:

要弄清楚resetlogs与noresetlogs的区别

norestlogs,控制文件的scn是来自当前日志的high scn,而resetlogs控制文件的scn是来自数据文件。

我在这里开始没有弄明白,我以noresetlogs进行恢复没有问题,后来请教了棉花糖才知道为什么noresetlogs可以成功,而resetlogs没有成功。

第二:

如何时取得创建控制文件的脚本,方法如下:

sql>alter database backup to trace;

然后通过查询跟踪文件的脚本可以查询到相关的详细信息

SQL> SELECT a.VALUE||b.symbol||c.instance_name||'_ora_'||d.spid||'.trc' TRACE_FILE_NAME

  2  FROM (SELECT VALUE FROM v$parameter WHERE NAME='user_dump_dest') a,

  3       (SELECT SUBSTR(VALUE,-6,1) symbol FROM v$parameter WHERE NAME='user_dump_dest') b,

  4       (SELECT instance_name FROM v$instance) c,

  5       (SELECT spid FROM v$session s,v$process p,v$mystat m

  6        WHERE s.paddr=p.addr AND s.SID=m.SID AND m.statistic#=0) d

  7  /

TRACE_FILE_NAME

---------------------------------------------------------------------------------------------

E:\ORACLE\PRODUCT\10.2.0\ADMIN\ORCL\UDUMP\orcl_ora_5724.trc

在这orcl_ora_5724.trc脚本中可以找到创建控制文件的两种方式noresetlogs/resetlogs.

第三:模拟出错的过程

shutdown abort来进行关闭据库。

第四:利用noresetlogs来进行控件文件以及数据库的恢复

1.启动到数据库为nomount状态

sql>startup nomount;

2.开始创建控制文件

CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  ARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 8

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG'  SIZE 50M,

  GROUP 2 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG'  SIZE 50M,

  GROUP 3 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG'  SIZE 50M

-- STANDBY LOGFILE

DATAFILE

  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF',

  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF',

  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF',

  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF',

  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF',

  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\FTITEM10G01',

  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EYGLE01.DBF',

  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\FTTEST01',

  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS02.DBF',

  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ZXF1.DBF',

  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ZXF2.DBF',

  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TZX01.DBF'

CHARACTER SET ZHS16GBK

;

3.recover database; //恢复数据库

4.打开数据库 alter database open;

因为noresetlogs是用当前日志的high scn来恢复,所以基本没有问题。

第四:利用resetlogs来进行控件文件以及数据库的恢复,这里出现的一些问题

1.shutdown abort

2.数据库启动到nomount状态

3.创建控制文件

CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS  ARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 8

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG'  SIZE 50M,

  GROUP 2 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG'  SIZE 50M,

  GROUP 3 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG'  SIZE 50M

-- STANDBY LOGFILE

DATAFILE

  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF',

  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF',

  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF',

  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF',

  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF',

  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\FTITEM10G01',

  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EYGLE01.DBF',

  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\FTTEST01',

  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS02.DBF',

  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ZXF1.DBF',

  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ZXF2.DBF',

  'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TZX01.DBF'

CHARACTER SET ZHS16GBK

;

4.alter database mount; 把数据库启动到mount状态

5.SQL> recover database;

   ORA-00283: 恢复会话因错误而取消

   ORA-01610: 使用 BACKUP CONTROLFILE 选项的恢复必须已完成

因为采用的resetlogs方式,所以会出现如上的错误

这时需要用如下的方式进行恢复

SQL> recover database using backup controlfile until cancel;

ORA-00279: 更改 6432534 (在 06/22/2008 16:39:31 生成) 对于线程 1 是必需的

ORA-00289: 建议:

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2008_06_22\O1_MF_1_

13_%U_.ARC

ORA-00280: 更改 6432534 (用于线程 1) 在序列 #13 中

指定日志: {=suggested | filename | AUTO | CANCEL}

在这里有几个选项

suggested:在上面ORA-00289: 建议:....会按这个文件去恢复

filename:自己指定日志文件

auto:自动选择,但我个人觉得好像和suggestted一样呢:(

cancel:这个可以不从介质恢复。

我在这里选择auto和suggested无不行,报的错误如下:

指定日志: {=suggested | filename | AUTO | CANCEL}

auto

ORA-00308: 无法打开归档日志 'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG2008_06_22

ORA-27041: 无法打开文件

OSD-04002: 无法打开文件

O/S-Error: (OS 2) 系统找不到指定的文件。

采用cancel报如下错:

ORA-01112: 未启动介质恢复

经过以上的步骤后来发现:

我这里的归档日志中要求的是日志文件不存在

指定日志: {=suggested | filename | AUTO | CANCEL}

E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG2008_06_22O1_MF_1_9_45W1NQDP_.ARC

ORA-00310: 归档日志包含序列 9; 要求序列 10

ORA-00334: 归档日志:

'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG2008_06_22O1_MF_1

_9_45W1NQDP_.ARC'

查看日志文件:

select * from v$log;

GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS      

------ ---------- ---------- ---------- ---------- --- --------

     1          1          0   52428800          1 YES UNUSED

     3          1          0   52428800          1 YES CURRENT

     2          1          0   52428800          1 YES UNUSED

发现这里的理解有问题,因为采用的是resetlogs,所以日志文件肯定是unused的,呵, 这里要多谢棉花糖的。

6.仔细查看eygle的书这时有一句话

"如果在线日志未损坏,则可以指定在线日志文件执行恢复",这时棉花糖也指出了这点:

“哦,忘了你的是resetlogs,你的在线日志还在吧 ,把在线日志的路径输入啊,比如这样D:ORACLEPRODUCT10.2.0ORADATATESTREDO01.LOG ,你把所有的日志测试过去,有一个应该是能用来做恢复”

经过再次尝试终于成功了

SQL> recover database using backup controlfile until cancel;

ORA-00279: 更改 6432534 (在 06/22/2008 16:39:31 生成) 对于线程 1 是必需的

ORA-00289: 建议:

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2008_06_22\O1_MF_1_

13_%U_.ARC

ORA-00280: 更改 6432534 (用于线程 1) 在序列 #13 中

指定日志: {=suggested | filename | AUTO | CANCEL}

E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG

ORA-00310: 归档日志包含序列 12; 要求序列 13

ORA-00334: 归档日志: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG'

SQL>  recover database using backup controlfile until cancel;

ORA-00279: 更改 6432534 (在 06/22/2008 16:39:31 生成) 对于线程 1 是必需的

ORA-00289: 建议:

E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2008_06_22\O1_MF_1_

13_%U_.ARC

ORA-00280: 更改 6432534 (用于线程 1) 在序列 #13 中

指定日志: {=suggested | filename | AUTO | CANCEL}

E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG

已应用的日志。

完成介质恢复。

SQL> alter database open;

alter database open

*

第 1 行出现错误:

ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项

SQL> alter database open resetlogs;

数据库已更改。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 错误