声明非原创~~~~
本文是在连续以下操作后果下的补救方法,仅供参考:
1、日志文件提示已满,不能对数据库操作;
2、根据一些人的经验、先分离数据库,停止sql server 服务,删除日志文件,附加mdf文件失败。
以上操作2在日志文件未满时基本适用。
下面是修复方法:
1、将原来的MDF文件rename为***_1.MDF,新建一个同名数据库及***_temp数据库
2、运行以下语句,把该数据库设置为紧急模式;
Use Master
Go
sp_configure 'allow updates', 1
reconfigure with override
Go
update sysdatabases set status = 32768 where name = '***'
3、停止数据库服务
4、覆盖MDF文件,就是新生成的MDF文件名rename为***_2.MDF,***_1.MDF rename为原来的文件名
5、重启数据库服务
6、通过DTS导数据到***_temp
(1) 运行DTS导出向导;
(2) 复制源选择EmergencyMode的数据库XXX,导入到XXX_temp;
(3) 选择“在SQL Server数据库之间复制对象和数据”,试了多次,好像不行,只是复制过来了所有表结构,但是没有数据,也没有视图和存储过程,而且DTS向导最后报告复制失败;
(4) 所以最后选择“从源数据库复制表和视图”,但是后来发现,这样总是只能复制一部分表记录;
(5) 于是选择“用一条查询指定要传输的数据”,缺哪个表记录,就导哪个;
7、通过Enterprise Manager->Tools->Generate SQL script 生成原来数据库的脚本文件;--注意别漏选;
8、删除紧急模式数据库,把原来rename的新同名MDF文件恢复,然后attach同名数据库
9、运行脚本文件
10、通过DTS导回数据
11、恢复数据库的紧急模式设置;
Use Master
Go
sp_configure 'allow updates', 0
reconfigure with override
Go
sp_resetstatus '***'
2004年12月24日18:24:24