sql收缩数据库日志
㈠ 数据库日志文件过大如何收缩
网页链接我是用这个方法收缩的,可以将日志收缩到1MB
守得云开见月明,花了一个上午结合前辈的博客,终于弄好了sqlserver2008的数据库日志收缩到1MB,分享给大家
# 方法步骤
1、执行SQL语句改成“简单模式”
2、收缩数据库
3、执行SQL语句改回“完全模式”
## 第一步:执行SQL语句改成“简单模式”
USE [master]
GO
ALTER DATABASE SlowXWebDB (改成你需要进行收缩的数据库名) SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE SlowXWebDB (改成你需要进行收缩的数据库名) SET RECOVERY SIMPLE --改成简单模式
GO
## 第二步:进行数据库操作
相关界面截图和操作
假定:
数据库名:SlowXWebDB
日志文件名:SlowXWebDB_Log
## 第三步:执行SQL语句改成“完全模式”
USE [master]
GO
ALTER DATABASE SlowXWebDB (改成你需要进行收缩的数据库名)SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE datebaseName(改成你需要进行收缩的数据库名)SET RECOVERY FULL --还原为完全模式
GO
==最后不要忘记实测下数据库是否能够正常使用==
网页链接
㈡ SQL数据库中日志收缩、截断等等是什么
如:shgzts为数据库名
mp transaction shgzts with no_log --截断日志
backup log shgzts with no_log --备份日志
dbcc shrinkdatabase(shgzts,truncateonly) --数据库收缩
㈢ SQL Server 2000数据库的事务日志文件过大,如何将其缩小
拷獯穑涸赟QL Server中,所有对数据库执行的更新操作都会记录在数据库的事务日志文件中,除非将数据库设为可自动收缩的或手动 的对数据库进行了收缩,否则事务日志文件将一直增长,直到达到事先设定的日志文件增长上限或用尽所有可用的磁盘空间。如果当前的数据库文件或日志文件过大,可以使用以下两个命令对其进行收缩:DBCC SHRINKDATABASE:收缩指定数据库的所有数据和日志文件的大小DBCC SHRINKFILE: 收缩数据库的某个指定数据或日志文件的大小 这两个命令可以释放数据库中的空闲空间,并将数据库或指定的数据库文件收缩到指定的大小,但收缩后的数据文件或日志文件的大小不会小于档中现存的有效数据所占空间的大小。 关于这两个命令的具体使用方法,可以参考SQL Server 2000联机丛书中的相应主题。另外,也可在SQL Server企业管理器中执行数据库收缩,同样是调用的以上两个命令,效果类似。 在使用以上命令收缩日志文件的时候需要注意,已写入数据库但未被截断的事务日志记录是不会被收缩的,因为虽然这部分日志记录的信息已经写入数据库文件,但在使用事务日志备份进行数据库还原的时候,还将用到其中的信息。 对于使用简单恢复模型的数据库,事务日志会在每次处理检查点(CheckPoint)时自动被截断。对于使用完全恢复模型或大容量日志记录恢复模型的数据库,事务日志只有在执行日志备份(BACKUP LOG)时才会被截断,这时事务日志中记录的信息被写入事务日志备份文件,而它们所占用的这部分空间被标记为可用(即被截断)。 截断事务日志并不会使日志文件变小,但可以将其中的部分空间释放供以后写入新的日志记录使用。若要减少日志文件的物理大小,则要使用上面提到的DBCC SHRINKDATABASE和DBCC SHRINKFILE命令。 在执行BACKUP LOG语句的时候,还可以使用WITH NO_LOG(或WITH TRUNCATE_ONLY,含义相同)参数,这时并不真正备份事务日志,而只是截断事务日志中的非活动部分(这和普通的BACKUP LOG语句作用相同)。这适合于剩余磁盘空间不够进行事务日志备份或不打算保留事务日志中的非活动部分用于数据库恢复的情况。 为避免事务日志文件增长过快以致用尽所有磁盘空间的现象发生,一种办法是将数据库设为使用简单恢复模型,这样可以使SQL Server周期性的自动截断事务日志的非活动部分,并回收其占用的空间供以后写入事务日志记录使用。但这将使数据库无法利用事务日志备份还原到实时点,降低了数据库的可靠性,因此一般不应用于生产型数据库。 对于生产型数据库,推荐的做法是使用完全恢复模型,并定期进行数据库的完全备份和事务日志备份。例如每周执行一次完全备份,每天执行一次事务日志备份,这可以通过SQL Server企业管理器中的数据库维护计划向导很方便的实现(一般可以设为在每天夜里业务不繁忙的某个时刻自动执行备份)。 通过定期执行数据库的事务日志备份,可以避免日志文件的迅速增大,而使其保持一个比较稳定的大小。虽然数据库备份文件也会占用很多磁盘空间,但随时可以将这些文件移到其他磁盘上或在不需要它们的时候将其删除,而且可以在出现故障或误操作的时候方便的进行数据库的还原。 由于数据文件的大小是随数据库中数据量的增长而增长的,数据库中已删除的数据所占的空间可以供新插入的资料使用;而在定期执行了事务日志的备份后,我们可以将日志文件的大小控制在一个比较合理的范围。因此,一般不需要对数据库进行收缩,也不推荐将数据库设为自动收缩模式。建议仅在以下情况下执行数据库的收缩:1、磁盘空间不足2、数据文件很大,但其中只包含较少量的数据(可能是以前有大量数据,但后来删除了很多),并且预期今后数据库中的数据量也不会很大。3、由于长期未进行事务日志备份,导致事务日志文件过大。减小事务日志文件大小的另一种方法是:首先在该数据库中执行CHECKPOINT命令,然后将该数据库分离(Detach),再将与其对应的数据库日志文件(.ldf文件)改名或删除或移动到其他目录下,然后执行sp_attach_single_file_db存储过程或在企业管理器中重新将其附加(Attach)。由于找不到原来的日志文件,SQL Server将自动为该数据库建立一个大小只有504K的日志文件。但这种方法必须暂时将数据库脱机,因此一般不适宜在生产环境中使用。如果当前数据库的事务日志文件过大,必须对其进行收缩的话,建议参照以下步骤:1、建议首先备份数据库(但不是必需的):BACKUP DATABASE database_name TO backup_device
2、备份事务日志:BACKUP LOG database_name TO backup_device如果不需要当前事务日志中的记录进行数据库还原或没有足够的空间进行事务日志备份的的话,也可仅执行以下命令截断事务日志:BACKUP LOG database_name WITH NO_LOG
3、收缩日志文件:DBCC SHRINKFILE (log_file_name)其中log_file_name是事务日志文件的逻辑名称,可以在企业管理器中数据库属性的“事务日志”页中看到(如Northwind数据库的默认事务日志文件逻辑名称为Northwind_log)。4、如果日志文件仍然较大的话,可以尝试重复执行一次BACKUP LOG WITH NO_LOG和DBCC SHRINKFILE命令。5、如果这时仍没有明显的效果,请执行DBCC OPENTRAN (database_name)检查当前数据库中是否存在长时间未提交的活动事务。有必要的话,可以断开这些连接并重新尝试截断事务日志和收缩日志文件。6、日志文件收缩完成后,建议立即执行一次数据库的完全备份并根据实际需要制定适当的数据库备份计划。
㈣ SQL Server 压缩日志及数据库文件大小
请按步骤进行 未进行前面的步骤时 请不要做后面的步骤 以免损坏你的数据库
一般不建议做第 两步 第 步不安全 有可能损坏数据库或丢失数据 第 步如果日志达到上限 则以后的数据库处理会失败 在清理日志后才能恢复
清空日志
DUMP TRANSACTION 库名 WITH NO_LOG
截断事务日志
BACKUP LOG 数据库名 WITH NO_LOG
收缩数据库文件(如果不压缩 数据库的文件不会减小
企业管理器 右键你要压缩的数据库 所有任务 收缩数据库 收缩文件
选择日志文件 在收缩方式里选择收缩至XXM 这里会给出一个允许收缩到的最小M数 直接输入这个数 确定就可以了
选择数据文件 在收缩方式里选择收缩至XXM 这里会给出一个允许收缩到的最小M数 直接输入这个数 确定就可以了
也可以用SQL语句来完成
收缩数据库
DBCC SHRINKDATABASE(客户资料)
收缩指定数据文件 是文件号 可以通过这个语句查询到:
select * from sysfiles
DBCC SHRINKFILE( )
为了最大化的缩小日志文件(如果是sql 这步只能在查询分析器中进行)
a 分离数据库:
企业管理器 服务器 数据库 右键 分离数据库
b 在我的电脑中删除LOG文件
c 附加数据库:
企业管理器 服务器 数据库 右键 附加数据库
此法将生成新的LOG 大小只有 多K
或用代码
下面的示例分离 pubs 然后将 pubs 中的一个文件附加到当前服务器
a 分离
EXEC sp_detach_db @dbname = pubs
b 删除日志文件
c 再附加
EXEC sp_attach_single_file_db @dbname = pubs
@physname = c:/Program Files/Microsoft
SQL Server/MSSQL/Data/pubs mdf
为了以后能自动收缩 做如下设置
企业管理器 服务器 右键数据库 属性 选项 选择 自动收缩
SQL语句设置方式:
EXEC sp_dboption 数据库名
autoshrink TRUE
如果想以后不让它日志增长得太大
企业管理器 服务器 右键数据库 属性 事务日志
将文件增长限制为xM(x是你允许的最大数据文件大小)
SQL语句的设置方式:
lishixin/Article/program/SQLServer/201311/22266
㈤ sql server怎么收缩日志
一、确认恢复模式。以下是使用 SQL Server Management Studio 检查数据库的恢复模式。
㈥ sql 2012收缩日志需要停镜像吗
sql收缩日志不需要停止镜像。
sql在不停止镜像的情况下神州可以收缩日志。先分离数据库,然后删除日志文件,再附件数据库。2.收缩文件,选择日志文件,设置将文件收缩到0M,试了一下,只能从65G收缩到55G,也就是只释放了未使用的空间。
不用第三方工具而只使用sql server本身的功能有两种方法。第一种比较简单,在操作数据库的时候,首先用begin tran语句显式的标记一个事务,然后删除数据,袜配如果确定需要恢复,则执行rollback tran语句,删除操作就会被回滚。使用begin tran语句标记事务,如果不需要回滚,则使用commit tran进行提交,提告瞎指交后就不能再回滚了。
㈦ sql收缩数据库日志的几种办法
在SQL Server 2000/2005中可以快速压缩日志log文件,通过SQL,
方法一:
--BigData为数据库名
DUMPTRANSACTIONBigDataWITHNO_LOG
BACKUPLOGBigDataWITHNO_LOG
DBCCSHRINKDATABASE(BigData)
执行以上语句可以快速压缩日志文件到1M。
但是以上语句中前两行在SQL Server 2008下无法执行 ,
第一行提示“Incorrect syntax near the keyword 'TRANSACTION'.”
第二行提示“One or more of the options (no_log) are not supported for this statement. Review the documentation for supported options. ”
第三行可以执行。但日志log文件没有任何变化。
原来SQL Server 2008已经不再支持DUMPTRANSACTION和BACKUP LOG WITH NO_LOG,
sql Server 2005说明中明确:包含 DUMP 语句是为了向后兼容。而 后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 使用 BACKUP。
SQL Server 2008说明:BACKUP LOG WITH NO_LOG 和 WITH TRUNCATE_ONLY 选项已废止。使用完整恢复模式或大容量日志恢复模式时,如果必须删除数据库中的日志备份链,请切换至简单恢复模式。有关详细信息,请参阅有关从完整恢复模式或大容量日志恢复模式切换的注意事项。
方法二:
useDB_NAME
sp_dboptionDB_NAME,"trunc.logonchkpt.",true
checkpoint
sp_dboptionDB_NAME,"autoshrink",true
方法三:(请提前备份文件!!)
Detach数据库。
删除log文件。
附加数据库,选移除log文件,此时SQL Server 会自动重新建立一个512K 的Log 文件。
方法四:
USEBigData;
GO
BACKUPLOGDATABASENAMETODISK='d: est.bak'
--.
DBCCSHRINKFILE(Bigdata_Log,1);
GO
㈧ sql server 数据库怎样压缩数据库日志文件
具体方法有3种。
方法一:
第一步:
backup
log
database_name
with
no_log
或者
backup
log
database_name
with
truncate_only
--
no_log和truncate_only是在这里衡中是同义的,随便执行哪一句都可以。
第二步:
1.收缩特定数据库的所有数据和日志文件,执行:
dbcc
shrinkdatabase
(database_name,[,target_percent])
--
database_name是谨誉要收缩的数据库名称;target_percent是数据库收缩后的数据库文件中所要的剩余可用空间百分比。
2.收缩一次一个特定数据库中的数据或日志文件,执行
dbcc
shrinkfile(file_id,[,target_size])
--
file_id是要收缩的文件的标识
(ID)
号,若要获得文件
ID,请使用
FILE_ID
函数或在当前数据库中搜索
sysfiles;target_size是用兆字节表示的所要的文件大小(用整数表示)。如果没有指定,dbcc
shrinkfile
将文件大小减少到默认文件大小。两个dbcc都可以带上参数notruncate或truncateonly,具体意思查看联机帮助.
方法二:
第一步:
先备份整个数据库以备不测
。
第二步:
备份结束后,在Query
Analyzer中执行如下的语句:
exec
sp_detach_db
yourDBName,true
--卸除这个DB在MSSQL中的注册信息
第三步:
到日志的物理文件所在的目录中去删除该日志文件或者将该日志文件移出该目录
第四步:
在Query
Analyzer中执行如下的语句:
exec
sp_attach_single_file_db
yourDBName,'
d:\mssql\data\yourDBName_data.mdf
'
--以单文件的方式注册该DB,如果成功则MSSQL将自动为这个DB生成一个500K的日志文件。
方法三:
1.
进入企业管理器,选中数据库,比如demo
2.
所有任务->分离数据库
3.
到数据库文件的存放目录,将MuOnline_log.LDF文件删除,以防万一,你可以拷出去
4.
企业管理器->附加数据库,选muonline,这个时候你会看见日志文件这项是一个叉,不要紧,继续,此时数据库就会提示你该数据库无日志是否创建一个新的,确定就是了。
5.
记得数据库重新附加后用户要重新设置一下。
如果以后,不祥拦段想要它变大:
SQL2000下使用:
在数据库上点右键->属性->选项->故障恢复-模型-选择-简单模型。
或用SQL语句:
alter
database
数据库名
set
recovery
simple
㈨ sql2008下的镜像数据库怎样做日志收缩
这个问题我前几天正好碰上,所以,相关的关键点告诉你
**********特别提示:《在操作之前请备份》************:
1、SQL SERVER 2008 的日志会越来越大,如果是用于生产的,可能会大到可怕,反正我的数据库,前几天一看,不到1个月就十多个G的日志文件。
2、要收缩、清除其实很简单,关键点就一个:先把数据库的恢复模式从默认的“完整”改为“简单”。具体做法:对数据库点 右键 -》属性-》左边 选择页 中 点 “选项”-》找到 “恢复模式”,改成“简单”。
3、然后对数据库点 右键 -》任务-》收缩 -》文件 -》出来的界面中,文件类型 选 “日志”,点“确定”钮-》OK了。
4、再次提示,在操作之前请备份,虽然我在操作中没有碰上任务问题,但不保证你不出问题。
5、至于日志文件缩完了,你是否要把它改回“完整”模式,你自个看着办,我是让它一直简单,因为,以我的技术,要真的数据库崩溃了,有日志问题也是“然并卵”,反正我是一天自动两次异盘备份,加每二小时增量备份,最后再加双机热备(用软件实现的,那个软件据说要卖几万一套,具体叫什么就不说了,省得别人说我打广告,呵呵)。
6、看了一下微软的数据库镜像实现方案相关的东西,感觉太难了,不靠谱,有兴趣你可以去试试。
7、最后,顺便说,数据库的恢复模式的选择,对当前数据库的运行应该是没有什么影响的,也许对于会用日志文件进行数据查看和调整的人有用。
㈩ sql2008中如何收缩数据库日志文件
解决方法:
方法一
右键选择数据库-》任务-》收缩-》文件-》文件类型-》日志-》在释放未使用的空间前重新组织页
方法二(不推荐)
1 必须先改成简单模式
2 然后用
----Logical Files :
--CMS1.5_Data
--CMS1.5_Log
DBCC SHRINKFILE (N'CMS1.5_Log' , 1)
GO
注:Data是数据文件,Log是日志文件