Saturday, April 28, 2007

数据库不完全恢复

今天report突然出现这个错误
EXT-fs Error (device cciss/c0d0p2) in start-transaction ; Journal has aborted.
消息给的很明显,是文件系统的日志被异常终止了。

重启后
mkrootdev: label / not found
mount:error 2 mounting ext3
mount:error 2 mounting none
switchroot: mount failed 22
umount initrd/dev failed : 2
Kernel panic - not syncing : Attempted to kill init !

这个错误搞不定了,决定重装。
由于oracle的数据文件存放在cciss/c0d0p3上,所以恢复起来没有什么问题。

OS安装好后,将参数文件和密码文件复制到dbs下。
但是我没有备份参数文件和密码文件,所以在原来的alter中将参数文件的内容贴了过来(这里要注意,字符类型的需要添加单引号)。
密码文件临时生成
orapwd file=orapwreport password=oracle entries=20

open时报错
ORA-00449: background process 'CKPT' unexpectedly terminated with error 7446
ORA-07446: sdnfy: bad value '' for parameter .

找了半天原因发现跟踪文件目录不存在
*.background_dump_dest='/u1/oracle/admin/report/bdump'
*.user_dump_dest='/u1/oracle/admin/report/udump'
*.core_dump_dest='/u1/oracle/admin/report/cdump'
于是一个一个的mkdir。

mount阶段没有报任何错误,接着采用backup controlfile to trace的技巧恢复数据库。
SQL> alter database backup controlfile to trace;

System altered.

编辑trace文件(new.ora):
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "REPORT" NORESETLOGS NOARCHIVELOG
     MAXLOGFILES 50
     MAXLOGMEMBERS 5
     MAXDATAFILES 100
     MAXINSTANCES 1
     MAXLOGHISTORY 226
LOGFILE
    GROUP 1 '/u1/oracle/oradata/report/redo01.log' SIZE 100M,
    GROUP 2 '/u1/oracle/oradata/report/redo02.log' SIZE 100M,
    GROUP 3 '/u1/oracle/oradata/report/redo03.log' SIZE 100M
DATAFILE
    '/u1/oracle/oradata/report/system01.dbf',
    '/u1/oracle/oradata/report/undotbs01.dbf',
    '/u1/oracle/oradata/report/cwmlite01.dbf',
    '/u1/oracle/oradata/report/drsys01.dbf',
    '/u1/oracle/oradata/report/example01.dbf',
    '/u1/oracle/oradata/report/indx01.dbf',
    '/u1/oracle/oradata/report/odm01.dbf',
    '/u1/oracle/oradata/report/tools01.dbf',
    '/u1/oracle/oradata/report/users01.dbf',
    '/u1/oracle/oradata/report/xdb01.dbf',
    '/u1/oracle/product/9.2/dbs/TBS_LARGE06.dat',
    '/u1/oracle/product/9.2/dbs/TBS_LARGE07.dat',
    '/u1/oracle/product/9.2/dbs/TBS_LARGE08.dat',
    '/u1/oracle/product/9.2/dbs/TBS_LARGE09.dat'

CHARACTER SET AL32UTF8
;

RECOVER DATABASE
ALTER DATABASE OPEN RESETLOGS;
ALTER DATABASE OPEN;

ALTER TABLESPACE TEMP ADD TEMPFILE '/u1/oracle/oradata/report/temp01.dbf' REUSE;

这里发现TBS_LARGE的几个数据文件没有备份,由于不在我指定的数据文件目录下面。
所以修改new.ora文件,去掉TBS_LARGE这几个文件。

SQL> @new.ora
然后成功打开数据库。

No comments: