Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как определить размер свободного места в логе базы данных, но не ИНТЕРАКТИВНО?
|
|||
|---|---|---|---|
|
#18+
Вот возникла такая интересная задача: На основании свободного места в логе надо делать или а) или б), но вот как определить размер свободного лога в по ходу скрипта, а не интерактивно, например при помощи dbcc sqlperf (logspace)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2002, 12:33 |
|
||
|
Как определить размер свободного места в логе базы данных, но не ИНТЕРАКТИВНО?
|
|||
|---|---|---|---|
|
#18+
>как определить размер свободного лога в по ходу скрипта, а не интерактивно Честное слово не понял, что вы имете ввиду под "по ходу скрипта" и "не интерактивно". Что собственно вам мешает использовать в скрипте dbcc sqlperf (logspace)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2002, 13:49 |
|
||
|
Как определить размер свободного места в логе базы данных, но не ИНТЕРАКТИВНО?
|
|||
|---|---|---|---|
|
#18+
Хорошо. работает у меня скрипт, который чистит данные в базе по определенным параметрам. Лог потихоньку растет. Я перебирают разные таблицы. Лог растет (вернее сказать место свободное в логе уменьшается). А база такая, что свободного места в логе при удалении данных из таблиц не хватает. я хочу на каждом шаге смотреть сколько места в логе есть и если нет то backup transaction with no_log ! Вот собственно, что я хотел сказать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2002, 14:25 |
|
||
|
Как определить размер свободного места в логе базы данных, но не ИНТЕРАКТИВНО?
|
|||
|---|---|---|---|
|
#18+
Да. Забыл добавить. Что я хочу чтоб наличие места в логе проверял не я, а скрипт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2002, 14:29 |
|
||
|
Как определить размер свободного места в логе базы данных, но не ИНТЕРАКТИВНО?
|
|||
|---|---|---|---|
|
#18+
Не проще ли удалять небольшими порциями (чтобы лог сильно не рос) и checkpoint-ы ставить почаще? Может лог потом бэкапить придеться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2002, 14:40 |
|
||
|
Как определить размер свободного места в логе базы данных, но не ИНТЕРАКТИВНО?
|
|||
|---|---|---|---|
|
#18+
>я хочу чтоб наличие места в логе проверял не я, а скрипт Скрипт пишите вы или кто другой? Если вы, то что вам мешает запускать в скрипте dbcc sqlperf (logspace)? Оформите выполнение этой команды в отдельную процедуру, которая, например, по входному пареметру "имя базы данных" будет возвращать вам нужную цифру и выполняйте на здоровье на каждом шаге. ЗЫ А вообще-то Timur Sokolov прав, проще настроить сжатие лога с помощью периодического архивирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2002, 14:49 |
|
||
|
Как определить размер свободного места в логе базы данных, но не ИНТЕРАКТИВНО?
|
|||
|---|---|---|---|
|
#18+
Да в том-то и дело, что руками можно удалять по частям, а вот автоматически из несколько десятков таблиц с разными ключами удаления и разными объемами удаления - тяжело. Может у меня по одному ключу к удалению будет сто тысяч записей, а по другому 0. Если я хочу все автоматизировать, то мне надо оттолкнуться все-таки от свободного места в наличии. Потом могу прикинуть сколько данных к удалению и сколько места в логе, если не хватает то делю на несколько частей (хоть делением отрезка попалам, хоть относительно) и сейчас уже могу удалять по частям, но в АВТОМАТЕ Ж ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2002, 14:53 |
|
||
|
Как определить размер свободного места в логе базы данных, но не ИНТЕРАКТИВНО?
|
|||
|---|---|---|---|
|
#18+
>процедуру, которая, например, по входному пареметру "имя базы данных" будет возвращать вам нужную цифру и выполняйте >на здоровье на каждом шаге. Вот тут я не понимаю чего-то. sqlperf (logspace) выдает информацию только на "экран", никаких параметров задавать нельзя. Как я могу засунуть информацию от dbcc sqlperf в переменную? Я не хочу принимать решение сам, чистить мне лог или нет. Хватит мне места для удаления из таблицы ХХХХ, где record_date < '01-01-2001'? Я хочу, чтобы программа знала - сколько место свободного в логе! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2002, 15:00 |
|
||
|
Как определить размер свободного места в логе базы данных, но не ИНТЕРАКТИВНО?
|
|||
|---|---|---|---|
|
#18+
declare @freelogspace int declare @countlogfiles int declare @message varchar(4000) declare @subject Varchar(100) declare @nameoffile varchar(255) declare @fileid int declare @filepath varchar(255) declare @sizefile int declare @freespace int declare @maxsize_file int declare @growth int declare @typegrowth varchar(5) declare @usage varchar(14) declare @dbuse varchar(50) declare @chr_CR varchar(1) set nocount on select @dbuse=value from settings where settingname='DB' select @chr_CR=value from settings where settingname='separator' set @subject='databases_files' exec ('use '+@dbuse +N' DBCC UPDATEUSAGE (0) WITH NO_INFOMSGS ') create table #spaceinformation ( nameoffile varchar(255), fileid int, filepath varchar(255), sizefile int, freespace int, maxsize_file varchar(50), growth int, typegrowth varchar(5), usage varchar(14), ) CREATE TABLE #logspace ( DBName varchar( 100), LogSize float, PrcntUsed float, status int ) CREATE TABLE #dataspace ( FileID int, FileGrp int, TotExt int, UsdExt int, LFileNm varchar( 100), PFileNm varchar( 100) ) insert #spaceinformation select name, fileid, filename, 'size' = convert(nvarchar(15), size * /1024,0, 'maxsize' = (case maxsize when -1 then 0 else convert(nvarchar(15), maxsize * /1024 end), 'growth' = (case status & 0x100000 when 0x100000 then convert(nvarchar(3), growth) else convert(nvarchar(15), growth * 8/1024) end), 'typegrows'=(case status & 0x100000 when 0x100000 then 'PRCNT' else 'MB' end), 'usage' = (case status & 0x40 when 0x40 then 'log only' else 'data only' end) from sysfiles order by usage, size desc select @countlogfiles=count(*) from #spaceinformation where usage='log only' insert #dataspace exec( 'dbcc showfilestats') update #spaceinformation set freespace=(totext-usdext)*32/512 from #dataspace where #spaceinformation.fileid=#dataspace.fileid INSERT INTO #logspace EXEC ('DBCC sqlperf( logspace)') select @freelogspace=convert(int,logsize*(100-prcntused)/100)/@countlogfiles from #logspace where dbname=@dbuse update #spaceinformation set freespace=@freelogspace where usage='log only' update #spaceinformation set usage='log' where usage='log only' update #spaceinformation set usage='data' where usage='data only' /* gathering data about files using cursor*/ declare look_over_files cursor for select * from #spaceinformation open look_over_files fetch look_over_files into @nameoffile,@fileid, @filepath, @sizefile, @freespace, @maxsize_file, @growth, @typegrowth, @usage while @@fetch_status=0 begin set @message=isnull(@message,'')+''''+convert(varchar(25),getdate(),120)+''', '''+@server_id+''', '''+@dbuse+''', '''+rtrim(@nameoffile)+''', '+convert(varchar,@fileid)+', '''+rtrim(@filepath)+''', '+convert(varchar,@sizefile) +', '+convert(varchar,@freespace)+', '+convert(varchar,@maxsize_file)+', '+convert(varchar,@growth)+', '''+@typegrowth+''', '''+@usage+''', '''+substring(@filepath,1,1)+''''+@chr_CR+char(13) fetch next from look_over_files into @nameoffile,@fileid, @filepath, @sizefile, @freespace, @maxsize_file, @growth, @typegrowth, @usage end deallocate look_over_files drop table #spaceinformation drop table #dataspace drop table #logspace ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2002, 15:09 |
|
||
|
Как определить размер свободного места в логе базы данных, но не ИНТЕРАКТИВНО?
|
|||
|---|---|---|---|
|
#18+
процедурка собирает информацию о всех файлах базы данных, соответственно ты используй только необходимую часть её. Рожи в скрипте смещные получились ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2002, 15:13 |
|
||
|
Как определить размер свободного места в логе базы данных, но не ИНТЕРАКТИВНО?
|
|||
|---|---|---|---|
|
#18+
>Вот тут я не понимаю чего-то. sqlperf (logspace) выдает информацию только на "экран", Так вот вы о чем! Ну насчет выдачи "только на экран", тут Леша вам показал, как можно перенаправить вывод команды или процедуры во временную таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2002, 15:31 |
|
||
|
Как определить размер свободного места в логе базы данных, но не ИНТЕРАКТИВНО?
|
|||
|---|---|---|---|
|
#18+
Да рожи получились отменные Да подобное перенаправление вывода я "чувствовал", но умом дойти не мог. Спасибо огромное, МУЖИКИ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2002, 16:21 |
|
||
|
Как определить размер свободного места в логе базы данных, но не ИНТЕРАКТИВНО?
|
|||
|---|---|---|---|
|
#18+
а эти строки только для 2000 что-ль? >select @dbuse=value from settings where settingname='DB' >select @chr_CR=value from settings where settingname='separator' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2002, 16:29 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32021635&tid=1824159]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
46ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 345ms |

| 0 / 0 |
