浪潮软件如何用REBUILD或OUTPUT、INPUT修复损坏的ASA数据库

浪潮软件如何用REBUILD或OUTPUT、INPUT修复损坏的ASA数据库

软件模块: 数据库备份恢复
问题描述:
       ASA/SQL Anywhere单机数据库与网络数据库相比,较为不稳定,当数据库较大时,很容易因不正常的退出损坏数据库。常出现的现象主要有:表与索引不一致,表或索引删除不了,表与系统表不一致,临时表无法删除等等。如果还能够用ISQL连上数据库的话,我们可以尝试用以下的方法找回数据。
产生原因: 
解决方法:
   一、首先要做的当然是备份数据库

二、然后用Sybase Central中的Utilities-Rebuild Database功能,对数据库进行重建,重建时需要输入用户名:dba,密码:sql,其它按默认设置即可,如果成功,会自动生成一个新的可以正常使用的数据库。重建过程比较耗时,请耐心等待。

三、如果REBUILD功能失败(如某些表根本无法转出数据,导致重建中断),我们可以试用下面的方法,对有用数据进行转出,再到一个新的空帐套中去转入,注意此方法只能恢复可以用SQL语句读出的表和数据。

1、首先创建一个文件夹,比如d:\temp,作为存放临时文件的路径

2、运行ISQL,以用户:dba、密码:sql 连接登录数据库

(1)执行以下命令生成out.sql:
select ‘select * from ‘+name+’;output to d:\temp\’+name
       +’.dbf format foxpro’+char(13)+char(10)+’go’
  from sysobjects where type=’u’ and substring(name,1,1)!=’#';
output to d:\temp\out.sql format fixed

(2)执行out.sql:
read d:\temp\out.sql

(3)执行以下SQL生成in.sql
select ‘delete ‘+name+char(13)+char(10)+’go’+char(13)+char(10)
       +’input into ‘+name+’ from D:\TEMP\’+name+’.dbf format foxpro’
       +char(13)+char(10)+’go’
  from sysobjects where type=’u’ and substring(name,1,1)!=’#';
output to d:\temp\in.sql format fixed

3、新建一套帐,模块和启用年度要与原账套一致,然后运行维护工具登录新账套注册一个用户,再用此用户登录新账套各模块,把所有模块月结、年结到与原账套各模块当前会计期间一致

4、运行ISQL,以用户:dba、密码:sql 连接登录新账套数据库,执行in.sql转入原账套的数据:
read d:\temp\in.sql

5、如果原账套数据库损坏严重,可能有部分表的数据不能转出,可以想办法找以前的备份来导出缺少的数据,再导入新账套中,这种情况就只能是能恢复多少算多少了。

原创文章,转载请注明: 转载自浪潮888博客

本文链接地址: 浪潮软件如何用REBUILD或OUTPUT、INPUT修复损坏的ASA数据库

文章的脚注信息由WordPress的wp-posturl插件自动生成



This entry was posted in 浪潮文档. Bookmark the permalink.

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>