Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Логирование действий в текстовый файл в CLR Stored Procedure (Service Broker)  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
Приветствую всех.
База крутится на SQL Server 2008 R2
Есть система очереди, работает через Service Broker, в котором вызываются CLR хранимые процедуры.
Необходимо вести лог действий этих хранимых процедур в один общий текстовый файл, за каждый день отдельно.
Вести лог в таблицу базы данных, или в EventViewer не пойдет, нужно именно в текстовый файл, формат не важно: plain text, xml и т.д.
Параллельно работающих CLR хранимок может быть как минимум штук 20.

log4net не получается прикрутить к хранимке, использовал вариант
http://www.novicksoftware.com/coding-in-sql/vol3/cis-v3-n15-sqlclr-stored-procedure-using-external_access.htm:

System.IO.File.AppendAllText(TraceFileFullPath, TraceLine)

Но интересует параллельной записи в текстовый файл, если в одно и то же время запись в файл вызовут 2 процесса, то одна из них отвалится, верно?
И есть ли какие-либо альтернативные методы записи в файл.

Спасибо
13 окт 11, 09:11    [11431295]     Ответить | Цитировать Сообщить модератору
 Re: Логирование действий в текстовый файл в CLR Stored Procedure (Service Broker)  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
orunbek,

Алтернативный путь это запись в таблицу БД.
13 окт 11, 09:22    [11431328]     Ответить | Цитировать Сообщить модератору
 Re: Логирование действий в текстовый файл в CLR Stored Procedure (Service Broker)  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
Ken@t,

я это понял, поэтому и в теме написал, кроме записи в базу
13 окт 11, 09:39    [11431388]     Ответить | Цитировать Сообщить модератору
 Re: Логирование действий в текстовый файл в CLR Stored Procedure (Service Broker)  [new]
iljy
Member

Откуда:
Сообщений: 8711
orunbek,

есть несколько вариантов. Например если у вас файл открывается-пишется-закрывается, то можно проверять ошибку при открытии и повторять со случайной задержкой если Sharing Violation. Можно пойти более грамотным путем и использовать для разделения доступа классический мьютекс или семафор, но это вопрос уже не к скулю.
13 окт 11, 10:10    [11431533]     Ответить | Цитировать Сообщить модератору
 Re: Логирование действий в текстовый файл в CLR Stored Procedure (Service Broker)  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
iljy
orunbek,

есть несколько вариантов. Например если у вас файл открывается-пишется-закрывается, то можно проверять ошибку при открытии и повторять со случайной задержкой если Sharing Violation. Можно пойти более грамотным путем и использовать для разделения доступа классический мьютекс или семафор, но это вопрос уже не к скулю.

да, да и начинаем сразу же изобретать транзакционный механизм, обходить самонаписанные дедлоки и т.д .

Если уж так хочется в сиквентальный файл то SB натянуть для этого ( одна хранимка )
13 окт 11, 10:35    [11431705]     Ответить | Цитировать Сообщить модератору
 Re: Логирование действий в текстовый файл в CLR Stored Procedure (Service Broker)  [new]
iljy
Member

Откуда:
Сообщений: 8711
Ken@t
iljy
orunbek,

есть несколько вариантов. Например если у вас файл открывается-пишется-закрывается, то можно проверять ошибку при открытии и повторять со случайной задержкой если Sharing Violation. Можно пойти более грамотным путем и использовать для разделения доступа классический мьютекс или семафор, но это вопрос уже не к скулю.

да, да и начинаем сразу же изобретать транзакционный механизм, обходить самонаписанные дедлоки и т.д .

Если уж так хочется в сиквентальный файл то SB натянуть для этого ( одна хранимка )

Вы о чем? Есть совершенно классическая задач конкуренции за ресурсы, решаемая на процедурном языке, и зачем вы собрались натягивать SB, он-то чем провинился?
13 окт 11, 10:47    [11431796]     Ответить | Цитировать Сообщить модератору
 Re: Логирование действий в текстовый файл в CLR Stored Procedure (Service Broker)  [new]
mike909
Member

Откуда:
Сообщений: 662
orunbek
Приветствую всех.
База крутится на SQL Server 2008 R2
.....
И есть ли какие-либо альтернативные методы записи в файл.

Спасибо

В качестве поизвращаться: FILESTREAM Storage ?
13 окт 11, 12:15    [11432786]     Ответить | Цитировать Сообщить модератору
 Re: Логирование действий в текстовый файл в CLR Stored Procedure (Service Broker)  [new]
mike909
Member

Откуда:
Сообщений: 662
iljy
Ken@t
пропущено...

да, да и начинаем сразу же изобретать транзакционный механизм, обходить самонаписанные дедлоки и т.д .

Если уж так хочется в сиквентальный файл то SB натянуть для этого ( одна хранимка )

Вы о чем? Есть совершенно классическая задач конкуренции за ресурсы, решаемая на процедурном языке, и зачем вы собрались натягивать SB, он-то чем провинился?

Ну например так SB напрячь, заменив "print 'Типа запись в таблицу'" на запись в файл
13 окт 11, 12:23    [11432890]     Ответить | Цитировать Сообщить модератору
 Re: Логирование действий в текстовый файл в CLR Stored Procedure (Service Broker)  [new]
iljy
Member

Откуда:
Сообщений: 8711
mike909
Ну например так SB напрячь, заменив "print 'Типа запись в таблицу'" на запись в файл

Ага, вот только в TSQL нет стандартных механизмов записи в файл, придется делать через sp_OA. Я одного не понимаю: у ТС CLR-процедура, в файл пишут из нее, есть совершенно стандартная задача конкуренции за ресурсы и совершенно стандартный механизм доступа к системным объектам синхронизации, что мешает его использовать?? Откуда эта страсть что надо и что не надо тянуть на сервер??? SB хорошая вещь конечно, но это сродни мытью полов через капитальный ремонт - неудобно, долго и дорого.
13 окт 11, 12:34    [11433014]     Ответить | Цитировать Сообщить модератору
 Re: Логирование действий в текстовый файл в CLR Stored Procedure (Service Broker)  [new]
mike909
Member

Откуда:
Сообщений: 662
iljy
mike909
Ну например так SB напрячь, заменив "print 'Типа запись в таблицу'" на запись в файл

Ага, вот только в TSQL нет стандартных механизмов записи в файл, придется делать через sp_OA. Я одного не понимаю: у ТС CLR-процедура, в файл пишут из нее, есть совершенно стандартная задача конкуренции за ресурсы и совершенно стандартный механизм доступа к системным объектам синхронизации, что мешает его использовать?? Откуда эта страсть что надо и что не надо тянуть на сервер??? SB хорошая вещь конечно, но это сродни мытью полов через капитальный ремонт - неудобно, долго и дорого.

Ну хочется ТС_у поизвращаться - поможем ему
Одно только плохо - вдруг у ТС_а получится, да еще и заработает такой лисипед.
И достанется он (лисипед) какому-нибудь бедолаге-клиенту/админу ....
13 окт 11, 12:46    [11433149]     Ответить | Цитировать Сообщить модератору
 Re: Логирование действий в текстовый файл в CLR Stored Procedure (Service Broker)  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
iljy,

у меня есть много запросов, которые нужно обрабатывать, т.е. поступил запрос, должен вызваться код который его обработает и отметит что он его обработал
ну обычная система очереди
для обработки такой очереди я использовал Service broker
поднимал тему про эту проблему (Сервис. Многопоточная обработка)

и обработчики у меня CLR хранимки, в котором нужно протоколировать определенные действия
при это во внешний файл
в базу и так и так записывается
просто хотел узнать запись в файл при многопоточней работе
13 окт 11, 12:50    [11433181]     Ответить | Цитировать Сообщить модератору
 Re: Логирование действий в текстовый файл в CLR Stored Procedure (Service Broker)  [new]
iljy
Member

Откуда:
Сообщений: 8711
orunbek,

я вам и написал про запись в файл при многопоточной работе. Вы работает на уровне CLR, так используйте ее механизмы синхронизации, зачем пытаться левой ногой чесать за правым ухом?
http://msdn.microsoft.com/ru-ru/library/system.threading.mutex.aspx
13 окт 11, 12:52    [11433211]     Ответить | Цитировать Сообщить модератору
 Re: Логирование действий в текстовый файл в CLR Stored Procedure (Service Broker)  [new]
mike909
Member

Откуда:
Сообщений: 662
orunbek,

Вам уже по существу iljy ответил 11431533
13 окт 11, 12:53    [11433221]     Ответить | Цитировать Сообщить модератору
 Re: Логирование действий в текстовый файл в CLR Stored Procedure (Service Broker)  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
iljy, mike909,

ок, "убедила" как в Comedy Club говорили ;-)
попробую через мьютексы реализовать
спасибо
13 окт 11, 16:41    [11435684]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить