存档

文章标签 ‘读取设备内容’,文章数:7

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

SQL Anywhere数据库非常规恢复工具

ReadASADB---一个不依赖数据库管理系统、直接从db文件上提取数据的业内领先的恢复工具!

一、SQL Anywhere、UltraLite介绍
SQL Anywhere  一个免维护、易管理的移动数据库。

SQL Anywhere 提供了企业级的功能,包括完全的事务处理、无与伦比的可靠性和功能,包括参照完整性、存储过程、触发器、行级锁、自动的任务安排和自动恢复等功能

  • 易于使用,易于管理 ,降低最终用户的日常管理费用!
  • 多平台支持
  • 资源效率高
  • 配套的定时数据同步工具Mobilink

UltraLite 是一种用于小型、移动和嵌入式设备的、具有同步功能的关系数据库

  • 稳健的数据管理
  • 强大的同步功能
  • 直接简明的开发
  • 多平台可用性

您可以开发和部署用于 Windows CE、 Palm OS 和基于 Java 的设备的 UltraLite 数据库应用程序!

二、ReadASADB功能
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具

  1. 适用于所有的SQL Anywhere版本    包括:5.x,6.x,7.x,8.x,9.x,10.x,11.x,12.x
  2. 适用于所有的UltraLite版本
  3. 能够恢复出来表结构和数据
  4. 能够恢复自定义数据类型
  5. 能够恢复存储过程等对象的语法
  6. 能够导出到目标数据库
  7. 能够导出到SQL文件并生成导入脚本
  8. 支持多种字符集  包括:cp850、cp936、gb18030、utf8等
  9. 能够恢复未加密或者简单加密类型的数据
  10. 简单易用
  11. 限制:不支持AES加密的数据文件

之前就已经研发成功了能够从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文件的过程,可以观看下面的视频:

先来介绍一下裸设备的知识 1.什么是裸设备(RAW DEVICE) 裸设备是指未创建文件系统的磁盘分区(raw partition)或逻辑卷(raw logical volume),应用程序直接通过一 个字符设备驱动程序对它进行访问。如何对设备上的数据读写决定于使用它的应用程序。由于对裸设备的操作不通过UNIX的缓冲区,数据在ORACLE的数据 缓冲区(BUFFER CACHE)和磁盘之间直接传递,所以使用裸设备在一定程度上能够提高I/O性能,适合I/O量大的系统。另外OPS/RAC (Oracle Parallel Server/Real Application Cluster)环境下,多个节点同时访问同一个数据库,所以CONTROL FILE、DATA FILE、REDO LOG都必须建在RAW DEVICE上。 2.裸设备的可用空间 不同的UNIX对裸设备的管理不完全相同,特别要注意的是某些UNIX在每个裸设备的头部要保留一定的空间,应用程序在使用裸设备时不可以覆盖这一部分, 否则会对裸设备造成损坏。所以一个裸设备的实际可用空间是分配给裸设备的空间再减去这部分操作系统保留空间。下面是常用UNIX的OS Reserved Size列表: UNIX     OS Reserved Size ———— —————- SUN Solaris       0 HP-UX          0 IBM AIX         4k Tru64 UNIX       64k Linux          0 3.如何读裸设备上的数据? UNIX上读写裸设备不能使用cp, cpio, tar等命令,必须用dd,下面是几个dd常用参数的简单说明,更详细的信息请参考UNIX使用手册或用命令man dd。 dd [ operand=value ... ] if=file 指定输入文件,缺省值是标准输入 of=file 指定输出文件,缺省值是标准输出 bs=n 设置输入和输出的块大小为n字节,也可以用“k”作单位 skip=n 在拷贝之前跳过n个输入块,缺省值是0 seek=n [...]

本帖子转自:echoaix  嘟嘟之家  http://blog.chinaunix.net/u/10212/showart.php?id=88834 向echoaix这位sybase 高手表示感谢。 转下面内容的原因是作个记录方便以后来查看如何在unix下修改文件内容。在windows下以十六进制形式修改文件内的数据很简单,可以用 UltraEdit这个强大的工具。我编出来了工具能够实现从sybase数据设备文件中提取数据和翻译解析sybase日志设备文件内容,这个过程中 UE提供了莫大的帮助。我编写的工具跟UE没有关系。但是,有时候对sybase设备文件做一个小小的修改的时候,我喜欢用UE。 但是,在unix环境下的sybase设备文件该如何修改呢?总不能每次都ftp下载下来,用windows下的Ultraedit改好了后再上传到服务器吧? 这样做太麻烦。 幸运的是,早有高手提供了解决的方法!厉害! 下面的代码我没有完全看明白,主要是没unix写过shell的原因。 大概意思是:向sh脚本传递3个参数,用指定数据替换指定文件中的相应偏移的相同字节的数据。 用od定位出被修改的偏移位置。然后用echo向dd传入数据,dd会处理这个文件。 至于如何将4个字节的数据转化到数组里的那段代码,我没有看懂! —————————————————————————– 环境 : iBM aix 4.3和sybase11.9 只有这环境 master设备/dev/rlvsybmaster1 前面还是一样看page内容: dbcc traceon(3604) go dbcc tablealloc(sysdatabases) 或  select first from sysindexes where id = object_id(“sysdatabases” and indid=1\\找到数据页(pageno) go dbcc page(master,pageno,1,0)  \\从硬盘上拿这页内容详细内容 go master的如下: Offset 266 – 3256210a:  02000001 00010000 80000001 000008a1  ……………. 3256211a:  00000000 00000000 00009179 00fe9caa  ………..y…. [...]

此方法有一定的风险,请做好备份。you do it at your own risk! 以前的版本为: Adaptive Server Enterprise/15.0.3/EBF 16550 ESD#1/P/NT (IX86)/Windows 2003/ase1503/2680/32-bit/OPT/Thu Mar 05 00:21:40 2009 在用mon表的时候报:NT storage access violation in omni_closetable destroyRemoteAccess. 怀疑是bug562998 。 于是打了ebf16738补丁。打补丁的过程和初次安装的过程一样只是wizard显示ASE15.0.3ESD#2,没有新建任何服务就选择完成了。 但是启动数据库的时候报错,很让人崩溃。难道我升级的方法有问题? 启动错误信息如下: 00:00000:00000:2009/12/14 14:55:34.59 kernel  engine 0, os pid 2404  online 00:00000:00000:2009/12/14 14:55:34.59 server  No active traceflags 00:00000:00001:2009/12/14 14:55:34.59 kernel  libomni1 – Component Integration Services: using [...]

今年七月份,不小心将PC笔记本电脑上的另一个数据库的备份文件B恢复到了一个在线数据库A里了(两个都是实验用数据库!)。库B比库A要小很多。向多方(包括sybase technical)咨询都说没有办法只能通过备份文件来恢复。但是,我感觉应该有种办法吧!难道sybase公司都没有办法?如果这样,我将一个小的备份文件load到一个大的数据库里面,难道这个大数据库也只能用备份来恢复吗? 突然产生了一种想法,能不能打开sybase的设备文件看看里面都存了一些什么样的数据?能读取一点数据也是收获啊!

于是,在接下来的三个月时间里我花了很大的精力来研究sybase的内部数据结构,用VB编写读取程序,并反复测试修改。最后,基本形成两个小工具。

1.能够从Sybase数据设备上提取数据的:READ_SYBDEVICE

2.从日志设备上提取日志信息的:LOG_ANALYZER_ASSISTANT (暂时叫这两个名字,以后可能会改)

下面为两个工具读取出来的数据截图:

一、下图为读取的Sybase数据库内页面上的数据(页号:165621,表名:FLOWREC1,右上部显示页面上的十六进制数据,下部分是FLOWREC1在页面165621上的数据)

读取的Sybase数据库内页面上的数据

二、下图为从日志设备上提取的日志信息(包括:页号,页内偏移,可用行号,日志类型OP,会话ID,列宽度,日志操作时间,SUID,UID,SPID,以及日志信息内容等)。针对插入(OP=4)、删除(OP=5)、更新(OP=9)能够逆向写出相应的SQL语句。从日志设备上提取的日志信息

Sybase ASE的恢复工具支持ASE v11.0, v11.5,v11.9.2,v12.0,v12.5.x,v15.x等各个版本,支持little endian以及big endian,支持cp850,iso_1,cp936,eucgb,utf8等国内常用的多个字符集。

关于从Sybase ASE设备文件中提取对象包含的页面不外乎两种方法。

第一:依次扫描页面获取页头控制信息中记录的对象ID;

第二:根据分配页追踪到对象的OAM页,再从OAM页上分析出对象占用的页面。

另 外,已经研发成功了能够从Sybase SQL Anywhere的DB文件中恢复数据的工具,支持ASA v5.0,v6.0,v7.0,v8.0,v9.0,v10.0,v11.0,v12.0等版本。恢复Sybase SQL Anywhere的工具在国内应该算首创。