首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SQL Server中收缩简单恢复日志文件

如何在SQL Server中收缩简单恢复日志文件
EN

Stack Overflow用户
提问于 2014-11-27 03:16:38
回答 1查看 310关注 0票数 0

我有个问题,

我在一个大型数据库上的日志文件变得越来越大。它设置为简单恢复,现在日志文件有40 is大小。

当我尝试删除数据库中较旧的行时,它会尝试将其记录到日志文件中,但它不会导致硬盘已满,因此无法删除该条目。

那么我该怎么做呢?

废弃/删除/清空当前日志文件,我不需要其中的数据。

或者b:

是否以不将其记录在日志文件中的方式从表中删除?

我试过了:

代码语言:javascript
复制
DBCC SHRINKFILE(FSK_LoggingServer__log, 200);
GO

但它返回以下内容:

代码语言:javascript
复制
bdid, FieldId, CurrentSize, MinimumSize, UsedPages, EstimatedPages
32  2   4292352 512 4292352 512

并且它不会收缩文件。

EN

回答 1

Stack Overflow用户

发布于 2014-11-27 04:04:41

听起来您可能有一个长时间运行的查询阻止日志被截断。尝试运行以下命令:

代码语言:javascript
复制
DECLARE @LT TABLE
        (
          spid INT ,
          ttext VARCHAR(MAX) ,
          TranBeginTime DATETIME
        )
    DECLARE @CaptureDate DATETIME = DATEADD(minute,DATEDIFF(minute, 0, DATEADD(second, 30 - DATEPART(second, GETDATE() + '00:00:30.000'), GETDATE())), 0)

    INSERT  INTO @LT
            ( spid ,
              ttext ,
              TranBeginTime
            )
            SELECT  sessions.session_id ,
                    statements.text ,
                    at.transaction_begin_time
            FROM    sys.dm_tran_database_transactions db_trans
                    JOIN sys.dm_tran_session_transactions sessions ON db_trans.transaction_id = sessions.transaction_id
                    JOIN sys.dm_exec_connections conns ON conns.session_id = sessions.session_id
                    LEFT OUTER JOIN sys.dm_tran_active_transactions at ON db_trans.transaction_id = at.transaction_id
                    CROSS APPLY sys.dm_exec_sql_text(conns.most_recent_sql_handle)
                    AS statements
            WHERE   at.transaction_begin_time < DATEADD(Minute,-30,GETDATE())

    CREATE TABLE #sp_who2
        (
          SPID INT ,
          Status VARCHAR(1000) NULL ,
          Login SYSNAME NULL ,
          HostName SYSNAME NULL ,
          BlkBy SYSNAME NULL ,
          DBName SYSNAME NULL ,
          Command VARCHAR(1000) NULL ,
          CPUTime INT NULL ,
          DiskIO INT NULL ,
          LastBatch VARCHAR(1000) NULL ,
          ProgramName VARCHAR(1000) NULL ,
          SPID2 INT ,
          RequestID INT NULL ,
          rundate DATETIME DEFAULT ( GETDATE() )
        ) 


    INSERT  INTO #sp_who2
            ( SPID ,
              Status ,
              Login ,
              HostName ,
              BlkBy ,
              DBName ,
              Command ,
              CPUTime ,
              DiskIO ,
              LastBatch ,
              ProgramName ,
              SPID2 ,
              RequestID
            )
            EXEC sp_who2


            SELECT  who.SPID ,
                    who.login ,
                    who.HostName ,
                    who.DBName ,
                    DATEDIFF(SECOND, LT.TranBeginTime, GETDATE()) AS elapsedseconds ,
                    who.ProgramName ,
                    'Transaction' AS notetype ,
                    LT.ttext
            FROM    #sp_who2 who
                    INNER JOIN @LT LT ON LT.spid = who.SPID

它是否返回任何结果?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27157171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档