Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Расширенные хранимые процедуры 
:(
    Опции темы
Egoryan
Дата 8.9.2009, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 22.7.2006

Репутация: нет
Всего: нет



Доброго времени суток,товарищи!

Возникла потребность изучить расширенные хранимые процедуры SQL Server 2000 ( пишу на C++ ) и все вроде шло нормально до одного момента. Необходимо гарантировать,что моя расширенная хранимая процедура могла отслеживать запуск SQL Server'a и,соответсвенно, отслеживать,когда SQL Server завершает свою работу. Есть ли какие-нибудь механизмы отслеживающие это?

Иначе говоря : 
  • "Когда клиентское приложение вызывает расширенную хранимую процедуру, запрос передаётся в TDS формате через сетевую библиотеку Net-Libraries и Open Data Service ядру MS SQL SERVER.
    SQL Sever находит dll библиотеку ассоциированную с именем расширенной хранимой процедуры и загружает её в свой контекст, если она не была загружена туда ранее, и вызывает расширенную хранимую процедуру, реализованную как функцию внутри dll."

    То есть DLL загружается только при вызове расширенной хранимой процедуры? Не при запуске SQL Server'а?
  • После того, как dll библиотека с расширенными хранимыми процедурами была загружена в память, она остаётся там до тех пор, пока SQL Server не будет остановлен, или пока администратор не выгрузит её принудительно, используя команду :
    DBCC DLL_name (FREE).

    Можно ли каким-либо образом отследить остановку SQL Server'а или выполнение команды DBCC DLL_name (FREE)?

Заранее спасибо!

Это сообщение отредактировал(а) Egoryan - 8.9.2009, 11:51
PM MAIL   Вверх
Zioma
Дата 8.9.2009, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 22.8.2007

Репутация: 5
Всего: 5



Так ведь ты не запустишь процедуру без запущенного сиквела, и, соответственно, она завершиться  при остановке сервера.
PM MAIL   Вверх
Egoryan
Дата 8.9.2009, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 22.7.2006

Репутация: нет
Всего: нет



Цитата(Zioma @ 8.9.2009,  11:45)
Так ведь ты не запустишь процедуру без запущенного сиквела, и, соответственно, она завершиться  при остановке сервера.

Вопрос в том как отследить это все.
PM MAIL   Вверх
kobra
Дата 8.9.2009, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 5
Всего: 9



Цитата(Egoryan @  8.9.2009,  11:40 Найти цитируемый пост)
Необходимо гарантировать,что моя расширенная хранимая процедура могла отслеживать запуск SQL Server'a и,соответсвенно, отслеживать,когда SQL Server завершает свою работу.

если задача в этом, то информация хранится в логе винды, так что отслеживать не нужно, уже отслеживается.
PM MAIL   Вверх
Egoryan
Дата 8.9.2009, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 22.7.2006

Репутация: нет
Всего: нет



Цитата(kobra @ 8.9.2009,  12:31)
Цитата(Egoryan @  8.9.2009,  11:40 Найти цитируемый пост)
Необходимо гарантировать,что моя расширенная хранимая процедура могла отслеживать запуск SQL Server'a и,соответсвенно, отслеживать,когда SQL Server завершает свою работу.

если задача в этом, то информация хранится в логе винды, так что отслеживать не нужно, уже отслеживается.

Нужно отследить из самой dll,когда SQL Server запускается/закрывается.
PM MAIL   Вверх
kobra
Дата 9.9.2009, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 5
Всего: 9



Цитата(Egoryan @  8.9.2009,  15:02 Найти цитируемый пост)
Нужно отследить из самой dll,когда SQL Server запускается/закрывается. 

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


PM MAIL   Вверх
Egoryan
Дата 9.9.2009, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 22.7.2006

Репутация: нет
Всего: нет



Цитата(kobra @ 9.9.2009,  10:34)
Цитата(Egoryan @  8.9.2009,  15:02 Найти цитируемый пост)
Нужно отследить из самой dll,когда SQL Server запускается/закрывается. 

SQL Server перед остановкой закрывает все процесы (значит и твою хранимку), а потом сам останавливается.  значит и останоку SQL Server-а отследить не сможет.

То есть остановку чисто теоретически отследить можно. Через DllMain PROCESS_DETACH.
PM MAIL   Вверх
kobra
Дата 10.9.2009, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 5
Всего: 9



Цитата(Egoryan @  9.9.2009,  14:42 Найти цитируемый пост)
То есть остановку чисто теоретически отследить можно. Через DllMain PROCESS_DETACH. 

ну, с некоторой вероятностью, да.
PM MAIL   Вверх
Egoryan
Дата 10.9.2009, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 22.7.2006

Репутация: нет
Всего: нет



Цитата(kobra @ 10.9.2009,  09:55)
Цитата(Egoryan @  9.9.2009,  14:42 Найти цитируемый пост)
То есть остановку чисто теоретически отследить можно. Через DllMain PROCESS_DETACH. 

ну, с некоторой вероятностью, да.

Что значит "с некоторой вероятностью"? MS SQL Server на нечеткой логике построен чтоли?


Я сделал простенькую dll'ку,которая в лог пишет,что происходит в DllMain'е и получились любопытные результаты. При первом выполнении хранимки вызывается PROCESS_ATTACH,что логично ( dll загружается ). В дальнейшем при выполнении той же хранимки никакого вызова DllMain'а нет. Если же остановить SQL Server,то возникает сначала THREAD_ATTACH ,потом 3 THREAD_DETACH и затем только PROCESS_DETACH. Интересно,чем обусловлено появление 3-х  THREAD_DETACH ?


PM MAIL   Вверх
kobra
Дата 11.9.2009, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 5
Всего: 9



Цитата(Egoryan @  10.9.2009,  14:21 Найти цитируемый пост)
MS SQL Server на нечеткой логике построен чтоли?

нет конечно, но процес может остановить админ, может зависнуть, мало ли что.
Цитата(Egoryan @  10.9.2009,  14:21 Найти цитируемый пост)
Интересно,чем обусловлено появление 3-х  THREAD_DETACH ?

интересно... 
PM MAIL   Вверх
Egoryan
Дата 11.9.2009, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 22.7.2006

Репутация: нет
Всего: нет



Если процесс останавливает админ, то приходит уведомление PROCESS_DETACH,что логично -.-
PM MAIL   Вверх
kobra
Дата 13.9.2009, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 5
Всего: 9



Цитата(Egoryan @  11.9.2009,  14:23 Найти цитируемый пост)
что логично -.- 

логично, спору нет, но главное, насколко такая ситуация соответствует задаче. 
удачи
PM MAIL   Вверх
SharedNoob
Дата 14.9.2009, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 25.6.2007
Где: UA

Репутация: 2
Всего: 5



Код

USE master;
exec sp_addextendedproc 'имя_процедуры', 'длл.dll'

Помоему так подхватывает любую длл при старте сервера к бд мастер. оттуда ее и использовать по идее можно.
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0985 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.