收缩事务日志

GOODlovelife001 2010-05-12 10:30:57
收缩事务日志前需要备份日志或者数据吗
收缩事务日志会使日志丢失吗
...全文
524 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jwwyqs 2010-05-12
  • 打赏
  • 举报
回复
--压缩日志及数据库文件大小

/*--特别注意

请按步骤进行,未进行前面的步骤,请不要做后面的步骤
否则可能损坏你的数据库.


一般不建议做第4,6两步
第4步不安全,有可能损坏数据库或丢失数据
第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.
--*/

--下面的所有库名都指你要处理的数据库的库名

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

或用代码:
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。

a.分离
EXEC sp_detach_db @dbname = '库名'

b.删除日志文件

c.再附加
EXEC sp_attach_single_file_db @dbname = '库名',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\库名.mdf'

5.为了以后能自动收缩,做如下设置:
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"

--SQL语句设置方式:
EXEC sp_dboption '库名', 'autoshrink', 'TRUE'

6.如果想以后不让它日志增长得太大
企业管理器--服务器--右键数据库--属性--事务日志
--将文件增长限制为xM(x是你允许的最大数据文件大小)

--SQL语句的设置方式:
alter database 库名 modify file(name=逻辑文件名,maxsize=20)
GOODlovelife001 2010-05-12
  • 打赏
  • 举报
回复
回答到位 谢谢加内特

永生天地 2010-05-12
  • 打赏
  • 举报
回复
用BACKUP LOG database WITH NO_LOG清除日志

把数据库属性中的故障还原模型改为“简单”可以大大减慢日志增长的速度。

如果把还原模型调到简单,这样就不支持时间点还原了,但是日志文件会很小,如果数据比较重要推荐还是把数据库的还原模型调为完全

用BACKUP LOG database WITH NO_LOG命名后,会截断不活动日志,不减小物理日志文件的大小,但逻辑日志会减小,收缩数据库后会把不活动虚拟日志删除来释放空间,不会损坏数据。

如果日志被截断并收缩数据库后,就不能直接用最近的一个全库备份做时间点还原,建议立即备份数据库,以防万一。

2、sql server运行中,是否能删除主数据库事务日志文件
步骤如下:(1)、分离数据库企业管理器--数据库--右击你要删除日志的数据库--所有

任务--分离数据库
(2)、然后删除日志文件
(3)、然后再附加数据库
企业管理器--数据库--右击数据库--所有任务--附加数据库这时候只附加。mdf就可以了。

3、压缩SQL数据库及日志的详细方法

SQL Server 2000基础教程——压缩数据库数据库在使用一段时间后,时常会出现因数据删除而造成数据库中空闲空间太多的情况,这时就需要减少分配给数据库文件和事务 日志文件的磁盘空间,以免浪费磁盘空间。当数据库中没有数据时,可以修改数据库文件属性直接改变其占用空间,但当数据库中有数据时,这样做会破坏数据库中 的数据,因此需要使用压缩的方式来缩减数据库空间。可以在数据库属性选项中选择“Auto shrink”选项,让系统自动压缩数据库,也可以用人工的方法来压缩。人工压缩数据库有以下两种方式:

1、用Enterprise Manager 压缩数据库

在Enterprise Manager 中在所要压缩的数据库上单击右键,从快捷菜单中的“所有任务(All Tasks)”中选择“Shrink Database(压缩数据库)”选项,就会出现如图6-10 所示的对话框。可以在图6-10 所示的对话框中选择数据库的压缩方式,也可以选择使用压缩计划或压缩单个文件单击图6-10 中的“Files”按钮,会出现如图6-11 所示的压缩数据库文件对话框,可以针对每个数据库文件进行不同的压缩设置。

单击图6-10 中的“Change” 按钮,会出现如图6-12 所示的压缩计划编辑对话框,可以指定压缩计划的执行方式。单击图6-12 中的“Change” 按钮,会出现如图6-13 所示的循环工作计划编辑对话框,可以编辑计划执行的周期或时间点。设置完成后单击“OK” 按钮就开始压缩数据库,在压缩结束后会显示一个压缩情况信息框。


2、用Transact-SQL 命令压缩数据库

可以使用DBCC SHRINKDATABASE 和DBCC SHRINKFILE 命令来压缩数据库。其中DBCC SHRINKDATABASE 命令对数据库进行压缩,DBCC SHRINKFILE 命令对数据库中指定的文件进行压缩。
(1) DBCC SHRINKDATABASE
DBCC SHRINKDATABASE 命令语法如下:
DBCC SHRINKDATABASE (database_name [, target_percent]
[, {NOTRUNCATE | TRUNCATEONLY}] )
各参数说明如下:
?target_percent 指定将数据库压缩后,未使用的空间占数据库大小的百分之几。如果指定的百分比过大,超过了压缩前未使用空间所占的比例,则数据库不会被压缩。并且压缩后的数据库不能比数据库初始设定的容量小。
?NOTRUECATE
将数据库缩减后剩余的空间保留在数据库,中不返还给操作系统

。如果不选择此选项,则剩余的空间返还给操作系统。
?TRUNCATEONLY
将数据库缩减后剩余的空间返还给操作系统。使用此命令时SQL Server 将文件缩减到最后一个文件分配,区域但不移动任何数据文件。选择此项后,target_percent 选项就无效了。例6-14: 压缩数据库mytest 的未使用空间为数据库大小的20%


dbcc shrinkdatabase (mytest, 20)
运行结果如下:
DBCC execution completed. If DBCC printed error

messages, contact your system administrator.
(2) DBCC SHRINKFILE
DBCC SHRINKFILE 命令压缩当前数据库中的文件。其语法如下:
DBCC SHRINKFILE ( {file_name | file_id }
{ [, target_size] |
[, {EMPTYFILE | NOTRUNCATE | TRUNCATEONLY}] } )
各参数说明如下:
?file_id
指定要压缩的文件的鉴别号(Identification number, 即ID)

。文件的ID 号可以通过 FILE_ID()函数或如本章前面所讲述

的Sp_helpdb 系统存储过程来得到。

?target_size

指定文件压缩后的大小。以MB 为单位。如果不指定此选项,SQL Server 就会尽最大可能地缩减文件。

?EMPTYFILE

指明此文件不再使用,将移动所有在此文件中的数据到同一文件组中的其它文件中去。执行带此参数的命令后,此文件就可以用ALTER DATABASE 命令来删除了。 其余参数NOTRUNCATE 和TRUNCATEONLY 与DBCC SHRINKDATABASE

命令中的含义相同。 例6-15: 压缩数据库mydb 中的数据库文件mydb_data2 的大小到1MB。 use mydb dbcc shrinkfile (mydb_data2, 1)



企业管理器里面的方法:
1、打开企业管理器
2、打开要处理的数据库
3、点击最上面菜单>工具>SQL查询分析器,打开SQL查询分析器
4、在输入窗口里面输入:

Code:
DUMP TRANSACTION [数据库名] WITH NO_LOG
BACKUP LOG [数据库名] WITH NO_LOG
DBCC SHRINKDATABASE([数据库名])


点击绿色的小三角(或按F5)执行查询,等状态栏提示处理完成

即可!


程序里面的方法:
压缩数据库日志
--1.清空日志
exec(’DUMP TRANSACTION [’+@dbname+’] WITH NO_LOG’)
--2.截断事务日志:
exec(’BACKUP LOG [’+@dbname+’] WITH NO_LOG’)
--3.收缩数据库文件(如果不压缩,数据库的文件不会减小
exec(’DBCC SHRINKDATABASE([’+@dbname+’])’)


  4、减小日志的方法:

一、用如下步做了:
1、DUMP TRANSACTION 库名 WITH no_log
2、dbcc shrinkfile(logfilename)
3、收缩数据库
4、设定自动收缩。

  二、分离数据库,删除日志文件,再附加,OK!右击数据库--所有任务--分离or 附加

  三、1、backup log 库名 WITH no_log,2、dbcc shrinkfile(logfilename),3、收缩数据库
4、设定自动收缩。
ws_hgo 2010-05-12
  • 打赏
  • 举报
回复
方法一:



1.右键在清除日志的数据库,如“TestDB”,点击[新建查询(Q)]
2.输入以下SQL语句,其中“TestDB”是数据库名称

DUMP TRANSACTION TestDB WITH NO_LOG
3.执行该SQL,成功后继续以下操作

4.右键该数据库节点,点击[任务(T)] -> [收缩(S)] -> [文件(F)]

5.在弹出的“收缩文件”对话框中,将“文件类型(T)”选为“日志”,将“收缩操作”选中“在释放未使用的空间前重新组织页(O)”

6.在“将文件收缩到(K)”文本框中输入后面提示的最小大小的数值,点击[确定]即可。



方法二:

DUMP TRANSACTION TestDB WITH NO_LOG
BACKUP LOG TestDB WITH NO_LOG
DBCC SHRINKDATABASE(TestDB)
Garnett_KG 2010-05-12
  • 打赏
  • 举报
回复
收缩事务日志前需要备份日志或者数据吗
>>
要备份数据,如果从来没有备份过的话。
日志是一定要备份的。


收缩事务日志会使日志丢失吗
>>
可能会.如果你使用Truncate_only的话。
kahoho 2010-05-12
  • 打赏
  • 举报
回复
JF...
junyun414 2010-05-12
  • 打赏
  • 举报
回复
弱弱的路过,不敢说话...
SQL77 2010-05-12
  • 打赏
  • 举报
回复
在下列情况下,日志文件的物理大小将减小:

执行 DBCC SHRINKDATABASE 语句时


执行引用日志文件的 DBCC SHRINKFILE 语句时


自动收缩操作发生时


首先,可通过日志截断操作收缩日志。日志截断不会减小物理日志文件的大小。但是,它却能减小逻辑日志的大小,并将不包含任何逻辑日志的虚拟日志标记为不活动。日志收缩操作会删除足够多的不活动虚拟日志,将日志文件减小到要求的大小。

减小是以虚拟日志文件为单位进行的。例如,如果有一个 600 MB 的日志文件分为六个 100 MB 的虚拟日志,则该日志文件的大小只能按 100 MB 递减。文件可以减小为 500 MB 或 400 MB,但不能减小为 433 MB 或 525 MB。

注意:
日志文件的大小是由数据库引擎在创建或扩展日志文件时动态选择的。有关详细信息,请参阅事务日志物理体系结构。



包含逻辑日志的虚拟日志文件不能释放。如果某个日志文件中的所有虚拟日志文件均包含逻辑日志,则直到截断操作在物理日志的末端将虚拟日志标记为不活动时,才能收缩该文件。

在收缩任何文件时,必须从文件的末端开始释放空间。在收缩事务日志文件时,将从日志文件的末端释放足够的虚拟日志文件,以便将日志减小到用户所要求的大小。用户指定的 target_size 将圆整为下一个最大的虚拟日志文件边界。例如,如果用户为包含 100 MB 虚拟日志文件的 600 MB 的示例文件指定 325 MB 的 target_size,则最后两个虚拟日志文件将删除,新的文件大小为 400 MB。

DBCC SHRINKDATABASE 或 DBCC SHRINKFILE 操作会立即尝试将物理日志文件收缩为所要求的大小。

如果虚拟日志文件中的逻辑日志未超出 target_size 标记,则释放 target_size 标记之后的虚拟日志文件,并成功完成 DBCC 语句,不显示任何信息。


如果虚拟日志中的逻辑日志超出了 target_size 标记,SQL Server Database Engine 将释放尽可能多的空间并显示一个信息性消息。该消息告诉您必须执行什么操作来从文件尾部的虚拟日志中删除逻辑日志。执行完该操作后,可以重新发出 DBCC 语句以释放剩余的空间。

例如,当运行 target_size 为 275 MB 的 DBCC SHRINKFILE 语句时,假设有一个包含六个虚拟日志文件的 600 MB 日志文件,其中有一个逻辑日志从第 3 个虚拟日志开始,到第 4 个虚拟日志结束,则:


第 5 个和第 6 个虚拟日志文件将立即释放,因为它们不包含逻辑日志。但是,若要符合指定的 target_size,还应释放第 4 个虚拟日志文件,但由于它包含了逻辑日志的尾部,所以不能释放。在释放了第 5 个和第 6 个虚拟日志文件之后,数据库引擎 将用虚记录填充第 4 个虚拟日志文件的剩余部分。这会强制地使日志文件的尾部成为第 1 个虚拟日志文件的尾部。在大多数系统中,第 4 个虚拟日志文件中的所有事务都将在数秒内提交。这意味着日志的整个活动部分将移动到第 1 个虚拟日志文件。现在该日志文件类似于:


DBCC SHRINKFILE 语句还显示一个信息性消息,指出它不能释放所要求的全部空间,并告诉您可以执行 BACKUP LOG 语句来释放剩余的空间。日志的活动部分移动到第 1 个虚拟日志文件之后,BACKUP LOG 语句将截断第 4 个虚拟日志文件中的整个逻辑日志:


由于第 4 个虚拟日志文件不再包含任何逻辑日志,此时便可以运行 target_size 为 275 MB 的相同的 DBCC SHRINKFILE 语句了。第 4 个虚拟日志文件将被释放,物理日志文件的大小将减小到所要求的大小。

SQL_Server_Central 2010-05-12
  • 打赏
  • 举报
回复
这个msdn也有
http://msdn.microsoft.com/zh-cn/library/ms178037.aspx
SQL_Server_Central 2010-05-12
  • 打赏
  • 举报
回复
SF.
小猫阿尤 2010-05-12
  • 打赏
  • 举报
回复
不知道。。。

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧