ORA-01157,记一次Oracle故障恢复过程
生产环境中有两台部署PowerCenter的ETL业务机,近期发现无法通过客户端连接到ETL服务。
初步怀疑是PowerCenter挂掉了,或者资料库出现了故障。
登陆设备后发现PowerCenter进程存在,但是资料库(Oracle)却挂掉了。
切换oracle账户进入,手动startup资料库,结果启动时报错:ORA-01157,ORA-01110。看报文说明是无法锁定或识别数据文件。
退出sqlplus,发现数据文件存在,猜测可能是故障造成的数据文件损坏,因为是NOARCHIVELOG(非归档)模式,无法通过日志进行恢复。
想起之前有用expdp导出过一次备份,为了尽快恢复ETL生产,只能drop掉数据文件重新建立了。
大致过程如下:
lsnrctl stop sqlplus / as sysdba SQL>shutdown immediate; SQL>startup mount;
SQL>alter database archivelog; SQL>alter database datafile '/oradata/xxx.dbf' offline drop; SQL>alter database open; SQL>drop tablespace xxx including contents and datafiles; SQL>create tablespace xxx ... datafile '/oradata/xxx.dbf' ...; SQL>exit; impdp \'sys / as sysdba\' tablespaces=xxx directory=DATA_PUMP_DIR dumpfile=xxx.dump logfile=impdp-xxx.log content=metadata_only impdp \'/ as sysdba\' schemas=etl_user directory=DATA_PUMP_DIR dumpfile=etl_user.dump logfile=impdp-etl_user.log content=data_only lsnrctl start
导入表空间元数据和用户数据后,基本上数据就恢复到了之前的备份点。
下面再针对PowerCenter访问的细节表做下调整就可以了,稍后重新启动下PowerCenter查看运行情况。
如果PowerCenter事前做好了存储服务的资料备份,则再利用备份做下配置的恢复那么基本上就没什么问题。
不过上述操作稍显粗犷(有朋友指出危险性极大),所以诸君操作前请三思而后行,否则造成面积更广的数据损失就得不偿失了。
结论:千好万好,备份最好。
参考文档:
http://www.itpub.net/thread-27492-1-1.html