以下的文章主要介绍的是由于一次误操作而引起的Oracle数据库的大恢复,前两天我在Oracle 10g手动建库脚本中柔然看到dbms_backup_restore.zerodbid(0)的过程,其中主要的作用是修改Oracle数据库的dbid。
于是想通过该存储直接在sqlplus中执行修改dbid。
修改之前记录其dbid
引用
SQL>selectdbidfromv$database; DBID 1488207495
修改dbid
引用
SQL>execdbms_backup_restore.zerodbid(0); PL/SQLproceduresuccessfullycompleted.
貌似执行成功了,但随后alert日志显示ckpt进程将数据实例终止
引用
TueMar901:43:222010 CKPT:terminatinginstanceduetoerror1242 InstanceterminatedbyCKPT,pid=16653 TueMar901:43:532010
再次启动Oracle数据库报错
引用
TueMar901:56:092010 Errorsinfile/ora10g/app/admin/ldbra/udump/ldbra_ora_12275.trc: ORA-01221:datafile1isnotthesamefiletoabackgroundprocess ORA-1221signalledduring:ALTERDATABASEOPEN...
dump Oracle数据文件头
引用
SQL>ALTERSESSIONSETEVENTS'immediatetracenamefile_hdrslevel3';
通过跟踪文件可以看到dbid以被重置为0
引用
V10STYLEFILEHEADER: CompatibilityVsn=169870080=0xa200300 DbID=0=0x0,DbName='LDBRA' ActivationID=0=0x0 ControlSeq=8122=0x1fba,Filesize=65280=0xff00 FileNumber=1,Blksiz=8192,FileType=3DATA
还有一种途径是通过bbed工具观察
引用
structkcvfhhdr,76bytes@20 ub4kccfhswv@200x00000000 ub4kccfhcvn@240x0a200300 ub4kccfhdbi@280x00000000
当然第一反应是重建控制文件,看看能不能恢复成功
引用
SQL>alterdatabasebackupcontrolfiletotrace; Databasealtered. STARTUPNOMOUNT CREATECONTROLFILEREUSEDATABASE"LDBRA"RESETLOGSARCHIVELOG MAXLOGFILES16 MAXLOGMEMBERS3 MAXDATAFILES100 MAXINSTANCES8 MAXLOGHISTORY292 LOGFILE GROUP1'/ora10g/app/oradata/ldbra/redo01.log'SIZE50M, GROUP2'/ora10g/app/oradata/ldbra/redo02.log'SIZE50M, GROUP3'/ora10g/app/oradata/ldbra/redo03.log'SIZE50M --STANDBYLOGFILE DATAFILE '/ora10g/app/oradata/ldbra/system01.dbf', '/ora10g/app/oradata/ldbra/undotbs01.dbf', '/ora10g/app/oradata/ldbra/sysaux01.dbf', '/ora10g/app/oradata/ldbra/users01.dbf', '/ora10g/app/oradata/ldbra/example01.dbf', '/ora10g/app/product/10.2.0/db_1/dbs/company.dbf', '/ora10g/app/product/10.2.0/db_1/dbs/streams.dbf' CHARACTERSETZHS16GBK
相关文章
标签:Oracle