Яка команда для врізання файлу журналу SQL Server?


Відповіді:


131

якщо я добре пам’ятаю ... в аналізаторі запитів або еквіваленті:

BACKUP LOG  databasename  WITH TRUNCATE_ONLY

DBCC SHRINKFILE (  databasename_Log, 1)

2
Це, безумовно, краще, ніж встановити модель відновлення бази даних ПРОСТО (як у відповіді Blorgbeard), тому що якщо ваша модель відновлення ПОВНА, ви її встановили таким чином з причини.
Скотт Вітлок

52
truncate_only застаріло в SQL Server 2008, тому вам доведеться переключити db на просте відновлення msdn.microsoft.com/en-us/library/ms143729(SQL.90).aspx
Джастін Мур

10
Для SQL Server 2012 це працює, але без цього WITH TRUNCATE_ONLY.
net_prog

4
Додавши до сказаного net_prog, для SQL Server 2012 я замінив перший рядок на BACKUP LOG DatabaseNameHere TO DISK='NUL:'.
Аарон Ньютон

"TRUNCATE_ONLY" не є розпізнаваною опцією BACKUP. (SQL Server 2019 RC1)
Томаш

304

У студії управління:

  • Не робіть цього в прямому середовищі, але щоб ви зменшили свій dev db наскільки можете:
    • Клацніть правою кнопкою миші базу даних, виберіть Properties, а потім Options.
    • Переконайтеся, що для моделі "Відновлення" встановлено значення "Просте", а не "Повне"
    • Натисніть кнопку ОК
  • Клацніть правою кнопкою миші знову базу даних, виберіть Tasks-> Shrink->Files
  • Змініть тип файлу на "Журнал"
  • Натисніть кнопку ОК.

Крім того, SQL робити це:

 ALTER DATABASE mydatabase SET RECOVERY SIMPLE
 DBCC SHRINKFILE (mydatabase_Log, 1)

Посилання: http://msdn.microsoft.com/en-us/library/ms189493.aspx


1
Ваша відповідь щойно врятувала мені день! Я не знав про опцію "клацнути правою кнопкою миші - Завдання -> Зменшити". Дякую!
Рене

7
Що ви робите в живому середовищі? Спершу резервні копії журналів?
Джон Бубріскі

1
Я не DBA, але так, я вважаю , що резервне копіювання журналу буде вкоротити його: technet.microsoft.com/en-us/library/ms179478.aspx
Blorgbeard виходить

2
@JohnBubriski Якщо ви використовуєте модель відновлення, відмінну від простої, журнали є основою для відновлення даних або відхилення транзакцій. Отже, у виробництві вам потрібно спершу створити резервну копію цих журналів, перш ніж ви зможете зменшити файли журналів. В іншому випадку реальної можливості відновлення не буде. На жаль, якщо ви перебуваєте в ситуації відновлення, вам доведеться знову завантажити всі резервні копії журналу транзакцій, щоб повністю відновити БД. Веселі часи, будьте впевнені! :)
визначає

1
в SQL Server 2012 мені довелося use mydatabaseперед виконаннямdbcc shrinkfile
knb

62

Для SQL Server 2008 команда:

ALTER DATABASE ExampleDB SET RECOVERY SIMPLE
DBCC SHRINKFILE('ExampleDB_log', 0, TRUNCATEONLY)
ALTER DATABASE ExampleDB SET RECOVERY FULL

Це зменшило мій файл журналу 14 Гб до 1 Мб.


5
Оскільки питання неоднозначне щодо версії та прийнятої відповіді, не застосовується до SQL Server 2008, ця відповідь все ще діє незалежно від віку.
Джеймс Лоу

Дякую, це допомогло мені зменшити великий файл журналу, який не реагував на DBCC SHRINKFILE
Christian Navelot

6
Не забудьте знову змінити модель відновлення на ПОЛЬНУ!
Ден Бешард

Ви повинні зробити резервну копію, перш ніж робити це (або будь-який з інших варіантів усікання). Якщо ви робите повне резервне копіювання та перевіряєте "Копіювати лише резервну копію" в SSMS, журнал вам більше не потрібен. (Це лише момент резервного копіювання).
Simon_Weaver

37

Для SQL 2008 можна створити резервну копію журналу на nulпристрій:

BACKUP LOG [databaseName]
TO DISK = 'nul:' WITH STATS = 10

А потім використовуйте DBCC SHRINKFILEдля обрізання файлу журналу.


2
Це єдиний, хто працював у моїй ситуації ... Я отримав помилку при спробі використання резервної копії з TRUNCATE_ONLY
TomXP411,

Примітка. Це може зайняти досить багато часу, навіть на SSD (він повинен прочитати журнал, щоб можна було його відкинути). Для файлу журналу об'ємом 30 ГБ на помірно працюючому Azure VM потрібно 40 хвилин, щоб зробити 40%. Переконайтесь, що перейдіть до пункту "Повідомлення", прийнятого в SSMS, щоб переглянути відсоток обробленого.
Simon_Weaver

3

ім'я журналу резервного копіювання з truncate_only, за яким слід команда dbcc shrinkfile


0

Оскільки відповідь для мене похований у коментарях. Для SQL Server 2012 та новіших версій ви можете використовувати наступне:

BACKUP LOG Database TO DISK='NUL:'
DBCC SHRINKFILE (Database_Log, 1)

-5

Ще один варіант - вилучити базу даних через студію управління. Потім просто видаліть файл журналу або перейменуйте його та видаліть пізніше.

Ще в студії управління знову додайте базу даних. У вікні вкладення видаліть файл журналу зі списку файлів.

БД додає та створює новий порожній файл журналу. Після того, як ви перевірите, чи все в порядку, ви можете видалити перейменований файл журналу.

Вам, ймовірно, не слід використовувати це для виготовлення баз даних.


4
Ніколи цього не роби! Можуть бути дані в журналі, які ще не присвячені файлу даних. Ви втратили б такі дані.
Павло

Якщо у своїй відповіді ви попереджаєте не пробувати це у виробництві, публікувати його взагалі не варто.
Стен Шоу

9
Я не згоден з низовиками - це варіант. Адміністраторам просто потрібно зрозуміти їх сценарій. Наприклад - не буде "незапущених" даних, якщо немає відкритих транзакцій.
Джерард ONeill

3
Це єдине рішення, яке працювало на мене. Мій накопичувач був заповнений, і я не міг резервного копіювання або зменшення, і нічого іншого, здавалося, не працює. Дякую!
Брайан

3
Я згоден; це не найкраща практика, але це цінний інструмент, якщо у вас немає інших варіантів, таких як сценарій Брайана.
ScottFoster1000
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.