Когда вы удаляете данные в базе данных SQL Server, SQL Server просто отмечает страницы как свободные, но не перезаписывает данные. Точно так же, как любая современная файловая система фактически не удаляет файлы, а вместо этого просто маркирует блоки диска как свободные.
Чтобы очистить вашу базу данных я хотел бы попробовать следующее:
- удалить данные
- восстановить все индексы и кучи (перестраивать, не реорганизовать)
- сжиматься каждый файл данных с реорганизацией страниц в минимально возможный размер
- повтор 2 и 3 несколько раз
- выполнить контрольную точку
- отсоединять datab аза и переименовать логфайл
- подключить базу данных вынуждают SQL Server воссоздать новый пустой файл журнала (http://www.mssqltips.com/sqlservertip/1894/attach-a-sql-server-database-with-a-missing-transaction-log-file/)
- Выполнить
DBCC CHECKDB
, чтобы убедиться, что вы не сломать что-нибудь
- взять резервную копию
Теперь это очень разрушительный процесс, поэтому обязательно никогда не сделайте это с базой данных, которую хотите продолжать использовать самостоятельно, но она должна удалить все удаленные данные.
Восстановление индексов необходимо, так как в противном случае одна единственная удаленная строка может сохраниться среди неиспользуемых строк внутри страницы. Реорганизация и сжатие удаляют неиспользуемые страницы. Однако иногда он не полностью очищается, поэтому вам нужно повторить шаги 2 и 3. 4, 5 и 6 убедитесь, что в файле журнала нет следа данных, которые в противном случае были бы в зависимости от вашей модели восстановления, все еще содержат удаленные данные, потенциально несколько раз.