Лирическое вступление (можно пропустить):
Было замечательное солнечное утро, регламентные работы по обновлению конфигурации прошли штатно, как тогда казалось. Спустя пол часа картина изменилась. Включилось старое фоновое задание, которое за один запуск затерло основной регистр сведений. Дело в том что, до определенного момента текущая база забирала данные этого регистра из другой, но в один прекрасный момент архитектура изменилась и мастер-базой регистр стала текущая.
Первое что нас спасло это бекап перед релизом. Всегда помним про бекап!!! Далее, Регистр большой и универсальными обработками загружать/выгружать пришлось бы до морковкиного заговенья, хотя сначала мы конечно предприняли подобные попытки))). Минуты шли напряжение росло и тогда было принято решение резать не дожидаясь перитонита!))) Мы открыли SQL Server Management Studio и проблема была решена в мгновение ока.
Быстрое восстановление затертого регистра сведений из бекапа по средствам SQL:
- Просим развернуть бекап созданный перед релизом.
- Открываем SQL Server Management Studio
- Запускаем «SQL Server Import and Export Wizard», для этого необходимо встать на конкретную БД. Правой кнопкой вызвать контекстное меню и нажать:
TasksàExport Data или TasksàImport Data
Если Вы планируете загрузить таблицу в текущую БД тогда TasksàImport Data
Если Вы планируете скопировать из текущей БД таблицу тогда: TasksàExport
Мы в нашей ситуации использовали TasksàExport
- Открывается окошко мастера:
- Жмем «Next»
- В открывшемся окне:
-
- Data source выставляем в значение «SQL Server Native Client 11.0» (последнее значение в списке)
-
- Проверяем тот ли сервер указан в поле «Server name», с которого мы планировали скопировать таблицу (в нашем случае там где поднят бекап)
- Проверяем та ли база указана в поле «Database» (база в которую развернут бекап)
- Если все ок, жмем «Next»
- В открывшемся окне, необходимо настроить параметры принимающей стороны (в нашем случае рабочая БД):
-
- Устанавливаем у «Destination» значение «SQL Server Native Client 11.0» (так же низ списка)
- В поле «Server name» (в нашем случае имя SQL сервера рабочей БД ) рекомендуется вводить значение серввера приемника таблицы вручную, так как в случае выбора происходит сканирование сети на предмет имеющихся в ней SQL серверов.
- В поле «Database» выбираем БД в которую хотим скопировать табличку (в нашем случае имя рабочей БД).
- Кроме того, поскольку предполагается запись в БД приемник, то необходимо указать пользователя и пароль под которым должна производиться запись!!!
- Если все ок, жмем «Next»
- В появившемся меню выбираем верхний пункт, так как мы хотим скопировать конкретную таблицу, а не написать произвольный запрос для получения данных. После чего жмем «Next»
- Выбираем таблицу(цы) которую(рые) мы хотим скопировать, если в месте куда копируем уже есть такая таблица (а в нашем случае это было именно так) то нужно изменить наименование таблицы, например добавить постфикс «_new»
Далее жмем «Next»
- Ели все проверили и готовы копировать выбираем «Run immediately» и ждем пока произойдет копирование
Жмем «Finish»
- Отлично табличка регистра сведений скопирована, дело за малым произвести переименование текущей таблицы (в нашем случае рабочей Бд), добавив постфикс «_old», пусть она побудет еще какое-то время в БД для разбора полетов. Позже ее можно будет удалить. Так же нужно будет убрать у вновь созданной таблицы постфикс «_new» и ОБЯЗАТЕЛЬНО НУЖНО СОЗДАТЬ ИНДЕКСЫ!!!
- Итак генерируем скрипт для дальнейшего создания индексов:
-
- Встаем на таблицу, подлежащую замещению и жмем кнопку «F7» на клавиатуре
-
- Дважды щелкаем по папке «Indexes»
-
- В открывшемся окне выделяем все индексы открываем правой кнопкой мыши контекстное меню и создаем скрипт
Пример скрипта:
Сохраняем скрипт в некий текстовый файл и продолжаем.
- Переименовываем таблицу с некорректными данными:
- Но это не все нужно так же переименовать индексы:
- Теперь убираем постфикс «_new»
- Как видно из скриншота, у перенесенной, таблицы отсутствуют индексы. Так что пришло время воспользоваться скриптом созданным в 11 пункте. Выполняем его
Индексы появляются:
- Ура все готово. После того как все проверите и поймете, что старая таблица не нужна ее можно будет удалить.
Так буквально за 5 минут вы можете скопировать 30 000 000 строк.
Типовыми обработками 1С это у вас точно не получится.