修复Sybase SQL Anywhere 数据库的好方法
SybaseSQLAnywhere是Sybase公司开发的一种小型数据库产品,有单用户版和多用户版,可安装在Win95、Win98、NT、Netware等平台。SQLAnywhere的SQL语句基本上和SybaseAdaptiveServer一致;而且功能也相当强;PowerBuilder5.0以上的版本都自带一个SQLAnywhere。因此,对使用笔记本或单机的开发人员来说,选择SQLAnywhere作为数据库来开发应用程序是十分方便的,故SQLAnywhere 得到了普遍的应用。但是突然断电或不正常关机都有可能破坏SQLAnywhere的数据,由此造成很大的损失,下面就来介绍一种恢复被破坏的数据库的方法。
SQLAnywhere数据库由后缀分别为.db和.log的两个文件组成。其中.db的文件是用来存放数据库信息(包括表结构、视图、数据等)。而.log文件是个日志文件,用来记录用户每一次对数据库有影响的操作,例如创建或删除表、视图、触发器等对象,插入、删除、修改表中的数据等。所以只要把.log 文件的内容转换成一条条的SQL语句,然后再建一个空的数据库,再执行这些SQL语句,则恢复数据的问题就解决了。Sybase公司提供了几个实用程序来完成以上功能。
现假设数据库系统文件分别名为mydb.db和mydb.log。如果mydb.db已被破坏。现在创建一个新的数据库,假设文件分别名为new.db和new.log。
用Sybase提供的,DB32W.等实用程序来完成恢复工作,步骤如下表。
步骤命令功能
1.Dbtranw -r-k-y mydb.logdb.sql把.log
文件的内容转换成的SQL语句
2.Attrib -r  mydb.db
修改只读文件mydb.db的属性为可写
3.Attrib -r mydb.log
修改只读文件mydb.log的属性为可写
4.Copy new.db mydb.db
用新的空库文件覆盖被破坏的旧库文件
5.Copynew.log mydb.log
用新的日志文件覆盖旧的日志文件
6.DB32W.EXE -d mydb.db
启动数据库SQLAnywhere
7.Rtsqlw -q-c "userid=dba;
password=sql"readdb.sql
执行从.log文件中倒出来的SQL语句
其中第一步的功能是把旧的日志文件转换成SQL语句,并放在一个名为db.sql的文件中,特别注意它只能在第五步之前操作,否则日志文件会被new.log所覆盖,而导致无法恢复数据。最后一步的功能是从文件db.sql中读取SQL语句并执行,假设数据库的用户名为dba,而口令为sql。有关各个命令及参数据的更详细的用法可以查看相应的帮助。在此提醒用户注意:.log文件不能随便删除,否则恢复的数据就不完整。
二、数据恢复
如果数据库受到破坏,要进行数据恢复,要分以下几种不同情况分别进行处理(为了便于叙述,在
说明处理过程之前,先假设数据库系统文件名分别为testdb.db
和testdb.log,并假设数据库用户名为dba,口令为sql)。
1.在数据库遭破坏之前已有数据库testdb.db文件的备份,并在上次testdb.db文件备份之后没有
百度数据恢复对数据库作任何操作或有影响的操作,或者对上次testdb.db文件备份之后的数据修改无需恢复。这时只要将
上次备份的
testdb.db 文件覆盖当前系统中的testdb.db文件,并同时删除testdb.log文件即可。在DOS 命令行
中执行步骤为:
(1)Attrib -r testdb.db 将文件testdb.db文件的只读属性去掉,变为可写。
(2)Attrib -r testdb.log将文件testdb.log文件的只读属性去掉,变为可写。
(3)copy D:\testdb.db C:\testdb.db(注:前面为备份文件,后面为当前遭受破坏的文件)。
(4)Del testdb.log将日志文件testdb.log删除。
2.在数据库遭破坏之前已有数据库testdb.db文件的备份,并且在上次备份之后作过对数据库有
影响的操作,且有必要恢复这些操作时,除了使用testdb.db和testdb.log文件外,还要使用、
<、等实用程序才能完成恢复工作。在DOS命令行中执行步骤为:
(1)dbtran-y testdb.log testdb.sql将testdb.log日志文件转换成SQL语句放在testdb.sql
文件中。
(2)Attrib -r testdb.db 将文件testdb.db文件的只读属性去掉,变为可写。
(3)Attrib -r testdb,log将文件testdb.log文件的只读属性去掉,变为可写。
(4)copy D:\testdb,db C:\testdb.db将前面的testdb.db备份文件覆盖后面遭破坏的
testdb.db文件。
(5)Del testdb.log将日志文件testdb.log删除。
(6)dbeng50 -d testdb.db 启动SQL Anywhere。
(7)isql -q -c ″userid=dba;password=sql″ read
tesrdb.sql执行testdb.sql文件中的SQL语句,恢复自上次备份以来所破坏的数据。
3.如果数据库被破坏之前从没有作过testdb.db
文件备份,则需要将被破坏的数据库删除,重建一个结构相同、名字相同的新数据库,然后再用
testdb.log文件恢复。在DOS命令行中执行步骤为:
(1)Attrib -r testdb.db 将文件testdb.db文件的只读属性去掉,变为可写。
(2)用结构相同、名字相同的新数据库testdb.db将被破坏的testdb.db文件覆盖。
(3)dbtran-y testdb.log
testdb.sql将testdb.log日志文件的内容转换成SQL语句,放在testdb.sql文件中。
(4)Attrib -r testdb.log将文件testdb.log文件的只读属性去掉,变为可写。
(5)Del testdb.log将日志文件testdb.log删除。
(6)dbeng50 -d testdb.db启动SQL Anywhere。
(7) isql -q -c ″userid=dba;password=sql″ read
tesrdb.sql执行testdb.sql文件中的SQL 语句,恢复自上次备份以来所破坏的数据。
以上数据备份和数据恢复方法,我们都已在WIN95和Powerbuilder 5.0环境下试验成功。
意外包括:停电、网络盘连接错误、硬盘读写错误
SQL ANYWHERE数据库无法连接,不管是使用哪种方法,问题可以按照如下操作:
1、删除LOG文件,启动看看是否可以,如果不行则采用第2步
2、删除LOG然后用  -f  yourdb.db启动该数据库(-f表示强制不带日志启动数据库,X为你的ASA的版本,比如6.0就是,yourdb.db是你的数据库名称)。
一般按照以上2步是可以解决的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。