2007/11/29 19:28
先备份,新建一个同名的数据库(ylmusic),停掉MSSQL服务,将备份的原数据库的文件并覆盖自动创建的文件。启动MSSQL服务,此时提示“ylmusic(置疑)”。参照sqlserver2000数据库置疑的解决方法,执行
引用
USE MASTER
go
SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE
GO
UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='ylmusic'
Go
sp_dboption 'ylmusic', 'single user', 'true'
Go
DBCC CHECKDB('ylmusic')
Go
update sysdatabases set status =28 where name='ylmusic'
Go
sp_configure 'allow updates', 0 reconfigure with override
Go
sp_dboption 'ylmusic', 'single user', 'false'
Go
go
SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE
GO
UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='ylmusic'
Go
sp_dboption 'ylmusic', 'single user', 'true'
Go
DBCC CHECKDB('ylmusic')
Go
update sysdatabases set status =28 where name='ylmusic'
Go
sp_configure 'allow updates', 0 reconfigure with override
Go
sp_dboption 'ylmusic', 'single user', 'false'
Go
尝试恢复,使用导入导出复制的办法,将旧数据库内容转移到新的数据库中,最后提示失败。因为有几个表没复制完全成功。经检查,就两个表没完全成功,其它正常。
尝试修复原数据库,
引用
alter database ylmusic set SINGLE_USER
dbcc checktable ('table1',repair_allow_data_loss)
alter database ylmusic set MULTI_USER
dbcc checktable ('table1',repair_allow_data_loss)
alter database ylmusic set MULTI_USER
执行:alter database spjb_oa_new set SINGLE_USER
但一直不停下来,只好使用(如果数据库上面正在进行的其他操作不是很重要的话可以用)
alter database ylmusic set SINGLE_USER with ROLLBACK IMMEDIATE
将其设置为单用户模式。
然后执行
dbcc checktable ('table1',repair_allow_data_loss)
始终提示:
引用
服务器: 消息 7919,级别 16,状态 3,行 1
未处理修复语句。数据库需要处于单用户模式下。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
未处理修复语句。数据库需要处于单用户模式下。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
此时,在企业管理器中已经可以看到此数据库已经为单用户了,但始终无法执行:(
几天前尝试了多次都是这样,昨天将数据下载回本机修复,一样的提示。
最后没办法,只能有多少能用的数据,就恢复多少吧。
table1原有8k条记录,只导入了1k多条。另一个表也大约只导入了1/8的记录。
执行select * from table1 where id<200,会显示一些数据,然后提示
引用
服务器: 消息 823,级别 24,状态 2,行 1
连接中断
连接中断
而执行select * from table1 where id<100就可以,
于是使用select出多少条,就插入多少条,化了近半个小时手功执行将第一个数据表导入了,就10条有错的记录不能导入。
第二张表table2错的很BT,开始每隔几十条记录就错一次,后面有可能几条记录就错一次,最后没办法,写了个程序,让其忽略错误,自动复制。
其网站程序是asp的,因此就用asp写了一个。conn.asp中包含了连接数据库connect_db()的函数。
hx_update.asp
<!--#include file="conn.asp"-->
<%
dim fromi,endi
fromi = 1 '开始ID
endi = 5880 '结束ID
on error resume next
for i=fromi to endi
sql="insert into new_music..table1 select * from ylmusic..table1 where NClassID = "& i
'response.write sql & "<br>"
'Response.write i & " / "
conn.execute(sql)
if err then
Response.write i & " / "
response.write err.description & "<br>"
Err.Clear
'hx注:由于出错时会出现严重错误,直接就断开数据库连接了,因此必须再次连接数据库才能继续执行
connect_db()
end if
next
conn.close
set conn=nothing
%>
先将new_music的表的自动增长的去掉,不然没法导入。这个程序最终版大约也化了20多分钟,之前还走了一些弯路,比如每500个记录插入个一次等等。批量执行,终于OK。

一些小技巧2
Options +Includes (or IncludesNoExec) wasn't set的解决

