Программа iNETsHOP - обработка, сравнение, анализ прайс листов поставщиков, создание каталога товаров интернет магазина Форум - SQL Server мелкософт копирайтед - Работа с базой данных - как безболезненно уменьшить размер базы с разросшимся dbo.TBL_LOG и правильно удалять старые бэкапы


http://inetshop.in.ua/index.php?p=showtopic&toid=351&area=1&high=&pp=15&page=2
06.11.2016 20:54

xMaximusx


Посетитель

Количество сообщений   16
Зарегистрирован:   22-04-2016, 18:45:22
Рост размера базы данных зависит от выбранной модели восстановления. Так же это может быть вызвано залипшими транзакциями, такое иногда бывает. Если размер лога большой, то после полного бекапа его можно периодически обрезать командой SHRINK.

Таблицу логов тоже можно почистить как угодно, в том числе удалить логи импорта товаров поставщиков которых уже нет. Другое дело, что без опыта работы в МС СКЛ туда лучше не лезть.

06.11.2016 21:12

sonic1978


Пользователь iNETsHOP

Тема начата

Количество сообщений   107
Зарегистрирован:   27-02-2016, 15:29:39
580 MB сейчас вместо 5 GB. мне главное чтобы работало и работало быстро. всего изучить нельзя. перенос занял у меня 1 день. изучение тонкостей освобождения зарезервированного б.д. места на диске мне показалось больше времени займет да и результат не гарантирован, т.к. знаю вопрос не досконально.

23.08.2018 17:33

compfriends


Пользователь iNETsHOP

Количество сообщений   22
Зарегистрирован:   15-02-2012, 10:06:37
Ошибка!
Хотел и почистить историю, при запуске sql-запроса выдает ошибку.



Прикрепленные файлы
SQL.PNG   ( 8 Просмотров | 8.7 KB )

24.08.2018 21:14

support


Support


Количество сообщений   1199
Зарегистрирован:   11-04-2008, 19:11:57
На какой версии СУБД MSSQL Server вы запускаете SQL-запрос который выложен в этой ветке? Он предназначен для версии 2005 и более поздних.

27.08.2018 09:03

compfriends


Пользователь iNETsHOP

Количество сообщений   22
Зарегистрирован:   15-02-2012, 10:06:37
Насколько я понял у нас стоит 2000 версия СУБД MSSQL Server. А можно подредактировать запрос?

27.08.2018 23:09

support


Support


Количество сообщений   1199
Зарегистрирован:   11-04-2008, 19:11:57
Удаление лога редактирования товаров поставщика.
Код

set nocount on;
DECLARE @iS_ID int, @iSG_ID int, @iLOG_ID int, @sLOG_FIELD_NAME varchar(150);
DECLARE cSuppliers CURSOR LOCAL FOR
select
S_ID
from TBL_SUPPLIERS s
where s.S_ID = 1111
order by s.S_ID
;

OPEN cSuppliers;
FETCH NEXT FROM cSuppliers INTO @iS_ID;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
DECLARE cSuppliersGoods CURSOR LOCAL READ_ONLY FOR
select
SG_ID
from TBL_SUPPLIERS_GOODS sg
where sg.SG_S_ID = @iS_ID;
PRINT @iS_ID;
OPEN cSuppliersGoods;
FETCH NEXT FROM cSuppliersGoods INTO @iSG_ID;
WHILE (@@FETCH_STATUS <> -1)
BEGIN

DECLARE cLog CURSOR LOCAL READ_ONLY FOR
select LOG_FIELD_NAME
from TBL_LOG l
where l.LOG_TBL_NAME = 'TBL_SUPPLIERS_GOODS'
and l.LOG_PK = @iSG_ID
and l.LOG_TYPE = 2
group by LOG_FIELD_NAME
having count(*) > 1;

OPEN cLog;
FETCH NEXT FROM cLog INTO @sLOG_FIELD_NAME;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
DECLARE cLogValues CURSOR LOCAL READ_ONLY FOR
select l.LOG_ID
from TBL_LOG l
where l.LOG_TBL_NAME = 'TBL_SUPPLIERS_GOODS'
and l.LOG_PK = @iSG_ID
and l.LOG_TYPE = 2
and l.LOG_FIELD_NAME = @sLOG_FIELD_NAME
and not l.LOG_ID in (
select TOP 1 l.LOG_ID
from TBL_LOG l
where l.LOG_TBL_NAME = 'TBL_SUPPLIERS_GOODS'
and l.LOG_PK = @iSG_ID
and l.LOG_TYPE = 2
and l.LOG_FIELD_NAME = @sLOG_FIELD_NAME
order by LOG_DATE DESC
)/* FOR UPDATE*/;

OPEN cLogValues;
FETCH NEXT FROM cLogValues INTO @iLOG_ID;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
DELETE FROM TBL_LOG
WHERE LOG_ID = @iLOG_ID;

FETCH NEXT FROM cLogValues INTO @iLOG_ID;
END;
CLOSE cLogValues;
DEALLOCATE cLogValues;

FETCH NEXT FROM cLog INTO @sLOG_FIELD_NAME;
END;
CLOSE cLog;
DEALLOCATE cLog;

FETCH NEXT FROM cSuppliersGoods INTO @iSG_ID;
END;
CLOSE cSuppliersGoods;
DEALLOCATE cSuppliersGoods;

FETCH NEXT FROM cSuppliers INTO @iS_ID;
END;
CLOSE cSuppliers;
DEALLOCATE cSuppliers;


В строке where s.S_ID = 1111 вместо кода 1111 укажите код вашего поставщика из справочника поставщиков.