客户一个建在 Linux 上的 Oracle 系统意外崩溃了。
抢救出来的数据文件似乎被砍掉了一截,小于应有的尺寸。
ORA-01122: database file 4 failed verification check ORA-01110: data file 4: 'xxx/users01.dbf' ORA-01200: actual file size of 1569280 is smaller than correct size of 1569281
应急之下通过 Google 找到了一个临时的对付办法。
1。先造一个大小合适填满零的补丁:
$dd if=/dev/zero of=/tmp/patch0 count=1 bs=16k
其中 bs 可以设成init.ora 里设置的 block_size。count 自然是设成 Oracle 抱怨少掉的块数。
2。应用补丁
$cat /tmp/path0 >> $ORACLE_BASE/oradata/$ORACLE_SID/users01.dbf
3。恢复数据文件
SQL>recover datafile 4;
Media recovery complete.
SQL>alter database datafile 4 online;
上面的 4 是Oracle 抱怨出错的数据文件的编号,就不用再费劲输入长长的路径了。
接下来就是祈祷重要的数据都还在了。
附,备忘: 起动停止 Oracle 数据库
SQL> conn / as sysdba
Connected.
SQL>
SQL>
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL>
SQL> startup mount
ORACLE instance started.
SQL> startup pfile='/path/to/init.ora'
ORACLE instance started.
另外Oracle的密码文件在 $ORACLE_HOME/dbs 里面。