sql2000附加损坏的mdf文件和dbcc修复数据库
广告:
sql2000附加损坏的mdf文件和dbcc修复数据库
1 可用高版本如sqlserver 2008 r2来附加,找出mdf和log所在原始的目录位置。(但是不能附加成功)
2 再在sql2000企业管理员新建同名数据库,位置要和原始路径一一对应。用损坏的mdf替换新建的mdf文件,再启动服务
3 进入查询分析器(不要选择数据库进入,会提示sa登录失败)
use master
UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='test' --紧急修复模式
会提示:未启用对系统目录的特殊更新。系统管理员必须重新配置 SQL Server 以允许这种操作。
运行:
sp_configure 'allow updates',1
RECONFIGURE WITH OVERRIDE
可检查 dbcc checkdb('test') with no_infomsgs --只显示错误信息
sp_dboption 'test', 'single user', 'true'
会提示:
未处理修复语句。数据库需要处于单用户模式下。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
再运行:
use master
sp_dboption 'test', 'single user', 'true'
再运行:
use master
sp_dboption 'test', 'single user', 'true'
dbcc checkdb('test',REPAIR_ALLOW_DATA_LOSS)
会提示:未能读取并闩锁页 (1:199)(用闩锁类型 SH)。sysindexes 失败。
由于数据移动,未能继续以nolock方式扫描
恢复正常模式:
update sysdatabases set status =28 where name='test'
处理sql脚本:
osql -S HAO-PC\SQL2001 -U sa -P 123456 -d test_3 -i G:\temp\4.sql
SQL Server已创建表 'XXXX,但其最大行大小(10438)超过了每行的最大字节数(8060)
"警告: 已创建表 'XXXX,但其最大行大小(10438)超过了每行的最大字节数(8060)。如果结果行长度超过 8060 字节,则此表中行的 INSERT 或 UPDATE 将失败。"
解决: 设计表特别是 varchar(7000) 改成 varchar(5000)
USE MASTER; GO; SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE GO UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='AIS2015' Go sp_dboption 'AIS2015', 'single user', 'true' Go DBCC CHECKDB('AIS2015') DBCC CHECKDB(AIS2015,REPAIR_ALLOW_DATA_LOSS) Go update sysdatabases set status =28 where name='AIS2015' Go sp_configure 'allow updates', 0 reconfigure with override Go sp_dboption 'AIS2015', 'single user', 'false' Go
以上命令如果出错,请一行一行执行。 查询分析器里面执行。
广告: