(Возврат на основную страницу)

 

Содержание номера за Февраль 2015 год

SQL Server

Февраль 2015 № 02 (56)

  1. Резервное копирование в среде SQL Server
    Хуан Гранадос (Juan Granados)

  2. Как избежать переполнения журналов транзакций
    Даниэль Маркес (Daniel Marques)

  3. Сбор базовой линии показателей о настройках SQL Server 2000/2005/2008
    Патрик Ахами (Patrick Akhamie)

  4. Универсальная процедура обхода объектов sp_uforeach
    Роберт Вираг (Robert Virag)

  5. Поиск кандидатов на ограничение FOREIGN KEY
    Шарль Якобус (Charles Jacobus)


Резервное копирование в среде SQL Server
Хуан Гранадос (Juan Granados)

Предлагаемый код выполняет резервное копирование (полное и для журнала транзакций), после чего зажимает результат в zip архив.
Вы можете указать какие БД должны быть скопированы и удаленное размещение результатов.
Можно удалять старые копии для сохранения места на диске. Например, организовать хранение последней недели резервных копий.

Код следует исполнять в контексте того экземпляра SQL Server, для которого выполняется копирование.
Протестировано на SQL Server 2008 R2 и 2012.
 


Как избежать переполнения журналов транзакций
Даниэль Маркес (Daniel Marques)

Если ваши базы данных настроены на использование Full модели восстановления, вам необходимо выполнять резервное копирование журналов, чтобы периодически освобождать место для новых транзакций.
Если у вас множество баз данных с интенсивной нагрузкой и не очень много свободного места на диске, где расположены файлы журналов транзакций, легко попасть в ситуацию, когда диск оказывается переполнен. Приходится выполнять незапланированное копирования и сжатие (shrink) файлов, чтобы освободить место и вернуться к нормальной работе.
Я сам сталкивался с этой проблемой много раз, поэтому решил автоматизировать процесс управления журналами.
Как использовать предложенный скрипт:


Сбор базовой линии показателей о настройках SQL Server 2000/2005/2008
Патрик Ахами (Patrick Akhamie)

Предлагаемый код выполняет сбор данных о состоянии и настройках сервера.
 


Универсальная процедура обхода объектов sp_uforeach
Роберт Вираг (Robert Virag)

Синтаксис:
EXEC master.dbo.sp_uforeach
@table_name='имя таблицы или запрос',
@column_name='существующее имя столбца',
@where_clause='предложение where при указании имени таблицы',
@command='команда с маской ?',
@replace_character='маска замены (по умолчанию '?')
@print_command_only= 1 только вывести полученную команду, 0 выполнить команду
@print_object_name= 1 вывести имя объекта, с которым работает скрипт (по умолчанию 0)
@debug=1 вывести отладочную информацию

Есть два способа указания объектов, с которыми будет работать скрипт. Объекты указываются в тексте строки @command.
Во-первых, вы можете использовать имя существующей таблицы и указать его в параметре @table_name (например ‘sys.databases’) и в этом случае, вы также указываете значение критерия поиска без указания самого предложения WHERE. Критерий поиска помещается в параметр @where_clause и позволяет выполнять фильтрацию (например ‘state = 0?).
Во-вторых, вы можете использовать прямое указание текста запросас критерием, например ‘select name from sys.databases where status = 0?. При использовании явно указанного запроса параметр @where_clause игнорируется, но вы должны предоставить параметр @column_name так как записи в этом столбце будут использованы в качестве объектов обработки скрипта.
Если предоставите только знгачение параметра @command, код работает как процедура sp_MSforeachdb:
 


Поиск кандидатов на ограничение FOREIGN KEY
Шарль Якобус (Charles Jacobus)

Этот скрипт отмечает поля таблиц, которые пока не включены в состав внешних ключей, но имеют такое же имя и тип данных, что и поля, входящие в состав кластерных и уникальных некластерных индексов, что делает их возможными кандидатами на включение в состав внешних ключей.
Я отдаю себе отчет, что могут быть поля, которые имеют одинаковое имя и тип и при этом совершенно не имеют никакой связи друг с другом, заранее этого сказать невозможно и только знание предметной области и структуры таблиц позволит принять окончательное решение. Именно поэтому я говорю о "кандидатах". Разработчики должны убедиться, что полученные по результатам работы скрипта предложения стоит реализовывать.
Для получения рекомендаций просто выполните предлагаемый код в контексте вашей БД.


(Возврат на основную страницу)