共計 3512 個字符,預計需要花費 9 分鐘才能閱讀完成。
SQL Server 中怎么刪除大容量日志,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面丸趣 TV 小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
1: 刪除 LOG
1:分離 企業管理器 - 服務器 - 數據庫 - 右鍵 - 分離數據庫
2:刪除 LOG 文件
3:附加數據庫 企業管理器 - 服務器 - 數據庫 - 右鍵 - 附加數據庫
此法生成新的 LOG,大小只有 520 多 K
再將此數據庫設置自動收縮
或用代碼:
下面的示例分離 77169database,然后將 77169database 中的一個文件附加到當前服務器。
EXEC sp_detach_db @dbname = 77169database
EXEC sp_attach_single_file_db @dbname = 77169database,
@physname = c:Program FilesMicrosoft SQL ServerMSSQLData77169database.mdf
2: 清空日志
DUMP TRANSACTION 庫名 WITH NO_LOG
再:
企業管理器 – 右鍵你要壓縮的數據庫 – 所有任務 – 收縮數據庫 – 收縮文件 – 選擇日志文件 – 在收縮方式里選擇收縮至 XXM, 這里會給出一個允許收縮到的最小 M 數, 直接輸入這個數, 確定就可以了
3: 不讓它增長
企業管理器 - 服務器 - 數據庫 - 屬性 - 事務日志 - 將文件增長限制為 2M
自動收縮日志, 也可以用下面這條語句
ALTER DATABASE 數據庫名
SET AUTO_SHRINK ON
故障還原模型改為簡單, 用語句是
USE MASTER
GO
ALTER DATABASE 數據庫名 SET RECOVERY SIMPLE
GO
———————————————————————————
截斷事務日志:
BACKUP LOG {database_name | @database_name_var}
{
[WITH
{NO_LOG | TRUNCATE_ONLY} ]
}
– 壓縮日志及數據庫文件大小
/*– 特別注意
請按步驟進行, 未進行前面的步驟, 請不要做后面的步驟
否則可能損壞你的數據庫.
–*/
1. 清空日志
DUMP TRANSACTION 庫名 WITH NO_LOG
2. 截斷事務日志:
BACKUP LOG 數據庫名 WITH NO_LOG
3. 收縮數據庫文件 (如果不壓縮, 數據庫的文件不會減小
企業管理器 – 右鍵你要壓縮的數據庫 – 所有任務 – 收縮數據庫 – 收縮文件
– 選擇日志文件 – 在收縮方式里選擇收縮至 XXM, 這里會給出一個允許收縮到的最小 M 數, 直接輸入這個數, 確定就可以了
– 選擇數據文件 – 在收縮方式里選擇收縮至 XXM, 這里會給出一個允許收縮到的最小 M 數, 直接輸入這個數, 確定就可以了
也可以用 SQL 語句來完成
– 收縮數據庫
DBCC SHRINKDATABASE(客戶資料)
– 收縮指定數據文件,1 是文件號, 可以通過這個語句查詢到:select * from sysfiles
DBCC SHRINKFILE(1)
4. 為了最大化的縮小日志文件 (如果是 sql 7.0, 這步只能在查詢分析器中進行)
a. 分離數據庫:
企業管理器 – 服務器 – 數據庫 – 右鍵 – 分離數據庫
b. 在我的電腦中刪除 LOG 文件
c. 附加數據庫:
企業管理器 – 服務器 – 數據庫 – 右鍵 – 附加數據庫
此法將生成新的 LOG,大小只有 500 多 K
或用代碼:
下面的示例分離 77169database,然后將 77169database 中的一個文件附加到當前服務器。
a. 分離
EXEC sp_detach_db @dbname = 77169database
b. 刪除日志文件
c. 再附加
EXEC sp_attach_single_file_db @dbname = 77169database,
@physname = c:Program FilesMicrosoft SQL ServerMSSQLData77169database.mdf
5. 為了以后能自動收縮, 做如下設置:
企業管理器 – 服務器 – 右鍵數據庫 – 屬性 – 選項 – 選擇 自動收縮
–SQL 語句設置方式:
EXEC sp_dboption 數據庫名, autoshrink, TRUE
6. 如果想以后不讓它日志增長得太大
企業管理器 – 服務器 – 右鍵數據庫 – 屬性 – 事務日志
– 將文件增長限制為 xM(x 是你允許的最大數據文件大小)
–SQL 語句的設置方式:
alter database 數據庫名 modify file(name= 邏輯文件名,maxsize=20)
——————————————————————————————-
/*– 壓縮數據庫的通用存儲過程
壓縮日志及數據庫文件大小
因為要對數據庫進行分離處理
所以存儲過程不能創建在被壓縮的數據庫中 /*
– 調用示例
exec p_compdb test
–*/
use master – 注意, 此存儲過程要建在 master 數據庫中
go
if exists (select * from dbo.sysobjects where id = object_id(N[dbo].[p_compdb]) and OBJECTPROPERTY(id, NIsProcedure) = 1)
drop procedure [dbo].[p_compdb]
GO
create proc p_compdb
@dbname sysname, – 要壓縮的數據庫名
@bkdatabase bit=1, – 因為分離日志的步驟中, 可能會損壞數據庫, 所以你可以選擇是否自動數據庫
@bkfname nvarchar(260)= – 備份的文件名, 如果不指定, 自動備份到默認備份目錄, 備份文件名為: 數據庫名 + 日期時間
as
–1. 清空日志
exec(DUMP TRANSACTION [+@dbname+] WITH NO_LOG)
–2. 截斷事務日志:
exec(BACKUP LOG [+@dbname+] WITH NO_LOG)
–3. 收縮數據庫文件 (如果不壓縮, 數據庫的文件不會減小
exec(DBCC SHRINKDATABASE([+@dbname+]))
–4. 設置自動收縮
exec(EXEC sp_dboption)
– 后面的步驟有一定危險, 你可以可以選擇是否應該這些步驟
–5. 分離數據庫
if @bkdatabase=1
begin
if isnull(@bkfname,)=
set @bkfname=@dbname+_+convert(varchar,getdate(),112)
+replace(convert(varchar,getdate(),108),:,)
select 提示信息 = 備份數據庫到 SQL 默認備份目錄, 備份文件名:+@bkfname
exec(backup database [+@dbname+] to )
end
– 進行分離處理
create table #t(fname nvarchar(260),type int)
exec(insert into #t select filename,type=status 0x40 from [+@dbname+]..sysfiles)
exec(sp_detach_db)
– 刪除日志文件
declare @fname nvarchar(260),@s varchar(8000)
declare tb cursor local for select fname from #t where type=64
open tb
fetch next from tb into @fname
while @@fetch_status=0
begin
set @s=del +rtrim(@fname)+
exec master..xp_cmdshell @s,no_output
fetch next from tb into @fname
end
close tb
deallocate tb
– 附加數據庫
set @s=
declare tb cursor local for select fname from #t where type=0
open tb
fetch next from tb into @fname
while @@fetch_status=0
begin
set @s=@s+,+rtrim(@fname)+
fetch next from tb into @fname
end
close tb
deallocate tb
exec(sp_attach_single_file_db)
go
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注丸趣 TV 行業資訊頻道,感謝您對丸趣 TV 的支持。