declare @dbName varchar(20)--数据库名称
declare @dbNamelog varchar(20)--数据库日志文件名称

--替换成自己的文件名称
select @dbName='dbname'
select @dbNamelog='dbname_log'


declare @sql nvarchar(2000)

set @sql='

USE '+@dbName+'

ALTER DATABASE '+@dbName+' SET RECOVERY SIMPLE WITH NO_WAIT

ALTER DATABASE '+@dbName+' SET RECOVERY SIMPLE

USE '+@dbName+'

DBCC SHRINKFILE (N'''+@dbNamelog+''' , 11, TRUNCATEONLY)

USE '+@dbName+'

ALTER DATABASE '+@dbName+' SET RECOVERY FULL WITH NO_WAIT

ALTER DATABASE '+@dbName+' SET RECOVERY FULL



SELECT file_id, name FROM sys.database_files'

exec(@sql)

主要语法如下:

DBCC SHRINKFILE
    file_name | file_id }
        { [ ,target_size ]
            | [ , { EMPTYFILE | NOTRUNCATE | TRUNCATEONLY } ] 
        }
    )

参数

file_name

是已收缩文件的逻辑名称。文件名必须符合标识符的规则。

file_id

是要收缩的文件的标识 (ID) 号。若要获得文件 ID,请使用 FILE_ID 函数或在当前数据库中搜索 sysfiles

target_size

是用兆字节表示的所要的文件大小(用整数表示)。如果没有指定,DBCC SHRINKFILE 将文件大小减少到默认文件大小。

EMPTYFILE

将所有数据从指定文件中迁移到同一文件组中的其它文件

NOTRUNCATE

导致将释放的文件空间保留在文件中。

TRUNCATEONLY

导致文件中的任何未使用的空间释放给操作系统,并将文件收缩到上一次分配的大小,从而减少文件大小,而不移动任何数据。不尝试将行重新定位到未分配页。如果使用 TRUNCATEONLY,将忽略 target_size

 

转至:https://www.cnblogs.com/wangqiang3311/p/7687073.html