你可以看到在SQLSERVER 的ERROR LOG 和OS的應用程序日志中應該有
SQL Server事務日志可能會被填滿
事務日志填滿會導致
Can
the logsegment is full
the transaction log
sp_extendsegment to increase the size of the segment
這種現象可能出現於任何一個數據庫中
一個大型事務
一個未提交的事務
檢查點處理程序截除時所需的帶寬過大
截除時超過阈值
上述各種條件互相作用的結果
用於發布的標記事務沒有被日志讀取程序讀走
下面是修復的步驟和收縮日志的步驟:
SQLSERVER
備注
sp_resetstatus
下面是結果集
Database
WARNING: You must reboot SQL Server prior to accessing this database!
USE master
GO
CREATE DATABASE db_name ON
(
NAME = dbname_dat
FILENAME =
SIZE =
FILEGROWTH =
)
GO
ALTER DATABASE db_name
ADD FILE
(
NAME = dbname_dat
FILENAME =
SIZE =
FILEGROWTH =
)
GO
ALTER DATABASE db_name
ADD LOG FILE
( NAME = db_name_log
FILENAME =
SIZE =
FILEGROWTH =
GO
用新的數據文件或日志文件所提供的額外空間
sp_resetstatus 關閉數據庫的置疑標志
為從根本上解決這樣的問題
a
UPDATE
USE MASTER
GO
ALTER DATABASE DB_NAME SET RECOVERY SIMPLE
b
USE MASTER
GO
sp_dboption
sp_dboption
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
USE DATABASE_NAME
go
DBCC SHRINKFILE(
**檢查日志的容量:DBCC SQLPERF (LOGSPACE) 這時日志已經收縮!
e
/ *run below script
immediately
use databasename
dbcc shrinkfile(
dbcc shrinkfile(
create table t
go
declare @i int
select @i=
while(
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。tW.wIngwiT.CoM否則,可能會損壞數據庫。
由於該過程修改了系統表,系統管理員必須在運行 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
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22242.html