82855 AI Apple Watch CentOS Eclipse H700 iCal iOS iPad iPhone iphone4 iTunes Java Javascript linux Mac MBP ML MySQL Oracle Parallels Desktop RAID redmine Rocky Linux RockyLinux screen Snow Leopard SQL SVN Thinkpad VMware VR Windows Windows 7 Windows 11 Word X40 东航 字体 导航 数据库 朗逸 签证 达美 闹钟

补齐被意外砍短的 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 里面。