数据库收缩
数据库收缩方法
数据库收缩
首先在查询分析器中完成以下2步:
1.清空日志
DUMP TRANSACTION 库名 WITH NO_LOG
2.截断事务日志:
BACKUP LOG 数据库名 WITH NO_LOG
按F5执行,然后在企业管理器中完成以下操作:
3、右键你要压缩的数据库--所有任务--收缩数据库
-
点击“收缩文件”中的“文件”,
选择要收缩的文件,这里我们选择LOG文件
在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
收缩效果:
收缩前,SAMDB_LOG.LDF
3.8G
收缩后:SAMDB_LOG.LDF 1M
SQLServer LDF文件太大解决
SQL2000 LDF文件太大解决
一般不建议做第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 '
数据库的事务日志已满
数据库的事务日志已满。若要查明无法重用日志中的空间的原因
,请参阅sys.databases 中的 log_reuse_wait_desc 列
一般不建议做第4,6两步
第4步不安全,有可能损坏数据库或丢失数据
第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.
1、清空日志
DBCC SHRINKFILE(库名_log,0)
DUMP TRANSACTION 库名 WITH NO_LOG
2、截断事务日志:
如果出现“未能在 sysfiles 中找到文件 库名_log'。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。”
则使用这句SQL操作
BACKUP LOG 库名 WITH NO_LOG
DBCC SHRINKFILE(2,0)
3.收缩数据库文件(如果不压缩,数据库的文件不会减小
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
a、选择日志文件--收缩文件至,这里会给出一个允许收缩到的最小M数,确定就可以了
b、选择数据文件--收缩文件至,这里会给出一个允许收缩到的最小M数,,确定就可以了
也可以用SQL语句来完成
--收缩数据库
DBCC SHRINKDATABASE(库名)
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
DBCC SHRINKFILE(1)
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
a.分离数据库:
企业管理器--服务器--数据库--右键--分离数据库
b.在我的电脑中删除LOG文件
c.附加数据库:
企业管理器--服务器--数据库--右键--附加数据库
此法将生成新的LOG,大小只有500多K
或用代码:
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
sql数据库日志已满的处理方式
DBCC SHRINKDATABASE收缩指定数据库中的数据文件大小。
语法
DBCC SHRINKDATABASE
( database_name [ , target_percent ]
[ , { NOTRUNCATE | TRUNCATEONLY } ]
)
参数
database_name
是要收缩的数据库名称。数据库名称必须符合标识符的规则。有关更多信息,请参见使用标识符。
target_percent
是数据库收缩后的数据库文件中所要的剩余可用空间百分比。
NOTRUNCATE
导致在数据库文件中保留所释放的文件空间。如果未指定,将所释放的文件空间释放给操作系统。
TRUNCATEONLY
导致将数据文件中的任何未使用的空间释放给操作系统,并将文件收缩到上一次所分配的大小,从而减少文件大小,而不移动任何数据。不试图重新定位未分配页的行。使用 TRUNCATEONLY
时,忽略 target_percentis。
注释
Microsoft® SQL Server™ 可收缩:
特定数据库的所有数据和日志文件。执行 DBCC SHRINKDATABASE。
一次一个特定数据库中的数据或日志文件。执行 DBCC SHRINKFILE。
DBCC SHRINKDATABASE 以每个文件为单位对数据文件进行收缩。然而,DBCC
SHRINKDATABASE 在对日志文件进行收缩时,看起来好像所有的日志文件都存在于一个连续的日志池中。
假设名为 mydb 的数据库有两个数据文件和两个日志文件。这些数据文件和日志文件大小都为
10 MB。第一个数据文件包含 6 MB 数据。
对于每个文件,SQL Server 计算目标大小,即要收缩文件到的大小。当用 target_percent 指定
DBCC SHRINKDATABASE 时,SQL Server 计算的目标大小是收缩后文件中的 target_percent 可用空间大小。例如,如果指定按 target_percent 为 25 收缩 mydb。SQL Server 计算的该文件的目标大小为 8 MB(6 MB 数据加上 2 MB 可用空间)。因此,SQL Server 将任何数据从数据文件的最后 2 MB 中移动到数据文件前 8 MB 的可用空间中,然后对该文件进行收缩。
频繁执行DBCCSHRINKDATABASE的危害
SHRINKDATABASE收缩原理
要搞明⽩为什么不要轻易使⽤DBCC SHRINKDATABASE,⾸先要⾼明⽩DBCC SHRINKDATABASE的收缩原理,在
数据⽂件并不是所有的空间都被使⽤,⽽是有部分未使⽤空间:包括已删除的数据、⽂件⾃动增长所未使⽤的空间及其⼀些不
能被使⽤的碎⽚空间,这些未使⽤空间可通过sp_sapceused得到。执⾏DBCC SHRINKDATABASE后将分配页从⽂件末尾
移动到⽂件前部的未分配页,然后进⾏压缩;只有执⾏了TRUNCATEONLYA,才会将空间释放给操作系统。
了解DBCC SHRINKDATABASE的收缩原理我们再来看⼏个问题:
1.DBCC SHRINKDATABASE 收缩后能起到整理数据库⽂件碎⽚?
不能!DBCC SHRINKDATABASE仅仅是将空间给收缩了,并没有做善后处理,数据库⽂件的碎⽚只能是更多了。
2.DBCC SHRINKDATABASE收缩后数据库的速度会快吗?
不能!DBCC SHRINKDATABASE并没有在收缩后执⾏整理索引的步骤,因此,索引的碎⽚会更多,执⾏速度应该会慢⼀
些。
3.为什么我每隔⼏天就整理索引,但索引的碎⽚仍然产⽣的很快?
参考第⼆条,估计是你在执⾏索引整理后,⼜执⾏了DBCC SHRINKDATABASE。
什么时候使⽤DBCC SHRINKDATABASE?
只有产⽣许多未使⽤空间的操作(如截断表或删除表操作)后,执⾏收缩操作最有效,产⽣碎⽚较少。
总结:
DBCC SHRINKDATABASE并不是不能使⽤,⽽是要慎重使⽤,尤其不要频繁使⽤,因为它会增加数据库碎⽚的程度。DBCC SHRINKDATABASE的详细⽤法请参考MSDN
备注:
A: TRUNCATEONLY 将⽂件末尾的全部可⽤空间回收给操作系统。但是,TRUNCATEONLY 不在⽂件内执⾏任何页移
动。指定的⽂件只被收缩到最近分配的区。如果随 TRUNCATEONLY ⼀起指定,则忽略 target_percent。
SQL数据库日志文件ldf过大的解决办法
如果你没有存储空间的瓶颈,让数据库库日志文件任意增长是最好的,因为在发生数据库错误时,日志文件可以帮助您查找和分析错误的原因。如果存储空间确实有限或者已达到瓶颈,确实要限制日志文件的增长,请谨慎使用这些限制手段(强烈建议在正式服务器上使用下列方法前进行备份)。
方法一:
快速清除事务日志,执行以下查询命令:
-- 第一步:清空日志
DUMP TRANSACTION
数据库名
WITH
NO_LOG
-- 第二步:截断事务日志
BACKUP LOG
数据库名
WITH
NO_LOG
-- 第三步:收缩数据库
DBCC SHRINKDATABASE(数据库名)
如果以后不想让它再变大了,执行下面查询命令:
alter database
数据库名
set recovery simple
方法二:
第1步:数据库企业管理器->服务器->数据库->右键->分离数据库
第2步:删除LOG文件
第3布:数据库企业管理器->服务器->数据库->右键->附加数据库
此法生成新的LOG,大小只有500多K 再将此数据库设置自动收缩
数据库“自动收缩”设置:从数据库自身的健康和性能考虑,并不建议多用。这是因为:
(1)SQL Server只有在空间用尽的情况下才会做自动增长。如果没有找出自增长的原因,从而从根本上避免空间用尽,虽然能够暂时用DBCC SHRINKFILE功能收缩文件大小,但是下次数据库还是有可能长大。收缩数据库只是一个治标不治本的方法。
(2)数据文件收缩会给文件带来更多的碎片。
(3)不管是数据库收缩,还是增长,对SQL Server来讲都是件浪费资源的事情。在负载比较重的系统里,对性能的影响尤其大。它们是应尽量避免而不是鼓励的操作。 因此,对于一个比较繁忙的数据库,推荐的设置是开启数据库自动增长选项,以防数据库空间用尽导致应用程序失败,但是要严格避免自动增长的发生。同时,尽量不要使用自动收缩功能。
sql2014 主数据库日志文件过大的处理方法
SQL Server 2014 是一款功能强大的关系型数据库管理系统,广泛应用于企业级应用程序和数据存储中。在使用 SQL Server 2014 过程中,经常会遇到主数据库日志文件过大的问题,这会影响数据库性能和稳定性。本文将介绍主数据库日志文件过大的处理方法,帮助数据库管理员和开发人员解决这一常见问题。
1. 分析日志文件过大的原因
主数据库日志文件过大通常是由于以下原因引起的:
1) 未及时备份日志文件
2) 长时间未进行事务日志的截断
3) 数据库中存在大量的大事务操作
4) 数据库的恢复模式设置不当
5) 数据库中存在大量的事务日志记录
2. 备份日志文件
备份日志文件是解决主数据库日志文件过大问题的最直接和有效的方法。通过定期备份日志文件,可以将事务日志记录的信息写入到数据库文件中,并且释放已经写入到数据库文件中的空间。数据库管理员可以使用 SQL Server Management Studio 工具或者 Transact-SQL
语句来备份日志文件,具体操作步骤如下:
1) 使用 SQL Server Management Studio 工具进行备份:选择数据库 -> 右键点击任务 -> 选择“备份” -> 在“备份类型”中选择“日志” -> 完成备份设置 -> 确认备份操作 2) 使用 Transact-SQL 语句进行备份:执行如下命令
BACKUP LOG database_name TO disk='backup_location'
3. 收缩日志文件
在备份日志文件之后,数据库管理员还可以通过收缩日志文件的方式来释放空间,具体操作步骤如下:
1) 使用 SQL Server Management Studio 工具进行日志文件收缩:选择数据库 -> 右键点击任务 -> 选择“任务” -> 选择“收缩” ->
选择“文件” -> 完成收缩操作
sqlserver2008日志清理方法
sqlserver2008日志清理方法
SQL Server 2008是Microsoft SQL Server系列中的一个版本,用于管理和存储大量数据。在长期运行的数据库中,日志文件可能会变得庞大,影响性能和磁盘空间。为了解决这个问题,需要定期清理和管理日志文件。下面是SQL Server 2008中清理日志的几种常见方法。
1. 定期备份日志文件
通过进行定期的日志备份,可以帮助缩小日志文件的大小,并释放磁盘空间。在SQL Server Management Studio (SSMS)中,可以通过右键单击数据库,在“任务”菜单中选择“备份”来进行日志备份。选择“备份类型”为“仅备份日志”,并设定一个合适的备份策略,可以根据业务需求灵活设置。
2. 收缩日志文件
当日志文件变得过大时,可以使用收缩功能来减小文件大小并释放磁盘空间。在SSMS中,可以通过以下脚本执行收缩操作:
```
DBCC SHRINKFILE('日志文件名','目标大小')
```
请注意:收缩日志文件可能会导致数据库变得不可用一段时间。
3. 设置适当的恢复模式
在SQL Server中,数据库有三种恢复模式:完整恢复模式、简单恢复模式和大容量恢复模式。完整恢复模式和大容量恢复模式会生成大量的日志,而简单恢复模式只会保留最少的日志信息。根据业务需求和恢复要求,选择适当的恢复模式可以控制和管理日志的大小。可以通过以下脚本更改数据库的恢复模式:
```
ALTER DATABASE 数据库名 SET RECOVERY 模式
```
4. 设置适当的自动收缩日志文件选项
在SQL Server中,可以通过设置自动收缩日志文件的选项来控制日志文件的大小。可以使用以下脚本启用自动收缩:
```
ALTER DATABASE 数据库名 SET AUTO_SHRINK ON
MySql ibdata1文件太大如何缩小
MySql ibdata1文件太大如何缩小
MySql innodb如果是共享表空间,ibdata1文件越来越大,达到了30多个G,对一些没用的表进行清空:
truncate table xxx;
然后optimize table xxx; 没有效果
因为对共享表空间不起作用。
mysql ibdata1存放数据,索引等,是MYSQL的最主要的数据。
如果不把数据分开存放的话,这个文件的大小很容易就上了G,甚至几十G。对于某些应用来说,并不是太合适。因此要把此文件缩小。
无法自动收缩,必须数据导出,删除ibdata1,然后数据导入,比较麻烦,因此需要改为每个表单独的文件。
解决方法:数据文件单独存放(共享表空间如何改为每个表独立的表空间文件)。
步骤如下:
1)备份数据库
从命令行进入MySQL Server 5.0\bin
备份全部数据库,执行命令
D:\>mysqldump -q -umysql -ppassword --add-drop-table --all-databases >
c:/all.sql
做完此步后,停止数据库服务。
2)找到my.ini或f文件
linux下执行 ./mysqld --verbose --help | grep -A 1 'Default options'
会有类似显示:
Default options are read from the following files in the given order:
/etc/f ~f /usr/local/service/mysql3306/etc/f
windows环境下可以:
mysqld --verbose --help > mysqlhelp.txt
notepad mysqlhelp.txt
在里面查找Default options,可以看到查找my.ini的顺序,以找到真实目录
sql截断日志
sql截断⽇志
--收缩数据库
DBCC SHRINKDATABASE(fas)
--截断事务⽇志:
BACKUP LOG fas WITH NO_LOG
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 FilesMicrosoft SQL ServerMSSQLData库名.mdf'
5.为了以后能⾃动收缩,做如下设置:
sqlserver数据库ldf文件过大解决方法 九
sqlserver数据库ldf文件过大解决方法九
压缩日志及数据库文件大小
/*--特别注意
请按步骤进行,未进行前面的步骤,请不要做后面的步骤
否则可能损坏你的数据库.
一般不建议做第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 中的一个文件附加到当前服务器。
