阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

老司机
查看: 1147|回复: 0

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

[复制链接]
  • TA的每日心情
    开心
    2018-1-1 15:56
  • 签到天数: 30 天

    [LV.5]常住居民I

    发表于 2017-12-11 08:54:26 | 显示全部楼层 |阅读模式
    我们知道,单用户的数据库与网络的相比,较为不稳定,当数据库较大时,很容易因不正常的退出损坏数据库。常出现的现象主要有:表与索引不一致,表或索引删除不了,表与系统表不一致,临时表无法删除等等。

    在单用户及小型网软件的使用过程中,常会留下很多临时表,可以试用下面的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 * from  lsjsjh;
        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


    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表