Можно ли отслеживать и регистрировать фактические запросы к базе данных Access?

Можно ли отслеживать, что происходит с Access MDB (т. е. какие SQL-запросы выполняются для нее), так же, как вы используете SQL Profiler для SQL Server?

Мне нужны журналы фактических вызываемых запросов.


person CJ7    schedule 29.04.2010    source источник
comment
Какие технологии доступа (DAO, OLEDB, ODBC,...) вы используете/можете использовать для запросов к базе данных?   -  person mdma    schedule 03.05.2010
comment
ДАО и ОЛЕДБ. Но мне нужно регистрировать запросы, сделанные скомпилированным кодом.   -  person CJ7    schedule 03.05.2010
comment
Я не верю, что в этих обстоятельствах есть какой-либо ответ на ваш вопрос. Почему вы хотите следить за всем? Вы рассматривали возможность написания подпрограммы-оболочки для выполнения всего вашего SQL и записи файла журнала?   -  person David-W-Fenton    schedule 04.05.2010
comment
У меня есть скомпилированное приложение в каком-то месте, и мне нужно отслеживать, какие попытки SQL выполняются.   -  person CJ7    schedule 04.05.2010
comment
Что насчет моего второго вопроса? Вы можете написать функцию-оболочку для выполнения ваших операторов SQL DML и записи их в файл журнала. Аналогично для SELECT, выполняемых в коде. Для источников записей форм/отчетов вам нужно будет записывать в журнал, когда формы/отчеты открываются, и когда форма запрашивается/фильтруется (отчеты могут быть отфильтрованы в A2007, поэтому вам нужно будет использовать событие фильтра там тоже). Но опять же, зачем вам нужно отслеживать операторы SQL? Вы пытаетесь решить проблему с производительностью?   -  person David-W-Fenton    schedule 07.05.2010
comment
Приложение, за которым я пытаюсь следить, скомпилировано и находится у клиента. Я пытаюсь отслеживать, какие запросы он пытается использовать для MDB. Я не могу изменить приложение. Я пытаюсь сделать то, что SQL Profiler сделал бы для SQL Server.   -  person CJ7    schedule 07.05.2010
comment
Какую версию Access и OLE DB вы используете?   -  person Oleg    schedule 07.05.2010


Ответы (5)


Ответ зависит от технологии, используемой клиентом, который использует MDB. Существуют различные параметры трассировки, которые можно настроить в HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\4.0\Engines\ODBC http://office.microsoft.com/en-us/access/HP010321641033.aspx. Если вы используете OLEDB для доступа к MDB из SQL Server, вы можете использовать DBCC TRACEON (см. http://msdn.microsoft.com/en-us/library/ms187329.aspx). Я могу продолжить, но прежде всего вы должны точно определить, какой интерфейс вы используете для доступа к MDB.

MDB - это файл без каких-либо активных компонентов, поэтому трассировка может производить не сам MDB, а только интерфейс БД.

ОБНОВЛЕНО: поскольку используется DAO (Jet Engine) и OLE DB из VB, я рекомендую вам создать ключ реестра JETSHOWPLAN со значением «ON» в HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\JET\4.0\Engines\Debug ( Отладочный подраздел, который вы должны создать). Этот ключ описан, например, в https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-5064388.html, http://msdn.microsoft.com/en-us/library/aa188211%28office.10%29.aspx и соответствует http://support.microsoft.com/kb/252883/en разрешить трассировку запросов OLE DB. Если этого вывода вам будет недостаточно, вы можете дополнительно использовать TraceSQLMode и TraceODBCAPI из HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\4.0\Engines\ODBC. В моей практике JETSHOWPLAN дает мне идеальную информацию. См. также SHOWPLAN.

ОБНОВЛЕНО 2: для более поздней версии Access (например, Access 2007) используйте ключ, например HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\Engines. Инструмент ShowplanCapturer (см. http://www.mosstools.de/index.php?option=com_content&view=article&id=54&Item%20%20id=57, чтобы загрузить http://www.mosstools.de/download/showplan_v9.zip также на английском языке) также может быть вам полезен.

person Oleg    schedule 03.05.2010
comment
Я использую DAO и OLEDB для доступа к MDB из vb6 и .net. - person CJ7; 04.05.2010
comment
Я использую OLEDB для доступа к .mdb из .NET, но SQL Server не участвует. - person CJ7; 07.05.2010
comment
Соответствует support.microsoft.com/kb/252883/en OLE DB поддерживает параметр JETSHOWPLAN , потому что эта реализация использовала JET (DAO) для доступа к MDB. Это может быть изменено в следующей версии поставщика OLE DB. Чтобы убедиться, что вы делаете настройку в реестре в правильном месте, я рекомендую вам отслеживать доступ к OLE DB относительно Process Monitor (см. technet.microsoft.com/en-us/sysinternals/bb896645.aspx). В протоколе трассировки Process Monitor найдите строку showplan в трассировке доступа к реестру. Если OLE DB попытается прочитать настройки showplan в реестре из другого места, вы увидите. - person Oleg; 07.05.2010
comment
+1 за то, что сказали нам, что есть английская версия. Заставляет меня задаться вопросом, сколько хороших инструментов существует, но написанных на немецком языке. - person leeand00; 14.11.2014

Имейте в виду, что файл на вашем жестком диске — это просто файл Windows. Таким образом, существует большая разница между серверной системой и простым текстовым файлом, или файлом Power Point, или, в данном случае, файлом mdb, просто находящимся на диске.

Однако вы можете заставить реактивный двигатель отображать оптимизацию запросов с помощью showplan.

Как это сделать описано здесь:

http://www.databasejournal.com/features/msaccess/article.php/3658041/Queries-On-Steroids--Part-IV.htm

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

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

person Albert D. Kallal    schedule 29.04.2010
comment
Showplan.out, кажется, не дает мне журнал фактических запросов. - person CJ7; 30.04.2010
comment
Showplan не дает журнал запросов (извините, если это вводит в заблуждение). Show plan регистрирует планы запросов, созданные для каждого запроса, и это то, что вам нужно для настройки производительности. Насколько я знаю, для каждого запроса нет фактического ведения журнала. Помните, что вы можете использовать объектную модель dao для получения данных без sql. Таким образом, регистрируются только планы, используемые для извлечения данных, а не sql. Я предполагаю, что sql не регистрируется, так как вы не ограничены использованием sql для получения данных. Как уже упоминалось, JET - это не служба, а всего лишь файловая внутрипроцессная библиотека кода. - person Albert D. Kallal; 30.04.2010

Если вы обращаетесь к нему через ODBC, вы можете включить ведение журнала ODBC. Однако это сильно замедлит работу. И это не будет работать для любого другого интерфейса данных.

Другая идея заключается в использовании Jet/ACE в качестве связанного сервера в SQL Server, а затем с помощью SQL Profiler. Но это скажет вам SQL, который обработал SQL Server, а не то, что обработал Jet/ACE. Этого может быть достаточно для ваших целей, но я не думаю, что это будет хорошей диагностикой для Jet/ACE.

РЕДАКТИРОВАТЬ:

В комментарии оригинальный плакат предоставил эту довольно важную информацию:

Приложение, за которым я пытаюсь следить, скомпилировано и находится у клиента. Я пытаюсь отслеживать, какие запросы он пытается использовать для MDB. Я не могу изменить приложение. Я пытаюсь сделать то, что SQL Profiler сделал бы для SQL Server.

В этом случае, я думаю, вы могли бы сделать это:

  1. переименуйте исходный MDB во что-то другое.

  2. используйте связанный сервер SQL Server для подключения к переименованному файлу MDB.

  3. создайте новую MDB с именем исходной MDB и свяжите ее с SQL Server с помощью ODBC.

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

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

Неудивительно, что для Jet/ACE нет регистрации, учитывая, что нет единого серверного процесса, управляющего доступом к хранилищу данных.

person David-W-Fenton    schedule 30.04.2010
comment
Я не знаю, доступно ли какое-либо ведение журнала с OLEDB. Если вы обнаружите, что есть, пожалуйста, напишите об этом. - person David-W-Fenton; 01.05.2010

вы можете написать свой собственный профилировщик на основе объекта «транзакция», который будет централизовать все инструкции, отправляемые в базу данных. В конечном итоге вы окажетесь где-то с методом «transaction.execute» и таблицей транзакций в вашей базе данных доступа. Затем эту таблицу можно использовать для сбора инструкций по транзакции, времени начала, времени окончания, отправки пользователем инструкции и т. д.

person Philippe Grondier    schedule 30.04.2010
comment
Так что насчет foiks, которые ссылаются на файл BE MDB непосредственно из своей собственной базы данных и/или напрямую открывают базу данных? Или взять его домой вечером и заменить утром, прежде чем кто-нибудь выйдет на работу? - person Tony Toews; 05.05.2010
comment
Я не заметил, что цель состояла в том, чтобы использовать пуленепробиваемый всепогодный монитор базы данных с учетом землетрясений. Я думал, что мы только что говорили о наилучшем способе отслеживания того, что происходит со стандартным файлом mdb, который обновляется обычными пользователями через стандартный пользовательский интерфейс, когда стандартный разработчик пытается собрать некоторые стандартные данные для улучшения своей работы. .. - person Philippe Grondier; 06.05.2010

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

См. также мою страницу Случайные мысли об увеличении размера SQL Server из советов Microsoft Access.

person Tony Toews    schedule 02.05.2010
comment
Почему увеличение размера может быть ответом на вопрос? - person David-W-Fenton; 03.05.2010
comment
Дэвид, почему бы и нет? Конечно, вы можете регистрировать запросы в SQL Server. - person Tony Toews; 04.05.2010
comment
Вы, кажется, перепутали вопрос с проблемой. Регистрация не является проблемой — регистрация — это всего лишь возможный механизм решения проблемы, которая остается невыявленной. - person David-W-Fenton; 07.05.2010
comment
Это потенциально может быть полезно в том случае, если запросы Access хорошо передаются, а интерфейс приложения остается неизменным. Затем изменение строки подключения скомпилированного приложения для временного использования SQL Server и выполнение некоторых трассировок может быть хорошим подходом. Я понимаю, что проблема заключается в том, чтобы понять, что на самом деле делает скомпилированное приложение. - person Martin Smith; 07.05.2010
comment
Интересно, можете ли вы создать связанный сервер в SQL Server с вашим внутренним файлом данных, а затем переключить связанные таблицы на SQL Server. Это даст вам то же ведение журнала, что и при увеличении размера, но не потребует, чтобы вы на самом деле беспокоились об увеличении размера. - person David-W-Fenton; 07.05.2010