SQL Server中怎么删除大容量日志

39次阅读
没有评论

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

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计3512字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)