Назад | Перейти на главную страницу

Резервное копирование отдельных клиентов из базы данных нескольких клиентов

У нас есть база данных с несколькими клиентами, размером около 95 ГБ. Один из клиентов запрашивает ежемесячное резервное копирование своих данных. У нас есть сценарий, который удаляет все записи из всех таблиц, не относящихся к указанному ID.

Итак, мы восстанавливаем резервную копию БД в новую БД, запускаем наш скрипт, чтобы удалить его, это оставляет нам БД, содержащую 1 клиента вместо 100. Но БД по-прежнему имеет размер 95 ГБ, хотя теперь она должна быть пустой на 90%.

Я пробовал много разных комбинаций перевода его в автономный режим, затем обратно в онлайн, резервного копирования после разборки, различных комбинаций DBCC SHRINKDATABASE и DBCC SHRINKFILE и т. Д.

Лучшее, что я сделал до сих пор, - это сжатие за 9 часов, чтобы уменьшить размер файла примерно до 15 ГБ. Максимальный результат каждого сжатия составляет 10-20%, даже когда я указываю оставить 0 свободного места.

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

В конечном итоге цель состоит в том, чтобы иметь план / задание, которое будет запускаться один раз в месяц для восстановления резервной копии в новую БД, вырезать ее, сжать, затем скопировать в папку и удалить новую БД. Но нам бы очень хотелось, чтобы это произошло менее чем за 9-12 часов, если это возможно.

Любая помощь будет оценена.

Я подозреваю, что в процессе восстановления создается база данных размером 95 ГБ. из shrinkdatabase:

База данных не может быть меньше минимального размера базы данных. Минимальный размер - это размер, указанный при первоначальном создании базы данных, или последний размер, явно установленный с помощью операции изменения размера файла, такой как DBCC SHIRNKFILE или ALTER DATABASE. Например, если база данных изначально создается с размером 10 МБ и увеличивается до 100 МБ, минимальный размер базы данных может быть уменьшен до 10 МБ, даже если все данные в базе данных были удалены.

Я бы изменил способ, которым вы это делаете, написав скрипт, который создает новую базу данных и выбирает в для данных клиента