Можно ли отслеживать и регистрировать реальные запросы, сделанные к Access MDB? - PullRequest
18 голосов
/ 29 апреля 2010

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

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

Ответы [ 5 ]

19 голосов
/ 03 мая 2010

Ответ зависит от технологии, используемой клиентом, использующим 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 также на английском языке) также может быть полезен для вас.

2 голосов
/ 30 апреля 2010

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

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

EDIT:

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

Приложение, которое я пытаюсь контролировать составлен и у клиента предпосылки. Я пытаюсь контролировать что запросы, которые он пытается против 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 нет ведения журнала, учитывая, что нет единого серверного процесса, управляющего доступом к хранилищу данных.

2 голосов
/ 29 апреля 2010

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

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

Как это сделать, объясняется здесь:

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

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

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

1 голос
/ 02 мая 2010

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

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

1 голос
/ 30 апреля 2010

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

...