存档

文章标签 ‘误操作’,文章数:4

window.open(“http://www.dbainfo.net/tag/recovery-tools”,”_self”); 试用方法: SQL ASE非常规恢复工具 SQL Anywhere非常规恢复工具:ReadASADB/p> 如果没有跳转,请直接访问该页面:Sybase ASE&ASA非常规恢复工具

之前就已经研发成功了能够从Sybase SQL Anywhere的DB文件中恢复数据的工具,现在公布一下。

此工具支持ASA v5.0,v6.0,v7.0,v8.0,v9.0,v10.0,v11.0,v12.0等版本。恢复Sybase SQL Anywhere的工具在国内应该算首创。

本工具的应用场景:

1.因为物理磁盘故障、操作系统、系统软件方面或者掉电等等原因导致的Sybase SQL Anywhere数据库无法打开的情况;

2.误操作,包括truncate table,drop table,不正确的where条件导致的误删除等;

Sybase SQL Anywhere无法打开时,比较常见的错误是:Assertion failed。

如:

1、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Checkpoint log: invalid bitmap page -- transaction rolled back
2、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Page number on page does not match page requested -- transaction rolled back
3、Internal database error *** ERROR *** Assertion failed:200502 (9.0.2.2451) Checksum failure on page 23 -- transaction rolled back

4、File is shorter than expected

5、Internal database error *** ERROR *** Assertion failed: 201116 Invalid free list index page found while processing checkpoint log -- transaction rolled back

6、*** ERROR *** Assertion failed: 51901 Page for requested record not a table page or record not present on page

7、*** ERROR *** Assertion failed: 201417 (7.0.4.3541) Invalid count or free space offset detected on a table page

8、Internal database error *** ERROR *** Assertion failed: 201425 (8.0.3.5594) Invalid count or free space offset detected on a free list page -- transaction rolled back.

Checkpoint log: invalid bitmap page -- transaction rolled back
Internal database error *** ERROR *** Assertion failed: 201116 Invalid free list index page found while processing checkpoint log -- transaction rolled back

等等。报错的同时可能会在db文件相同目录下生成assert.dmp文件。

关于Assertion Failure,大家可以参考Sybase官方技术文章:I've got an assertion! What should I do?

本博中有两篇文章介绍Sybase SQL Anywhere数据库db文件的物理存储结构的分析过程,可以参考一下:

ASA数据库物理存储结构分析(1)

ASA数据库物理存储结构分析(2)

本人不提供此工具的下载。如想了解使用本工具恢复损坏db文件的过程,可以观看下面的视频:

– 创建测试数据库 CREATE DATABASE Db GO — 对数据库进行备份 BACKUP DATABASE Db TO DISK = ‘ c:\db.bak ‘ WITH FORMAT GO — 创建测试表 CREATE TABLE Db.dbo.TB_test(ID int ) — 延时1秒钟,再进行后面的操作(这是由于SQL Server的时间精度最大为百分之三秒,不延时的话,可能会导致还原到时间点的操作失败) WAITFOR DELAY ‘ 00:00:01 ‘ GO — 假设我们现在误操作删除了 Db.dbo.TB_test 这个表 DROP TABLE Db.dbo.TB_test — 保存删除表的时间 SELECT dt = GETDATE () INTO # GO — 在删除操作后,发现不应该删除表 [...]

今天下午在本机测试环境下成功恢复了drop table操作后的表内的数据。 配合使用dbcc page, dbcc pglinkage,dbcc allocdump,并利用“欺骗”dataserver的办法将数据恢复出来。用了不到半个小时的时间恢复了一张有几十万行记录的表。操作的详细步骤用屏幕录像软件进行了记录保存。 ———————————————————————————————————— ——— 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载; ——— 转载务必注明原始出处 : http://www.dbainfo.net ——— 关键字: 恢复 误操作  drop truncate  dbcc page pglinkage allocdump ————————————————————————————————————