如何压缩SQL Server 2005指定数据库文件和日志的大小

如何压缩SQL Server 2005指定数据库文件和日志的大小,第1张

您好,很高兴为您解答。

下面有两个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 时,数据库看起来未收缩。 NOTRUNCATE 只适用于数据文件。日志文件不受影响。

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 选项等价于带 NOTRUNCATE 运行 DBCC SHRINKDATABASE *** 作,然后再带 TRUNCATEONLY 运行 DBCC SHRINKDATABASE *** 作。

要收缩的数据库不必在单用户模式下;其他的用户仍可以在数据库收缩时对其进行工作。这也包括系统数据库。

不能在备份数据库时收缩数据库。反之,也不能在数据库执行收缩 *** 作时备份数据库。

DBCC SHRINKDATABASE 的工作原理

DBCC SHRINKDATABASE 以每个文件为单位对数据文件进行收缩。然而,DBCC SHRINKDATABASE 在对日志文件进行收缩时,它将视为所有的日志文件都存在于一个连续的日志池中。文件始终从末尾开始收缩。

假设名为 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 来计算整个日志的目标大小;因此,target_percent 是收缩 *** 作后日志中的可用空间大小。之后,整个日志的目标大小转换为每个日志文件的目标大小。

DBCC SHRINKDATABASE 尝试立即将每个物理日志文件收缩到其目标大小。如果虚拟日志中的所有逻辑日志部分都没有超出日志文件的目标大小,则该文件将成功截断,DBCC SHRINKDATABASE 完成且不显示任何消息。但是,如果部分逻辑日志位于超出目标大小的虚拟日志中,则数据库引擎将释放尽可能多的空间,并发出一条信息性消息。该消息说明需要执行哪些 *** 作来将逻辑日志移出位于文件末尾的虚拟日志。执行该 *** 作以后,DBCC SHRINKDATABASE 可用于释放剩余空间。有关详细信息,请参阅收缩事务日志。

因为日志文件只能收缩到虚拟日志文件边界,所以不可能将日志文件收缩到比虚拟日志文件更小(即使现在没有使用该文件)。虚拟日志文件的大小在创建或扩展这些日志文件时由数据库引擎动态选择。有关虚拟日志文件的详细信息,请参阅事务日志物理体系结构。

权限

要求具有 sysadmin 固定服务器角色或 db_owner 固定数据库角色的成员身份。、

示例

A 收缩数据库并指定可用空间的百分比

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

DBCC SHRINKDATABASE (UserDB, 10);

GO

B 截断数据库

以下示例使 AdventureWorks 示例数据库中的数据文件收缩到最后分配的区。

DBCC SHRINKDATABASE (AdventureWorks, TRUNCATEONLY);

请参考:>

1、首先从开始菜单着手,打开开始菜单栏,在菜单栏上找到我们已经安装的SQL server 2008,单击打开它。

2、打开SQL server 2008数据库,来到登录界面,在这里我们只需要输入登录服务器名(电脑IP地址)、登录身份、账号、密码,然后单击登录。

3、成功登录进入SQL 数据库,可以看到连接的数据库基本信息,展开数据库节点,单击数据库然后使用鼠标右键,在d出的菜单中选择附加。

4、接着d出附加数据库的界面,这里我们只需要单击界面上的添加按钮就可以了。

5、单击添加按钮后,新d出来一个框,让你选择你要附加的数据文件路径,选择到我们要附加的数据库文件,单击确定按钮。

6、返回到附加数据库的界面,这是我们可以从界面上看到选择的附加数据库文件信息,然后在上方可以修改要附加的数据库名称。

楼主 可以试试下面的方法:

清空日志

  DUMP TRANSACTION 库名

WITH

NO_LOG 

2截断事务日志:

  BACKUP LOG 数据库名 WITH

NO_LOG

3收缩数据库文件

  数据库名--右击--任务--收缩--文件

    --文件类型选择日志--收缩 *** 作选择第二个 将文件收缩到0 ,确定就可以了

4 也可以用SQL语句来完成

  --收缩数据库

  DBCC SHRINKDATABASE(客户资料)

  --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select from

sysfiles

  DBCC SHRINKFILE(1)

收缩的时候把恢复模式改为简单 否则收缩不了 

希望解决了楼主的问题

15 g 的数据库是很小的库了!这个量级正常是不应该存在慢的问题。

1慢可能是服务器的配置过低,尤其是阿里云服务器租用的配置太低了!感觉你说所的找不到存储过程好像就是阿里云最低配的问题。

2你们还用存储过程,和我们以前的系统一样,所有的业务逻辑都是存储过程完成,所以所有的压力都在数据库服务器上,服务器就容易卡,用存储过程还无法负载均衡。

3表的索引缺失或不合理,很重要的原因。

4使用了大量的触发器,触发器是开始一下爽,后来苦一生。坚决不用触发器,数据量大这个是要命的。

5存储过程里使用大量的link 访问其他数据库服务器,尤其是link 给远程库写数据;如果还写远程数据包含在分布式事务里这就更要命了。

日志1g 慢和它没一毛钱关系,就是占一点空间而已

解决方法:

方法一

右键选择数据库-》任务-》收缩-》文件-》文件类型-》日志-》在释放未使用的空间前重新组织页

方法二(不推荐)

1 必须先改成简单模式

2 然后用

----Logical Files :

--CMS15_Data

--CMS15_Log

DBCC SHRINKFILE (N'CMS15_Log' , 1)

GO

注:Data是数据文件,Log是日志文件

如:shgzts为数据库名

dump transaction shgzts with no_log --截断日志

backup log shgzts with no_log --备份日志

dbcc shrinkdatabase(shgzts,truncateonly) --数据库收缩

以上就是关于如何压缩SQL Server 2005指定数据库文件和日志的大小全部的内容,包括:如何压缩SQL Server 2005指定数据库文件和日志的大小、sql server 2000收缩数据库总是发生死锁、SQL数据库如何压缩等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9511826.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存