SQL удалил данные, хранящиеся в файле журнала или окончательно удаленные из базы данных - PullRequest
0 голосов
/ 13 февраля 2012

После удаления данных из базы данных SQL, удалены ли данные, хранящиеся в файле журнала, или они навсегда удалены из базы данных?

При удалении данных из файла журнала базы данных увеличивается размер, почему?

После сжатия базы данных уменьшится размер файла

изменить 1 ::

в пятой строке вы указываете, почему файл журнала увеличивается, но после выполнения команды удаления, почему он не освобождает место на диске, записи сохраняются, как в файле журнала. Можно ли удалить данные без сохранения в файле журнала? поскольку я удалил около 2 миллионов данных из файла, это увеличит пространство на 16 ГБ на диске

1 Ответ

0 голосов
/ 13 февраля 2012

Итак, как вы описали поведение журнала - он уменьшает размер после сжатия - вы используете Простую модель восстановления вашей БД.

И в файле журнала не осталось ни одной копии удаленных данных

Если вы спросите - как восстановить эти данные - не существует никакого обычного способа.

Если вы спрашиваете о безопасности данных и беспокоитесь об удаленных данных, оставленных где-то в БД - да, есть - см. скрытые записи . И, очевидно, некоторые данные могут быть восстановлены сторонними инструментами из обоих типов файлов БД - data и log.

Журнал БД увеличивается в размере, потому что он содержит все данные, являющиеся удаляющими до тех пор, пока не завершится команда DELETE, потому что в случае сбоя - сервер sql должен восстановить все частично удаленные данные из-за гарантии атомарности.

Дополнительные ответы:

  • Нет, невозможно удалить данные без сохранения в файле журнала
  • Поскольку уже загруженный файл журнала не сжимается автоматически. Чтобы уменьшить размер файлов в БД, вы должны выполнить некоторые операции сжатия , , которые строго не рекомендуются в производственной среде
  • попробуйте удалить небольшими порциями, см. Пример

вместо удаления всех данных следующим образом:

DELETE FROM YourTable

удалить небольшими порциями:

WHILE 1 = 1
BEGIN
  DELETE TOP (10000) FROM YourTable
  IF @@ROWCOUNT = 0 BREAK
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...