栏目分类
系统安全 | 服务器安全 | 网络安全 | 木马病毒 | 漏洞补丁 | 防火墙 | 系统安全 | 备份恢复 | 安全策略
系统优化 | 提速 | 优化性能 | 服务 | 清理垃圾
网络技巧 | 网络命令 | 网络技巧 | 网络访问 | 共享 | 网络管理
服务器技术 | Exchange | FTP服务器 | ISAServer | 域服务器 | Web服务器 | SQLServer | 其他服务器
系统技巧 | 系统管理 | 系统技巧 | 注册表 | 进程
windows新手入门 | 系统基础 | 网络基础 | 安装 | 技术前沿
系统故障 | 网络故障 | 开关机故障 | 系统故障 | 软件故障 | 当机故障
资讯动态
排行榜
·如何修复SQLSERVER数据库"置疑"问题
·SQLServer2000企业版安装教程(一)
·SQLServer2000企业版安装教程(二)
·Delphi与SQLServer存储过程编程详解
·SQLServer的数据类型介绍
·SQLServer2000企业版安装教程(三)
·SQLServerM复制和远程数据访问对比
·SQLServer扩展存储过程实现远程备份与恢复
·如何将DBF数据库转换成SQLServer表
·黑客是如何破解MSSQLSERCVER密码的
·PL/SQL开发中动态SQL的使用方法
·SQLServer2000中的触发器使用
·SQLServer的用户权限管理
·全面接触SQL语法(3)
·全面接触SQL语法(4)
·SQLServer索引结构及其使用(四)
·SQLServer索引结构及其使用(二)
·SQLServer2000汉字数据简繁转换实例
·SQLServer索引结构及其使用(一)
·简单查询和联合查询两方面介绍SQL查询语句

    您现在的位置: Linux宝库 >> Windows >> 服务器技术 >> SQLServer >> 文章正文
如何修复SQLSERVER数据库"置疑"问题
Linux宝库 收集整理  作者:Linux宝库  时间:2007-12-31  收藏本站
来自:http://doc.linuxpk.com/34178.html
联系:linuxmine#gmail.com
分类:[SQLServer]

  你可以看到在SQLSERVER 的ERROR LOG 和OS的应用程序日志中应该有1105的错误信息:

  SQL Server事务日志可能会被填满,这会阻止之后的数据库操作,包括UPDATE, DELETE, INSERT 和CHECKPOINT。

  事务日志填满会导致1105错误:

  Can't allocate space for object syslogs in database dbname because

  the logsegment is full。 If you ran out of space in syslogs, dump

  the transaction log。 Otherwise use ALTER DATABASE or

  sp_extendsegment to increase the size of the segment。

  这种现象可能出现于任何一个数据库中,包括Master和TempDB。一些难以预见的因素可能消耗日志空间。 例如:

  一个大型事务, 尤其像批量数据更新、插入或删除。

  一个未提交的事务。

  检查点处理程序截除时所需的带宽过大。

  截除时超过阈值

  上述各种条件互相作用的结果。

  用于发布的标记事务没有被日志读取程序读走

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

  1.在命令提示符下运行以下命令启动 SQL Server:

  SQLSERVER -f -m

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

  建立连接前使用那个连接。

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

  sp_resetstatus 'database_name'

  下面是结果集:

  Database'database_name'status reset!

  WARNING: You must reboot SQL Server prior to accessing this database!

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

  USE master

  GO

  CREATE DATABASE db_name ON

  (

  NAME = dbname_dat1,

  FILENAME = 'D:MSSQLDatadbname_dat1.ndf',

  SIZE = 1000MB,

  FILEGROWTH = 50MB

  )

  GO

  --更改该数据库以添加一个 2GB 大小的新数据文件

  ALTER DATABASE db_name

  ADD FILE

  (

  NAME = dbname_dat2,

  FILENAME = 'F:MSSQLDATAdbname_dat2.ndf',

  SIZE = 2000MB,

  FILEGROWTH = 50MB

  )

  GO

  --更改该数据库以添加一个1GB 大小的新日志文件

  ALTER DATABASE db_name

  ADD LOG FILE

  ( NAME = db_name_log2,

  FILENAME = 'F:MSSQLDatadb_name_log2.ldf',

  SIZE = 1000MB,

  FILEGROWTH = 20MB),

  GO

  4. 停止并重新启动 SQL Server:

  用新的数据文件或日志文件所提供的额外空间,SQL Server 应该能完成数据库的恢复。

  5. 释放磁盘空间并且重新运行恢复操作,按照下面的步骤收缩日志。

  sp_resetstatus 关闭数据库的置疑标志,但是原封不动地保持数据库的其它选项。

  为从根本上解决这样的问题,你可以按下面的操作配置SQLSERVER 2000:

  a.如果不需要恢复到指定的时间点,你可以将数据库的恢复模式配置为简单,这样

  UPDATE,DELETE,SELECT就不会记录日志,日志就不会增加的很大:

  USE MASTER

  GO

  ALTER DATABASE DB_NAME SET RECOVERY SIMPLE

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

  USE MASTER

  GO

  sp_dboption 'databasename','trunc. log on chkpt.',true

  sp_dboption 'databasename','autoshrink',true

  c.通过每日备份将日志收缩:

  BACKUP DATABASE DATABASE_NAME TO BACKUP_DEVICES

  BACKUP LOG DATABASE_NAME TO LOG_DEVICES

  OR

  BACKUP LOG DATABASE_NAME with truncate_only

  **检查日志的容量:DBCC SQLPERF (LOGSPACE) 这时日志并没有收缩!

  d.每天在备份数据库完成之后,重新启动MS SQLSERVER SERVICE.

  USE DATABASE_NAME

  go

  DBCC

  SHRINKFILE(2,truncateonly)

  **检查日志的容量:DBCC SQLPERF (LOGSPACE) 这时日志已经收缩!

  e.手动快速收缩日志:

  / *run

  below

  script,you

  will

  shrink

  you

  database

  log

  files

  immediately,

  in

  my

  experience,you

  need

  to

  run

  the

  script

  for

  3

  or

  4

  minutes

  before stopping

  it

  manually

  */

  use

  databasename

  dbcc

  shrinkfile(2,notruncate)

  dbcc

  shrinkfile(2,truncateonly)

  create

  table

  t1(char1

  char(4000))

  go

  declare

  @i

  int

  select

  @i=0

  while(1=1)

  begin

  while(@i<100)

  begin

  INSERT

  INTO

  T1

  VALUES

  ('A')

  SELECT

  @I=@I+1

  END

  TRUNCATE

  table

  T1

  BACKUP

  LOG

  youdatabasename

  with

  truncate_only

  end

  GO

  注意

  只有在您的主要支持提供者指导下或有疑难解答建议的做法时,才可以使用

  sp_resetstatus。否则,可能会损坏数据库。

  由于该过程修改了系统表,系统管理员必须在运行 sp_resetstatus这个过程前,启用系统表更新。要

  启 用更新,使用下面的过程:

  USE master

  GO

  sp_configure 'allow updates', 1

  GO

  RECONFIGURE WITH OVERRIDE

  GO

  过程创建后,立即禁用系统表更新:

  sp_configure 'allow updates', 0

  GO

  RECONFIGURE WITH OVERRIDE

  GO

  只有系统管理员才能执行 sp_resetstatus。执行该过程后,立即关闭 SQL Server

  

   本文来自:http://doc.linuxpk.com/34178.html
发表您的高见!

·上一篇:
SQLServer存储过程编写经验和优化措施
·下一篇:SQL中UNION与UNIONALL的区别分析
 
     最新更新
·榨干MSSQLServer最后一滴血
·SQLINJECTION的SQLServer安全设置
·SQLServer数据库的查询优化及分页算法(1)
·SQLServer数据库的查询优化及分页算法(2)
·SQLServer数据库的查询优化及分页算法(3)
·SQLServer2000中生成XML的小技巧
·保护SQLServer:为安全性而安装
·SQLServer2000数据库文件损坏时如何恢复
·SQLServer数据仓库的构建与分析
·SQL的三个主要语句及一点技巧
·SQLServer连接中三个最常见错误原因分析
·SQLServer.net和OLEDB.net连接数据库比较
·SQLService2000的全文搜索的整理
·SQLServer2005中的分区表和索引(1)
·SQLServer2005中的分区表和索引(2)
·SQLServer2005中的分区表和索引(3)
·SQL中两台服务器间使用连接服务器
·SQLServer2000数据库置疑的解决方法
·小技巧:解密SQL2000的存储过程
·SQLServer数据库的备份与恢复
·SQLServer数据库的备份与恢复
·PL/SQL中的多进程通信技术简介
·有孔就入SQLInjection的深入探讨
·SQL高手篇:精妙SQL语句说明介绍
·一个SqlServer数据恢复实例案例
·从MDF文件恢复SqlServer2000数据库
·SQLServer2000之日志传送功能(1)
·SQLServer2000之日志传送功能(2)
·SQLServer2000之日志传送功能(3)
·MSSQLServer2k数据转换服务部署