powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Transaction Log (не могу сделать truncate)
12 сообщений из 12, страница 1 из 1
Transaction Log (не могу сделать truncate)
    #32022136
Terol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем Привет!
Пришла база от партнеров которую мы развернули на нашем сервере (SQL2K). После всех установок обнаружили следующий факт.
Размер BD - 19 Mb
Размер TL - 100 Mb. (Transaction log)

попытался сделать truncate

BACKUP LOG tours

WITH
TRUNCATE_ONLY

размер неизменен, попытки сделать shrink - аналогично ...
Backup базы тоже не помог
...
Рейтинг: 0 / 0
Transaction Log (не могу сделать truncate)
    #32022171
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не был журнал изначально создан такого размера ? Если да, то никакое сжатие не поможет
...
Рейтинг: 0 / 0
Transaction Log (не могу сделать truncate)
    #32022190
Terol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот уж не знаю, попробую у них спросить. Но если это так то что? придётся создавать новый файл а старый убивать?
...
Рейтинг: 0 / 0
Transaction Log (не могу сделать truncate)
    #32022211
MadDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Terol:
Какой Вы кровожадный!

В чем проблема с этим transaction log? 100Mb - разве это много?
...
Рейтинг: 0 / 0
Transaction Log (не могу сделать truncate)
    #32022213
Terol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вообще то я привык к другим пропорциям .когда большая база и маленький (относительно) TL. А тут на тебе ... вот и запереживал.
...
Рейтинг: 0 / 0
Transaction Log (не могу сделать truncate)
    #32022249
Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможен вариант, создать точную копию базы, трансфернуть все туда, удалить вражескую базу с логом....
...
Рейтинг: 0 / 0
Transaction Log (не могу сделать truncate)
    #32022352
Фотография Александр Гладченко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Transaction Log (не могу сделать truncate)
    #32022355
Понырев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А есть процедура хорошая, описана в книжке Neil Pike. SQL Server: Common Problems, Tested Solutions, Apress.

Procedure: sp_force_shrink_log

Работает насмерть, текст могу прислать.

П.
...
Рейтинг: 0 / 0
Transaction Log (не могу сделать truncate)
    #32022357
Olga Rastokina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
moshet eto pomoshet ? y menia ona rabotaet xorosho



create proc sp_force_shrink_log

@target_percent tinyint = 0,
@max_iterations int = 1000,
@backup_log_opt nvarchar(1000) = 'with truncate_only' as set nocount on declare @db sysname, @last_row int, @log_size decimal(15,2), @unused1 decimal(15,2), @unused decimal(15,2), @shrinkable decimal(15,2), @iteration int select @db = db_name(), @iteration = 0 create table #loginfo ( id int identity, FileId int, FileSize numeric(22,0), StartOffset numeric(22,0), FSeqNo int, Status int, Parity smallint, CreateTime datetime ) -- Create a table to execute dummy transactions: if object_id( 'table_to_force_shrink_log' ) is null exec( 'create table table_to_force_shrink_log ( x nchar(3000) not null )' ) -- Put DBCC LOGINFO results in a table to analyze: insert #loginfo ( FileId, FileSize, StartOffset, FSeqNo, Status, Parity, CreateTime ) exec ( 'dbcc loginfo' ) select @last_row = @@rowcount select @log_size = sum( FileSize ) / 1048576.00, @unused = sum( case when Status = 0 then FileSize else 0 end ) / 1048576.00, @shrinkable = sum( case when id < @last_row — 1 and Status = 0 then FileSize else 0 end ) / 1048576.00 from #loginfo select @unused1 = @unused -- save for later select 'iteration' = @iteration, 'log size, MB' = @log_size, 'unused log, MB' = @unused, 'shrinkable log, MB' = @shrinkable, 'shrinkable %' = convert( decimal(6,2), @shrinkable * 100 / @log_size ) -- Keep shrinking until we reach the target percent -- or iteration limit runs out: while @shrinkable * 100 / @log_size > @target_percent and @iteration < @max_iterations begin select @iteration = @iteration + 1 -- Run dummy transactions, backup the log: exec( 'insert table_to_force_shrink_log select name from sysobjects delete table_to_force_shrink_log backup log ' + @db + ' ' + @backup_log_opt ) -- Get the log structure information: delete #loginfo insert #loginfo ( FileId, FileSize, StartOffset, FSeqNo, Status, Parity, CreateTime ) exec ( 'dbcc loginfo' ) select @last_row = @@rowcount -- Check how much is shrinkable to determine -- if the loop should continue: select @log_size = sum( FileSize ) / 1048576.00, @unused = sum( case when Status = 0 then FileSize else 0 end ) / 1048576.00, @shrinkable = sum( case when id < @last_row - 1 and Status = 0 then FileSize else 0 end ) / 1048576.00 from #loginfo select 'iteration' = @iteration, 'log size, MB' = @log_size, 'unused log, MB' = @unused, 'shrinkable log, MB' = @shrinkable, 'shrinkable %' = convert( decimal(6,2), @shrinkable * 100 / @log_size ) end select 'It took ' + convert( varchar, @iteration ) + ' iterations to shrink the unused ' + 'portion of the log from ' + convert( varchar, @unused1 ) + ' MB to ' + convert( varchar, @unused ) + ' MB' exec( 'drop table table_to_force_shrink_log' ) go
...
Рейтинг: 0 / 0
Transaction Log (не могу сделать truncate)
    #32022358
olga+Rastokina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
izvinite chto v takom vide , nechitabel"nom

vot zdec" lyshshe :


use master
go
if object_id( 'sp_force_shrink_log' ) is not null drop proc sp_force_shrink_log
go
create proc sp_force_shrink_log
--------------------------------------------------------------------------------
-- Purpose: Shrink transaction log of the current database in SQL Server 7.0.
--------------------------------------------------------------------------------
@target_percent tinyint = 0,
@target_size_MB int = 10,
@max_iterations int = 1000,
@backup_log_opt nvarchar(1000) = 'with truncate_only'
as
set nocount on

declare @db sysname,
@last_row int,
@log_size decimal(15,2),
@unused1 decimal(15,2),
@unused decimal(15,2),
@shrinkable decimal(15,2),
@iteration int,
@file_max int,
@file int,
@fileid varchar(5)

select @db = db_name(),
@iteration = 0

create table #loginfo (
id int identity,
FileId int,
FileSize numeric(22,0),
StartOffset numeric(22,0),
FSeqNo int,
Status int,
Parity smallint,
CreateTime datetime
)

create unique clustered index loginfo_FSeqNo on #loginfo ( FSeqNo, StartOffset )

create table #logfiles ( id int identity(1,1), fileid varchar(5) not null )
insert #logfiles ( fileid ) select convert( varchar, fileid ) from sysfiles where status & 0x40 = 0x40
select @file_max = @@rowcount

if object_id( 'table_to_force_shrink_log' ) is null
exec( 'create table table_to_force_shrink_log ( x nchar(3000) not null )' )

insert #loginfo ( FileId, FileSize, StartOffset, FSeqNo, Status, Parity, CreateTime ) exec ( 'dbcc loginfo' )
select @last_row = @@rowcount

select @log_size = sum( FileSize ) / 1048576.00,
@unused = sum( case when Status = 0 then FileSize else 0 end ) / 1048576.00,
@shrinkable = sum( case when id < @last_row - 1 and Status = 0 then FileSize else 0 end ) / 1048576.00
from #loginfo

select @unused1 = @unused -- save for later

select 'iteration' = @iteration,
'log size, MB' = @log_size,
'unused log, MB' = @unused,
'shrinkable log, MB' = @shrinkable,
'shrinkable %' = convert( decimal(6,2), @shrinkable * 100 / @log_size )

while @shrinkable * 100 / @log_size > @target_percent
and @shrinkable > @target_size_MB
and @iteration < @max_iterations begin
select @iteration = @iteration + 1 -- this is just a precaution

exec( 'insert table_to_force_shrink_log select name from sysobjects
delete table_to_force_shrink_log')

select @file = 0
while @file < @file_max begin
select @file = @file + 1
select @fileid = fileid from #logfiles where id = @file
exec( 'dbcc shrinkfile( ' + @fileid + ' )' )
end

exec( 'backup log [' + @db + '] ' + @backup_log_opt )

truncate table #loginfo
insert #loginfo ( FileId, FileSize, StartOffset, FSeqNo, Status, Parity, CreateTime ) exec ( 'dbcc loginfo' )
select @last_row = @@rowcount

select @log_size = sum( FileSize ) / 1048576.00,
@unused = sum( case when Status = 0 then FileSize else 0 end ) / 1048576.00,
@shrinkable = sum( case when id < @last_row - 1 and Status = 0 then FileSize else 0 end ) / 1048576.00
from #loginfo

select 'iteration' = @iteration,
'log size, MB' = @log_size,
'unused log, MB' = @unused,
'shrinkable log, MB' = @shrinkable,
'shrinkable %' = convert( decimal(6,2), @shrinkable * 100 / @log_size )
end

if @unused1 < @unused
select 'After ' + convert( varchar, @iteration ) +
' iterations the unused portion of the log has grown from ' +
convert( varchar, @unused1 ) + ' MB to ' +
convert( varchar, @unused ) + ' MB.'
union all
select 'Since the remaining unused portion is larger than 10 MB,' where @unused > 10
union all
select 'you may try running this procedure again with a higher number of iterations.' where @unused > 10
union all
select 'Sometimes the log would not shrink to a size smaller than several Megabytes.' where @unused <= 10

else
select 'It took ' + convert( varchar, @iteration ) +
' iterations to shrink the unused portion of the log from ' +
convert( varchar, @unused1 ) + ' MB to ' +
convert( varchar, @unused ) + ' MB'

exec( 'drop table table_to_force_shrink_log' )
go
...
Рейтинг: 0 / 0
Transaction Log (не могу сделать truncate)
    #32022483
Вадим
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я обычно после полного backup базы и backup журнала транзакций делаю подряд несколько раз backup журнала транзакций и усечение файло базы и журнала. Причем журнал архивирую в один и тот же файл с замещением данных. (Активности на сервере в это время нет, восстанавливать будет нечего). После 2-3 раз (обязательно отсутсвие активности пользователей) журнал ужимается до 2Мб. С 10Гб. После 10 Гигабайт журнала я на 100 Мб уже не смотрю. SQL 2000.
...
Рейтинг: 0 / 0
Transaction Log (не могу сделать truncate)
    #32026467
##V3##
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тоже мучался с этим долго, но в конце концов все решилось просто (из Books online):
When SQL Server finishes backing up the transaction log, it automatically truncates the inactive portion of the transaction log. This inactive portion contains completed transactions and so is no longer used during the recovery process. Conversely, the active portion of the transaction log contains transactions that are still running and have not yet completed. SQL Server reuses this truncated, inactive space in the transaction log instead of allowing the transaction log to continue to grow and use more space.
...Можно после этого вручную сделать shrink.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Transaction Log (не могу сделать truncate)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]