精华内容
下载资源
问答
  • 压缩数据库日志及数据库文件大小 我无论看什么样书籍总想和自己工作挂上钩,在繁密...单位数据库越来越庞大,查询速度越来越慢,我结合单位数据库真实情况来操作如何压缩数据库日志及其数据库文件,这些...

    压缩数据库日志及数据库文件大小

        我无论看什么样的书籍总想和自己的工作挂上钩,在繁密的文字中来查找自己所要的信息,在自己工作中所遇到的一些难题总想在其他资料中找到相关的文字,所以我们懂得的越少就要看越多的书籍,谁也不知道什么时候能用得上,单位的数据库越来越庞大,查询速度越来越慢,我结合单位数据库的真实情况来操作如何压缩数据库日志及其数据库文件,这些内容虽然大家都熟悉,如果静下心来再看一遍我自己的这篇文章,就能感觉到他的实践性和针对性是多么的强,直接按这些步骤去执行就可以了,不要问关于这方面的知识点是什么。

        因为单位用的数据库名为svw,如果其他单位或个人想快捷方便无误的压缩数据库日志,就把数据库名更改为你们自己的数据库名,压缩数据库日志的操作步骤:

     

    1、打开企业管理器
    2、打开要处理的数据库
    3、点击菜单>工具>SQL查询分析器
    4、在输入窗口里面输入:
    DUMP TRANSACTION [数据库名] WITH NO_LOG
    BACKUP LOG [数据库名] WITH NO_LOG
    DBCC SHRINKDATABASE([数据库名])
    点击执行!这样子数据库就操作成功了。

     

    上面操作我一直在用,不会出现任何问题,而我这些天想找能够直接压缩数据库文件的方法都不大理想,下面我刚采用了如下方式进行数据库日志及其数据库文件压缩操作,日志压缩的比较理想,数据库文件也有效果,可是不能直接填写你想压缩数据库文件的数字,无论怎么样,还是写出来与大家分享。

     


      下面的所有库名都指你要处理的数据库的库名。

      1.清空日志

      DUMP TRANSACTION 库名 WITH NO_LOG

      2.截断事务日志:

      BACKUP LOG 库名 WITH NO_LOG

      3.收缩数据库文件(RU 不压缩,数据库的文件不会减小 )

     

      企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件-数据库文件 :

      --选择日志文件--收缩操作-收缩文件至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了

      --选择数据文件--收缩操作-收缩文件至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了

     

        看起来好像操作复杂,其实实际应用中很简单,这样数据库文件就能压缩了,我的数据库文件压缩前是3.92G,压缩后为3.66G,而在收缩操作里不能随意填写你想压缩的数字,后面告诉你最小压缩数字,不能填写比压缩数字在小的数字了。


     

    本文转自 jiangxuezhi2009 51CTO博客,原文链接:http://blog.51cto.com/jiangxuezhi/744732,如需转载请自行联系原作者

    展开全文
  • 折腾:之后,需要去:搞懂,为何realm的数据库的文件为何这么大:存储了3000多条数据(与此对比:android的移动端的sql数据库的省市区的数据库文件,只有11M左右。)此处的iOS中的,移动端的realm数据库,只有3000多条...

    折腾:

    之后,需要去:

    搞懂,为何realm的数据库的文件为何这么大:

    存储了3000多条数据

    (与此对比:android的移动端的sql数据库的省市区的数据库文件,只有11M左右。)

    此处的iOS中的,

    移动端的realm数据库,只有3000多条记录,数据库文件竟然就占用了180多M

    -》感觉应该是在10M前后,甚至更少才对。

    所以去搞清楚:

    realm swift size

    realm swift database file too large

    最后是:

    从新用代码,将服务器端,省市区的3000多条数据,重新下载下来,并写入一个新的realm数据库中,得到完整的数据后,再去用:

    writeCopyToURL

    写入到另外一个文件

    (内部实现了Compact模式,相当于压缩了)

    相关代码:let ducumentPath2 = NSHomeDirectory() + “/Documents”

    let url = NSURL(string: ducumentPath2)

    //try realm.writeCopyToURL(NSURL(string: ducumentPath2)!)

    let fileURL = url!.URLByDeletingLastPathComponent!

    .URLByAppendingPathComponent(“default.realm”)

    do {

    try realm.writeCopyToURL(fileURL)

    } catch {

    //XCTFail(“writeCopyToURL failed”)

    }

    最后压缩后到数据库,只有100多KB左右。

    和之前的100多MB比,才是正常的,真正的,适合移动端的数据库的文件大小。

    [总结]

    默认情况下,Realm数据库的文件的大小,

    感觉好像是:

    增量式的去占用空间大小的

    -》某人遇到原先直邮700多KB,数据稍微多一点,就变成1.4MB

    -》空间就增大到原先多2倍了

    -》然后数据继续增长,超过1.4MB,再去变成2倍大小

    -》估计就是这个原因导致此处的,默认情况下,本来只需要占用很小空间的

    3000多条数据

    此处竟然占用了180多MB

    -》然后是手动删除其中多某些列的数据,文件大小竟然不变

    -》别人解释了原因:realm为了避免再次申请所需要的空间,在删除数据后,空间大小不变

    -》想要将realm数据库文件大小减小,可以用writeCopyToURL去拷贝出另外一份,内部会执行Compact模式,进行数据压缩,去掉不必要的空间占用。

    -》然后此处是,

    为了更加降低空间占用,把原先存储的每条数据,从8列减少为4列

    在同样是3000多条的前提下

    保存后,用writeCopyToURL(压缩)导出后,对比效果十分明显:

    原先realm数据库文件:180多MB

    (去掉部分数据列再)压缩后的realm数据库文件:110多KB

    -》整整差不多算是降低了1000倍!!!

    -》最终算是,解决了,Realm数据库文件占用太大空间的问题。

    展开全文
  • 近期在给一系统初始化资料时,不断的导入导出,因此一不小心,将数据... 采用我之前在SQL2005中的方法,发现已不能正常运行:  –sql 2005  1 DUMP TRANSACTION ECM WITH NO_LOG  2 BACKUP LOG ECM WITH NO_LOG
  • 下面有两个SQL语句可以达到在SQL Server 2005/2008压缩指定数据库文件和日志的大小...收缩指定数据库中的数据文件和日志文件的大小。 语法 DBCC SHRINKDATABASE ( 'database_name' | database_id | 0 [ ,target_p...

    下面有两个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);

    请参考:http://msdn.microsoft.com/zh-cn/vs2008/ms190488(SQL.90).aspx


    2、DBCC SHRINKFILE (Transact-SQL)

    收缩当前数据库的指定数据或日志文件的大小,或通过将数据从指定的文件移动到相同文件组中的其他文件来清空文件,以允许从数据库中删除该文件。文件大小可以收缩到比创建该文件时所指定的大小更小。这样会将最小文件大小重置为新值。

    语法

    DBCC SHRINKFILE  (      { 'file_name' | file_id }      { [ , EMPTYFILE ]      | [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ]     } ) [ WITH NO_INFOMSGS ]


    参数

     ' file_name '

        要收缩的文件的逻辑名称。

    file_id

        要收缩的文件的标识 (ID) 号。若要获得文件 ID,请使用 FILE_IDEX 系统函数,或查询当前数据库中的 sys.database_files 目录视图。

    target_size

        用兆字节表示的文件大小(用整数表示)。如果未指定,则 DBCC SHRINKFILE 将文件大小减少到默认文件大小。默认大小是创建文件时指定的大小,或者是使用 ALTER DATABASE 所设置的最后大小。

        如果指定了 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 页数。这与文件的最小大小或最初创建时的大小相对应。

    UsedPages   文件当前使用的 8 KB 页数。

    EstimatedPages 数据库引擎估计文件能够收缩到的 8 KB 页数。


    收缩日志文件

    对于日志文件,SQL Server 2005 数据库引擎使用 target_size 来计算整个日志的目标大小;因此,target_size 是收缩操作后日志中的可用空间大小。之后,整个日志的目标大小转换为每个日志文件的目标大小。DBCC SHRINKFILE 尝试立即将每个物理日志文件收缩到其目标大小。但是,如果部分逻辑日志位于超出目标大小的虚拟日志中,则数据库引擎将释放尽可能多的空间,并发出一条信息性消息。该消息说明需要执行哪些操作来将逻辑日志移出位于文件末尾的虚拟日志。执行这些操作以后,DBCC SHRINKFILE 可用于释放剩余空间。


    如果文件不收缩

    如果收缩操作运行时未出现错误,但文件大小看起来没有发生更改,则请执行下列操作之一以验证文件是否有足够的可用空间可供删除:

    运行以下查询。

    SELECT name ,size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS AvailableSpaceInMB
    FROM sys.database_files;


    权限

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


    示例

    A. 将数据文件收缩到指定的目标大小

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

    USE UserDB;
    GO
    DBCC SHRINKFILE (DataFile1, 7);
    GO


    B. 将日志文件收缩到指定的目标大小

    以下示例将 AdventureWorks 数据库中的日志文件收缩到 1 MB。若要允许 DBCC SHRINKFILE 命令收缩文件,首先需要通过将数据库恢复模式设置为 SIMPLE 来截断该文件。

    USE AdventureWorks;
    GO
    -- Truncate the log by changing the database recovery model to SIMPLE.
    ALTER DATABASE AdventureWorks
    SET RECOVERY SIMPLE;
    GO
    -- Shrink the truncated log file to 1 MB.
    DBCC SHRINKFILE (AdventureWorks_Log, 1);
    GO
    -- Reset the database recovery model.
    ALTER DATABASE AdventureWorks
    SET RECOVERY FULL;
    GO


    C. 截断数据文件

    以下示例将截断 AdventureWorks 数据库中的主数据文件。需要查询 sys.database_files 目录视图以获得数据文件的 file_id。

    USE AdventureWorks;
    GO
    SELECT file_id, name
    FROM sys.database_files;
    GO
    DBCC SHRINKFILE (1, TRUNCATEONLY);


    D. 清空文件

    以下示例演示了清空文件以便从数据库中将其删除的步骤。针对此示例,首先创建一个数据文件,并假设该文件包含数据。

    USE AdventureWorks;
    GO
    -- Create a data file and assume it contains data.
    ALTER DATABASE AdventureWorks
    ADD FILE (
        NAME = Test1data,
        FILENAME = 'C:\t1data.ndf',
        SIZE = 5MB
        );
    GO
    -- Empty the data file.
    DBCC SHRINKFILE (Test1data, EMPTYFILE);
    GO
    -- Remove the data file from the database.
    ALTER DATABASE AdventureWorks
    REMOVE FILE Test1data;
    GO

    转载于:https://www.cnblogs.com/NoRoad/archive/2010/03/29/1699621.html

    展开全文
  • 下面有两个SQL语句可以达到在SQL Server 2005/2008压缩指定数据库文件和日志的...收缩指定数据库中的数据文件和日志文件的大小。 语法 DBCC SHRINKDATABASE ( 'database_name' | database_id | 0 [ ,target_perce...

    下面有两个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);

    请参考:http://msdn.microsoft.com/zh-cn/vs2008/ms190488(SQL.90).aspx

    2、DBCC SHRINKFILE (Transact-SQL)

    收缩当前数据库的指定数据或日志文件的大小,或通过将数据从指定的文件移动到相同文件组中的其他文件来清空文件,以允许从数据库中删除该文件。文件大小可以收缩到比创建该文件时所指定的大小更小。这样会将最小文件大小重置为新值。

    语法

    DBCC SHRINKFILE  (      { 'file_name' | file_id }      { [ , EMPTYFILE ]      | [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ]     } ) [ WITH NO_INFOMSGS ]

    参数

     ' file_name '

        要收缩的文件的逻辑名称。

    file_id

        要收缩的文件的标识 (ID) 号。若要获得文件 ID,请使用 FILE_IDEX 系统函数,或查询当前数据库中的 sys.database_files 目录视图。

    target_size

        用兆字节表示的文件大小(用整数表示)。如果未指定,则 DBCC SHRINKFILE 将文件大小减少到默认文件大小。默认大小是创建文件时指定的大小,或者是使用 ALTER DATABASE 所设置的最后大小。

        如果指定了 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 页数。这与文件的最小大小或最初创建时的大小相对应。

    UsedPages   文件当前使用的 8 KB 页数。

    EstimatedPages 数据库引擎估计文件能够收缩到的 8 KB 页数。

    收缩日志文件

    对于日志文件,SQL Server 2005 数据库引擎使用 target_size 来计算整个日志的目标大小;因此,target_size 是收缩操作后日志中的可用空间大小。之后,整个日志的目标大小转换为每个日志文件的目标大小。DBCC SHRINKFILE 尝试立即将每个物理日志文件收缩到其目标大小。但是,如果部分逻辑日志位于超出目标大小的虚拟日志中,则数据库引擎将释放尽可能多的空间,并发出一条信息性消息。该消息说明需要执行哪些操作来将逻辑日志移出位于文件末尾的虚拟日志。执行这些操作以后,DBCC SHRINKFILE 可用于释放剩余空间。

    如果文件不收缩

    如果收缩操作运行时未出现错误,但文件大小看起来没有发生更改,则请执行下列操作之一以验证文件是否有足够的可用空间可供删除:

    运行以下查询。

    SELECT name ,size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS AvailableSpaceInMB FROM sys.database_files;

    权限

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

    示例

    A. 将数据文件收缩到指定的目标大小

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

    USE UserDB; GO DBCC SHRINKFILE (DataFile1, 7); GO

    B. 将日志文件收缩到指定的目标大小

    以下示例将 AdventureWorks 数据库中的日志文件收缩到 1 MB。若要允许 DBCC SHRINKFILE 命令收缩文件,首先需要通过将数据库恢复模式设置为 SIMPLE 来截断该文件。

    USE AdventureWorks; GO -- Truncate the log by changing the database recovery model to SIMPLE. ALTER DATABASE AdventureWorks SET RECOVERY SIMPLE; GO -- Shrink the truncated log file to 1 MB. DBCC SHRINKFILE (AdventureWorks_Log, 1); GO -- Reset the database recovery model. ALTER DATABASE AdventureWorks SET RECOVERY FULL; GO

    C. 截断数据文件

    以下示例将截断 AdventureWorks 数据库中的主数据文件。需要查询 sys.database_files 目录视图以获得数据文件的 file_id。

    USE AdventureWorks; GO SELECT file_id, name FROM sys.database_files; GO DBCC SHRINKFILE (1, TRUNCATEONLY);

    D. 清空文件

    以下示例演示了清空文件以便从数据库中将其删除的步骤。针对此示例,首先创建一个数据文件,并假设该文件包含数据。

    USE AdventureWorks; GO -- Create a data file and assume it contains data. ALTER DATABASE AdventureWorks ADD FILE (     NAME = Test1data,     FILENAME = 'C:\t1data.ndf',     SIZE = 5MB     ); GO -- Empty the data file. DBCC SHRINKFILE (Test1data, EMPTYFILE); GO -- Remove the data file from the database. ALTER DATABASE AdventureWorks REMOVE FILE Test1data; GO

    http://www.weste.net/2008/10-28/1125536627.html

    http://www.sqlskills.com/blogs/paul/why-you-should-not-shrink-your-data-files/

    转载于:https://www.cnblogs.com/hfit/p/3508388.html

    展开全文
  • 最近利用空闲时间自己在写一个文件备份工具,因为我磁盘上很多文件很重要,...为了响应伟大领袖“自力更生,丰衣足食”号召,咱决定自己写一个工具,专门备份到数据库。支持压缩,支持加密,支持增量。 本...
  • 最近利用空闲时间自己在写一个文件备份工具,因为我磁盘上...为了响应伟大领袖“自力更生,丰衣足食”号召,咱决定自己写一个工具,专门备份到数据库。支持压缩,支持加密,支持增量。本文分享一下其中一些重点...
  • 1.在查询分析器,输入以下...再打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到最小M数,直接输入这个数,确定就可以了。
  • 由于xp_cmdshell 可以执行任何操作系统命令,所以一旦SQL Server管理员帐号(如sa)被攻破,那么攻击者就可以利用xp_cmdshell 在SQL Server执行操作系统命令,如:创建系统管理员,也就意味着系统最高权限已在别.....
  • 数据库文件在使用过程可能会迅速增大,它们有时会影响性能,有时也可能被损坏。在 Microsoft Office Access ,您可以使用“压缩和修复数据库”命令来防止或修复这些问题。 本文并不解释如何备份或还原数据库...
  • 所有在res\raw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。 使用openDatabase方法来打开数据库文件,如果该文件不存在,系统会自动创建/sdcard/dictionary目录,并将res\raw目录中的 XX.db文件复制...
  • SQLite默认配置是不会自动回收空间,如何进行大量数据删除以后,数据库文件大小不会自动减少,因此需要手工压缩SQLite数据文件大小。 导致原因:数据库实时插入和删除会使得数据库文件结构混乱,...
  • 通过数据库查看可用空间还有110G左右,所以决定使用 SSMS工具来压缩数库库,在压缩的过程压缩未执行完成),遇到一个问题,,数据库的主数据文件MDF 容量突然从330G增长到430G,足足增长了100G容量出来,这个...
  • 在建站过程中,我们常常需要在SQL数据库中创建数据库,并在数据库中导入数据,那么我们该如何在phpMyAdmin中创建数据库又怎么导入SQL数据文件呢? 在phpMyAdmin界面,点击需要导入数据库,要导入数据,需要在phpMyAdmin...
  • 由于xp_cmdshell 可以执行任何操作系统命令,所以一旦SQL Server管理员帐号(如sa)被攻破,那么攻击者就可以利用xp_cmdshell 在SQL Server执行操作系统命令,如:创建系统管理员,也就意味着系统最高权限已...
  • 当软件开发过程我们需要测试数据库,而实际使用的数据库很大有10G,而有效数据并没有那么大.如何压缩数据用于测试呢.请看本文.本文来之网络.针对sqlserver2000数据库,若您使用其他数据库,就不要下载了.
  • 最近利用空闲时间自己在写一个文件备份工具,因为我磁盘上很多... 为了响应伟大领袖“自力更生,丰衣足食”号召,咱决定自己写一个工具,专门备份到数据库。支持压缩,支持加密,支持增量。 本文分享一下其中一
  • 如何使用SQLYog,在每天凌晨定时同步MySQL数据库,详细步骤如下: 一、设置MySQL同步 点完成后,会出现windows定时任务基本配置,具体配置请见下面【二、配置定时任务】章节,这里直接点完成...
  • 如何将SQL数据库导入到Linux

    千次阅读 2019-06-28 21:32:57
    如何将windows下的mysql数据库导入到Linux: ...2.在d盘储存的文件传入到Linux: (需要用到文件传输工具,linux一般存到opt目录下) 3.在Linux登录并创建一个数据库名(与之前数据库名一致) ...
  • 注意本文很简短!!!但非常高能!...文末在福利一个知识点:如果你Acess数据库文件很大,然后删除了一部分数据后,发现库文件大小没有变化,这时候就需要,点击上图压缩和修复数据库,之...
  • 本文中主要介绍了传统数据库没有物联网的速度基因,时序数据库的数据存储设计,...当程序挂掉重启时,可以从WAL文件中重新恢复内存中的Cache。Compactor:一般就是压缩转存的模块,当Cache到达阈值后使用Compactor将其转
  • 我的mySQL使用一段时间后,表空间已变得很大(软件有较多的删除增加操作),现在我想把占用的磁盘空间减少,请教如何操作?>user database;>OPTIMIZE table tb_name;使用总结,刚把一个mysql ...这时候把DB中的...
  • 1,文件信息是存在数据库中,因为有视频等文件,所以不能先下载到服务器上在进行压缩处理(太大了,很可能有几个G) 2,一个案件有多个图片视频信息,用流方式处理时,如何处理多个案件,得到结果一个压缩包,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 455
精华内容 182
关键字:

如何压缩数据库中的文件数据库