如何压缩SQL Server 2005指定数据库文件和日志的大小
收缩数据文件或日志文件的空间
2》在释放未使用的空间前重新组织页:请在“将文件收缩到”数值微调器中键入您希望收缩的文件大小(以MB为单位),这个数值不可小于目前配置的大小或是大于配置给文件的总扩展盘值,一旦不符合就会自动将设定值还原为下限或上限。
注意:当数据库或事务日志正在备份时,您不能收缩数据文件或日志文件;反过来,当数据库的数据文件或日志文件正在被收缩时,您不能去备份数据库或事务日志。此外,若数据库被设定成只读的话,您也不能收缩数据文件或日志文件的大小。
1.打开SQL Server Management Studio
2.在“连接到服务器”对话框中的“服务器类型”下拉选项中选择“数据库引擎”,接着根据您实际的环境讲相关选项设定完毕,然后点击“连接”按钮。
6.若您选择的文件类型是“数据”,且先前创建了文件组的话,则在文件组选项您可以选取PRIMARY改变。如果您选择的文件类型是“日志”,文件组选项会变成“<不适用>”。
7.当您的数据文件或日志文件有多个时,您可以在文件名称下拉选项才对你中选择要收缩的文件。
8.请设置一下三个选项,以便决定要如何收缩文件:
您也可以使用DBCC SHRINKFILE表达式来开“对象资源管理器”窗口,展开要收缩数据文件或日志文件空间的数据库引擎实例,接着展开“数据库”项目。
4.使用鼠标右键单击您要收缩其空间的数据库,并从快捷菜单中依次选择“任务/收缩/文件”命令,打开“收缩文件”对话框。
5.首先请选择要收缩的文件类型,有“数据”与“日志”两种选项,默认选项为“数据”,根据您选取的不同文件类型,会改变其他字段中相对应的选项。
SQLServer LDF文件太大解决
SQL2000 LDF文件太大解决一般不建议做第4,6两步第4步不安全,有可能损坏数据库或丢失数据第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.--*/--下面的所有库名都指你要处理的数据库的库名1.清空日志DUMP TRANSACTION 库名WITH NO_LOG2.截断事务日志:BACKUP LOG 库名WITH NO_LOG3.收缩数据库文件(如果不压缩,数据库的文件不会减小企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了也可以用SQL语句来完成--收缩数据库DBCC SHRINKDATABASE(库名)--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfilesDBCC 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)SQL2005 LDF文件太大解决请按步骤进行,未进行前面的步骤,请不要做后面的步骤否则可能损坏你的数据库.一般不建议做第4,6两步第4步不安全,有可能损坏数据库或丢失数据第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.--*/1.清空日志:DUMPTRANSACTION库名WITH NO_LOG2.截断事务日志:BACKUP LOG库名WITH NO_LOG3.收缩数据库文件(如果不压缩,数据库的文件不会减小:服务器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩操作里选择在释放未使用的空间前重新组织页,这里会给出一个允许收缩到的最小M数,确定就可以了--选择数据文件--在收缩操作里选择在释放未使用的空间前重新组织页,这里会给出一个允许收缩到的最小M数,确定就可以了也可以用SQL语句来完成--收缩数据库DBCC SHRINKDATABASE(库名)--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles DBCC SHRINKFILE(1)4.为了最大化的缩小日志文件:a.分离数据库:服务器--数据库--右键--分离数据库b.在我的电脑中删除LOG文件c.附加数据库:服务器--数据库--右键--附加数据库此法将生成新的LOG,大小只有500多K5.为了以后能自动收缩,做如下设置:服务器--右键数据库--属性--选项--选择"自动收缩"6.如果想以后不让它日志增长得太大:服务器--右键数据库--属性--文件--数据库文件--日志--增量为10%,不限制增长--将文件增长限制为xM(x是你允许的最大数据文件大小)。
SQL Server数据库压缩技巧指南
SQL Server数据库压缩技巧指南中的数据库数据文档增长事务日志文档你能够最大限度地缩小数据库吗?(一)我经常看见人们制定定期缩小数据库文件(数据或T-Log)的SQL Server维护计划和定制任务。
我通常也会建议我的客户和同事除非他们要研究数据库增长原因,否则不要缩小数据库文件,尤其是在一般基础上不要这么做。
我曾经多次和那些更多关注磁盘空间而不是性能的人们讨论过这个话题,所以在这里我决定进行一下测试来证明我所说的属实。
此外我还要告诉大家数据库文件在事务办理过程中增长对SQL Server性能会带来什么样的影响。
我将在以下几个增长环境中进行测试:1、数据库数据文件增长2、数据库T-log增长3、Tempdb增长这是本系列中的第一篇技巧,即检测SQL Server中的数据库数据文件增长。
测试环境硬件和软件配置我进行测试的系统硬件和软件配置如下:你能够最大限度地缩小数据库吗?(三)结果总结将结果放在表格中进行比较,比较项目包括CPU、读和写意及第一个循环和第二个循坏之间的间隔时间,首先是文件增长,后来就不会出现文件增长的情况。
这里有两个地方进行的比较:百分比不同(第二环节和第一个环节之间的比为*100)并且不同的处数也不同((<First loop is > - <Second loop is >)。
如果得到的是正数,那就是说第二个环节进行得比较好。
如果是负数,意思就相反。
在每个比较表的最后,比较得出的平均值就是这三次重复得到的结果平均值。
在这篇文章的最后,我们通过一个表来比较一下所有测试过程中所得到的平均值。
测试1:原始文件大小=256目标文件大小=8448小事务(一次1行),总行数:8160文件增长大小为1MB图3下面是连续执行三次上述代码所得到的SQL Profiler结果(我清除了调试查询):你能够最大限度地缩小数据库吗?(四) 结果总结测试2原始文件大小=256目标文件大小=34816小事务(一次1行),总行数:33373文件增长大小为1MB现在我们来测试一下插入更多数据。
SQL2005 LDF文件太大解决
SQL2005 LDF文件太大解决今天发现dtbflower log文件超大。
解决方案如下:请按步骤进行,未进行前面的步骤,请不要做后面的步骤否则可能损坏你的.一般不建议做第4,6两步第4步不安全,有可能损坏数据库或丢失数据第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.--*/1.清空日志:DUMP TRANSACTION flower WITH NO_LOG2.截断事务日志:BACKUP LOG flower WITH NO_LOG3.收缩数据库文件(如果不压缩,数据库的文件不会减小:服务器--右键你要压缩的数据库--所有任务--收缩数据库(日志)--收缩文件--选择日志文件--在收缩操作里选择在释放未使用的空间前重新组织页,这里会给出一个允许收缩到的最小M数,确定就可以了--选择数据文件--在收缩操作里选择在释放未使用的空间前重新组织页,这里会给出一个允许收缩到的最小M数,确定就可以了也可以用SQL语句来完成--收缩数据库DBCC SHRINKDATABASE(dtbflower)--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles DBCC SHRINKFILE(1)4.为了最大化的缩小日志文件:a.分离数据库:服务器--数据库--右键--分离数据库b.在我的电脑中删除LOG文件c.附加数据库:服务器--数据库--右键--附加数据库此法将生成新的LOG,大小只有500多K5.为了以后能自动收缩,做如下设置:服务器--右键数据库--属性--选项--选择"自动收缩"6.如果想以后不让它日志增长得太大:服务器--右键数据库--属性--文件--数据库文件--日志--增量为10%,不限制增长--将文件增长限制为xM(x是你允许的最大数据文件大小)sql server 2005日志文件过大问题解决后分析(2012-05-10 20:03:10)转载▼分类:自己写着玩标签:杂谈机房在四月份改造中对数据库的软硬件进行了升级,具体情况是:原先旧有的数据库是采用主备两台1u的单机,在windows 2000的系统下分别安装好sql server 2000后,在主数据库上做一天一次的完整备份和每隔两小时的差异备份,在完整备份的同时进行发布;备数据库则对主数据库的完整备份进行订阅。
SQL数据库日志文件容量超大解决方法
问题:数据库达到160G,怎样处理?
原因:
1、S QLSERVER数据库,分为日志文件.ldf和主要文件.mdf,主要文件就是我们
的原始数据库,日志文件主要用于灾难恢复,记录了对数据库的所有操作的日志。
2、数据库大的原因为日志文件ykchr.log很大,主要文件才3G多,日志文件增
长策略为不限制增长,导致日志只追加不会覆盖,所以才会很大。
解决办法:
将日志文件中的日志全部清空,修改日志文件的增长策略,目前调整为到最大10G,超过10G自动从头覆盖。
也可以将日志文件大小最大限制为5G
步骤:
1、查看数据库中,确认哪个文件占用空间较大。
2、选择目标数据库,分离数据库,为了可以删除日志文件。
3、现在可以修改日志文件名。
3、重新附加数据库,找到mdf文件即可。
5、删除找不到的日志文件目录。
6、直接恢复数据库即可。
7、刷新,显示出加附加的数据库。
8、找到目标数据库,打开属性,限制日志文件最大容量5G。
MSSqlServer查询数据库文件大小和剩余空间,数据库日志压缩
MSSqlServer查询数据库文件大小和剩余空间,数据库日志压缩Sql Server查询数据库文件大小和剩余空间,数据库日志压缩•A、磁盘空间的使用情况及各数据库数据文件及日志文件的大小及使用利用率•o1、查询各个磁盘分区的剩余空间:o2、查询数据库的数据文件及日志文件的相关信息o3、查询当前数据库的磁盘使用情况:o4、查询数据库服务器各数据库日志文件的大小及利用率o5、一次性的查询数据库中所有的表的大小•B、数据库日志收缩•o1、查看当前的存放位置o2、修改文件的存放位置(下次启动生效)o3、修改默认的数据库文件存放位置(即时生效)o4、修改默认的日志文件存放位置(即时生效)o5、日志压缩步骤o▪1)、修改数据库为简单模式▪2)、收缩相关数据库的指定数据文件或日志文件大小▪3)、还原数据库为完全模式▪4)、查询收缩日志后数据库信息A、磁盘空间的使用情况及各数据库数据文件及日志文件的大小及使用利用率在MS Sql Server中,使用以下的方法查询出磁盘空间的使用情况及各数据库数据文件及日志文件的大小及使用利用率:1、查询各个磁盘分区的剩余空间:exec master.dbo.xp_fixeddrives2、查询数据库的数据文件及日志文件的相关信息--(包括文件组、当前文件大小、文件最大值、文件增长设置、文件逻辑名、文件路径等)select * from [数据库名].[dbo].[sysfiles]--转换文件大小单位为MB:select name, convert(float,size) * (8192.0/1024.0)/1024. from [数据库名].dbo.sysfiles3、查询当前数据库的磁盘使用情况:exec sp_spaceused4、查询数据库服务器各数据库日志文件的大小及利用率DBCC SQLPERF(LOGSPACE)5、一次性的查询数据库中所有的表的大小--========================================= ====---- 更新查询数据库中各表的大小,结果存储到数据表中---- 运行方式: EXEC sp_UpdateTableSpaceInfo-- 结果查询: SELECT * FROM temp_tableSpaceInfo----========================================= ====create procedure [dbo].[sp_UpdateTableSpaceInfo]ASbegin--查询是否存在结果存储表if not exists (select * from sysobjects where id = object_id(N'temp_tableSpaceInfo') AND objectproperty(id, N'IsUserTable') = 1)begin--不存在则创建create table temp_tableSpaceInfo(name nvarchar(128),rows char(11),reserved varchar(18),data varchar(18),index_size varchar(18),unused varchar(18))end--清空数据表delete from temp_tableSpaceInfo--定义临时变量在遍历时存储表名称declare @tablename varchar(255)--使用游标读取数据库内所有表表名declare table_list_cursor cursor for --申明游标select name from sysobjectswhere objectproperty(id, N'IsTable') = 1 and name not like N'#%%' order by name--打开游标open table_list_cursor--将提取结果代入游标fetch next from table_list_cursor into @tablename--遍历查询到的表名while @@fetch_status = 0 --最近一条FETCH语句的标志begin--检查当前表是否为用户表if exists (select * from sysobjects where id = object_id(@tablename) AND objectproperty(id, N'IsUserTable') = 1)begin--当前表则读取其信息插入到表格中execute sp_executesql N'insert into temp_tableSpaceInfo exec sp_spaceused @tbname', N'@tbname varchar(255)', @tbname = @tablenameend--读取下一条数据fetch next from table_list_cursor into @tablenameend--释放游标close table_list_cursor --解除游标deallocate table_list_cursor --将游标内容代入最后结果endGOB、数据库日志收缩1、查看当前的存放位置--查看当前的存放位置select database_id,name,physical_name AS CurrentLocation,state_desc,size from sys.master_files where database_id=db_id(N'数据库名');2、修改文件的存放位置(下次启动生效)--修改文件的存放位置下次启动生效--testDb为数据库名,alter database 数据库名 modify file ( name = 文件名(不包含后缀), filename = '文件存储路径');alter database 数据库名 modify file ( name = 文件名(不包含后缀), filename = '文件存储路径');eg.alter database testDb modify file ( name = testDb, filename = 'G:\SQL_DATA\testDb\testDb.mdf');alter database testDb modify file ( name = testDb_log, filename = 'G:\SQL_DATA\testDb\testdb_log.ldf');3、修改默认的数据库文件存放位置(即时生效)--修改默认的数据库文件存放位置(即时生效)EXEC xp_instance_regwrite@rootkey='HKEY_LOCAL_MACHINE',@key='Software\Microsoft\MSSQLServer\MSSQLServer', @value_name='DefaultData',@type=REG_SZ,@value='E:\MSSQL_MDF\data'GO4、修改默认的日志文件存放位置(即时生效)--修改默认的日志文件存放位置(即时生效)EXEC master..xp_instance_regwrite@rootkey='HKEY_LOCAL_MACHINE',@key='Software\Microsoft\MSSQLServer\MSSQLServer', @value_name='DefaultLog',@type=REG_SZ,@value='E:\MSSQL_MDF\log'GO5、日志压缩步骤1)、修改数据库为简单模式-- 修改数据库为简单模式USE[master]GOALTER DATABASE dbstore-pole-an SET RECOVERY SIMPLE WITH NO_WAITGOALTER DATABASE dbstore-pole-an SET RECOVERY SIMPLEGO2)、收缩相关数据库的指定数据文件或日志文件大小-- 收缩相关数据库的指定数据文件或日志文件大小USE dbstore-pole-anDBCC SHRINKFILE (N'dbstore-pole-an_log' , 700)3)、还原数据库为完全模式--还原数据库为完全模式USE[master]GOALTER DATABASE dbstore-pole-an SET RECOVERY FULL WITH NO_WAITGOALTER DATABASE dbstore-pole-an SET RECOVERY FULLGO4)、查询收缩日志后数据库信息-- 查询收缩日志后数据库信息select database_id,name,physical_name AS CurrentLocation,state_desc,size from sys.master_files where database_id=db_id(N'dbstore-pole-an');。
数据库日志文件过大的处理方法
数据库日志文件过大的处理方法
当数据库日志文件过大时,可以采取以下处理方法:
1. 增加日志文件的大小限制:可以通过修改数据库的配置参数来增加日志文件的大小限制,例如增加每种类型日志文件的最大大小限制,或者增加整个日志文件组的最大大小限制。
2. 压缩或归档日志文件:可以通过压缩或归档数据库的日志文件来减小其占用的磁盘空间。
可以使用压缩工具,例如gzip
或7-Zip等,来对日志文件进行压缩。
或者可以将已经归档的
日志文件移到其他存储介质,例如磁带库或远程备份服务器上。
3. 定期清理日志文件:可以定期清理数据库的日志文件,删除不再需要的旧日志。
可以设置一个保留期限,例如保留最近一周或一个月的日志文件,然后定期删除超过保留期限的日志文件。
4. 增加日志文件的切割频率:可以通过增加日志文件的切割频率来减小单个日志文件的大小。
可以将一个较大的日志文件切割成多个较小的日志文件,每个文件都包含一段时间范围内的日志。
5. 导出日志数据到其他存储介质:可以将数据库的日志数据导出到其他存储介质,例如分布式文件系统或集中式日志服务器上。
这样可以减小数据库的日志文件大小,同时还可以方便地对日志数据进行分析和检索。
需要注意的是,在处理数据库日志文件过大时,要确保同时满足数据库的恢复和故障恢复要求。
因此,在实施上述处理方法之前,应该详细了解数据库管理系统的日志管理机制,并根据具体情况进行操作。
sqlserver日志文件太大解决方法
sqlserver⽇志⽂件太⼤解决⽅法当SQL数据库⽇志⽂件已满,或者⽇志很⼤,就需要压缩⽇志及数据库⽂件:1.清空⽇志 DUMP TRANSACTION 库名 WITH NO_LOG2.截断事务⽇志: BACKUP LOG 数据库名 WITH NO_LOG3.收缩数据库⽂件(如果不压缩,数据库的⽂件不会减⼩ 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩⽂件 --选择⽇志⽂件--在收缩⽅式⾥选择收缩⾄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.分离 E X E C sp_detach_db @dbname = "pubs" b.删除⽇志⽂件 c.再附加 E X E C sp_attach_single_file_db @dbname = "pubs", @physname = "c:Program FilesMicrosoft SQL ServerMSSQLDatapubs.mdf"5.为了以后能⾃动收缩,做如下设置: 企业管理器--服务器--右键数据库--属性--选项--选择"⾃动收缩" --SQL语句设置⽅式: E X E C sp_dboption "数据库名", "autoshrink", "TRUE"6.如果想以后不让它⽇志增长得太⼤ 企业管理器--服务器--右键数据库--属性--事务⽇志 --将⽂件增长限制为xM(x是你允许的最⼤数据⽂件⼤⼩) --SQL语句的设置⽅式: alter database 数据库名 modify file(name=逻辑⽂件名,maxsize=20)特别注意: 请按步骤进⾏,未进⾏前⾯的步骤,请不要做后⾯的步骤 否则可能损坏你的数据库. ⼀般不建议做第4,6两步 第4步不安全,有可能损坏数据库或丢失数据 第6步如果⽇志达到上限,则以后的数据库处理会失败,在清理⽇志后才能恢复.SQL Server 如何设置数据库的默认初始⼤⼩和⾃动增长⼤⼩sqlserver2008⽇志已满解决⽅法,SQL Server 如何设置数据库的默认初始⼤⼩和⾃动增长⼤⼩1、数据库右键属性-选项-恢复模式-下拉选择简单-最后点击确定2、右键数据库-任务-收缩-⽂件类型-下拉选择⽇志-收缩操作-在释放未使⽤…(默认收缩到1MB)-最后点击确定3、最后别忘了回到第⼀步骤把恢复模式改为完整!我们在SQL Server中新建数据库的时候,可以选择数据库⽂件及⽇志⽂件的初始⼤⼩、⾃动增长⼤⼩和最⼤⼤⼩,如下图所⽰:可以通过设置更改数据库初始⼤⼩、⾃动增长⼤⼩和最⼤⼤⼩:但是其实在SQL Server中新建数据库时,数据库的初始⼤⼩、⾃动增长⼤⼩和最⼤⼤⼩的默认值,是可以在model这个系统数据库上预设的。
SQL SERVER2005数据库自动备份和压缩
关于SQL SERVER 2005 自动备份和自动压缩设置和程序安装第一步:在外围配置器中启用该功能。
第二步:使用的语句declare @filename varchar(300)set @filename='D:\SXMJC\'+convert(nvarchar(10),getdate(),112)+'.bak'--设置备份文件的路径和文件名print @filenamebackup database[SXMJC] to disk=@filename withNOINIT,NOUNLOAD,NAME='backup',NOSKIP,STATS=10,NOFORMA T --执行备份declare @file varchar(300)set @file='C:\WinRAR\winrar.exe a -ep -df D:\SXMJC\SXMJC_'+convert(nvarchar(10),getdate(),112) +'.rar D:\SXMJC\'+convert(nvarchar(10),getdate(),112)+'.bak'--将压缩备份文件并删除源文件的winrar命令行命令print @fileexec master..xp_cmdshell @file --执行命令--C:\Program Files\WinRAR\winrar.exe 压缩路径为此是错误的压缩路径不能有空格,所以可以将压缩路径安装在C盘下C:\WinRAR\winrar.exe注意:database[SXMJC]中的SXMJC 为数据库名称。
D:\SXMJC\SXMJC_'+convert(nvarchar(10),getdate(),112) 是压缩文件文件夹和文件名称第三步:作业计划设置1.新建作业使用上面sql 语句2.建立维护计划。
sqlserver实现收缩数据库日志操作
sqlserver 实现收缩数据库⽇志操作
说明:
收缩⽇志的原因有很多种,有些是考虑空间不⾜,有些则是应⽤程序限制导致的。
12345678910
--将
“恢复模式”设置为“简单”ALTER DATABASE xszzxt_test SET RECOVERY SIMPLE GO --收缩⽇志⽂件⼤⼩到10M DBCC SHRINKFILE (N'xszzxt_test_log' , 10, TRUNCATEONLY)
GO
--将“恢复模式”设置为“完整”
ALTER DATABASE xszzxt_test SET RECOVERY FULL WITH NO_WAIT
GO ALTER DATABASE xszzxt_test SET RECOVERY FULL GO 由于数据库⽇志⽂件过⼤导致磁盘不够⽤,我们采取的解决办法是收缩数据库⽇志⽂件,但是有时候执⾏收缩操作的时候不成功也不报错,这就头疼了:
先看下,如何做收缩操作的吧:
将⽂件收缩到最⼩:
也可以写SQL执⾏:
如果执⾏完以上操作发现数据库⽇志⽂件的⼤⼩依旧没变,那么试试如下操作之后再试试收缩操作呢
这个操作就是把恢复模式改成“简单”,我之前是“完整”,没有完成收缩操作,改成简单之后收缩操作完成了~
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
如有错误或未考虑完全的地⽅,望不吝赐教。
如何压缩SQL Server 2005指定数据库文件和日志的大小
面有两个SQL语句可以达到在SQL Server 2005/2008压缩指定数据库文件和日志的大小的效果:1、DBCC SHRINKDATABASE (Transact-SQL)收缩指定数据库中的数据文件和日志文件的大小。
语法DBCC SHRINKDATABASE( 'database_name' | database_id | 0[ ,target_percent ][ , { NOTRUNCATE | TRUNCATEONLY } ])[ WITH NO_INFOMSGS ]参数'database_name' | database_id | 0 要收缩的数据库的名称或 ID。
如果指定 0,则使用当前数据库。
target_percent 数据库收缩后的数据库文件中所需的剩余可用空间百分比。
NOTRUNCATE 通过将已分配的页从文件末尾移动到文件前面的未分配页来压缩数据文件中的数据。
target_percent 是可选参数。
文件末尾的可用空间不会返回给操作系统,文件的物理大小也不会更改。
因此,指定 NOTRUNCATE 时,数据库看起来未收缩。
NOT RUNCATE 只适用于数据文件。
日志文件不受影响。
TRUNCATEONLY 将文件末尾的所有可用空间释放给操作系统,但不在文件内部执行任何页移动。
数据文件只收缩到最近分配的区。
如果与 TRUNCATEONLY 一起指定,将忽略 target _percent。
TRUNCATEONLY 只适用于数据文件。
日志文件不受影响。
WITH NO_INFOMSGS 取消严重级别从 0 到 10 的所有信息性消息。
结果集列名说明DbId 数据库引擎试图收缩的文件的数据库标识号。
FileId 数据库引擎尝试收缩的文件的文件标识号。
CurrentSize 文件当前占用的 8 KB 页数。
MinimumSize 文件最低可以占用的 8 KB 页数。
SQLServer 2005&08镜像导致日志文件LDF过大的问题解决
镜像是一个很好的灾难恢复手段,配置简单,切换快速。
网上教如何配置的文章很多,这里介绍下如何处理LDF过大导致磁盘撑爆的情况。
首先要明确的是镜像不能清日志的, 镜像是的工作跟日志是有关联的。
常用的.清空日志DUMP TRANSACTION'db_name'WITH NO_LOG;和截断事务日志BACKUP LOG'db_name'WITH NO_LOG;都是无效的。
1建立多个日志文件,以免单个日志文件撑爆2根据日志的增长情况,经常备份日志BACKUP LOG DB_Name to disk='X:\DB_Name_Log.log' 3 收缩日志DBCC SHRINKFILE (Log_Name),但是这个几乎没用。
不过经过备份后,日志文件内部已经截断了,及时备份可以截断活动日志,让日志文件内标内记非活动的虚文件可重复使用. 查询日志的使用情况以及在被那些应用占用dbcc sqlperf(logspace)goDatabaseName Log Size (MB) Log Space Used (%) Status--------------------------------------------------------------------------------------------------------------DB_Name 77404.91 9.809758 0select name, recovery_model_desc, log_reuse_wait,log_reuse_wait_desc from sys.databasesname recovery_model_desc log_reuse_wait log_reuse_wait_desc--------------------------------------------------------------------------------------------------------------master SIMPLE 0 N OTHINGtempdb SIMPLE 1 CHECKPOINTmodel FULL 0 NOTHINGmsdb SIMPLE 1 CHECKPOINTDB_Name FULL 5 DATABASE_ MIRRORINGBackup FULL 4 ACTIVE_TRANSACTION--EOF--原文链接; /daitouliumang/item/9b978c30ebf4a7c0382ffacf sqlserver 2008设置了镜像,但日志文件增长过快,磁盘空间很快就用完了,如果要清空日志,必须把恢复模式改成简单,但设置了镜像就无法更改,只能是完整所以要对日志文件进行备份,每15分钟或1个小时备份一次然后再用下面语句清理日志,这里我只收缩到4G,DECLARE @I INT SET @I=1WHILE @I<3BEGINBACKUP LOG 库名 TO DISK = N'F:\X.bak'DBCC SHRINKFILE('库名_Log', 4096) 收缩文件到4GSET @I=@I+1END1、日志备份会清理日志中已经完成的部分,活动的以及还没有传递到镜像的日志将保留(没及时传送到镜像的就是活动的)2、在镜像环境下每15分钟或1小时做一个日志备份,事务日志及时备份可以截断活动日志,让日志文件内标记非活动的虚文件可重复使用3、镜像持续可用的话,多保留一次备份。
SQL Server 2005 日志文件过大处理
由于安装的时候没有计划好空间,默认装在系统盘,而且又没有做自动备份、截断事务日志等,很快LDF文件就达到十几G,或者几十G ,此时就不得不处理了。
备份和计划就不说了,现在就说下怎么把它先删除吧:1:先分离数据库2:为了保险,先不要删除,把LDF文件重命名下3:附件数据库。
4:OK。
以上可能遇到的问题:1:有用户连接,无法分离(勾选“断开所有连接”)2:附件数数据库的时候提示找不到LDF文件,不要慌,在附件的时候,把LDF的路径一项删除,然后点击"确定",这样就附件成功了,再去数据库数据目录下看看,LDF 只有几百K,这是自动生成的,附件成功。
3:OK,附件成功,打开应用,看访问是否正常(如果数据库还要连接网络中的其他机器,这个时候需要修复下IP,或者禁用再启用就可以了,因为有时候修复的窗口总是关不掉),正常之后就可以把那个大大的文件给删除了。
当然,最好的办法还是事前计划好,设置好,添加个作业计划,这样以后就会自动备份,收缩之类的,控制在一定大小范围内。
学习之后,其他的简单处理方法:1:清空日志DUMP TRANSACTION 库名WITH NO_LOG2:收缩日志企业管理器--右键点击你要收缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至**M,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了(建议在200~300M,以防止需要恢复使用)3: 删除LOG1:分离数据库企业管理器->服务器->数据库->右键->分离数据库(有连接情况下勾选“断开所有连接”)2:删除LOG文件3:附加数据库企业管理器->服务器->数据库->右键->附加数据库此法生成新的LOG,大小只有几百K。
再将此数据库设置自动收缩4: 如果想以后不让它一直增长:企业管理器--服务器--右键数据库--属性--事务日志--将文件增长限制为xM(x是你允许的最大数据文件大小)--SQL语句的设置方式:alter database 数据库名modify file(name=逻辑文件名,maxsize=20)5.设置为自动收缩企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"。
sql server 压缩数据库日志文件的方法
sql server 压缩数据库日志文件的方法在 SQL Server 中,你可以通过以下步骤压缩数据库的事务日志文件:备份事务日志:在执行任何压缩操作之前,首先建议备份数据库的事务日志。
你可以使用以下 T-SQL 命令:BACKUP LOG YourDatabaseName TO Disk = 'C:\Path\To\Your\Backup.trn';这将创建一个事务日志的备份文件,以便在需要时进行还原。
执行 DBCC SHRINKFILE 命令:使用 DBCC SHRINKFILE 命令来压缩事务日志文件。
以下是一个例子:USE YourDatabaseName;GODBCC SHRINKFILE (YourLogFileName, SIZE);其中,YourLogFileName 是你的事务日志文件名,SIZE 是你希望压缩到的目标大小。
你可以使用 TRUNCATEONLY 选项来释放事务日志文件中的空间而不进行缩小:DBCC SHRINKFILE (YourLogFileName, TRUNCATEONLY);请注意,这并不会改变文件的实际大小,只是释放未使用的空间。
监视事务日志的增长:压缩事务日志文件后,建议监视事务日志的增长情况,以避免再次出现过度膨胀。
你可以通过以下查询检查事务日志的使用情况:USE YourDatabaseName;GODBCC SQLPERF(logspace);这将返回关于数据库事务日志空间使用情况的信息。
请注意,频繁地收缩事务日志并不是一个好的做法,因为它可能影响性能,并且可能会导致事务日志文件再次膨胀。
最好的做法是定期备份事务日志,并根据需求进行压缩。
Sql Server数据库压缩方法
Sql Server数据库压缩方法Sql Server数据库用了一段时间以后,发现数据大小会猛增,最多时增加到十几G,而实际数据占有量其实只有5G左右。
这样的后果就导致数据库运行缓慢,且大大占用磁盘空间。
经过多方研究,最终找到了压缩数据库的方法。
下面将详细介绍一下这种方法的操作步骤:1.重建索引数据库长期使用之后,索引会占用大量的空间,并且这些空间不能直接清理,这时可以重建索引,重建索引的sql脚本语句如下:SET NOCOUNT ON;DECLARE@objectid int;DECLARE@indexid int;DECLARE@partitioncount bigint;DECLARE@schemaname nvarchar(130);DECLARE@objectname nvarchar(130);DECLARE@indexname nvarchar(130);DECLARE@partitionnum bigint;DECLARE@partitions bigint;DECLARE@frag float;DECLARE@command nvarchar(4000);If Object_Id('Tempdb.dbo.#work_to_do')Is Not Null drop table#work_to_doSELECTobject_id AS objectid,index_id AS indexid,partition_number AS partitionnum,avg_fragmentation_in_percent AS fragINTO#work_to_doFROM sys.dm_db_index_physical_stats(DB_ID(),NULL,NULL,NULL,'LIMITED')WHERE avg_fragmentation_in_percent> 10.0 AND index_id> 0;DECLARE partitions CURSOR local FOR SELECT*FROM#work_to_do;OPEN partitions;WHILE (1=1)BEGIN;FETCH NEXTFROM partitionsINTO@objectid,@indexid,@partitionnum,@frag;IF@@FETCH_STATUS< 0 BREAK;SELECT@objectname=QUOTENAME(),@schemaname=QUOTENAME()FROM sys.objects AS oJOIN sys.schemas as s ON s.schema_id=o.schema_idWHERE o.object_id=@objectid;SELECT@indexname=QUOTENAME(name)FROM sys.indexesWHERE object_id=@objectid AND index_id=@indexid;SELECT@partitioncount=count(*)FROM sys.partitionsWHERE object_id=@objectid AND index_id=@indexid;IF@frag< 30.0SET@command=N'ALTER INDEX'+@indexname+N' ON '+@schemaname+N'.'+@objectname+ N'REORGANIZE';IF@frag>= 30.0SET@command=N'ALTER INDEX'+@indexname+N' ON '+@schemaname+N'.'+@objectname+ N'REBUILD';IF@partitioncount> 1SET@command=@command+N'PARTITION='+CAST(@partitionnum AS nvarchar(10));EXEC (@command);PRINT N'Executed:'+@command;END;CLOSE partitions;2.数据库行压缩和页压缩经长期测试发现,TPMS_PaperResultReport这张表占用很大的空间,执行以下sql 脚本语句,可以压缩这张表的占用空间。
sqlserver数据库压缩与数据库日志(ldf)压缩方法分享
sqlserver数据库压缩与数据库⽇志(ldf)压缩⽅法分享 操作很简单,具体不步骤如下:打开你mdb数据库,⼯具-->数据库实⽤⼯具-->压缩和修复数据库(c)...⼀般情况下,SQL数据库的收缩并不能很⼤程度上减⼩数据库⼤⼩,其主要作⽤是收缩⽇志⼤⼩,应当定期进⾏此操作以免数据库⽇志过⼤1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根⽬录中依次点开Microsoft SQLServer-->SQLServer组-->双击打开你的服务器-->双击打开数据库⽬录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择"简单",然后按确定保存2、在当前数据库上点右键,看所有任务中的收缩数据库,⼀般⾥⾯的默认设置不⽤调整,直接点确定3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作⽅法同第⼀点,因为⽇志在⼀些异常情况下往往是恢复数据库的重要依据不过服务器上可以⽤下⾯的语句在查询分析器中执⾏复制代码代码如下:DUMP TRANSACTION [jc8] WITH NO_LOGBACKUP LOG [jc8] WITH NO_LOGDBCC SHRINKDATABASE([jc8])jc8为数据库名,来实现jc8.ldf⽂件的清理。
问:SQLServer中的事务⽇志应该怎样压缩和删除?答:具体⽅法有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是数据库收缩后的数据库⽂件中所要的剩余可⽤空间百分⽐。
Sqlserver日志文件太大,使其减小的方法
Sqlserver日志文件太大,使其减小的方法Sql server 2005日志文件太大,使其减小的方法Sqlserver2005日志文件太大,使其减小的方法如下所示:运行下面的三行 dbName为数据库名:backup log dbNamewith NO_LOGbackup log dbNamewith TRUNCATE_ONLYDBCC SHRINKDATABASE(dbName)日志文件减小到1MBsql server清空日志文件2011-04-06 23:051: 删除LOG1:分离数据库企业管理器->服务器->数据库->右键->分离数据库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 MASTERGOALTER DATABASE 数据库名 SET RECOVERY SIMPLEGO---------------------------------------------------------------------------------截断事务日志:BACKUP LOG { database_name | @database_name_var }{[ WITH{ NO_LOG | TRUNCATE_ONLY } ]}--何问起 --压缩日志及数据库文件大小/*--特别注意请按步骤进行,未进行前面的步骤,请不要做后面的步骤否则可能损坏你的数据库.--*/1.清空日志DUMP TRANSACTION 库名 WITH NO_LOG2.截断事务日志:BACKUP LOG 数据库名 WITH NO_LOG3.收缩数据库文件(如果不压缩,数据库的文件不会减小企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了也可以用SQL语句来完成--收缩数据库DBCC SHRINKDATABASE(客户资料)--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfilesDBCC SHRINKFILE(1)4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)a.分离数据库:企业管理器--服务器--数据库--右键--分离数据库b.在我的电脑中删除LOG文件c.附加数据库:企业管理器--服务器--数据库--右键--附加数据库此法将生成新的LOG,大小只有500多K或用代码:下面的示例分离 77169database,然后将 77169database 中的一个文件附加到当前服务器。
如何缩小SQLSERVER日志文件
如何缩⼩SQLSERVER⽇志⽂件前⼏天也碰到⽇志⽂件过⼤的问题,数据库实际⼤⼩为600M, ⽇志⽂件实际⼤⼩为33M, 但⽇志⽂件占⽤空间为2.8G试了多种⽅式,SHIRNK DATABASE, TRUNCATE LOG FILE, 都没办法将⽂件缩⼩。
⽆论如何,这应该算SQL SERVER的⼀个BUG 吧。
后来找到下⾯的代码,就可以将⽇志⽂件缩⼩到⾃⼰想要的⼤⼩了。
把代码COPY到查询分析器⾥,,然后修改其中的3个参数(数据库名,⽇志⽂件名,和⽬标⽇志⽂件的⼤⼩),运⾏即可(我已经⽤过多次了)-----SET NOCOUNT ONDECLARE @LogicalFileName sysname,@MaxMinutes INT,@NewSize INTUSE Marias -- 要操作的数据库名SELECT @LogicalFileName = 'Marias_log', -- ⽇志⽂件名@MaxMinutes = 10, -- Limit on time allowed to wrap log.@NewSize = 100 -- 你想设定的⽇志⽂件的⼤⼩(M)-- Setup / initializeDECLARE @OriginalSize intSELECT @OriginalSize = sizeFROM sysfilesWHERE name = @LogicalFileNameSELECT 'Original Size of ' + db_name() + ' LOG is ' +CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'FROM sysfilesWHERE name = @LogicalFileNameCREATE TABLE DummyTrans(DummyColumn char (8000) not null)DECLARE @Counter INT,@StartTime DATETIME,@TruncLog VARCHAR(255)SELECT @StartTime = GETDATE(),@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'DBCC SHRINKFILE (@LogicalFileName, @NewSize)EXEC (@TruncLog)-- Wrap the log if necessary.WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expiredAND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)AND (@OriginalSize * 8 /1024) > @NewSizeBEGIN -- Outer loop.SELECT @Counter = 0WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))BEGIN -- updateINSERT DummyTrans VALUES ('Fill Log')DELETE DummyTransSELECT @Counter = @Counter + 1ENDEXEC (@TruncLog)ENDSELECT 'Final Size of ' + db_name() + ' LOG is ' +CONVERT(VARCHAR(30),size) + ' 8K pages or ' +CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'FROM sysfilesWHERE name = @LogicalFileNameDROP TABLE DummyTransSET NOCOUNT OFF。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面有两个SQL语句可以达到在SQL Server 2005/2008压缩指定数据库文件和日志的大小的效果:1、DBCC SHRINKDATABASE (Transact-SQL)收缩指定数据库中的数据文件和日志文件的大小。
语法DBCC SHRINKDATABASE( 'database_name' | database_id | 0[ ,target_percent ][ , { NOTRUNCATE | TRUNCATEONLY } ])[ WITH NO_INFOMSGS ]参数'database_name' | database_id | 0 要收缩的数据库的名称或 ID。
如果指定 0,则使用当前数据库。
target_percent 数据库收缩后的数据库文件中所需的剩余可用空间百分比。
NOTRUNCATE 通过将已分配的页从文件末尾移动到文件前面的未分配页来压缩数据文件中的数据。
target_percent 是可选参数。
文件末尾的可用空间不会返回给操作系统,文件的物理大小也不会更改。
因此,指定 NOTRUNCATE 时,数据库看起来未收缩。
NOT RUNCATE 只适用于数据文件。
日志文件不受影响。
TRUNCATEONLY 将文件末尾的所有可用空间释放给操作系统,但不在文件内部执行任何页移动。
数据文件只收缩到最近分配的区。
如果与 TRUNCATEONLY 一起指定,将忽略 target _percent。
TRUNCATEONLY 只适用于数据文件。
日志文件不受影响。
WITH NO_INFOMSGS 取消严重级别从 0 到 10 的所有信息性消息。
结果集列名说明DbId 数据库引擎试图收缩的文件的数据库标识号。
FileId 数据库引擎尝试收缩的文件的文件标识号。
CurrentSize 文件当前占用的 8 KB 页数。
MinimumSize 文件最低可以占用的 8 KB 页数。
这与文件的最小大小或最初创建时的大小相对应。
UsedPages 文件当前使用的 8 KB 页数。
EstimatedPages 数据库引擎估计文件能够收缩到的 8 KB 页数。
备注若要收缩特定数据库的所有数据和日志文件,请执行 DBCC SHRINKDATABASE 命令。
若要一次收缩一个特定数据库中的一个数据或日志文件,请执行 DBCC SHRINKFILE 命令。
若要查看数据库中当前的可用(未分配)空间量,请运行 sp_spaceused。
可在进程中的任一点停止 DBCC SHRINKDATABASE 操作,任何已完成的工作都将保留。
收缩后的数据库不能小于数据库的最小大小。
最小大小是在数据库最初创建时指定的大小,或是使用文件大小更改操作(如 DBCC SHIRNKFILE 或 ALTER DATABASE)显式设置的最后大小。
例如,如果数据库最初创建时的大小为 10 MB,后来增长到 100 MB,则该数据库最小只能收缩到 10 MB,即使已经删除数据库的所有数据也是如此。
运行 DBCC SHRINKDATABASE 而不指定 NOTRUNCATE 选项或 TRUNCATEONLY 选项等价于带 N OTRUNCATE 运行 DBCC SHRINKDATABASE 操作,然后再带 TRUNCATEONLY 运行 DBCC SHRINK DATABASE 操作。
要收缩的数据库不必在单用户模式下;其他的用户仍可以在数据库收缩时对其进行工作。
这也包括系统数据库。
不能在备份数据库时收缩数据库。
反之,也不能在数据库执行收缩操作时备份数据库。
DBCC SHRINKDATABASE 的工作原理DBCC SHRINKDATABASE 以每个文件为单位对数据文件进行收缩。
然而,DBCC SHRINKDATABA SE 在对日志文件进行收缩时,它将视为所有的日志文件都存在于一个连续的日志池中。
文件始终从末尾开始收缩。
假设名为 mydb 的数据库有一个数据文件和两个日志文件。
数据文件和日志文件分别是 10 MB,并且数据文件包含 6 MB 数据。
Microsoft SQL Server 2005 数据库引擎对每个文件计算一个目标大小。
这就是文件将要收缩到的大小。
将 target_percent 与 DBCC SHRINKDATABASE 一起指定时,数据库引擎计算的目标大小是收缩后文件中的 target_percent 可用空间大小。
例如,如果在收缩 mydb 时将 target_percent 指定为 25,则数据库引擎将此文件的目标大小计算为 8 MB(6 MB 数据加上 2 MB 可用空间)。
因此,数据库引擎将任何数据从数据文件的后 2 MB 中移动到数据文件前 8 MB 的可用空间中,然后对该文件进行收缩。
假设 mydb 的数据文件包含 7 MB 的数据。
将 target_percent 指定为 30,以允许将此数据文件收缩到可用空间为 30%。
但是,将 target_percent 指定为 40 却不会收缩数据文件,因为数据库引擎收缩文件的目标大小不能小于数据当前占用空间大小。
您还可以用另一种方法来考虑此问题:所要求的 40%可用空间加上整个数据文件大小的 70%(10 MB 中的 7 MB),超过了 100%。
因为所要求的可用百分比加上数据文件占用的当前百分比大于100%(多出 10%),所以任何大于 30 的 target_size 都不会收缩此数据文件。
对于日志文件,数据库引擎使用 target_percent 来计算整个日志的目标大小;因此,tar get_percent 是收缩操作后日志中的可用空间大小。
之后,整个日志的目标大小转换为每个日志文件的目标大小。
DBCC SHRINKDATABASE 尝试立即将每个物理日志文件收缩到其目标大小。
如果虚拟日志中的所有逻辑日志部分都没有超出日志文件的目标大小,则该文件将成功截断,DBCC SHRINKDA TABASE 完成且不显示任何消息。
但是,如果部分逻辑日志位于超出目标大小的虚拟日志中,则数据库引擎将释放尽可能多的空间,并发出一条信息性消息。
该消息说明需要执行哪些操作来将逻辑日志移出位于文件末尾的虚拟日志。
执行该操作以后,DBCC SHRINKDATABASE 可用于释放剩余空间。
有关详细信息,请参阅收缩事务日志。
因为日志文件只能收缩到虚拟日志文件边界,所以不可能将日志文件收缩到比虚拟日志文件更小(即使现在没有使用该文件)。
虚拟日志文件的大小在创建或扩展这些日志文件时由数据库引擎动态选择。
有关虚拟日志文件的详细信息,请参阅事务日志物理体系结构。
权限要求具有 sysadmin 固定服务器角色或 db_owner 固定数据库角色的成员身份。
、示例A. 收缩数据库并指定可用空间的百分比以下示例将减小 UserDB 用户数据库中数据文件和日志文件的大小,以便在数据库中留出10% 的可用空间。
DBCC SHRINKDATABASE (UserDB, 10);GOB. 截断数据库以下示例使 AdventureWorks 示例数据库中的数据文件收缩到最后分配的区。
DBCC SHRINKDATABASE (AdventureWorks, TRUNCATEONLY);请参考:/zh-cn/vs2008/ms190488(SQL.90).aspx2、DBCC SHRINKFILE (Transact-SQL)收缩当前数据库的指定数据或日志文件的大小,或通过将数据从指定的文件移动到相同文件组中的其他文件来清空文件,以允许从数据库中删除该文件。
文件大小可以收缩到比创建该文件时所指定的大小更小。
这样会将最小文件大小重置为新值。
语法DBCC SHRINKFILE ( { 'file_name' | file_id } { [ , EMPTYFILE ] | [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ] } ) [ WITH NO_IN FOMSGS ]参数' file_name '要收缩的文件的逻辑名称。
file_id要收缩的文件的标识 (ID) 号。
若要获得文件 ID,请使用 FILE_IDEX 系统函数,或查询当前数据库中的 sys.database_files 目录视图。
target_size用兆字节表示的文件大小(用整数表示)。
如果未指定,则 DBCC SHRINKFILE 将文件大小减少到默认文件大小。
默认大小是创建文件时指定的大小,或者是使用 ALTER DATABA SE 所设置的最后大小。
如果指定了 target_size,则 DBCC SHRINKFILE 尝试将文件收缩到指定大小。
将要释放的文件部分中的已使用页重新定位到保留的文件部分中的可用空间。
例如,如果数据文件为 10 MB,则 target_size 为 8 的 DBCC SHRINKFILE 操作会将文件最后 2 MB 中所有的已使用页重新分配到文件前 8 MB 中的任何未分配页中。
DBCC SHRINKFILE 不会将文件收缩到小于存储文件中的数据所需要的大小。
例如,如果使用 10 MB 数据文件中的 7 MB,则带有 target_size 为 6 的 DBCC SHRINKFILE 语句只能将该文件收缩到 7 MB,而不能收缩到 6 MB。
EMPTYFILE将指定文件中的所有数据迁移到同一文件组中的其他文件。
由于数据库引擎不再允许将数据放在空文件内,因此可以使用 ALTER DATABASE 语句来删除该文件。
NOTRUNCATE在指定或不指定 target_percent 的情况下,将已分配的页从数据文件的末尾移动到该文件前面的未分配页。
文件末尾的可用空间不会返回给操作系统,文件的物理大小也不会更改。
因此,指定 NOTRUNCATE 时,文件看起来未收缩。
NOTRUNCATE 只适用于数据文件。
日志文件不受影响。
TRUNCATEONLY将文件末尾的所有可用空间释放给操作系统,但不在文件内部执行任何页移动。
数据文件只收缩到最后分配的区。
如果随 TRUNCATEONLY 指定了 target_size,则会忽略该参数。
TRUNCATEONLY 只适用于数据文件。
WITH NO_INFOMSGS取消显示所有信息性消息。
结果集列名说明DbId 数据库引擎试图收缩的文件的数据库标识号。
FileId 数据库引擎试图收缩的文件的文件标识号。
CurrentSize 文件当前占用的 8 KB 页数。
MinimumSize 文件最低可以占用的 8 KB 页数。