如何修复interbase 数据库

lianweb1 2003-10-17 12:09:23
各位大虾
有一 interbase 数据库文件cd17.gdb受损,无法打开,报
unknow database I/O error for file error while
trying to read from file
不知如何修复,敬请赐教,不胜感激!!
...全文
298 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
flymoon 2004-03-19
  • 打赏
  • 举报
回复
我在ibphoenix上找到了chinahorse2003说的那篇文章,很长,很详细,chinahorse2003没有转载完,我把地址列在下面,大家可以看看,当然,我还是没有能利用这篇文章修好我弄坏的数据库,呵呵。不过,我还没有完全吃透这篇文章。
http://www.ibphoenix.com/a516.htm

另外,我还找到一篇文章是讲数据库损坏原因的,有的可能你没有注意,至少有的我就没有想到,大家也可以看看,呵呵。
http://community.borland.com/article/0,1410,29515,00.html

CuteBit 2004-01-09
  • 打赏
  • 举报
回复
hi,SuperTitan001
"丢掉被破坏的页面"?!!!事情没有你想的那么简单.从技术角度看,这是个复杂宽阔但不被纳入数据库主方向的问题(当然,如果你有兴趣和能力搞这个问题,可以加入 fb 内核开发组,反正开源项目经常是缺人的 :) ).

如果你发现你家门被撬,你仅仅认为是损失一个门而已吗?如果 checksum 出了问题很可能是内存(程序bug)腐烂或者硬件错误.那么它影响的很可能更多的数据和用户.

其实 gfix 可以修复不少问题的,包括这样的问题.chinahorse2003 说得很详细了.我遇到过一些损坏的现象,一般 gfix 都可以搞定(有时 fix 后会丢失数据,如果这些数据破坏了外键主键关系或者商业规则就很麻烦了:( ).

我是从 ib4 开始用,感觉越是后续版本越稳定.

没有 100% 安全的数据库(你见过 msSQL/oracle/informix 损坏吗?那也是没得救的).教用户在管理制度上制订备份计划是数据库容灾重要的手段.
SuperTitan001 2004-01-09
  • 打赏
  • 举报
回复
我在ibphoenix上找到了chinahorse2003说的那篇文章,很长,很详细,chinahorse2003没有转载完,我把地址列在下面,大家可以看看,当然,我还是没有能利用这篇文章修好我弄坏的数据库,呵呵。不过,我还没有完全吃透这篇文章。
http://www.ibphoenix.com/a516.htm

另外,我还找到一篇文章是讲数据库损坏原因的,有的可能你没有注意,至少有的我就没有想到,大家也可以看看,呵呵。
http://community.borland.com/article/0,1410,29515,00.html
SuperTitan001 2004-01-08
  • 打赏
  • 举报
回复
如果只是简单的checksum错误,修复是很简单。
如果是页面数据错误,ib在修复的时候为什么不能丢掉这个页面呢?损失一点数据总好过整个数据库的数据不能用啊。

根据我使用的情况,好象计算checksum的功能并没有关掉一样,因为我也碰到过checksum出错,但是修复的情况,如果是简单的checksum错误,我想应该可以自动修复,反正发现checksum不是12345就改为12345然后重新连接就可以了,为什么还要让你去修复?
CuteBit 2004-01-08
  • 打赏
  • 举报
回复
SuperTitan001,,checksum 错误的情况可能是简单的 checksum 数据错误而已,也可能是来自数据相应的页面数据错误.
对于前者,情况就简单了.但对于后者可能是复杂的了.

其实在 ib 后来版本中(好像是>4), ib 小组出于性能上的考虑决定关掉真正计算 checksum 的功能.只是简单的给 checksum = 12345 而已.所以在备份和 fix 的时候就有了一个忽略 checksum 的选项,为了适应可能的 checksum 简单的错误.
CuteBit 2004-01-08
  • 打赏
  • 举报
回复
hi,SuperTitan001
这个错误:
Database file appears corrupt ()
bad checksum
checksum error on database page 2

是 ib/fb 在读取数据页(对 OS 来说已经成功读出),后进行完整性校验不成功时, ib/fb 抛出的错误信息.
楼主的错误信息却是来自 OS 的.
所以它们的错误层面不是一样的.

SuperTitan001 2004-01-08
  • 打赏
  • 举报
回复
倒也不一定是文件物理损坏,下面是我的文件报的错误。

Database file appears corrupt ()
bad checksum
checksum error on database page 2

应该也就是checksum的错误,不知道为什么修复的时候不能按照现有的数据生成新的checksum,然后由用户自己判断是否修复成功。
CuteBit 2004-01-08
  • 打赏
  • 举报
回复
hi,all
楼主的这个问题是数据库文件物理损坏,不是数据库文件内部数据完整性错误.使用 ib/fb 修复工具自然是不行的.
SuperTitan001 2004-01-08
  • 打赏
  • 举报
回复
确实如此,我试了试 chinahorse2003(天马星空) 的方法,也还是不行。

zhangwei1437 2004-01-06
  • 打赏
  • 举报
回复
向大家学习
HDJ2013 2004-01-06
  • 打赏
  • 举报
回复
这是一个很心痛的问题,数据库的损坏,修 复的可能性很小,唯一的方法,是做好备份。我用过很多的修复工具,都无法修复。
如果你有好的修复方法,我们可以交流。向您学习


8682088@163.com
wmy_xt 2004-01-02
  • 打赏
  • 举报
回复
能不能用中文讲的更明白一些呢?
kerosun 2004-01-02
  • 打赏
  • 举报
回复
Study
tanhuaizhang 2004-01-02
  • 打赏
  • 举报
回复
仔细检查一下,认真思考。
hamzsy 2003-12-27
  • 打赏
  • 举报
回复
谁可以给我个损坏的库,我想找个试试
hamzsy@163.com
剑雷 2003-12-05
  • 打赏
  • 举报
回复
kumao 2003-11-26
  • 打赏
  • 举报
回复
想问一下,这个方法是对interbase数据库有效果还是firebird数据库啊
chinahorse2003 2003-11-21
  • 打赏
  • 举报
回复
完全可以修复,资料来自FIRBIRD 站
1. Define the following two variables, it makes life easier, in that you do not have to type in the user name and password every time you issue a command.

SET ISC_USER=SYSDBA
SET ISC_PASSWORD=masterkey
2. Always make sure you work on a copy of the database, not the production database. Use the operating system to make a copy of the database. You must have exclusive access to the database to do this.

copy employee.gdb database.gdb
3. Now check for database corruption. You must have exclusive access to do this, but since you're working on a copy of the original database, this is not a problem.

gfix -v -full database.gdb
4. If the previous command has indicated that there are problems with the database, we now need to mend it.

gfix -mend -full -ignore database.gdb
5. Now check to see if the corruption has been repaired.

gfix -v -full database.gdb
6. If you still see errors, you should now do a full backup and restore. In its simplest format the backup command line should be:

gbak -backup -v -ignore database.gdb database.gbk
7. However if gbak falls over because it is having trouble with garbage collection, then use the following command:

gbak -backup -v -ignore -garbage
database.gdb database.gbk
8. If there is corruption in record versions of a limbo transaction, then you may need to include the -limbo switch:

gbak -backup -v -ignore -garbage -limbo
database.gdb database.gbk
9. Now create a new database from the backup:

gbak -create -v atlas.gbk atlas_new.gdb
屡试不爽
honestsky 2003-11-21
  • 打赏
  • 举报
回复
刚用一个客户损坏的数据库试了一下楼上的方法,果然很有效,立刻恢复了。是个好方法!
就是不知道会不会有什么“后遗症”?
SuperTitan001 2003-10-31
  • 打赏
  • 举报
回复
在置顶和faq区有两篇文章专门讲这个问题的,你可以看看,或许有帮助。
置顶帖子中提到了一个修复软件,我试过是有一定的作用的。
加载更多回复(3)

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧