powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите с логом
6 сообщений из 6, страница 1 из 1
Помогите с логом
    #32028599
Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажите как обрезать transaction_log файл в базе? Если можно с примером.
А то что-то я немогу по хелпу разобраться что и к чему
Заранее спасибо
...
Рейтинг: 0 / 0
Помогите с логом
    #32028608
Andrew+Kurilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Думаю, что SQL-гуру устали отвечать на этот вечный вопрос. Скорее всего никто не откликнется. Посмотрите форум чуть-чуть взад.
...
Рейтинг: 0 / 0
Помогите с логом
    #32028626
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
\nCREATE proc sp_ForceShrinkLog
@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 numeric(22,0),
Status numeric(22,0),
Parity numeric(22,0),
CreateTime numeric(22,0)
)

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' )

Просто выполните эту проце дуру и будет Вам счастье!
...
Рейтинг: 0 / 0
Помогите с логом
    #32028652
qwerty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я делаю так
backup log [bd] with truncate_only

dbcc shrinkfile
...
Рейтинг: 0 / 0
Помогите с логом
    #32028656
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уже не помню, кто посоветовал, но я поступаю так:

1. Остановить сервер
2. УДАЛИТЬ файл MyBase_log.LDF
3. Запустить сервер

При запуске сервера файл лога будет создан заново размером в 10% от размера собственно базы - это файл MyBase_Data.MDF (если ты не менял настройки для этой базы данных).
Да, это работает в SQL7 и я не уверен, что что-то при этом не теряется. Я еще не очень хорошо понимаю, что вообще в этот лог-файл записывается.
...
Рейтинг: 0 / 0
Помогите с логом
    #32028673
Nikolay+Mastilo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Рекомендую воспользоваться ссылкой
http://www.bstconsultants.com/tsug/Dec99/REDUCING_THE_SIZE_OF_THE_LOG_FILE.htm
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите с логом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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