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:\MSSQL\Data\dbname_dat1.ndf',
SIZE = 1000MB,
FILEGROWTH = 50MB
)
GO
--更改该数据库以添加一个 2GB 大小的新数据文件
ALTER DATABASE db_name
ADD FILE
(
NAME = dbname_dat2,
FILENAME = 'F:\MSSQL\DATA\dbname_dat2.ndf',
SIZE = 2000MB,
FILEGROWTH = 50MB
)
GO
--更改该数据库以添加一个1GB 大小的新日志文件
ALTER DATABASE db_name
ADD LOG FILE
( NAME = db_name_log2,
FILENAME = 'F:\MSSQL\Data\db_name_log2.ldf',
SIZE = 1000MB,
FILEGROWTH = 20MB),
GO
4. 停止并重新启动 SQL Server:
用新的数据文件或日志文件所提供的额外空间,SQL Server 应该能完成数据库的恢复。
取消
评论