Обнаружение SqlServr.exe операции WriteFile в C # - PullRequest
1 голос
/ 05 ноября 2008

Существует требование, что нам нужно будет поддерживать запросы к локальной базе данных SQL Server для новых данных при обновлении базы данных. Поскольку это внешние базы данных SQL Server, мы не можем использовать службы уведомлений SQL Server и не можем вносить какие-либо изменения в базу данных.

Моя основная идея - следить за тем, чтобы данные записывались в базу данных для запуска запроса (вместо опроса через заданные интервалы). Тем не менее, мне нелегко пытаться выяснить, как я могу получить вызов WriteFile от процесса SqlServr.exe (что можно отслеживать с помощью таких инструментов, как Process Monitor компании Sysinternals). Может кто-нибудь указать мне, какие функции Win32 могут помочь мне с этим?

Ответы [ 3 ]

1 голос
/ 05 ноября 2008

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

К счастью, вам это не нужно, поскольку файловая система предоставляет вам именно то, что вам нужно.

Класс System.IO.FileSystemWatcher позволяет отслеживать файл или каталог на предмет активности, вызывая события, когда происходят изменения. Вы должны быть в состоянии получить прототип и запустить его с этим довольно быстро, чтобы (не) доказать жизнеспособность вашего подхода.

Однако , я думаю, вы найдете этот подход менее эффективным, чем простой опрос - так как я подозреваю, что вы в конечном итоге будете запускать собственный процесс обновления довольно часто.

0 голосов
/ 05 ноября 2008

Как уже упоминалось в других ответах, существует также некоторая внутренняя служебная работа, выполняемая SQL, которая может инициировать ваш WriteFile или другой процесс мониторинга низкого уровня.

Можно ли написать базу данных-обертку, к которой вы подключаетесь, сохранить все изменения или отметку времени последнего изменения. И отправляет их в реальное хранилище. Я думаю, что вы могли бы сделать что-то подобное с представлениями. Производительность не будет оптимальной.

0 голосов
/ 05 ноября 2008

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

Возможной альтернативой может быть просмотр пространства имен Microsoft.SqlServer.Management.Trace в качестве механизма подключения к SQL Server и поиска конкретных событий, на которые вы хотите реагировать. Однако я буду предупрежден о влиянии на производительность, которое это может вызвать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...