В SQL Server 2012


v-sql-server-2012_1.png

Когда задание выполняется на вспомогательном сервере, база данных MyAGDatabase не является доступной (поскольку данная реплика не относится к объектам, предназначенным только для чтения, и при этом для перевода ее в категорию реплик, предназначенных только для чтения, требуется дополнительная лицензия), так что обратиться к ней просто невозможно. Таким образом, агент SQL Server, получивший инструкцию воспользоваться базой данных MyAGDatabase, попросту не сможет получить к ней доступ. А это значит, что агент не в состоянии даже осуществить проверку, и мы просто получаем сообщение об ошибке.

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

В SQL Server 2012 (ранее известном как Denali) появилась возможность работать с последовательностями. Последовательность представляет собой объект, используемый для автоматического формирования чисел для различных целей, например для ключей. В предыдущих версиях SQL Server для аналогичных целей можно было использовать свойство столбца IDENTITY, но последовательности отличаются большей гибкостью во многих отношениях. Далее я расскажу о способах их создания и использования, а также преимуществах перед IDENTITY.

Для работы с последовательностями необходимо ознакомиться с небольшим набором элементов языка: командами CREATE SEQUENCE, ALTER SEQUENCE и DROP SEQUENCE, которые используются для создания, изменения и удаления последовательностей соответственно; функцией NEXT VALUE FOR, служащей для того, чтобы извлекать следующее значение в последовательности; процедурой sp_sequence_get_range, применяемой для защиты непрерывного диапазона значений последовательности, и представлением sys.sequences, которое используется для запроса информации о существующих последовательностях. Начнем с основных принципов последовательностей, а затем перейдем к более близкому знакомству с их свойствами.

Последовательность— независимый объект в базе данных, в отличие от IDENTITY, свойства, привязанного к определенному столбцу в конкретной таблице. Основная и типичная форма определения последовательности — указать тип данных последовательности, начальное значение и приращение, например:

CREATE SEQUENCE dbo.Seql AS INT START WITH 1 INCREMENT BY 1;

Это довольно простая и понятная команда. В результате ее выполнения создается последовательность с именем Seql в схеме dbo в базе данных, с которой в данный момент существует соединение. Формируется последовательность с типом данных INT, с начальным значением 1 и приращением 1. Чтобы получить новое значение последовательности, приложение обычно вызывает функцию NEXT VALUE FOR; например, выполните следующий фрагмент кода несколько раз, и каждый раз вы будете получать новое значение:

SELECT NEXT VALUE FOR dbo.Seql AS newval;

Комментарии