• SQLServer增量收缩数据文件的大小


    增量收缩数据文件脚本

    -- SQLServer--Shrink_DB_File.sql
    /*
    This script is used to shrink a database file in increments until it reaches a target free space limit.
    
    Run this script in the database with the file to be shrunk.
    1. Set @DBFileName to the name of database file to shrink.
    2. Set @TargetFreeMB to the desired file free space in MB after shrink.
    3. Set @ShrinkIncrementMB to the increment to shrink file by in MB
    4. Run the script
    */
    
    declare @DBFileName sysname
    declare @TargetFreeMB int
    declare @ShrinkIncrementMB int
    
    -- Set Name of Database file to shrink
    set @DBFileName = 'MyDatabaseFileName'
    
    -- Set Desired file free space in MB after shrink
    set @TargetFreeMB = 1000
    
    -- Set Increment to shrink file by in MB
    set @ShrinkIncrementMB = 50
    
    -- Show Size, Space Used, Unused Space, and Name of all database files
    select
    [FileSizeMB]=
    convert(numeric(10,2),round(a.size/128.,2)),
    [UsedSpaceMB]=
    convert(numeric(10,2),round(fileproperty( a.name,'SpaceUsed')/128.,2)) ,
    [UnusedSpaceMB]=
    convert(numeric(10,2),round((a.size-fileproperty( a.name,'SpaceUsed'))/128.,2)) ,
    [DBFileName]= a.name
    from
    sysfiles a
    
    declare @sql varchar(8000)
    declare @SizeMB int
    declare @UsedMB int
    
    -- Get current file size in MB
    select @SizeMB = size/128. from sysfiles where name = @DBFileName
    
    -- Get current space used in MB
    select @UsedMB = fileproperty( @DBFileName,'SpaceUsed')/128.
    
    select [StartFileSize] = @SizeMB, [StartUsedSpace] = @UsedMB, [DBFileName] = @DBFileName
    
    -- Loop until file at desired size
    while @SizeMB > @UsedMB+@TargetFreeMB+@ShrinkIncrementMB
    begin
    
    set @sql =
    'dbcc shrinkfile ( '+@DBFileName+', '+
    convert(varchar(20),@SizeMB-@ShrinkIncrementMB)+' ) '
    
    print 'Start ' + @sql
    print 'at '+convert(varchar(30),getdate(),121)
    
    exec ( @sql )
    
    print 'Done ' + @sql
    print 'at '+convert(varchar(30),getdate(),121)
    
    -- Get current file size in MB
    select @SizeMB = size/128. from sysfiles where name = @DBFileName
    
    -- Get current space used in MB
    select @UsedMB = fileproperty( @DBFileName,'SpaceUsed')/128.
    
    select [FileSize] = @SizeMB, [UsedSpace] = @UsedMB, [DBFileName] = @DBFileName
    
    end
    
    select [EndFileSize] = @SizeMB, [EndUsedSpace] = @UsedMB, [DBFileName] = @DBFileName
    
    -- Show Size, Space Used, Unused Space, and Name of all database files
    select
    [FileSizeMB]=
    convert(numeric(10,2),round(a.size/128.,2)),
    [UsedSpaceMB]=
    convert(numeric(10,2),round(fileproperty( a.name,'SpaceUsed')/128.,2)) ,
    [UnusedSpaceMB]=
    convert(numeric(10,2),round((a.size-fileproperty( a.name,'SpaceUsed'))/128.,2)) ,
    [DBFileName]= a.name
    from
    sysfiles a
    

      

    查看收缩的进度:

    SELECT
    	a.database_id,
    	d.name,
    	a.session_id,
    	a.command,
    	b.text,
    	percent_complete,
    	done_in_minutes = a.estimated_completion_time / 1000 / 60,
    	min_in_progress = DATEDIFF( MI, a.start_time, DATEADD( ms, a.estimated_completion_time, GETDATE( ) ) ),
    	a.start_time,
    	CONVERT ( VARCHAR, ( total_elapsed_time / ( 1000 ) ) / 60 ) + 'M ' + CONVERT ( VARCHAR, ( total_elapsed_time / ( 1000 ) ) % 60 ) + 'S' AS [Elapsed],
    	CONVERT ( VARCHAR, ( estimated_completion_time / ( 1000 ) ) / 60 ) + 'M ' + CONVERT ( VARCHAR, ( estimated_completion_time / ( 1000 ) ) % 60 ) + 'S' AS [ETA],
    	a.cpu_time,
    	a.status,
    	estimated_completion_time = DATEADD( ms, a.estimated_completion_time, GETDATE( ) ),
    	connection_id,
    	blocking_session_id
    FROM
    	sys.dm_exec_requests a CROSS APPLY sys.dm_exec_sql_text ( a.sql_handle ) b
    	LEFT JOIN sys.databases D ON a.database_id = d.database_id 
    WHERE
    	command LIKE '%dbcc%';
    

      

  • 相关阅读:
    sql server 分组,取每组的前几行数据
    安装vim的ycm
    Linux下管道重定向使用以及Shell编程(操作系统)
    VirtualBox安装及Linux基本操作(操作系统实验一)
    创建表并查看表(数据库实验一)
    SQL SERVER安装(2008)
    ADT图及图的实现及图的应用
    并查集实现及使用
    堆及堆的应用/单调队列/堆排序
    AVL树/线索二叉树
  • 原文地址:https://www.cnblogs.com/abclife/p/16824692.html
Copyright © 2020-2023  润新知