发布网友 发布时间:2022-04-08 19:08
共2个回答
懂视网 时间:2022-04-08 23:30
收缩 Tempdb 的方法 1(此方法我尝试后很有效!)
此方法要求您重新启动 SQL Server。
1.停止 SQL Server。打开命令提示符,然后键入以下命令启动 SQL Server:
sqlservr -c -f
-c 和 -f 参数使 SQL Server 以最小配置模式启动,让数据文件的 tempdb 大小为 1 MB,日志文件的 tempdb 为 0.5 MB。
注意:如果使用 SQL Server 命名实例,必须切换到适当的文件夹 (Program FilesMicrosoft SQL ServerMSSQL$instance nameBinn),并使用 -s 开关 (-s%instance_name%)。
2.用查询分析器连接到 SQL Server,然后运行下列 Transact-SQL 命令:
ALTER DATABASE tempdb MODIFY FILE
(NAME = ‘tempdev‘, SIZE = target_size_in_MB)
--Desired target size for the data file
ALTER DATABASE tempdb MODIFY FILE
(NAME = ‘templog‘, SIZE = target_size_in_MB)
--Desired target size for the log file
3.通过在命令提示符窗口中按 Ctrl-C 停止 SQL Server,将 SQL Server 作为服务重新启动,然后验证 Tempdb.mdf 和 Templog.ldf 文件的大小。
此方法的局限是它只能对默认的 tempdb 逻辑文件 tempdev 和 templog 进行操作。如果将其他文件添加到了 tempdb,您可以在将 SQL Server 作为服务重新启动后收缩它们。在启动过程中将重新创建所有 tempdb 文件;因此,它们是空的并可删除。要删除 tempdb 中的其他文件,请使用带有 REMOVE FILE 选项的 ALTER DATABASE 命令。
收缩 Tempdb 的方法 2
使用 DBCC SHRINKDATABASE 命令将 tempdb 数据库作为整体收缩。DBCC SHRINKDATABASE 接收参数 target_percent,该参数是数据库收缩后数据库文件中剩余可用空间的所需百分比。如果使用 DBCC SHRINKDATABASE,可能必须重新启动 SQL Server。
重要说明:如果运行 DBCC SHRINKDATABASE,则 tempdb 数据库不能正在发生其他活动。要确保在运行 DBCC SHRINKDATABASE 时其他进程无法使用 tempdb,必须以单用户模式启动 SQL Server。有关更多信息,请参考本文的在使用 Tempdb 时执行 DBCC SHRINKDATABASE 或 DBCCSHRINKFILE 的结果 一节。
1.通过使用 sp_spaceused 存储过程确定 tempdb 中当前使用的空间。然后,计算剩余可用空间的百分比,它将用作 DBCC SHRINKDATABASE 的参数;该计算是基于所需数据库大小进行的。
注意:在某些情况下,您可能必须执行 sp_spaceused @updateusage=true 来重新计算使用的空间和获得更新的报告。有关 sp_spaceused 存储过程的更多信息,请参考 SQL Server 联机丛书。
请考虑以下示例:
假定
tempdb
有两个文件:主数据文件 (Tempdb.mdf) 和日志文件 (Tempdb.ldf),其大小分别为 100 MB 和 30 MB。假定
sp_spaceused
报告主数据文件包含 60 MB 的数据。还假定您要将主数据文件收缩到 80 MB。计算收缩后剩余可用空间的所需百分比,即 80 MB - 60 MB = 20 MB。现在,用 20 MB 除以 80 MB = 25%,这就是您的 target_percent。事务日志文件将据此进行收缩,从而在数据库收缩后剩下 25% 即 20 MB 的可用空间。
2.用查询分析器连接到 SQL Server,然后运行下列 Transact-SQL 命令:
dbcc shrinkdatabase (tempdb, ‘target percent‘)
-- This command shrinks the tempdb database as a whole
对 tempdb 数据库使用 DBCC SHRINKDATABASE 命令具有局限性。数据文件和日志文件的目标大小不能小于创建数据库时指定的大小,也不能小于用文件大小更改操作(如带有 MODIFY FILE 选项的 ALTER DATABASE 命令或 DBCC SHRINKFILE 命令)显式设置的上次大小。DBCC SHRINKDATABASE 的另一个限制是 target_percentage 参数的计算和它对当前使用的空间的依赖。
收缩 Tempdb 的方法 3
使用命令 DBCC SHRINKFILE 收缩单个 tempdb 文件。DBCC SHRINKFILE 比 DBCC SHRINKDATABASE 提供更多的灵活性,因为您可以对单个数据库文件使用它而不必影响属于同一数据库的其他文件。DBCC SHRINKFILE 接收 target size 参数,这是所需的数据库文件的最终大小。
重要说明:必须在 tempdb 数据库不发生任何活动时运行 DBCC SHRINKFILE 命令。要确保在执行 DBCC SHRINKFILE 时其他进程不能使用 tempdb,必须以单用户模式重新启动 SQL Server。有关 DBCC SHRINKFILE 的更多信息,请参见本文中在使用 Tempdb 时执行 DBCC SHRINKDATABASE 或 DBCCSHRINKFILE 的结果 一节。
1.确定主数据文件 (tempdb.mdf)、日志文件 (templog.ldf) 和/或添加到 tempdb 的其他文件的所需大小。确保在这些文件中使用的空间小于或等于所需的目标大小。
2.用查询分析器连接到 SQL Server,然后为需要收缩的特定数据库运行下列 Transact-SQL 命令:
use tempdb
go
dbcc shrinkfile (tempdev, ‘target size in MB‘)
go
-- this command shrinks the primary data file
dbcc shrinkfile (templog, ‘target size in MB‘)
go
-- this command shrinks the log file, look at the last paragraph.
DBCC SHRINKFILE 的一个优点是它可以将文件大小减小到小于其原始大小。您可以对任何数据文件或日志文件执行 DBCC SHRINKFILE。DBCC SHRINKFILE 的一个局限是您无法使数据库小于 model 数据库的大小。
在 SQL Server 7.0 中,事务日志收缩是一个推迟操作,您必须执行日志截断和备份,以帮助进行数据库中的收缩操作。但是,默认情况下,tempdb 将 trunc log on chkpt 选项设置为“打开”(ON);这样,您就无需为该数据库执行日志截断。有关如何在 SQL Server 7.0 中收缩数据库事务日志的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
256650
(http://support.microsoft.com/kb/256650/ )
INF:如何收缩 SQL Server 7.0 事务日志
在使用 Tempdb 时执行 DBCC SHRINKDATABASE 或 DBCCSHRINKFILE 的结果
当正在使用 tempdb 时,如果您尝试通过使用 DBCC SHRINKDATABASE 或 DBCC SHRINKFILE 命令收缩它,可能会收到与以下类型相似的多个一致性错误,并且收缩操作可能失败:
Server:Msg 2501, Level 16, State 1, Line 1 Could not find table named ‘1525580473‘.Check sysobjects. - 或 -
Server:Msg 8909, Level 16, State 1, Line 0 Table Corrupt:Object ID 1, index ID 0, page ID %S_PGID.The PageId in the page header = %S_PGID. 尽管错误 2501 可能不表示 tempdb 中的任何损坏,但它会导致收缩操作失败。与其不同,错误 8909 可能表示 tempdb 数据库中的损坏。应重新启动 SQL Server 来重新创建 tempdb 并清除一致性错误。但是,请记住像错误 8909 这样的物理数据损坏可能有其他原因,这包括输入/输出子系统问题。
收缩TempDB的办法(转载)
标签:
热心网友 时间:2022-04-08 20:38
每次启动 SQL Server 时就会重新建立 tempdb,如此一来,系统永远会以乾净的资料库复本启动。连接中断时会自动卸除暂存资料表与预存程序,且系统关闭时所有连接都会停止。因此,tempdb 中的任何资料都不会从 SQL Server 的一个工作阶段储存到其他的工作阶段。