Можно ли отслеживать, что происходит с Access MDB (т. е. какие SQL-запросы выполняются для нее), так же, как вы используете SQL Profiler для SQL Server?
Мне нужны журналы фактических вызываемых запросов.
Можно ли отслеживать, что происходит с Access MDB (т. е. какие SQL-запросы выполняются для нее), так же, как вы используете SQL Profiler для SQL Server?
Мне нужны журналы фактических вызываемых запросов.
Ответ зависит от технологии, используемой клиентом, который использует 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 также на английском языке) также может быть вам полезен.
Имейте в виду, что файл на вашем жестком диске — это просто файл Windows. Таким образом, существует большая разница между серверной системой и простым текстовым файлом, или файлом Power Point, или, в данном случае, файлом mdb, просто находящимся на диске.
Однако вы можете заставить реактивный двигатель отображать оптимизацию запросов с помощью showplan.
Как это сделать описано здесь:
В приведенной выше статье также показано, как получить доступ к статистике чтения с реактивного диска, которую я также считаю чрезвычайно полезной для оптимизации.
Просто не забудьте отключить эту систему регистрации данных, когда вы ее не используете, поскольку она создает огромные файлы журналов…
Если вы обращаетесь к нему через ODBC, вы можете включить ведение журнала ODBC. Однако это сильно замедлит работу. И это не будет работать для любого другого интерфейса данных.
Другая идея заключается в использовании Jet/ACE в качестве связанного сервера в SQL Server, а затем с помощью SQL Profiler. Но это скажет вам SQL, который обработал SQL Server, а не то, что обработал Jet/ACE. Этого может быть достаточно для ваших целей, но я не думаю, что это будет хорошей диагностикой для Jet/ACE.
РЕДАКТИРОВАТЬ:
В комментарии оригинальный плакат предоставил эту довольно важную информацию:
Приложение, за которым я пытаюсь следить, скомпилировано и находится у клиента. Я пытаюсь отслеживать, какие запросы он пытается использовать для MDB. Я не могу изменить приложение. Я пытаюсь сделать то, что SQL Profiler сделал бы для SQL Server.
В этом случае, я думаю, вы могли бы сделать это:
переименуйте исходный MDB во что-то другое.
используйте связанный сервер SQL Server для подключения к переименованному файлу MDB.
создайте новую MDB с именем исходной MDB и свяжите ее с SQL Server с помощью ODBC.
В результате получится файл MDB, в котором есть те же таблицы, что и в оригинале, но они не локальные, а ссылки на SQL Server. В этом случае весь доступ будет осуществляться через SQL Server и может быть просмотрен с помощью SQL Profiler.
Я понятия не имею, как это повлияет на производительность и нарушит ли это какой-либо поиск данных в исходном приложении. Если это приложение использует наборы записей табличного типа или SEEK, тогда да, оно сломается. Но это единственный способ, которым я вижу, чтобы получить регистрацию.
Неудивительно, что для Jet/ACE нет регистрации, учитывая, что нет единого серверного процесса, управляющего доступом к хранилищу данных.
вы можете написать свой собственный профилировщик на основе объекта «транзакция», который будет централизовать все инструкции, отправляемые в базу данных. В конечном итоге вы окажетесь где-то с методом «transaction.execute» и таблицей транзакций в вашей базе данных доступа. Затем эту таблицу можно использовать для сбора инструкций по транзакции, времени начала, времени окончания, отправки пользователем инструкции и т. д.
Я бы предложил увеличить размер таблиц до SQL Server. Существует инструмент из группы SQL Server, который лучше, чем мастер увеличения размера, входящий в состав Access. Помощник по миграции SQL Server для Access (SSMA Access)
См. также мою страницу Случайные мысли об увеличении размера SQL Server из советов Microsoft Access.