среда, 17 августа 2022 г.

Удаление подчиненных таблиц в базе 1С средствами MS SQL

 Удаление подчиненных таблиц 

в базе 1С средствами MS SQL


    По мере заполнения данными базы 1С:Предприятия может возникнуть необходимость для "зачистки" уж совсем устаревших таблиц, которые являются, в целом, служебными и были использованы однократно для каких-то технологических нужд и с тех пор хранятся в базе 1С. Не понятно, зачем.

    В первом приближении, разумеется, была предпринята попытка удаления средствами 1С. Проблем не возникло, за исключением того, что количество подлежащих удалению строк 300+ тысяч и, соответственно, таким способом эта процедура, которая проводится, конечно, с поиском записей в регистрах сведений и подчищает всё, что связано с удаляемым элементом, растягивается на несколько (!) суток, что конечно неприемлемо. Таким образом было решено обследовать структуру таблиц собственно, в СУБД с тем, чтобы попытаться удалить это с помощью скрипта SQL.

    В процессе анализа размеров таблиц в базе, обнаружилось, что справочник, подлежащий удалению, состоит из ссылочной структуры, которая хранит не только записи верхнего уровня, но и подчиненные, как они называются в терминах 1С, табличные части. То есть, справочник в СУБД физически представляет из себя систему из нескольких подчиненных таблиц. Вкупе с ними данная структура занимала до 30% объема базы на СУБД.

    Таким образом, постановка задачи кратко выглядела следующим образом:

- выбрать все подлежащие удалению записи справочника (читай, "основной") таблицы, сделанные ранее определенной даты с отбором, кроме этого, по специфическим реквизитам;

- выбрать все записи из подтаблиц, ссылающиеся на отобранные записи "основной таблицы";

- обойти результат в цикле и удалить сначала строки из подчиненных таблиц, а затем удалить ненужные строки из "основной" таблицы.

Какие нам понадобятся инструменты для решения?

- любая обработка для 1С, показывающая структуру хранения базы 1С в именах таблиц СУБД

- незабвенный SSMS

Порядок действий.

1. Устанавливаем имена основной таблицы справочника и подчиненных к ней, как они именованы в базе SQL любым доступным инструментом, хоть бы и Инструментами разработчика

2. Пишем на SQL простейший запрос, показывающий количество строк в основной таблице с отбором по датам, подлежащим удалению. Напоминаю, что даты в SQL в применении к 1С для обеспечения совместимости хранятся со сдвигом на 2000, то есть, 2022 год, например, хранится как 4022 год. Данный запрос нам пригодится для контроля процесса удаления. 

3. Усложняем запрос, добавляя подчиненные таблицы. Для этого ищем "подчиненные" записи, ссылающиеся на основную таблицу по ID.

4. Записи то мы получили, а дальше? Как будем удалять? Очевидно, нужен какой-то цикл, в котором мы переберем все записи и последовательно их удалим. На помощь приходит нехитрый, но коварный метод SQL #курсор. Здесь мы пишем цикл, в котором позиционируемся сначала на первой записи к удалению, а затем в цикле обходим остальные. Итоговый скрипт выглядит так:

DECLARE @T1ID BINARY(16)
DECLARE @T2ID BINARY(16)
DECLARE @T3ID BINARY(16)
DECLARE @T4ID BINARY(16)
DECLARE @T5ID BINARY(16)
DECLARE @T6ID BINARY(16)
-- обьявляем курсор
declare some_cursor cursor
--- sql запрос любой сложности, формирующий набор данных для курсора
for
--SELECT     TOP (100) _IDRRef
SELECT    _IDRRef
FROM         _Reference15171
WHERE     (_Fld16591 = 0x00) AND (_Fld16584 <= '4018-12-31 23:59:59') AND (_Fld18088RRef = 0x942E92E9141DD64F4A430ECEC614FC8C)
ORDER BY _Fld16584
-- открываем курсор
open some_cursor
-- курсор создан, обьявляем переменные и обходим набор строк в цикле
declare  @counter int
declare  @MainID Binary(16)
set @counter = 0
-- выборка первой  строки
fetch next from some_cursor INTO  @MainID
-- цикл с логикой и выборкой всех последующих строк после первой
while @@FETCH_STATUS = 0
begin
--- логика внутри цикла
set @counter = @counter + 1
 --if @counter >= 5 break  -- возможный код для проверки работы, прерываем после пятой итерации
 
-- отладочный select, на большом количестве строк выборка данных  в  sql server management studio может привести к ошибке переполнения памяти
--SELECT @int_var, @string_var
--INSERT INTO OTHER_TABLE (SOME_FIELD1, SOME_FIELD2) VALUES (@string_var, 'Мегастрока')
--DELETE FROM OTHER_TABLE2 WHERE ID_FIELD =  @int_var
--exec some_stored_procedure
print('Основной ID: ') print(@MainID)
DELETE FROM _Reference15171_VT15274 WHERE _Reference15171_IDRRef = @MainID
DELETE FROM _Reference15171_VT15279 WHERE _Reference15171_IDRRef = @MainID
DELETE FROM _Reference15171_VT15286 WHERE _Reference15171_IDRRef = @MainID
DELETE FROM _Reference15171_VT15274 WHERE _Reference15171_IDRRef = @MainID
DELETE FROM _Reference15171_VT15292 WHERE _Reference15171_IDRRef = @MainID
DELETE FROM _Reference15171_VT18349 WHERE _Reference15171_IDRRef = @MainID
DELETE FROM _Reference15171 WHERE _IDRRef = @MainID
-- выборка следующей строки
fetch next from some_cursor INTO  @MainID
-- завершение логики внутри цикла
end
select @counter as final_count
-- закрываем курсор
close some_cursor
deallocate some_cursor

Ну что же, решение найдено, оно вполне рабочее. По времени удаление 300000+ строк с подчиненными таблицами заняло около 20 минут. Во избежание конфликтов это было проделано в нерабочее время. 

Итоговый размер базы, разумеется, не изменился, но внутри появился, так сказать, искусственно созданный резерв для роста остальных данных таблиц.


#mssql, #1c, #1спредприятие, #субд, #sql, #sqlserver, #sqlcursor, #howto, #1chowto

пятница, 18 октября 2019 г.

вторник, 16 января 2018 г.

Как же нам укротить этот Instagram?


Написал по просьбе друзей небольшую статью, основанную целиком на своем опыте ведения аккаунта в известной сети Instagram, чем и спешу поделиться.

þ Инструменты

  • Смартфон с приложением Instagram;
  • Программа для публикации и продвижения с компьютера Gramblr;
  • Подписка на пакет Adobe для фотографов (инструменты online и offline);
  • Фотокамера (возможно, несколько);

þ Зачем такой набор нужен?

  • Приложение Instagram.  Есть для любой мобильной платформы. Моя версия под Android. Предоставляет возможности как для публикации (фото, видео, анимация, галереи до 10 фото), так и продвижения своего аккаунта, включая ведение историй и прямых эфиров и кросспоста в другие соцсети.  Основной инструмент для публикаций. www.instagram.com

  • Gramblr. Это приложение для PC. О версии для Mac ничего не знаю, работаю с версиями для Windows. Приложение позволяет публиковать (Upload now) фотографии и видео прямо с компьютера. Требует регистрации в своем сервисе и привязки к аккаунту в Instagram, в котором предполагается публиковаться.
  • Есть возможность публикации в разных аккаунтах, но при этом накопленные "лайки" (далее без кавычек) для одного аккаунта слетают при переключении на другой.
  • "Побочным" продуктом Gramblr является наличие инструментов продвижения, а именно получение дополнительных "бесплатных лайков" сразу после публикации и расходования по вашему усмотрению "заработанных" лайков. Что это такое "заработанные" лайки? В Gramblr реализован механизм обмена лайками между зарегистрированными пользователями (Earn Coins) - после регистрации в службе и активации этой функции (переключатель Auto-Like), ваше приложение будет автоматически "лайкать" публикации других пользователей, при этом вам будут начисляться те самые "заработанные" лайки, которые вы потом можете потратить по своему разумению - для своих, либо посторонних публикаций.
  • И ещё один механизм продвижения Gramblr - автоматизированная расстановка ваших лайков публикациям с определенными хэш-тегами (Gain follwers). Набор хэш-тегов, публикации с которыми будут найдены в ленте Instagram, определяете вы, затем надо этот режим активировать.
  • Note: для того, чтобы механизмы автоматизации в Gramblr работали постоянно, желательно, чтобы компьютер, где программа установлена, был запущен в режиме 24/7 и имел постоянный доступ в Интернет;
  • Минусом Gramblr является отсутствие возможности публикации "галереи", т.е. набора фотографий или видео на одну тему, эта функция есть только в приложении Instagram. http://gramblr.com/uploader/#home

  • Подписка на пакет Adobe для фотографов это Photoshop, Lightroom, Bridge, Camera RAW.
  • Версии есть как онлайн, так и оффлайн;
  • "Побочным" продуктом от использования онлайн инструментов является возможность быстро поделиться ссылками на своё хранилище с обработанными материалами;
  • Кроме названных продуктов предоставляется доступ в облачное онлайн хранилище Creative Cloud и ряд других "фишек" для подготовки публикаций, например, онлайн инструмент Spark - дизайн и подготовка публикации для различных соцсетей как фотоматериалов, коллажей, так и видеороликов, включая конвертацию набора слайдов в видео с брендированием и наложением звука;
  • Инструмены Photoshop и Lightroom доступны в версиях приложений для мобильных устройств и позволяют оперативно подготовить фотоматериал для публикации. https://www.adobe.com/ru/

  • Фотокамеры. Что касается моего набора, он весьма бюджетен, но функционален.
  • Зеркалка Nikon D5100 + набор объективов: "ширик" Nikkor 18-55 mm и "телевик" Nikkor  IF ED 70-300 mm со стабилизатором, набор хотелось бы расширить, но наверно это стремление любого фотографа;
  • Беззеркалка Olympus OM-D-EM10 с китовым 14-42 mm. Есть электронный видоискатель; Удобства работы с ним добавляет наличие Wi-Fi, что позволяет делать публикации в полевых условиях;
  • Смартфон с хорошими камерами (фронталка не менее 8 Мпикс, основная не менее 12 Мпикс) и качественным экраном;

þ Как я выбирал фототехнику под свои задачи?

  • Поскольку основная моя тематика это споттинг, т.е. съемки авиации во всех ее проявлениях, наиболее важным является приобретение "стекла" с максимальным фокусным расстоянием не менее 300 мм, а лучше больше и обязательно со встроенным стабилизатором;
  • Широкоугольный объектив обязан быть в наличии также - бывает необходимость поснимать крупные планы и потом, авиацией не всегда ограничиваюсь, есть и другие объекты и поводы для съемки;
  • Компактный ультразум используется для съемки видео и как "записная книжка", поскольку легко помещается в кармане;
  • Note: для других задач фототехника может быть совсем другой. Например, хорошо иметь в арсенале "универсальное" стекло, скажем, с диапазонами 24-70 mm или 18-105 mm, что годится для репортажного фото, а если это будет светосильная оптика, то и портретной съемкой можно побаловаться. Можно запастись также набором "фиксов", т.е. объективами с фиксированным фокусным расстоянием.  В последнее время обратил внимание на беззеркальные системы Sony, Olympus - хороши своей компактностью, широким функционалом и качеством получаемых фото и видео. Привлекательно выглядит наличие поворотного экрана, например. Минусом для меня является небюджетность таких систем. Ещё хорошим приобретением может быть экшн-камера с набором штативов и держателей - съёмка видео, когда камера закреплена на операторе, либо на другом движущемся предмете и съемка таймлапсов - камера находится на штативе в фиксированном месте и делает кадры подряд с заданным интервалом, затем этот набор склеивается в видео; Вообще же, некоторые владельцы "крутых" аккаунтов вовсе не заморачиваются покупкой техники и кроме, например, Apple Iphone ничем не пользуются, это тоже оправданный подход, если у вас есть, чем привлечь аудиторию;

þ Публикации и "пассивные" способы продвижения

К пассивным способам продвижения в Instagram я бы отнес следующее:
  • Качественный контент;
  • Использование набора тематических хэш-тегов;
  • Кросспост публикаций в другие соцсети;
  • Подписки;

  • Качественный контент. Не секрет, что привлекает к страничке в первую очередь гармоничное, композиционное и красиво обработанное  фото или захватывающее видео. Здесь не надо стесняться в способах - для приобретения своей аудитории все средства хороши, но перегибать тоже не стоит.

  • Развитие ни одной странички не обойдётся без использования хэш-тегов. Кратко о теории, что это такое. Хэш-теги в публикациях начинаются символом # и далее идет ключевое слово. Например #беговел. Или #balancebike. Не надо стесняться их использовать. Мой принцип формирования набора хэш-тегов для публикации примерно такой: место действия, объект действия, что происходит, эмоции, специализированные тэги для таких же маньяков, кто интересуется данной темой;
  • Хинт: Если ваш аккаунт является закрытым, ссылки по хэш-тегам в нем работают только для вас, остальные пользователи "снаружи" вашего закрытого аккаунта ваши публикации с указанными тэгами не увидят;
  • Хинт: Актуальные хэш-теги можно всегда узнать, тапая по ним - приложение найдет все публикации в ленте, где данный хэш-тег присутствует с отображением статистики; В последнее время приложение Instagram показывает в ленте публикаций дополнительно статистику по популярным тэгам;
  • Хинт: Размещать тэги можно не только в самой публикации, чтобы не засорять технологическими записями контент, а и в комментариях к этому посту;

  • Приложение Instagram позволяет делать кросспост (копировать вашу исходную публикацию) в другие социальные сети (Facebook, Twitter, Вконтакте и т.д.). Для этого нужно в настройках Instagram лишь привязать ваши аккаунты в других социальных сетях, затем нажать символ "три точки" над публикацией и выбрать пункт "Поделиться".  К сожалению, приложение не позволяет делать кросспосты в группы Вконтакте и сообщества Facebook. Но размещать ссылки на публикации в Instagram где угодно вполне можно вручную.

þ Активные способы продвижения

  • Прямые трансляции;
  • Ведение историй в Instagram;
  • Ведение переписки в комментах с другими пользователями, в том числе в их аккаунтах;
  • Использование инструментов продвижения программы Gramblr;
  • Проведение различных мотивирующих конкурсов;

  • Я намеренно не рассказываю подробно об активных способах продвижения, поскольку диапазон методов очень широк, выше приведено лишь несколько возможных вариантов, собственно, все из них достаточно просты в реализации и что они собой представляют технически следует из самого названия или метод упоминался мной выше;

þ Немного об оформлении аккаунта и других фичах в управлении им

  • Поскольку приложение не предоставляет много места для текста, нужно попытаться выделить ключевые моменты об аккаунте или о вас и в сжатой форме, возможно, с помощью символов попытаться это изложить. Как правило, указывают свое имя,  интересы, профессию, местожительства (как минимум, страну).
  • Аккаунт дает возможность указать в шапке лишь одну активную ссылку. Что это может быть? Один из ваших профилей в социальных сетях, если вы активничаете у себя на страничке, это может быть прямая ссылка, например, на вашу последнюю публикацию на канале Youtube и т.п.
  • В Инстаграме могут быть профили двух видов - личный аккаунт и аккаунт организации. Чем они отличаются? В аккаунте организации вы видите всю вашу статистику по посещаемости, подписчикам, показам и т.п. специализированным моментам, позволяющим оценить, насколько эффективно используется ваш аккаунт и работают механизмы продвижения. Кроме того, вы можете создать страничку на Facebook и делать перепосты пуликаций на неё. В личном аккаунте этих заморочек нет.

þ Заключение

Итак, ключевыми факторами для успешного развития аккаунта на мой взгляд являются:
  • качественный контент;
  • открытый аккаунт;
  • использование тематических хэш-тегов;
  • публикации с интервалом не менее 1 раза в сутки;
  • использование инструментов gramblr;
  • общение у себя в аккаунте и аккаунтах пользователей, по крайней мере, в течение некоторого времени после побуждающей к общению публикации;

þ Дисклаймер.

  • Всё, что здесь написано, может быть использовано в ваших целях, но результат не гарантируется а описываемые способы и приемы мной получены эмпирически (т.е. опытным путем), а отнюдь не благодаря теоретической подготовке.

среда, 17 февраля 2016 г.

Ошибка 11004 при соединении клиента 1С 8.х с сервером "Запрошенное имя верно, но данные запрошенного типа не найдены"


Ситуация: При попытке соединения с только что настроенной базой 1С:Предприятия (клиент-серверный вариант), выдается ошибка descr=11004 "Запрошенное имя верно, но данные запрошенного типа не найдены." и "Выполняется ожидание возможности запуска." 
Последующие нажатия кнопки "Выполнить запуск" к соединению с сервером 1С:Предприятия не приводят.

Решение: В папке %\Windows\System32\drivers\etc\% находим файл hosts, в котором по умолчанию обычно мало что есть из настроек. 

Файл hosts необходим системе, если при поиске по имени компьютера внутри сети  доступный сервер DNS не смог определить IP-адрес искомого ресурса, система обращается к этому файлу.

Файл hosts необходимо открыть в любом текстовом редакторе (как правило, это Блокнот) с правами администратора и добавить в него строку (разделитель - пробел) вида:

[xxx.yyy.zzz.qqq] [имя-сервера-1С-Предприятия]

где xxx.yyy.zzz.qqq - IP-адрес сервера.

Например: 192.168.0.100 server1c-01

Затем сохранить файл hosts и повторить попытку открытия базы. 

Ошибка исправлена и база нормально открывается.

четверг, 14 ноября 2013 г.

Методы борьбы с увеличением размера баз в связке MS SQL + 1С:Предприятие

средствами MS SQL 2008.


Очень часто в практике встречаются случаи, когда, с точки зрения администраторов, "внезапно" начинает катастрофически увеличиваться размер журнала транзакций (*.ldf) и файла с данными (*.mdf) у рабочей базы MS SQL. Для связки 1С:Предприятие + MS SQL вообще характерно такое поведение. Связано оно, в первую очередь, с обновлениями конфигураций 1С, когда с очередным обновлением добавляются новые объекты и процедуры, проводятся какие-то манипуляции с существующими объектами типа их реиндексации, реструктуризации баз и т.п. Второй вариант причины такого поведения - запуск массовой обработки объектов базы 1С, возможно, не оптимальными методами. Ну и третий вариант - просто резкое увеличение рабочей нагрузки на базу. Поскольку дисковый ресурс серверов БД, как известно, не резиновый, резкий рост размеров базы зачастую приводит к панике администраторов и разнообразным попыткам самостоятельно эту проблему решить. Предлагаю администраторам БД отработанные на практике несколько более или менее эффективных способов решения.

1. Если у вас есть возможность перенести рассматриваемую базу на более ёмкий диск, а лучше, просто на другой, можно это сделать. Как вариант - перенести только журнал транзакций *.ldf или файл с данными *.mdf. Причем, если вы не опирались на мои и другие известные рекомендации при развертывании этой самой базы, не поздно это сделать и сейчас, тем более, ситуация позволяет). Делается это, в основном, с помощью SQL Server Management Studio (SSMS) следующим образом:
- подготовить новый раздел, куда будет перенесен журнал транзакций (или данные), желательно, если это будет физически вообще другой диск;
- убедиться, что нет ни одного активного сеанса работы с базой. Если это база 1С:Предприятия, рекомендуется остановить службу "Агент сервера 1С:Предприятия";
- выполнить отсоединение базы (detach);
- перенести файл журнала (или данных) на подготовленный новый раздел;
- выполнить присоединение (attach) базы с указанием нового места расположения файла с журналом (или данными);
- запустить сервер 1С:Предприятия;

Таким образом вы на некоторое время отсрочите очередное возникновение проблемы с нехваткой дискового пространства. Вместе с тем, вы получите некоторый прирост производительности базы за счет разнесения на разные диски файла данных и журнала MS SQL.

2. В оснастке SSMS существуют инструменты для "сжатия" или "усечения" (shrink) как отдельных файлов, так и базы данных целиком:
Открытие меню инструментов для сжатия в SSMS:

Сжатие базы SQL целиком:

Сжатие отдельных файлов данных и лога базы SQL: 

Бывают случаи, когда подобное усечение помогает существенно уменьшить занимаемое базой дисковое пространство как за счет уменьшения mdf-файла, так и за счет уменьшения размера файла с журналом *.ldf. 

Хотелось бы отметить, что как временная мера методы 1 и 2 в общем то эффективны. Но если база уже "пошла в рост", скорее всего, этот процесс не остановить и через некоторое время вы опять столкнетесь с увеличением ее размеров. Поэтому давайте подробно рассмотрим еще один, более радикальный способ борьбы с ростом баз.

3. А метод этот, как ни странно - backup.
Итак, если приведенные выше методы уже исчерпали себя, или вы еще только проектируете систему и не хотите в будущем столкнуться с проблемой нехватки места для баз, я рекомендую использование периодического оперативного бэкапа вашей базы. Суть выполнения этого оперативного бэкапа в том, что с его помощью высвобождаются неактивные записи журнала транзакций (Transaction Log) путем выгрузки их в бэкап и последующего автоматического усечения файла журнала.

Теперь о том, как это настроить. Для начала необходимо выделить место, куда будут выгружаться бэкапы. Это должен быть ёмкий дисковый массив, достаточно скоростной (в первую очередь необходим скоростной линк к серверу БД) и надежный, учитывая хранение на нем бэкапов. Причем, повторюсь, я говорю не о стандартном, скажем, ежесуточном бэкапе средствами MS SQL, а об оперативном бэкапе, который мы будем выполнять чаще, чем раз в сутки, а именно, в рабочие часы, с интервалом от 30 минут до 2-х часов (зависит от интенсивности работы в базе и ее размеров).  Остальные действия по настройке выполняются в SSMS.

Задача: 
Обеспечить оперативное резервное копирование в течение дня, а именно:
- иметь полную копию на начало дня , хранится 1 сутки, затем перезаписывается;
- иметь копии журнала транзакций (TL) через каждые 20 минут;
- актуальность копий журнала транзакций 1 сутки, по прошествии - должны удаляться;
- оперативные бэкапы хранятся на сетевом диске (NAS);

Решение:
Необходимое условие: пользователь, под которым запускается SQL Server agent и SQL Server должен иметь права на сетевой ресурс NAS сервера, куда будут складываться бэкапы. Кроме того, Recovery Model базы, которую планируется бэкапить должна быть Full.

Создаем новый запрос в SSMS:







Необходимо обеспечить возможность поключения SQL сервера к сетевому диску Х:.
а) Предварительная операция, требуется для включения расширенных опций SQL 2008 
(код Т-SQL):

-- Включение использования расширенных опций.
EXEC sp_configure 'show advanced options', 1
GO
-- Применение этого значения для текущей конфигурации.
RECONFIGURE
GO
-- Разрешение использования cmdshell в MS SQL.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- Применение этого значения для текущей конфигурации.
RECONFIGURE
GO

б) Непосредственно подключение к экземпляру MS SQL логического диска 
(код T-SQL):
EXEC xp_cmdshell 'net use Х: \\SRV-nas\1c_backup'
GO

б1) Полный бэкап (Full) будет перезаписываться поверх предыдущего, поэтому создаем Backup Device на нашем сетевом диске 
(код T-SQL)*:

USE master
EXEC sp_addumpdevice 'disk', 'FULLBAСK', '\\SRV-nas\1c_backup\FullBak.bak'
GO

Таким образом, в Server Objects\Backup device появляется новое устройство FULLBAK.

в) Настраиваем Maintenance Plan (MP) из 2-х подпланов:
- subplan_1 - полный ежесуточный оперативный бэкап по расписанию;
- subplan_2 - бэкап Transaction log и удаление бэкапов Transaction log с датой ранее 1 дня, по расписанию ;

г) Запускаем в SSMS мастер Мaintenance Рlan Wizard:
































д) Указываем Separate shedules for each task (отдельные расписания для каждой задачи)



















е) В задачах выбираем: 
- Back up Database (FULL); 
- Back up Database (Transaction Log),
таким образом получаем 2 подплана;



















ж) Настраиваем subplan_1: 
- выбираем базы для копирования, 
- выбираем Back up databases across one or more files, 
- кнопкой ADD выбираем подключенное устройство FULLBAСK, 
- в If backup files exist выбираем “owerwrite”, 
- настраиваем расписание для выполнения задачи Shedule кнопкой change - выполнение каждый день в определенное время, в моем случае в 7:00.

































з) Настраиваем subplan_2 по аналогичному принципу: 
- выбираем базы для копирования; 
- выбираем create a backup file for every database
- указываем путь к папке на диске Х:, куда будут складываться бэкапы TL; 
- настраиваем расписание Shedule - каждые двадцать минут в интервале, например, с 07:20 до 23:00;

и) Сохраняем, открываем на редактирование (Modify в дереве Management\Maintenance plans) наш сохраненный Maintenance Plan.

к) В subplan_2 drag-and-drop мышью добавляем из Toolbox задачу Maintenance Cleanup Task.













л) Щелкаем Edit по этой задаче, 
- в пункте Search folder and delete files based on an extension, поле Folder выбираем папку, куда складываются файлы бэкапа Transaction Log. 
- В поле File extension (расширение файлов) ставим trn. 
- В Delete files older than following, согласно задаче, ставим 1 сутки. 
- Соединяем стрелкой обе подзадачи (бэкап и удаление), чтобы они выполнялись по одному расписанию.

м) Сохраняем наш Maintenance Plan, он готов к выполнению.

"Приятным" бонусом этих настроек является еще и возможность восстановления базы в случае отказа на каждый (согласно расписания) момент времени. Подробней о процедуре восстановления я уже написал в этой статье. Собственно, там же есть и рассмотренное решение оперативного бэкапа.)

Для тех, кто осилил статью, хотел бы пояснить один нюанс. Использование cmdshell для подключения сетевого диска к экземпляру MS SQL имеет одну особенность - оно действует до перезапуска службы сервера. Поэтому рекомендую либо создать дополнительное задание для агента сервера, которое будет при запуске службы MS SQL выполнять команду: 

EXEC xp_cmdshell 'net use Х: \\*******\1c_backup'
GO

либо делать это вручную после каждого перезапуска службы.

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

Описанные методы в статье не являются панацеей, есть и другие методики, например, Autoshrink, использование модели восстановления Simple, скрипты SQL могут так же содержать более продвинутый функционал, где функции бэкапа будут совмещены с дефрагментацией индексов, например. 

Поэтому желающих приглашаю обсудить этот вопрос и так же поделиться опытом. )


--------------------------------------------------------------------------------------------
* имеется альтернативный вариант, когда, как и для бэкапа Transaction Log, можно обойтись без создания Backup Device , воспользовавшись Create a backup file for every database. Это несколько упрощает решение, чем воспользоваться вы решите сами.)

При перепечатке ссылка на источник обязательна.
(с) alexeistar.blogspot.com