4月5日 要求SQL SERVER 2000数据库ASIA因为硬盘损坏,经抢救后只取得了mdf和ldf文件
开始以为只取得了MDF文件,因此先进行
EXEC sp_attach_single_file_db @dbname = N'ASIADB01',
@physname = N'D:/Microsoft SQL Server/MSSQL/Data/ASIADB01_Data.mdf'
但提示不成功;
再次尝试先建好一数据库,再将其分离后,把日志文件删除掉,再执行挂接,仍不成功.
后来终于找到了日志文件,经挂接成功,但发现数据库显示为只读,原来MDF是从光盘上拷贝过来,文件属性为只读,改之后即可将数据库只读属性去掉.
EXEC sp_attach_db @dbname = N'ASIADB01',
@filename1 = N'd:/Microsoft SQL Server/MSSQL/Data/ASIADB01_Data.mdf',
@filename2 = N'd:/Microsoft SQL Server/MSSQL/Data/ASIADB01_log.ldf'
后来执行ASIA应用程序,登陆等过程没有问题,但在程序中在调用单号时显示ADODC1报错,[sql server] [odbc] 数据连接中断,开始以为是
应用程序方面的问题,因为包括操作系统,数据库服务器,应用程序等均为全新安装,应用程序中也不时报出控件未注册的错误,一直怀疑是应用程序方面
的错误.因为香港软件供应商客服人员也一直在沿这个思路在解决问题,忙了一天未有任何成果.
第二天我在自己电脑上安装应用程序,用sql server事件探查器,监视出错时执行的SQL语句,后COPY到查询分析器中执行,发现以下问题:
SELECT ZKAKEH2.KASRDEN From ZKAKEH2
服务器: 消息 21,级别 24,状态 1,行 1
警告: 严重错误 823 发生于 04 5 2005 7:43PM
连接中断
SET ROWCOUNT 100000;
SELECT TOP 1000 * FROM ZKAKEH2时没有问题,但查取10000条记录时即报连接中断,初步可以判断数据库方面出了问题.
后用DBCC检查表和数据库时出现大量的错误
DBCC CHECKTABLE ('ZKAKEH2')
DBCC CHECKDB ('ASIADB01')
经用修复选项,终不能成功.
DBCC CHECKDB ('ASIADB01',REPAIR_REBUILD)
DBCC CHECKDB ('ASIADB01',repair_allow_data_loss)
没办法,采用先新建一个含同样对象的数据库,再用DTS从已坏的数据库中将数据全数导入进来.中间因为有几个表在重建库时输入了资料,导入数据不成功,
先将数据清除:
truncate table kparam3;
truncate table zhito;
truncate table zmoney;
truncate table ztrno;
重新导入这四个表的数据,一切OK.
再用DBCC工具进行检查,PASS,终于见到了一丝绪光.
重新设置应用程序ODBC,用程序进行连接,成功!谢天谢地.
总结:
数据库应该及时进行备份(包括日志备份),本CASE中就是因为缺少备份文件,只有硬盘坏了之后抢救出来的MDF和LDF文件,因此费了一番周折.在碰到这种问题时,
应先从数据库方面考虑,而不是怀疑前端应用程序方面的问题:)