SQL Server 因為硬碟壞掉,造成了ErrorLog
成長速度飛快,直接把 C 槽吃到沒有空間,一路長到21.6 GB,還有一大堆 Dump 的 檔案就佔了 40 G。
只好把有問題的 DB 都刪掉或是卸載掉,把
Dump 的紀錄檔都刪除,剩下就是這個肥大的 ERRORLOG 了。
為了不重啟服務,只好用來回收當前的 Log,因為 ERRORLOG 數量最少為 6,所以跑七次後就都清空了。
EXEC sp_cycle_errorlog;
EXEC msdb.dbo.sp_purge_jobhistory @oldest_date = '20180101';alter database 資料庫名稱 set emergency
go
FOR ATTACH_FOURCE_REBUILD_LOG 就可以重建 LOG 檔並指定路徑
CREATE DATABASE [資料庫名稱] ON
(FILENAME = N'F:\SQLData\MSSQL\資料庫名稱_Data.MDF')
FOR ATTACH_FORCE_REBUILD_LOG
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[TR_TestTable_Modify] on [dbo].[TestTable]
AFTER UPDATE
AS
BEGIN
DECLARE @DBTableID int;
DECLARE @Columnid int;
DECLARE @ColumnCount int;
DECLARE @i int;
DECLARE @ColumnName varchar(20);
DECLARE @SQL varchar(4000);
DECLARE @LogTime datetime;
DECLARE @program nvarchar(200)
SELECT @DBTableID=id from sysobjects where name='TestTable'
SELECT @ColumnCount=MAX(column_id) FROM sys.columns WHERE [object_id]=@DBTableID
SELECT @program=program_name from sys.dm_exec_sessions where session_id=@@SPID
select * into #inserted from inserted;
select * into #deleted from deleted;
SET @i = 0
SET @LogTime=GETDATE()
WHILE @i < @ColumnCount
BEGIN
SET @i = @i+1
SELECT @ColumnName=name FROM sys.columns WHERE [object_id]=@DBTableID AND column_id=@i
SET @SQL = 'INSERT INTO LogTable SELECT a.invno,''‘TestTable'',''' + @ColumnName + ''',a.' + @ColumnName + ',b.'+ @ColumnName + ',''' + convert(varchar(30), @LogTime,121) + ''',''' + @program + ''' FROM #deleted a,#inserted b WHERE a.PK=b.PK AND a.' + @ColumnName + ' <> b.' + @ColumnName
EXEC (@SQL)
END
drop table #inserted;
drop table #deleted;
END
GO