广告
返回顶部
首页 > 资讯 > 数据库 >sqlserver收缩数据库、收缩数据文件的操作
  • 912
分享到

sqlserver收缩数据库、收缩数据文件的操作

2024-04-02 19:04:59 912人浏览 泡泡鱼
摘要

一些实际工作中的总结 1、实际工作中收缩数据文件的情况比收缩库的情况多,不建议直接收缩数据库 2、收缩很容易出现等待,收缩会话对应sys.sysprocesses的字段waitresource值类似为15

一些实际工作中的总结

1、实际工作中收缩数据文件的情况比收缩库的情况多,不建议直接收缩数据库

2、收缩很容易出现等待,收缩会话对应sys.sysprocesses的字段waitresource值类似为15:1:4700649,sys.sysprocesses的字段lastwaittype值为PAGEioLATCH_SH或PAGEIOLATCH_EX等

3、收缩数据文件时,不要一次性全部收缩。 可以每次收缩5G左右,比如DataFile1有32G,则每次收缩如下

USE UserDB;

DBCC SHRINKFILE (DataFile1, 27000);

Go

DBCC SHRINKFILE (DataFile1, 22000);

GO

4、数据文件的可用空间可以结合sys.master_files和FILEPROPERTY(name,'SpaceUsed')来查看

5、收缩的100%进度可以通过sys.dm_exec_requests的字段percent_complete来看

6、收缩完后,记得重建索引

alter index all on table_name rebuild with (>

收缩数据库的官方文档https://docs.microsoft.com/zh-cn/sql/t-sql/database-console-commands/dbcc-shrinkdatabase-transact-sql?view=sql-server-2017

DBCC SHRINKDATABASE

( database_name | database_id | 0

[ , target_percent ]

[ , { NOTRUNCATE | TRUNCATEONLY } ]

)

[ WITH NO_INFOMSGS ]

database_name | database_id | 0

要收缩的数据库名称或 ID。 0 指定使用当前数据库。

target_percent

整数,数据库收缩后的数据库文件中所需的剩余可用空间百分比。

NOTRUNCATE

将分配的页面从文件的末尾移动到文件前面的未分配页面。 此操作会压缩文件中的数据。

文件末尾的可用空间不会返回给操作系统,并且文件的物理大小也不会更改。 因此,指定 NOTRUNCATE 时,数据库似乎不会收缩。

NOTRUNCATE只适用于数据文件。 NOTRUNCATE不影响日志文件。

TRUNCATEONLY

将文件末尾的所有可用空间释放给操作系统。 不移动文件内的任何页面。 数据文件仅收缩到最后指定的盘区。 如果使用 TRUNCATEONLY 指定,则会忽略 target_percent。

TRUNCATEONLY 将影响日志文件。 若要仅截断数据文件,请使用 DBCC SHRINKFILE。

以下示例将缩小 UserDB 数据库中数据文件和日志文件的大小,以便在数据库中留出 10% 的可用空间。

DBCC SHRINKDATABASE (UserDB, 10);

GO

收缩数据文件的官方文档Https://docs.microsoft.com/zh-cn/sql/t-sql/database-console-commands/dbcc-shrinkfile-transact-sql?view=sql-server-2017

DBCC SHRINKFILE

(

{ file_name | file_id }

{ [ , EMPTYFILE ]

| [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ]

}

)

[ WITH NO_INFOMSGS ]

file_name | file_id

要收缩的文件的逻辑名称或标识 (ID) 号,参加sys.master_files视图的name或file_id字段。

target_size

整数,文件的新大小(以 MB 为单位)。 如果未指定,DBCC SHRINKFILE 缩小到文件创建大小。

NOTRUNCATE

无论是否指定 target_percent,将数据文件末尾中的已分配页移到文件开头的未分配页区域中。 操作系统不会回收文件末尾的可用空间,文件的物理大小也不会改变。 因此,如果指定 NOTRUNCATE,文件看起来就像没有收缩一样。 NOTRUNCATE 只适用于数据文件。 日志文件不受影响。 FILESTREAM 文件组容器不支持此选项。

TRUNCATEONLY

将文件末尾的所有可用空间释放给操作系统,但不在文件内部移动任何页。 数据文件只收缩到最后分配的区。 如果使用 TRUNCATEONLY 指定,则会忽略 target_size。

TRUNCATEONLY 选项不会移动日志中的信息,但会删除日志文件末尾的失效 VLF。 FILESTREAM 文件组容器不支持此选项。

以下示例将 UserDB 数据库中名为 DataFile1 的数据文件的大小收缩到 10 MB。

USE UserDB;

DBCC SHRINKFILE (DataFile1, 10);

GO

查看数据文件的大小

select name,size*8/1024 MB from sys.master_files where database_id=db_id(N'DBNAME')

查看数据文件可收缩空间,结果见Availabesize_MB字段值

select name ,size*8/1024 as Totalsize_MB ,CAST(FILEPROPERTY(name,'SpaceUsed') AS int)*8/1024 as Usedsize_MB,

size*8/1024 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)*8/1024 AS Availabesize_MB

from sys.master_files where database_id=db_id(N'DBNAME')

查看收缩的进度100%,此语句要到指定的数据库下执行

SELECT DB_NAME(database_id) AS Exec_DB

,percent_complete

,CASE WHEN estimated_completion_time < 36000000

THEN '0' ELSE '' END + RTRIM(estimated_completion_time/1000/3600)

+ ':' + RIGHT('0' + RTRIM((estimated_completion_time/1000)%3600/60), 2)

+ ':' + RIGHT('0' + RTRIM((estimated_completion_time/1000)%60), 2) AS [Time Remaining]

,b.text as tsql

,*

FROM SYS.DM_EXEC_REQUESTS

cross apply sys.dm_exec_sql_text(sql_handle) as b

WHERE command LIKE 'DbccFilesCompact%' --and database_id=db_id('cardorder')

ORDER BY 2 DESC

您可能感兴趣的文档:

--结束END--

本文标题: sqlserver收缩数据库、收缩数据文件的操作

本文链接: https://www.lsjlt.com/news/49949.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • sqlserver收缩数据库、收缩数据文件的操作
    一些实际工作中的总结 1、实际工作中收缩数据文件的情况比收缩库的情况多,不建议直接收缩数据库 2、收缩很容易出现等待,收缩会话对应sys.sysprocesses的字段waitresource值类似为15...
    99+
    2022-10-18
  • sqlserver 数据库收缩的方法
    1.右键-属性-选项-简单模式 2.右键-任务-收缩-文件 3.右键-任务-收缩-数据库 在SQL Server中经常遇到事务日志变大的情况,除了将数据库设置为“自动收缩”外,还可以使用下面的SQL命...
    99+
    2022-10-18
  • SQL SERVER数据库文件收缩
    --进入需要收缩的数据库,获取数据文件名,日志名,因为这些名字不一定和数据库名一致,但执行DBCC的时候又需要select * from sysfiles--截断事务日志,这个地方写数据库名,非文...
    99+
    2022-10-18
  • SQL收缩数据库
    数据库收缩:个人理解,数据库在平凡长期操作的过程中会数据的日志文件永远是按一定的比例在增加,数据文件在数据库删除大量的数据后不一定减小磁盘空间,反复操作会出现空间浪费,所以收缩数据库将会得以体现。假设把数据...
    99+
    2022-10-18
  • 收缩 tempdb 数据库
    客户需求:这是一个生产环境,在夜深人静的时候发现 tempdb 已经超过500GB。需求分析:我们知道,如果重启 SQL Server,tempdb 会自动重新创建,从而使 tempdb 回归到初始大小。但...
    99+
    2022-10-18
  • sqlserver 数据库日志收缩失败解决办法
    1、数据库-收缩-日志-可以收缩百分之90多,但是收缩完,容量并没有减少。查资料有可能日志是被占用了,暂时无法收缩;2、select   log_reuse_wait_desc...
    99+
    2022-10-18
  • SQL Server数据文件收缩和查看收缩进度的方法是什么
    这篇文章主要介绍“SQL Server数据文件收缩和查看收缩进度的方法是什么”,在日常操作中,相信很多人在SQL Server数据文件收缩和查看收缩进度的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作...
    99+
    2023-07-05
  • 不要收缩数据库文件的原因是什么
    这篇文章主要为大家展示了“不要收缩数据库文件的原因是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“不要收缩数据库文件的原因是什么”这篇文章吧。关于收缩数据文...
    99+
    2022-10-18
  • oracle怎么收缩表空间数据文件
    要收缩Oracle数据库中的表空间数据文件,可以按照以下步骤操作:1. 首先,确认表空间中的数据文件是否可以收缩。可以使用以下命令查...
    99+
    2023-09-16
    oracle
  • 什么是SQL Server数据库收缩
    这篇文章主要讲解了“什么是SQL Server数据库收缩”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“什么是SQL Server数据库收缩”吧!1、为什么要...
    99+
    2022-10-18
  • Oracle表空间数据库文件收缩的示例分析
    这篇文章主要介绍了Oracle表空间数据库文件收缩的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。我们经常会遇到数据库磁盘空间爆满的...
    99+
    2022-10-18
  • SQL SERVER数据库如何实现收缩
    这篇文章将为大家详细讲解有关SQL SERVER数据库如何实现收缩,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 关于收缩的建议 不到万不得已,千万不要收缩数据库。收...
    99+
    2022-10-19
  • SQL SERVER中怎么收缩数据库日志
    今天就跟大家聊聊有关SQL SERVER中怎么收缩数据库日志,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 Microsoft OLE DB Pr...
    99+
    2022-10-18
  • 如何实现收缩数据库不变小
    这篇文章主要讲解了“如何实现收缩数据库不变小”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何实现收缩数据库不变小”吧! 收缩...
    99+
    2022-10-18
  • sql server 2008以上数据库 收缩事务日志
    日志简介SQL Server中的事务日志无疑是SQL Server中最重要的部分之一。因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback)。从而还部分确保了...
    99+
    2022-10-18
  • 数据库备份、还原、删除、收缩,创建登录用户,数据库用户等操作脚本
    记录一下/ --备份数据库 use [master] go BACKUP DATABASE [LnkSys11] TO DISK = N"C:BackUpLnkSys11.bak" WITH --备份文件存放路径 NOFORMAT,...
    99+
    2015-06-09
    数据库备份 还原 删除 收缩,创建登录用户,数据库用户等操作脚本
  • 怎么使用alwayson后如何收缩数据库日志
    这篇文章将为大家详细讲解有关怎么使用alwayson后如何收缩数据库日志,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。问题描述:在使用了alwayson后,主从库实时同步...
    99+
    2022-10-18
  • 如何压缩MongoDB的数据文件
    如何压缩MongoDB的数据文件,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  MongoDB采用了磁盘空间预分配的机制,为...
    99+
    2022-10-18
  • 压缩MySQL数据文件的方法
    这篇文章主要介绍“压缩MySQL数据文件的方法”,在日常操作中,相信很多人在压缩MySQL数据文件的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”压缩MySQL数据文件的...
    99+
    2022-10-18
  • Sql Server 压缩数据库日志文件的方法
    Sql Server 日志 _log.ldf文件太大,数据库文件有500g,日志文件也达到了500g,占用磁盘空间过大,且可能影响程序性能,需要压缩日志文件。 压缩日志脚本里要填的名字从要压缩的数据库属性里查看 脚本文...
    99+
    2022-11-24
    SqlServer压缩数据库 SqlServer日志文件
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作