Индивидуальное резервное копирование клиентов из базы данных нескольких клиентов
У нас есть многопользовательская база данных размером около 95 ГБ. Один из клиентов запрашивает ежемесячную резервную копию своих данных. У нас есть скрипт, который удаляет все записи из всех таблиц, которые не связаны с указанным идентификатором.
Таким образом, мы восстанавливаем резервную копию БД в новую БД, запускаем наш сценарий для ее сокращения, в результате чего у нас остается БД, содержащая 1 клиента вместо 100ish. Но размер БД по-прежнему составляет 95 ГБ, хотя теперь он должен быть пустым на 90%.
Я пробовал много разных комбинаций: отключить его, затем снова включить, создать резервные копии после удаления, различные комбинации DBCC SHRINKDATABASE и DBCC SHRINKFILE и т. Д.
Лучшее, что я сделал до сих пор, - это сокращение примерно на 9 часов, чтобы получить файл примерно до 15 ГБ. Максимум, который вылетает при каждой усадке, составляет 10-20%, даже если я укажу оставить 0 свободного места.
Некоторые из таблиц содержат столбцы с типом данных изображения, и я думаю, что это как-то связано с этим, но я все еще не могу найти надежного решения этой проблемы.
В конечном итоге цель состоит в том, чтобы иметь план / задание, которое будет запускаться раз в месяц для восстановления резервной копии в новую БД, ее уменьшения, сжатия, затем восстановления в папку и удаления новой БД. Но мы действительно хотели бы сделать это менее чем за 9-12 часов, если это возможно.
Любая помощь будет оценена.
1 ответ
Я подозреваю, что процесс восстановления создает базу данных объемом 95 ГБ. из shrinkdatabase:
База данных не может быть меньше минимального размера базы данных. Минимальный размер - это размер, указанный при первоначальном создании базы данных, или последний размер, явно заданный с помощью операции изменения размера файла, такой как DBCC SHIRNKFILE или ALTER DATABASE. Например, если база данных изначально создается с размером 10 МБ и увеличивается до 100 МБ, минимальная база данных может быть уменьшена до 10 МБ, даже если все данные в базе данных были удалены.
Я бы изменил способ, которым вы это делаете, написав скрипт, который создает новую базу данных и делает выборку для данных клиента