补齐被意外砍短的 Oracle .DBF 文件

客户一个建在 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 里面。