共计 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 的支持。