lcerp 发表于 2017-12-11 08:54:26

清除临时表、修复损坏的单用户数据库(浪潮ERP)

我们知道,单用户的数据库与网络的相比,较为不稳定,当数据库较大时,很容易因不正常的退出损坏数据库。常出现的现象主要有:表与索引不一致,表或索引删除不了,表与系统表不一致,临时表无法删除等等。

在单用户及小型网软件的使用过程中,常会留下很多临时表,可以试用下面的SQL语句去一次性清除全部临时表:
方法一:用Sybase Central删除临时表,运行开始——程序——Sybase SQL Anywhere中的Sybase Central,点击菜单Tools——connect——Sybase SQL Anywhere,弹出登录窗口,在“User ID”处输入:dba,“Password”处输入:sql,再点击“Database File”右边的“Browse..”,选择数据库文件,点“OK”连接数据库。登录后,从左边窗口选择数据库——Tables,在右边窗口会显示当前数据库中已存在的所有数据表,名称中以#开头的都是临时表,选中后点右键——Delete即可删除。

方法二:开始——程序——Sybase SQL Anywhere中ISQL,点击菜单Command——Connect,弹出登录窗口,在“User ID”处输入:dba,“Password”处输入:sql,“Database File”处输入数据库文件的全名(包括盘符、路径、文件名、后缀),点“OK”登录,把下面的SQL复制到Command窗口,点“Execute”执行SQL:

select 'drop table '+name from sysobjects where name like '#%';
output to c:\droptmp.sql format fixed
go
read c:\droptmp.sql
go
commit


解决方法:
   如果能够用ISQL连上数据库的话,我们还可以用以下的步骤尝试尽量恢复数据库。

一、第一要做的是备份数据库,以防在操作中对数据库造成更大的损坏;

二、利用ISQL的ISQL/DATABASE TOOLS中的REBUILD DATABASE功能,对数据库重建一下,重建过程中如果出现“非法操作”就把当时处理的表先手工倒出,再删除,等到重建完成之后再手工把该表倒入。手工倒入倒出的操作如下:
    (以LSJSJH为例,其中D:\TEMP为已存在的路径)
    /*转出表*/
    select * fromlsjsjh;
    output to D:\TEMP\lsjsjh.dbf format foxpro
    /*删除表*/
    drop table lsjsjh
    /*转入表*/
    input into lsjsjh from d:\temp\lsjsjh.dbf format foxpro

三、如果REBUILD功能失败(如某些表根本无法删除,导致重建中断),我们可以试用下面的方法,对有用数据进行转出,再到一个新的空帐套中去转入。(请注意下面的SQL语句中D:\TEMP作为临时路径必须是已经存在的)
1、形成修复数据库的转出文件,执行:
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

然后,再执行read d:\temp\out.sql

2、形成修复数据库的转入文件,执行:
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

然后,再执行read d:\temp\in.sql


3、执行自动形成的转出文件:
read d:\temp\out.sql

4、新建一帐套,确认相应模块和损坏的这套帐一样;

5、连接新数据库,执行自动形成的转入文件:
read d:\temp\in.sql


页: [1]
查看完整版本: 清除临时表、修复损坏的单用户数据库(浪潮ERP)