/*
    SQL SERVER 2008 压缩备份
 
 
 
    SQL SERVER 2008 在企业版和开发版中引入了备份压缩.使用者个功能可以更快速的备份数据库并且
    消耗更少的磁盘空间.压缩量依赖于数据库中存储的数据.例如,含有重复值字符数据的数据库可以有
    比包含有更多数字或者加密数据的数据库有更高的压缩率.
 
    下面进行配置和进行压缩备份
*/
 
/*
    启用压缩备份有2种方法一个显式的通过语句BACKUP DATABASE....WITH COMPRESSION 
    还有一种是通过配置服务器实例的默认压缩.
 
 
    配置默认压缩
*/
 
    EXEC sp_configure 'BACKUP COMPRESSION DEFAULT','1'
    RECONFIGURE WITH OVERRIDE
    GO
    
    SELECT DESCRIPTION,VALUE_IN_USE
    FROM SYS.configurations
    WHERE name= 'BACKUP COMPRESSION DEFAULT'
    
/*
    DESCRIPTION                               VALUE_IN_USE
    ----------------------------------------- ----------------
    Enable compression of backups by default  1
 
    (1 行受影响)
    
    
    下面我们测试AdventureWorks2008R2的压缩备份.
*/
 
    BACKUP DATABASE AdventureWorks2008R2 TO
    DISK='D:/AdventureWorks2008R2_COMPRESSION.BAK'
    
/*  备份输出信息如下:
 
    已为数据库'AdventureWorks2008R2',文件'AdventureWorks2008R2_Data' (位于文件1 上)处理了23040 页。
    已为数据库'AdventureWorks2008R2',文件'FileStreamDocuments2008R2' (位于文件1 上)处理了36 页。
    已为数据库'AdventureWorks2008R2',文件'AdventureWorks2008R2_Log' (位于文件1 上)处理了1 页。
    BACKUP DATABASE 成功处理了23077 页,花费4.291 秒(42.014 MB/秒)。
 
    
    
    同样我们也可以在没有配置服务器实例备份默认压缩的情况下显式的压缩备份数据库.
*/  
    BACKUP DATABASE AdventureWorks2008R2 TO
    DISK='D:/AdventureWorks2008R2_COMPRESSION.BAK'
    WITH COMPRESSION
    
/*  
    配置服务器实例备份默认压缩的情况下,如果不希望压缩备份,可以使用NO_COMPRESSION参数.
*/
    BACKUP DATABASE AdventureWorks2008R2 TO
    DISK='D:/AdventureWorks2008R2_NO_COMPRESSION.BAK'
    WITH NO_COMPRESSION
    
/*  备份输出信息
 
    已为数据库'AdventureWorks2008R2',文件'AdventureWorks2008R2_Data' (位于文件1 上)处理了23040 页。
    已为数据库'AdventureWorks2008R2',文件'FileStreamDocuments2008R2' (位于文件1 上)处理了36 页。
    已为数据库'AdventureWorks2008R2',文件'AdventureWorks2008R2_Log' (位于文件1 上)处理了1 页。
    BACKUP DATABASE 成功处理了23077 页,花费7.779 秒(23.175 MB/秒)。
 
    注意对比上下次备份的统计信息可以发现备份时间上有了很大的缩短.
    
    
    下面我在查询次备份的文件大小.
*/
 
    SELECT TOP 2 DATABASE_NAME,BACKUP_SIZE,COMPRESSED_BACKUP_SIZE
    FROM MSDB..BACKUPSET
    ORDER BY BACKUP_FINISH_DATE DESC
 
/*  结果
    
    DATABASE_NAME        BACKUP_SIZE       COMPRESSED_BACKUP_SIZE
    ---------------------    --------------    -----------------------
    AdventureWorks2008R2 190922752     190922752
    AdventureWorks2008R2 190922752     47127814
 
    (3 行受影响)
    
    可以发现没有压缩备份的数据库BACKUP_SIZE值和COMPRESSED_BACKUP_SIZE是一样大.
 
 
    从上面可以发现备份压缩可以更快的运行并且占用少量的磁盘空间,但是实际中影响的是
    CPU的消耗,所以应该评估当前的查询流量和系统资源的负载.
    
 
 
 
    下面进行压缩备份的还原测试.
    首先还原压缩备份
*/
    RESTORE DATABASE AdventureWorks2008R2 FROM
    DISK='D:/AdventureWorks2008R2_COMPRESSION.BAK'
 
/*  还原输出信息
 
    已为数据库'AdventureWorks2008R2',文件'AdventureWorks2008R2_Data' (位于文件1 上)处理了23040 页。
    已为数据库'AdventureWorks2008R2',文件'AdventureWorks2008R2_Log' (位于文件1 上)处理了1 页。
    已为数据库'AdventureWorks2008R2',文件'FileStreamDocuments2008R2' (位于文件1 上)处理了36 页。
    RESTORE DATABASE 成功处理了23077 页,花费3.990 秒(45.183 MB/秒)。
    
    
    下面还原没压缩备份
*/
 
    RESTORE DATABASE AdventureWorks2008R2 FROM
    DISK='D:/AdventureWorks2008R2_NO_COMPRESSION.BAK'
    
/*  还原输出信息
 
    已为数据库'AdventureWorks2008R2',文件'AdventureWorks2008R2_Data' (位于文件1 上)处理了23040 页。
    已为数据库'AdventureWorks2008R2',文件'AdventureWorks2008R2_Log' (位于文件1 上)处理了1 页。
    已为数据库'AdventureWorks2008R2',文件'FileStreamDocuments2008R2' (位于文件1 上)处理了36 页。
    RESTORE DATABASE 成功处理了23077 页,花费6.499 秒(27.739 MB/秒)。
 
    对比上下次的还原同样备份压缩的还原比没有压缩的备份还原要节省时间.
    
*/
 
 
 
    总结以上就是压缩的备份和还原都要比不压缩的备份和还原节省很大的时间和空间,但是制衡他们的因素都
    CPU的消耗.