Создание серверной копии БД

1. nikson_1987 16.02.23 12:15 Сейчас в теме
Добрый день, коллеги.
Есть ли какая-то возможность при создании копии средствами SQL очищать параметры синхронизации? Не отключать регл. задания, а зачищать параметры синхронизации (каталоги). При создании копий 1 раз из 10 забывают изменить пути и данные начинают улетать в рабочую базу.
По теме из базы знаний
Найденные решения
3. GeraltSnow 174 16.02.23 14:11 Сейчас в теме
Для подготовки копии базы к разработке или тестам я делал скрипт для MSSQL, который очищает самые большие таблицы вроде истории данных, конфиденциальную информацию и настройки. После разворачивания базы просто проходился по ней этим скриптом и получал нужный результат. Скрипт пишется под конкретную конфигурацию с указанием конкретных имен таблиц.

Пример:
--Скрипт генерирует запросы на очистку и последующее сжатие таблиц указанной базы данных
--Результат выполнения скрипта скопировать и выполнить как новый запрос

DECLARE @DataBase varchar(30)
SET @DataBase = 'erp-1234' --Указать имя базы

DECLARE @sql varchar(100)
set @sql = 'use ' + quotename(@DataBase)
exec (@sql)

SEL ECT 'USE [' + @DataBase +  ']'
UNI ON ALL
SEL ECT 'TRUNCATE TABLE ' + name FR OM sys.objects WHERE type in (N'U') and name LIKE '%Document%'  --Все документы
UNI ON ALL
SELECT 'TRUNCATE TABLE ' + name FR OM sys.objects WHERE type in (N'U') and name LIKE '%AccumRG%' --Все регистры накопления
UNI ON ALL
SELECT 'TRUNCATE TABLE _DataHistoryVersions'			--ИсторияДанных
UNI ON ALL
SEL ECT 'TRUNCATE TABLE _DataHistoryLatestVersions1'		--История данных платформа
UNION ALL
SEL ECT 'TRUNCATE TABLE _DataHistoryQueue0'			--История данных платформа
UNION ALL
SEL ECT 'TRUNCATE TABLE _InfoRg34207'					--История  БСП
UNION ALL
SEL ECT 'DBCC SHRINKFILE (N''' + mf.name + N''' , 0)'	        --Сжатие базы и лога
FR OM 
         sys.master_files mf 
    JOIN sys.databases d 
        ON mf.database_id = d.database_id 
WH ERE d.database_id > 4 and d.name = @DataBase
Показать



И ещё была похожая задача - решить проблему путаницы рабочей и тестовых баз при переключении между RDP. Для этого я делал расширение, добавляющее в метаданные константу, в которой хранится имя рабочей базы к кластере. При первичном запуске базы константа заполняется текущим именем базы в кластере, которое можно получить при помощи метода СтрокаСоединенияИнформационнойБазы(), а если она уже заполнена, то её значение сравнивается с текущим именем базы в кластере. При несовпадении инициируется изменение цвета интерфейса на отличный от стандартного. Само собой разумеется, что никому не придет в голову создавать копию базы с именем, как у рабочей.
nikson_1987; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. glek 119 16.02.23 13:08 Сейчас в теме
(1) никак. только заблокировать задания и после изменения параметров включать.
3. GeraltSnow 174 16.02.23 14:11 Сейчас в теме
Для подготовки копии базы к разработке или тестам я делал скрипт для MSSQL, который очищает самые большие таблицы вроде истории данных, конфиденциальную информацию и настройки. После разворачивания базы просто проходился по ней этим скриптом и получал нужный результат. Скрипт пишется под конкретную конфигурацию с указанием конкретных имен таблиц.

Пример:
--Скрипт генерирует запросы на очистку и последующее сжатие таблиц указанной базы данных
--Результат выполнения скрипта скопировать и выполнить как новый запрос

DECLARE @DataBase varchar(30)
SET @DataBase = 'erp-1234' --Указать имя базы

DECLARE @sql varchar(100)
set @sql = 'use ' + quotename(@DataBase)
exec (@sql)

SEL ECT 'USE [' + @DataBase +  ']'
UNI ON ALL
SEL ECT 'TRUNCATE TABLE ' + name FR OM sys.objects WHERE type in (N'U') and name LIKE '%Document%'  --Все документы
UNI ON ALL
SELECT 'TRUNCATE TABLE ' + name FR OM sys.objects WHERE type in (N'U') and name LIKE '%AccumRG%' --Все регистры накопления
UNI ON ALL
SELECT 'TRUNCATE TABLE _DataHistoryVersions'			--ИсторияДанных
UNI ON ALL
SEL ECT 'TRUNCATE TABLE _DataHistoryLatestVersions1'		--История данных платформа
UNION ALL
SEL ECT 'TRUNCATE TABLE _DataHistoryQueue0'			--История данных платформа
UNION ALL
SEL ECT 'TRUNCATE TABLE _InfoRg34207'					--История  БСП
UNION ALL
SEL ECT 'DBCC SHRINKFILE (N''' + mf.name + N''' , 0)'	        --Сжатие базы и лога
FR OM 
         sys.master_files mf 
    JOIN sys.databases d 
        ON mf.database_id = d.database_id 
WH ERE d.database_id > 4 and d.name = @DataBase
Показать



И ещё была похожая задача - решить проблему путаницы рабочей и тестовых баз при переключении между RDP. Для этого я делал расширение, добавляющее в метаданные константу, в которой хранится имя рабочей базы к кластере. При первичном запуске базы константа заполняется текущим именем базы в кластере, которое можно получить при помощи метода СтрокаСоединенияИнформационнойБазы(), а если она уже заполнена, то её значение сравнивается с текущим именем базы в кластере. При несовпадении инициируется изменение цвета интерфейса на отличный от стандартного. Само собой разумеется, что никому не придет в голову создавать копию базы с именем, как у рабочей.
nikson_1987; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот