今天很不巧,早上上班一开机刚刚启动到快输入密码时就停了电。下午来电后开机一看,居然SQL Sever启动不了

sql server2012附加数据库错误948 sql2000附加数据库错误9003_sql server

。查看数据库日志出现以下错误:


错误: 9003,严重度: 20,状态: 1

The LSN (6:222:1) passed to log scan in database 'model' is invalid.

错误: 9003,严重度: 20,状态: 1

LSN (6:222:1) 无效。该 LSN 是传递给数据库 'model' 中的日志扫描操作的。



  查看联机帮助,无果。重装数据库,反正是自己机器上的数据都无关紧要。还好服务器一切正常,需要数据从服务器上导入即可。不过为了省去重装的麻烦还是先上网搜索了一下。尝试修复错误,总比动不动重装要有所提高。



上网搜寻结果如下:



sql server2012附加数据库错误948 sql2000附加数据库错误9003_sqlserver_02

应该是数据文件或者日志文件损坏了。
 
  1 
  )设置数据库为紧急模式
停掉SQL Server服务;
把应用数据库的数据文件XXX_Data.mdf移走;
重新建立一个同名的数据库XXX;
停掉SQL服务;
把原来的数据文件再覆盖回来;
运行以下语句,把该数据库设置为紧急模式;
运行“ 
  Use 
   Master
 
  Go 
  
sp_configure  
  ' 
  allow updates 
  ' 
  ,  
  1 
  
 
  reconfigure 
    
  with 
   override
 
  Go 
  ”

执行结果:
 
  DBCC 
   执行完毕。如果  
  DBCC 
   输出了错误信息,请与系统管理员联系。
已将配置选项  
  ' 
  allow updates 
  ' 
   从  
  0 
   改为  
  1 
  。请运行  
  RECONFIGURE 
   语句以安装。

接着运行“ 
  update 
   sysdatabases  
  set 
   status  
  = 
    
  32768 
    
  where 
   name  
  = 
    
  ' 
  XXX 
  ' 
  ”


重启SQL Server服务;
运行以下语句,把应用数据库设置为Single User模式;
运行“sp_dboption  
  ' 
  XXX 
  ' 
  ,  
  ' 
  single user 
  ' 
  ,  
  ' 
  true 
  ' 
  ”

执行结果:
命令已成功完成。

做DBCC CHECKDB;

运行“ 
  DBCC 
   CHECKDB( 
  ' 
  XXX 
  ' 
  )”
运行以下语句把系统表的修改选项关掉;
运行“sp_resetstatus "XXX"
 
  go 
  
sp_configure  
  ' 
  allow updates 
  ' 
  ,  
  0 
  
 
  reconfigure 
    
  with 
   override
重新建立另外一个数据库XXX.Lost;
 
  2 
  )DTS导出向导
运行DTS导出向导;

sql server2012附加数据库错误948 sql2000附加数据库错误9003_sqlserver_02

这样,XXX.Lost数据库就可以替换原来的应用数据库了。


  看了文章发现要修复还是挺复杂的,重新看日志,发现问题是出在model数据库。我想我不如把我的另外一个数据库实例中的model数据库直接Copy过来不就行了,反正model数据库用作在系统上创建的所有数据库的模板。应该实例中的model数据库和要恢复的差不多吧。后来把实例数据库中的model.mdf覆盖过来,重启数据库服务。居然好了,用了一阵也一切正常。OK!问题解决了。


  心得:看来以后遇到系统问题不能总走重装的老路,这样对自己才有提高。