zoukankan      html  css  js  c++  java
  • 《SQL Server 2008 R2》 收缩数据库日志文件

    USE [master]
    GO
    /****** Object:  StoredProcedure [dbo].[pro_Shrink_Log]    Script Date: 2019/8/16 16:56:21 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:        xlc
    -- Create date: 2019.08.16
    -- Description:    收缩数据库日志
    -- =============================================
    ALTER PROCEDURE [dbo].[pro_Shrink_Log]
        @dbName NVARCHAR(200)
    AS
    BEGIN
    SET NOCOUNT ON;
     
        
        DECLARE @sql NVARCHAR(200);
        DECLARE @logname NVARCHAR(200);
        DECLARE @dbRecovery TINYINT;
        -- 获取日志文件名
        -- N 将内容转为unicode 中文也不会出现乱码 
        
        -- 获取日志文件名
        SET @sql= N'USE [' + @dbName +'];' + Char(13) + Char(10) +
        'SELECT TOP 1 @logname = NAME FROM SYS.DATABASE_FILES WHERE TYPE = 1';
    
        EXECUTE sp_executesql @sql, N'@logname NVARCHAR(200) output',@logname output;
    
        IF @logname IS NULL
        BEGIN
            PRINT '未找到日志文件:' + @sql;
            RETURN;
        END
    
        -- 获取当前恢复模式
    
        SET @sql = N'USE [' + @dbName + N'];' + Char(13) + Char(10) +
        'SELECT TOP 1 @dbRecovery = recovery_model FROM sys.databases where name =''' + @dbName + '''';
        
        EXECUTE sp_executesql @sql, N'@dbRecovery TINYINT output',@dbRecovery output;
    
        -- 1、设置模式为简单模式
        SET @sql = N'USE MASTER;'+Char(13) + Char(10) +'ALTER DATABASE [' + @dbName + N'] SET RECOVERY SIMPLE WITH NO_WAIT';
        EXECUTE sp_executesql @sql;
        SET @sql = N'ALTER DATABASE [' + @dbName + N'] SET RECOVERY SIMPLE';
        EXECUTE sp_executesql @sql;
     
        -- 2、收缩文件
        SET @sql = N'USE [' + @dbName + N'];' + Char(13) + Char(10) +
            'DBCC SHRINKFILE (N''' + @logname + ''', 1, TRUNCATEONLY)';
        EXECUTE sp_executesql @sql;
    
         -- 3、设置模式为完全
        IF @dbRecovery = 1 
        begin
            SET @sql = N'USE MASTER;'+Char(13) + Char(10) +'ALTER DATABASE [' + @dbName + N'] SET RECOVERY FULL WITH NO_WAIT';
            EXECUTE sp_executesql @sql;
            SET @sql = N'ALTER DATABASE [' + @dbName + N'] SET RECOVERY FULL';
            EXECUTE sp_executesql @sql;
        end
        PRINT '数据库:' + @dbName + ' 日志文件:' + @logname + ' 收缩完成';
    END

    建议将存储过程放在 master中执行。

    执行方式:

    EXEC pro_Shrink_Log test

    执行结果:

    参考:https://blog.csdn.net/youbl/article/details/8990169

  • 相关阅读:
    UVa 1349 (二分图最小权完美匹配) Optimal Bus Route Design
    UVa 1658 (拆点法 最小费用流) Admiral
    UVa 11082 (网络流建模) Matrix Decompressing
    UVa 753 (二分图最大匹配) A Plug for UNIX
    UVa 1451 (数形结合 单调栈) Average
    UVa 1471 (LIS变形) Defense Lines
    UVa 11572 (滑动窗口) Unique Snowflakes
    UVa 1606 (极角排序) Amphiphilic Carbon Molecules
    UVa 11054 Wine trading in Gergovia
    UVa 140 (枚举排列) Bandwidth
  • 原文地址:https://www.cnblogs.com/com-xiaolanchong/p/11365060.html
Copyright © 2011-2022 走看看