Библиотека внешних процедур (namssql.dll) |
Библиотека реализует внешние хранимые процедуры MS SQL сервера, используемые в триггерах таблиц БД и для управления сервером. Библиотека загружается процессом MS SQL сервера и должна быть расположена в путях, доступных ему. Инсталлятор базы данных устанавливает библиотеку в каталог с исполняемым модулем MS SQL сервера.
Внешние процедуры для управления вспомогательной службой (NAPServer):
na_forcefreedb <dbname> - освобождает внутренние структуры вспомогательной службы NAPServer, связанные с БД <dbname> и закрывает соединение с ней;
na_forcefreealldb - освобождает внутренние структуры вспомогательной службы NAPServer, связанные со всеми открытыми БД и закрывает соединение с ними;
na_freediedusers - освобождает внутренние структуры, связанные с пользователями, spid которых в MS SQL Server нет.
Посредством библиотеки namssql.dll механизм, обеспечивающий работу триггеров с множественными блокировками, осуществляет пересылку информации о заблокированных записях из вспомогательной службы Галактики NAPServer в MS SQL Server.
Буфер обмена блокировками ограничен и по умолчанию равен 20.
Поэтому корректная работа может выполняться только до тех пор, пока общее количество одновременно заблокированных записей в одной таблице не превысит 20.
В случае превышения заданного размера буфера обмена блокировками механизм обмена не сможет полностью передать в триггер, анализирующий блокировки, информацию о блокировках, триггер откатит обрабатываемую транзакцию и выдаст ошибку с кодом 50014:
Эта ошибка будет получена процессом, вызвавшим транзакцию. В частности драйвер ms70drv.dll запишет её в журнал ms70drv.log.
Также данная ошибка будет зафиксирована в журнале MS SQL Server. Настройка оповещения администратора при возникновении такой ошибки на сервере выполняется согласно документации на MS SQL Server, например, см. Alerts в SQL Server Agent.
При возникновении такой ситуации размер буфера блокировок необходимо увеличить.
Это выполняется с помощью внешней хранимой процедуры na_lockbuffersize.
Если вызвать её без параметров, будет возвращён текущий размер буфера:
Для установки значения размера буфера, его необходимо передать процедуре в качестве параметра:
na_lockbuffersize <значение>
Размер буфера может быть в пределах от 1 до 65535. Если задаваемый размер выходит за диапазон, или допущена другая ошибка в параметре, то выдается подсказка:
Установленное значение действительно в пределах текущей сессии библиотеки namssql.dll, поэтому если выгрузить библиотеку (dbcc namssql(free)) или перегрузить MS SQL Server, то размер буфера обмена блокировками вновь примет значение по умолчанию 20.