Шпаргалка по 70-028 | Автоматизация в SQL Server 7.0 | Дальше » |
SQL Server
Agent
SQL Mail и SQLAgentMail Планирование заданий Оповещение операторов Журнал истории задания Оповещения Оператор RAISERROR Отслеживание событий Траблешутинг оповещений и заданий Многосерверные задания Публикация в WEB Вопросы для повторения SQL Server Agent Каждый DBA может существенно упростить свою работу, если освоит не сложные методы автоматизации рутинных, повседневных задач администрирования, выполняемых SQL сервером. Многие задачи (резервирование, импорт/экспорт) можно заставить сервер выполнять самостоятельно по установленному Вами расписанию. Возможные неполадки также могут устранятся сервером самостоятельно, в соответствии с заданной Вами схемой. Так, сервер может превентивно реагировать на события (например ошибки) выполняя заданные операции или устанавливая более подходящие для сложившейся ситуации режимы своей работы. Например, при появлении ошибки 9002 (переполнение журнала) можно настроить так реакцию сервера, что будет выполнятся оператор, очищающий журнал. Или другой пример, при обнаружении нежелательных блокировок можно автоматически отправлять уведомление администратору. Всё, что вам нужно из компонент сервера для облегчения своих обязанностей, это SQL Server Agent, сам MSSQLServer и EventLog от NT. Разберём, для начала, наиболее полезную компоненту сервера. Сфера её владений, это оповещения, расписания заданий и операторы. Причём задания и оповещения отделены друг от друга и выполняются независимо. Такой подход позволяет выбирать любой из этих компонентов в качестве реакции на событие, особенно, если один из них недоступен. Сервис SQL Server Agent, как и любая другая служба NT регистрируется в системном журнале операционки и ведёт там записи о событиях сервера баз данных. После запуска, SQL Server Agent начинает сопоставлять события с заданиями и оповещениями (содержащимися в кэше) и на основе этого выбирает действия в качестве реакции на заданные администратором события. Операционкой журналируются все ошибки SQL сервера с уровнями от 19 по 25, а также, могут записываться в журналы записи, порождаемые системными хранимыми процедурами sp_addmessage и sp_altermessage. Кроме того, возможность записывать в журнал приложений Windows NT имеет оператор RAISERROR WITH LOG и расширенная хранимая процедура xp_logevent. Сервис SQL Server Agent может запускаться, как от имени LocalSystem, так и от имени учётных записей. Разумеется, это влияет на то, какой набор возможностей будет представлен для SQL Server Agent. К примеру, в SQL SEM можно настроить автоматический рестарт этой службы в случае зависания, но это возможно, только если она стартует от имени учётной записи, которая входит в локальную группу администраторов NT. Давайте рассмотрим, как будут меняться возможности SQL Server Agent при запуске её от разных учётных записей. Для того, что бы служба SQL Server Agent могла работать с сервером баз данных необходимо, что бы учётная запись, от имени которой она стартует, была отражена в роли сервера sysadmin. LocalSystem – это фактически то же самое, что группа Administrators локального NT сервера, что автоматически делает её членом роли sysadmin. Поскольку используется локальная учётная запись, доступ к сетевым ресурсам для SQL Server Agent будет под вопросом. Если Вы посчитали, что администраторские права на локальный сервер для SQL Server Agent – это слишком много, можете запустить его от имени локальной учётной записи. Но тогда позаботьтесь о том, что бы эта учётная запись была включена в роль sysadmin, напрямую или через отображённую на эту роль локальную группу сервера Windows NT. Опять же, сетевые ресурсы, если они не доступны всем подряд, будут для службы недоступны. Для того, что бы SQL Server Agent мог использовать сетевые ресурсы, удобно использовать для его запуска учётную запись пользователя домена. Особенно часто это используется при подключении к почтовым серверам. Для такой учётной записи нужно также обеспечить её присутствие в роли sysadmin. Если вы правильно настроили запуск SQL Server Agent, после этого она будет пытаться подключиться к серверу баз данных. При подключении будут использоваться механизмы проверки подлинности либо NT (по умолчанию), либо SQL сервера. При механизме NT, для проверки подлинности используется та учётная запись, от имени которой стартует SQL Server Agent. SQL Mail и SQLAgentMail С помощью этих двух программ SQL сервер может получать и
отправлять сообщения электронной почты, выступая как клиент
сервера передачи сообщений. Программа SQLAgentMail работает
через сервис SQLServerAgent и осуществляет уведомления об
успешности выполнения заданий по расписанию или оповещает
через почту о событиях сервера баз данных. SQLAgentMail
стартует вместе со своей службой, но для того что бы этот
старт был удачным, необходимо что бы SQLServerAgent запускался
от имени учётной записи пользователя домена. Программа SQL
Mail содержит несколько расширенных хранимых процедур, через
которые MSSQLServer может обрабатывать запросы в теле
сообщения электронной почты и возвращать отправителю отчёт.
Запрос должен содержать только одну очередь. Другим
назначением SQL Mail является отправка сообщений электронной
почты из пользовательского приложения. Наиболее часто для
этого используется хранимая процедура xp_sendmail, которая
запускается из триггера. Для того, что бы программа SQL Mail
могла работать, у Вас должен существовать почтовый профиль
учётной записи пользователя домена, от имени которого стартует
MSSQLServer. Старт SQL Mail может быть автоматический, вместе
с сервером баз данных, либо можно запускать его вручную по
необходимости. Планирование заданий Наверное, удобнее всего создавать и планировать исполнение
заданий (Jobs) с помощью SQL Server Enterprise Manager (EM).
Однако, помимо стандартного, второго пути управления сервером
с помощью системных хранимых процедур, для заданий есть ещё
набор объектов распределённого управления SQL-DMO (Distributed
Management Objects), с помощью которых можно включать опции
управления заданиями в пользовательское
приложение. Оповещение операторов Создать нового оператора можно в ЕМ или, воспользовавшись системной хранимой процедурой sp_add_operator. В любом случае, должна добавиться соответствующая запись в таблицу msdb..sysoperators. Назначение операторов в том, что бы предоставить возможность оповещения необходимого персонала для оперативной реакции на события сервера или результаты исполнения заданий по расписанию. У Вас есть возможность определить действия, в ответ на события сервера (например, ошибки или результаты выполнения этапов задания), которые будут либо регистрироваться в журнале приложений NT, либо создавать сообщение оператору по электронной почте, пейджеру или по сети (команда net send для NT). Для заданий возможен ещё вариант удаления задания. Для оповещения нескольких операторов используют групповой псевдоним электронной почты. Для успешного оповещения, Вам необходимо убедится, что используемые почтовые псевдонимы работоспособны. Для каждого оператора можно определить расписание его работы, когда он будет доступен для приёма оповещения. В не установленное расписанием рабочее время оператора, оповещения ему посылаться не будут. Для операторов, оповещаемых по электронной почте, необходимо указывать полный адрес электронной почты. Это обусловлено тем, что SQL сервер не умеет распознавать похожие псевдонимы (например, «smithj» и «smithje» для сервера будут на одно лицо). Полная информация обо всех оповещениях оператора записывается в системную таблицу sysoperators. Если оператору не удаётся получать отправленные сервером оповещения, значит он не доступен через свой псевдоним, или для передачи сообщений по сети. Для возобновления оповещений, необходимо проверить возможность получения почтовых или иных сообщений оператором посредством иных средств (через почтового клиента или командой из консоли операционной системы). Также, просмотрев записи об истории оповещений оператора и системные журналы, можно определит время последнего, успешного уведомления и описание ошибок, которые возникают при попытке оповещения. Журнал истории задания Вся информация об этапах выполнения заданий регистрируется службой SQLServerAgent в специальном журнале, который хранится в таблице msdb..sysjobhistory. Существует ограничение на глубину истории выполнения заданий, которое можно установить, воспользовавшись ЕМ. Журнал содержит информацию о времени исполнения этапа задания, его успешности выполнения, операторах оповещения, длительности исполнения и сообщениях об ошибках. Установки по умолчанию не подразумевают, что вы будете хранить историю по каждому заданию. Поэтому, для хранения информации о каждом задании, следует увеличить максимальны размер строки в таблице msdb..sysjobhistory, с таким расчётом, что при исчерпании этого размера, запись начнётся поверх старого содержимого истории задания. По умолчанию, база данных msdb будет автоматически расширяться, и её журнал транзакций будет очищаться после каждой контрольной точки. После инсталляции будет действовать ограничение, которое отслеживает, что бы максимальное количество записей журнала для всех заданий не превышало одной тысячей. Причём каждое отдельное задание не сможет занимать более ста записей. Если задание было занесено в журнал более ста раз, то последующие записи будут автоматически затирать самые старые. Есть и ещё одна интересная особенность настроек заданий. Если в процессе выполнения задания может начаться процесс остановки работы сервисов SQL сервера, можно задать максимальный интервал ожидания сервером окончания исполнения задания, в течении которого сервер не сможет прервать работу задания и будет ждать его завершения, а только потом завершить свою работу. Это может быть очень полезно, когда вы планируете некие операции, выполняемые по расписанию в Ваше отсутствие, и хотите обезопасить эти операции от типичной в наше время ситуации, когда электросети производят «веерные» отключения потребителей. Использование источников бесперебойного питания и специальных программных средств, которые могут в случае отключения электричества аккуратно опустить, а потом поднять сервер, конечно очень удобно и полезно, но может сбить исполняемые сервером задачи. Теперь этого можно избежать. Оповещения Дорожащий своей работой DBA всегда испытывает повышенный
интерес к событиям сервера, которые (почему-то) норовят
произойти с сервером в его отсутствие. Современные требования
приложений баз данных заставляют администраторов поддерживать
работоспособность своих систем семь дней в неделю и 24 часа в
сутки. С другой стороны, при условии грамотного
администрирования, можно добиться высокой степени готовности и
доступности программно - аппаратного комплекса, так, что
вмешательство обслуживающего персонала будет происходить в
очень редких случаях, а у руководства будет складываться
впечатление, что его специалисты сидят без работы. Однако
маломальский опыт обслуживания серверов баз данных
подсказывает DBA, что серьёзные проблемы всё же возникают (в
самый не подходящий и неожиданный момент), и их детальный
анализ, как правило, указывает на то, что проблему можно было
прогнозировать и предотвратить. Об одном из инструментов,
который помогает DBA оперативно получать необходимую
информацию для принятия решений о реакции на события сервера,
и который является неотъемлемой частью MS SQL Server, мы
сегодня и поговорим. Номер ошибки / Описание ошибки Оповещения, определённые для уровня/категории ошибок
обрабатываются сервером несколько иначе, чем простые
оповещения. Например, для уровней ошибок 19-25 установлена
автоматическая запись в журнал приложений Windows NT. Для не
устранимых ошибок (уровни с 20 по 25) необходимо обязательно
указать оповещаемого оператора. Несколько таких оповещений, с
пометкой "Demo", определяются при инсталляции сервера. Для
того, что бы они стали активны, необходимо убрать пометку
"Demo", а для не устранимых ошибок назначить оповещаемого
оператора. Оператор RAISERROR Кроме стандартных ошибок/событий, у Вас есть возможность
определять оповещения для ошибок пользователей приложений баз
данных, которые будут генерироваться оператором RAISERROR или
на стороне клиента или из хранимой процедуры. Оператор
RAISERROR возвращает сообщение об ошибке и устанавливает с
помощью системной функции @@error флаг регистрации ошибки.
Например: EXEC sp_admessage 50111, 16, 'Customer %d was deleted by %s', 'us_english', 'true' Метка %d подставит номер заказчика, а %s - имя пользователя, его удалившего из таблицы заказчиков. В результате, сгенерированная приложением ошибка 50111 будет записана в журнал NT, что породит определённое предварительно оповещение следующего содержания: Error: 50111, Severity: 16, State 1 Существует возможность вводить описание ошибки/события на Русском языке. Для этого, Русский язык должен быть выбран во время инсталляции сервера баз данных, а номер сообщения об ошибке не ниже 50100. Отслеживание событий С помощью механизма оповещений можно не только оперативно
получать информацию об ошибках/событиях сервера, но и
отслеживать изменения режимов и характеристик его работы.
Например, можно отслеживать те же самые параметры, которые
контролируются программой Windows NT Performance Monitor и
выдавать оповещения, если превышены заданные Вами пороговые
значения этих параметров. Таким образом, можно заведомо узнать
о том, что журнал транзакций вот-вот заполниться и
автоматически выполнить его резервирование. Причём совершенно
не обязательно, что бы Windows NT Performance Monitor был
запущен. Для отслеживания режимов функционирования ресурсов
SQL сервера, вы можете определить оповещения для следующих
объектов: Access Methods (методы доступа); Buffer Manager
(диспетчер буфера); Cache Manager (диспетчер кэша); Databases
(базы данных); Locks (блокировки); SQL Statistics (статистика
SQL). Существует маленький нюанс, связанный с задержкой во
времени между событием/ошибкой и генерацией оповещения. Для
того, что бы оповещение было создано и получено вовремя (т.е.
до того момента, когда событие может негативно повлиять на
работу сервера или приложения) существует возможность
изменения интервала задержки между ответами, или можно
подобрать такое пороговое значение, которое позволит оператору
или непосредственно оповещению выполнить необходимые действия
до достижения критического значения. Траблешутинг оповещений и заданий Поиск и устранение неполадок в работе заданий и оповещений стандартное руководство Микрософт предлагает проводить по следующей схеме: 1. Проверьте, запущен ли SQL Server Agent. Причину неполадок можно локализовать с помощью записей в
журнале приложений и системы NT, а также с помощью журналов
ошибок SQL Server Agent и SQL Server (папка MSSQL7\Log).
Следует только помнить, что при каждом запуске SQL сервера эти
журналы создаются заново. Кстати, можно создать оповещение,
которое после каждой записи ошибки в журнал SQL Server будет
посылать соответствующую команду net send. Многосерверные задания Если Ваша организация имеет несколько SQL серверов, может
оказаться удобным использовать задания, которые будут
выполняться на всех или избранных серверах под управлением
одного сервера. Такой сервер будет являться главным и будет не
только распределять задания между подчинёнными серверами
назначения, но и получать от них все события. Это даст Вам
возможность управлять заданиями нескольких серверов из одного
узла, объединив, таким образом, свои серверы в одну
логическую, структурную единицу. Правда, все SQL серверы
должны быть не младше седьмой версии. Как правило, главный
сервер располагается в головной конторе Вашей организации,
причём, работать он может только под NT. Выделить такой сервер
можно в специальном мастере, в составе Enterprise Manager или
с помощью системной хранимой процедуры sp_msx_enlist. При этом
в системную таблицу главного сервера systargetservers
добавляется соответствующая строка. Для каждого сервера
назначения мастер автоматически создаёт специальную учётную
запись с суффиксом _msx_probe с паролем SQL сервера, которой
предоставляются права для доступа к базе msdb главного
сервера, откуда они будут загружать задания. Пароль менять
нельзя, т.к. сервер назначения утратит предоставленные ему
права, и «лечится» это только удалением сервера назначения из
списка и повторного его там определения. Также, мастер создаёт
специального оператора главного сервера MSXOperator и такого
же оператора на каждом из серверов назначения. Кроме
указанного уже мастера, сервер назначения можно заводить с
помощью sp_msx_enlist, при этом, соответствующие записи
добавляются в таблицу msdb..systargetservers. У сервера
назначения может быть только один главный сервер, который
должен располагаться или в том же домене, или в домене,
имеющем с доменом главного сервера доверительные отношения. Вы
не сможете закрепить сервер назначения за другим главным
сервером, пока он не будет исключён из списка серверов
назначения ранее определённого главного сервера. Главный
сервер может быть использован серверами назначения и как
сервер переадресации событий, если его ресурсы в состоянии
справиться с такой повышенной нагрузкой. MS SQL Server имеет ещё одну замечательную возможность, это
публикация данных в виде HTML страниц. Причём, у Вас есть
возможность не только вывести на WEB страницу данные,
аналогичные выдаваемым оператором SELECT, но и форматировать
HTML страницу. Вам доступно: создание заголовков страницы;
указание времени последнего обновления; форматирование рамок,
шрифта и столбцов таблицы; задание максимального числа строк
таблицы; задание числа строк таблицы для страницы; размещение
гиперссылок и их описателей. Такие возможности вам
предоставляет WEB Assistant Wizard и системная хранимая
процедура sp_makewebtask. Принцип их работы достаточно прост.
В базе создаётся хранимая процедура, которая публикует данные
из этой базы. В таблице msdb..mswebtasks создаётся задание (
WEB Assistant Job), которое может единожды или по расписанию
размещать эти публикации, и работу которого будет обеспечивать
SQL Server Agent. Каждому заданию и процедуре присваивается
логическое имя, которое, по возможности, должно быть
достаточно описательным. Для использования указанного визарда
и системной процедуры у Вас должны быть права на выполнение
оператора SELECT и на исполнение CRAETE PROCEDURE в
публикуемой базе данных. Необходимо также помнить, что ни
визард ни sp_makewebtask не умеют определять, что ссылки,
базы, таблицы или процедуры, которые задействованы в
публикации, действительно существуют. Убедитесь в этом до их
запуска. Для того, что бы установить, какие данные будут
публиковаться, можно воспользоваться графическим интерфейсом
WEB Assistant Wizard, написать соответствующий запрос
средствами T-SQL и/или хранимых процедур, использовать
существующие хранимые процедуры. Кроме этого, сервер баз
данных должен получить информацию о том, куда он должен
выложить сформированную страницу, т.е. каталог на диске, в
сети или на FTP. По умолчанию всё выкладывается в MSSQL7\HTML.
Для того, что бы это было возможно, учётная запись, от имени
которой стартует MSSQLServer, должна иметь соответствующий
набор прав, для размещения файла в указанном каталоге. Если Вы
создаёте WEB страницу с помощью скрипта T-SQL, не забудьте его
сохранить. Это позволит Вам многократно его использовать.
Сформированная и размещённая в каталоге HTML страница будет
доступна для дальнейшего её ручного или автоматического
форматирования/редактирования. sp_makewebtask имя хр. процедуры, [полное имя HTML файла с указание пути] Удалит задание можно с помощью системной хранимой процедуры sp_dropwebtask, которая имеет такие же параметры, как и предыдущая процедура. Имена заданий и местоположения файлов можно получить из таблицы msdb..mswebtasks, расписание публикаций можно узнать из msdb..sysjobschedules, определения процедур и триггеров в таблице syscomments. Вопросы для повторения.ВОПРОС | |
Шпаргалка по 70-028 | Автоматизация в SQL Server 7.0 | Дальше » |