如何修复SQLSERVER置疑之

来源:互联网 发布:php处理ajax跨域 编辑:程序博客网 时间:2024/06/10 06:13
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

如果因为磁盘可用空间不足,而不能完成数据库的恢复,那么 SQLSERVER2000会返回错误1105并且将sysdatabases中的status列设为置疑。
你可以看到在SQLSERVER的ERRORLOG和OS的应用程序日志中应该有1105的错误信息:

SQLSERVER事务日志可能会被填满,这会阻止之后的数据库操作,包括UPDATE,DELETE,INSERT和CHECKPOINT。
事务日志填满会导致1105错误:
   Can'tallocatespaceforobjectsyslogsindatabasedbnamebecause
   thelogsegmentisfull。Ifyouranoutofspaceinsyslogs,dump
   thetransactionlog。OtherwiseuseALTERDATABASEor
   sp_extendsegmenttoincreasethesizeofthesegment。

这种现象可能出现于任何一个数据库中,包括Master和TempDB。一些难以预见的因素可能消耗日志空间。例如:
一个大型事务,尤其像批量数据更新、插入或删除。
一个未提交的事务。
检查点处理程序截除时所需的带宽过大。
截除时超过阈值
上述各种条件互相作用的结果。
用于发布的标记事务没有被日志读取程序读走

下面是修复的步骤和收缩日志的步骤:

 1.在命令提示符下运行以下命令启动SQLSERVER
SQLSERVER-f-m

      备注:-m开关以单用户模式启动SQLSERVER。在单用户模式下,只能成功建立一个连接。请注意是否有任何其他客户机或服务可能会在您通过SQLSERVER查询分析器   建立连接前使用那个连接。

  2.重置置疑数据库的状态。
 sp_resetstatus'database_name'

下面是结果集:

 Database'database_name'statusreset!
 WARNING:YoumustrebootSQLSERVERpriortoaccessingthisdatabase!

3.用ALTERDATABASE向数据库添加一个数据文件或日志文件:

 USEmaster
 GO
 CREATEDATABASEdb_nameON
 (
 NAME=dbname_dat1,
 FILENAME='D://Data/dbname_dat1.ndf',
 SIZE=1000MB,
 FILEGROWTH=50MB
 )
 GO
 --更改该数据库以添加一个2GB大小的新数据文件
 ALTERDATABASEdb_name
 ADDFILE
 (
 NAME=dbname_dat2,
 FILENAME='F:/MSSQL/DATA/dbname_dat2.ndf',
 SIZE=2000MB,
 FILEGROWTH=50MB
 )
 GO
 --更改该数据库以添加一个1GB大小的新日志文件
 ALTERDATABASEdb_name
 ADDLOGFILE
 (NAME=db_name_log2,
  FILENAME='F:/MSSQL/Data/db_name_log2.ldf',
  SIZE=1000MB,
  FILEGROWTH=20MB),
 GO

  4.停止并重新启动SQLSERVER:
  用新的数据文件或日志文件所提供的额外空间,SQLSERVER应该能完成数据库的恢复。

    5.释放磁盘空间并且重新运行恢复操作,按照下面的步骤收缩日志。
 sp_resetstatus关闭数据库的置疑标志,但是原封不动地保持数据库的其它选项。


为从根本上解决这样的问题,你可以按下面的操作配置SQLSERVER2000:
a.如果不需要恢复到指定的时间点,你可以将数据库的恢复模式配置为简单,这样
UPDATE,DELETE,SELECT就不会记录日志,日志就不会增加的很大:

    USEMASTER

   GO
    ALTERDATABASEDB_NAMESETRECOVERYSIMPLE
b.如果你的恢复模式是全部,你一定要配置日志字段收缩:

   USEMASTER

   GO
   sp_dboption'databasename','trunc.logonchkpt.',true1

<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>