2014-11-26 2 views
0

У меня проблема,Как сжать простой файл журнала восстановления в SQL Server

Мой файл журнала в большой базе данных продолжает становиться большим. Его набор для простого восстановления, и сейчас файл журнала имеет размер 40 ГБ.

Он попал на сцену, где он заполнил жесткий диск, и когда я пытаюсь делить старые строки в базе данных, он пытается записать это в файл журнала, и это не может привести к тому, что hdd будет заполнен, поэтому он не может удалить Вход.

Так как я могу?

Слом/удалить/удалить текущий файл журнала, мне не нужны данные в нем.

или б:

Удалить из из таблицы таким образом, чтобы не войти в файле журнала?

Я пробовал:

DBCC SHRINKFILE(FSK_LoggingServer__log, 200); 
GO 

но он возвращает это:

bdid, FieldId, CurrentSize, MinimumSize, UsedPages, EstimatedPages 
32 2 4292352 512 4292352 512 

и не сжать файл.

+1

попробуйте DBCC SHRINKDATABASE ({DatabaseName}, 200, TRUNCATEONLY); –

ответ

0

Похоже, у вас может быть длинный запрос, который предотвращает усечение журнала. Попробуйте выполнить это:

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 

Спрашивает ли он результат?

Смежные вопросы