备份期间Firebird错误

时间:2011-11-04 06:28:53

标签: firebird

我想备份firebird数据库。下面是我用来执行备份的命令。

gbak -b -v -user SYSDBA -pass ***** -service localhost:service_mgr -verify -y E:/logs/backup_20111104.log D:\data\campaign.FDB E:/backup/campaign_20111104.fbk -FIX_FSS_METADATA WIN1252 -FIX_FSS_DATA WIN1252

然而,在运行2小时后,它以一般错误结束(仅在最后一行)。以下是错误。

gbak:22068 records written
gbak:    writing data for table AA_1307265720107_842
gbak:19872 records written
gbak:    writing data for table AA_1301338383915_1025
gbak:4 records written
gbak:Exiting before completion due to errors

此数据库中有700多个表。数据库大小为129GB。

我需要获得完整的堆栈跟踪(如果有的话)。或者任何想法在哪里检查,我可以知道实际的错误?

2 个答案:

答案 0 :(得分:1)

尝试在备份前修复数据库:

gfix -mend -full -ignore <db name> -user sysdba -pas masterkey

备份时添加两个开关 -g -ig ,以禁止垃圾回收并忽略校验和错误。

答案 1 :(得分:0)

参考gfix手册第Database Validation and Recovery部分。

  

完整验证

     

默认情况下,验证适用于页面级别。如果不需要更深入并在记录级别进行验证,执行此操作的命令是:

gfix -v[alidate] -full database_name
     

使用此选项将在页面和记录级别进行验证,报告和更新。任何损坏的结构等都将被修复。

     

[...]

     

数据库恢复

     

如果上述数据库验证没有产生输出,则可以假定数据库结构有效。但是,如果报告错误,您可能必须先修复数据库才能再次使用它。

     

恢复损坏的数据库

     

修复损坏的数据库所需的选项是gfix -m [end]命令。但是,它无法解决所有问题,并可能导致数据丢失。这一切都取决于检测到的腐败程度。命令是:

     

gfix -m [end] database_name

     

这会导致忽略数据记录中的损坏。虽然这听起来像是件好事,但事实并非如此。后续数据库操作(例如进行备份)将不包括损坏的记录,从而导致数据丢失。

     

重要

     

避免数据丢失的最佳方法是确保您有足够的数据库定期备份并定期执行测试恢复。没有必要每晚进行备份,例如,如果在需要时无法使用它们。经常和频繁地测试。

     

同样,在尝试恢复可能已损坏的数据库时,请始终使用主数据库文件的副本,而不要使用原始数据库。使用-mend选项可以导致数据的静默删除,因为gfix不关心内部数据库约束,如外键等,-mend选项只是说gfix“继续并清除你不喜欢的任何东西”。< / p>

这些是本节最重要的部分,但请务必阅读整章。如果你需要额外的支持,在Firebird支持列表上有很多人熟悉Firebird的来龙去脉以及如何处理这些错误。