Как перезагрузить таблицу, не увеличивая файл журнала? - PullRequest
0 голосов
/ 28 июня 2010

У меня есть следующий сценарий, который выполняется каждую ночь с использованием служб SSIS в SQL Server 2008:

  • создает несколько временных.таблиц и импортируйте данные из источника данных ODBC
  • , когда импорт будет завершен, удалите существующие таблицы и переименуйте temp.таблицы с тем же именем, что и удаленные таблицы

Что мне нужно сделать в задании SSIS или в настройках SQL Server, чтобы минимизировать ведение журнала?Я не хочу отключать ведение журнала для всей базы данных, поскольку есть только несколько таблиц, которые обновляются каждую ночь.

Ответы [ 5 ]

1 голос
/ 29 июня 2010

Я бы подумал, что изменение модели восстановления для массовой регистрации непосредственно перед загрузкой таблицы с последующим переключением на полную версию будет лучшим вариантом. Обязательно ознакомьтесь с вещами, которые следует учитывать (http://msdn.microsoft.com/en-us/library/ms190203.aspx) перед реализацией. Это можно сделать с помощью операторов ALTER DATABASE, которые можно добавить в поток управления вашего пакета служб SSIS:

-- switch to bulk-logged mode
alter database <dbname,,> set recovery bulk_logged;

-- switch back to full
alter database <dbname,,> set recovery full;

Хотя я также (и в настоящее время) полагался на более частые резервные копии журналов, чтобы сохранить журнал прирученным, это больше искусство, чем наука. Как и большинство произведений искусства, что-то должно вас удивить; к сожалению, эти сюрпризы больше похожи на визит к стоматологу: болезненный и, вероятно, предотвратимый:).

Мне также хотелось бы знать, используете ли вы опцию быстрой загрузки в компоненте назначения oledb (предположим, что вы используете это). Это должно быть минимально логирование. Есть хорошая белая книга о многочисленных методах повышения производительности при загрузке данных, которые также могут быть проверены (будьте готовы, это глупо). , , возможно, это может дать вам еще несколько идей!

1 голос
/ 28 июня 2010

Есть ли возможность разбить эти таблицы на другую базу данных?

Вы сможете управлять не только настройками ведения журнала отдельно, но и самими журналами и резервными копиями, и, таким образом, вы сможете управлять ими гораздо болееgranularity.

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

1 голос
/ 28 июня 2010

Более частые резервные копии в журнале транзакций могут поддерживать размер и не требовать увеличения размера журнала. Кроме того, я вижу, что сейчас хранилище стоит дешево, когда вы можете переместить файл LDF на этот диск для удобства свободного места.

1 голос
/ 28 июня 2010

К сожалению, регистрация - это настройка уровня базы данных.Возможно, вы могли бы выполнить загрузку в отдельную БД (с SIMPLE или BULK LOGGED), а затем, предполагая, что этот бит успешен, ОБНОВИТЬ существующие таблицы.

0 голосов
/ 02 июля 2010

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

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

...