SQL Server 2000. Недокументированная системная хранимая процедура sp_readerrorlog

ПУБЛИКАЦИИ  

По материалам статьи Narayana Vyas Kondreddi на сайте vyaskn.tripod.com: The undocumented nature of sp_readerrorlog in SQL Server 2000

Известно, что системная хранимая процедура sp_readerrorlog может использоваться для чтения файла журнала регистрации ошибок SQL Server в T-SQL запросах. Если Вы вызываете sp_readerrorlog без параметров, будет получено отображение текущего файла. Вы можете просматривать и предыдущие файлы ошибок, вводя их номер в качестве первого параметра процедуры. Вроде бы всё ясно и понятно… Однако, в один прекрасный вечер, автор статьи заметил отправленное в телеконференцию Microsoft SQL Server сообщение, в котором задавался вопрос, что означают второй, третий и четвертый параметр sp_readerrorlog? Используя sp_helptext, Вы можете увидеть, что sp_readerrorlog принимает четыре параметра, но нет никакой информации относительно последних трех параметров. Этот вопрос остался без ответа, точнее, инженер технической поддержки Microsoft ответил следующее: "IT is undocumented". Этот ответ пробудил у автора статьи любопытство, и он проделал несколько экспериментов с sp_readerrorlog, подставляя ему различные варианты параметров, анализируя результаты и регулируя параметры. В основном, это были исследования методом проб и ошибок. Это не было сложным исследованием, и после тридцати минут экспериментов, автор выяснили эти "Undocumented nature" для sp_readerrorlog.
Автор убедился, что sp_readerrorlog может использоваться для чтения любого файл на жестком диске SQL Server, и не обязательно файла регистрации ошибок, и Вы сможете даже делать поиск по ключевым словам в этом файле. Вы можете заставить sp_readerrorlog читать другие файлы, определяя:

- первый параметр, как non-zero;
- имя файла, как второй параметр;
- номер строки в файле, как третий параметр;
- строку поиска, для поиска по указанной строке, как четвертый параметр.

На основании представленных выше заключений, ниже представляются некоторые примеры недокументированного поведения:

1. Чтение файла, не являющегося файлом регистрации ошибок:

EXEC sp_readerrorlog 1, 'C:\Test.txt'

Для работоспособности этого примера, первый параметр должен быть числом не равным 0 и в диапазоне значений между 1 и 99. Также, второй параметр должен быть именем файла с полным путём к нему.

2. Чтение определенной строки из файла:

EXEC sp_readerrorlog 1, 'C:\Test.txt', 4

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

3. Чтение определенной строки только, если она содержит указанное ключевое слово:

EXEC sp_readerrorlog 1, 'C:\Test.txt', 4, 'Vyas'

Этот пример выводит четвёртую строку файла 'C:\Test.txt', только если она содержит слово 'Vyas'. Автор не думает, что четвертый параметр может принимать знаки подстановки.

Автор проверял поведение sp_readerrorlog на SQL Server 2000 с SP1, но не имел возможности воспроизвести его на SQL Server 7.0. И ещё одно ограничение, для такого использования sp_readerrorlog Вы должны быть членом роли sysadmin или securityadmin. Также, автор предостерегает Вас от включения этой не документированной возможности в свои приложения, но отмечает, что для повседневной работы администратора баз данных эта процедура может оказаться полезной. Не исключена вероятность того, что sp_readerrorlog не будет работать так, как описано в этой статье после установки следующего service pack или в следующей версии SQL Server.


Перевод: Александра Гладченко  2002г.

ПУБЛИКАЦИИ

Скачать электронную карту Ангарска бесплатно
Сайт управляется системой uCoz