Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Вопросы и ответы по MS SQL Server" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
MS SQL Server - дело тонкое...
#090<< #091 |
СОДЕРЖАНИЕ
СОВЕТЫ СОВЕТЫ
Сервис событий в SQL-сервере Погружение в проблематику Достаточно нередко у разработчиков клиент-серверных приложений возникает необходимость организовать некий механизм, позволяющий по событию на SQL-сервере уведомить того или иного клиента. Ещё чаще это является розово-голубой мечтой заказчика, чтобы разработчик реализовал такой механизм. Например, при превышении лимитов отгрузки какому-либо потребителю, должны быть немедленно уведомлены менеджеры, работающие с этим потребителем. Некоторые заказчики систем требуют (а мечтают об этом все заказчики без исключения), чтобы при изменении каких-то данных, у остальных пользователей системы эта информация автоматически обновлялась, причем незамедлительно. Здесь не будет обсуждаться целесообразность такого требования (оно имеет много оснований для критики), здесь будут обсуждаться только пути решения. Microsoft SQL-сервер имеет штатное средство для организаций уведомлений - alerts, но это средство имеет весьма ограниченное применение, по большому счету не дающее возможность создать на его основе гарантированно работающий механизм. И вот почему: Связь с клиентской программой может быть осуществлена путем посылки e-mail или эмуляцией посылки "net send". И то, и другое неудобно для получения уведомления. Средство e-mail неудобно по причинам:
a) нет гарантии доставки, почта может теряться. Посылка путем "net send" неудобна по следующим причинам:
a) нет гарантии доставки, так как это организовано через средство mailslot, не имеющее такой гарантии. И в целом средство alerts неудобно необходимостью регистрации каждого клиента в качестве оператора и соответствующей настройкой. Т.е. для простейших случаев alerts применить можно. Но для большинства случаев оно неприменимо. Известные реализации и концепции Широкой общественности известны несколько вариантов реализации механизма уведомления сервером клиента. Это:
1. Создание объекта (Extended Stored Procedure или ActiveX), посредством которого SQL-сервер уведомляет
клиента через сокеты TCP/IP. При этом на клиенте организована прослушка, т.е. клиентская программа стала
сервером TCP/IP.
2. Создание объекта (Extended Stored Procedure или ActiveX), посредством которого SQL-сервер уведомляет
клиента через named pipes или mailslots. При этом на клиенте организована прослушка того или другого. 3. Периодический опрос SQL-сервера клиентом (периодическое чтение специальной таблички евентов). Это очень простой путь, но, тем не менее, свободный от большинства вышеперечисленных недостатков. К сожалению, этот метод имеет свои специфичные 2 недостатка: a) получение уведомления может быть задержано на величину таймаута опроса и b) при маленьком таймауте возникает существенный трафик. Тем не менее, при небольшом кол-ве сессий, этот метод вполне пригоден и незаслуженно обойден вниманием. Предлагаемый вариант решения
Вашему вниманию предлагается вариант решения проблемы, свободный от вышеперечисленных (всех
вышеперечисленных!) проблем, но вместе с тем достаточно простой. Идея такова: на сервер помещается
некий двоичный объект, который sql-сервер может вызывать (а это может быть только Extended Stored
Procedure или ActiveX-объект), имеющий два невзаимосвязанных метода. Готовое решение Решение состоит из ActiveX-объекта в виде файла AlgoEvt.dll и двух хранимых процедур spWaitForEvent и spRaiseEvent. Перед использованием этот файл надо поместить на сервер и зарегистрировать ActiveX-объект с помощью системной утилиты regsvr32.exe. Дальше вся работа будет производиться через хранимые процедуры. В готовом решении реализована несколько бОльшая функциональность, чем в описанной концепции. Кроме самого факта события, можно передать также произвольную информацию в виде строки в размере до 250 символов. Каждая процедура имеет два параметра. Первая - это уникальный идентификатор-адрес, о котором говорилось выше, а второй параметр - дополнительная передающаяся информация. spWaitForEvent надо вызвать с клиента из отдельного потока (приоритет потока можно выбрать самый низкий). При получении события, процедуру надо перезапустить. Тайм-аут исполнения запроса надо задать бесконечный. Решение здесь: SQLEventsService.zip Преимущества решения
1. Независимость от сетевого протокола и настроек сети. Был бы коннект к sql-серверу.
Нумерация записей в запросе
Время от времени на форуме Microsoft SQL Server возникает вопрос по нумерации записей в запросе. На досуге я написал DLL, которая решает этот вопрос без применения временных таблиц. В представленном ниже ZIP-архиве находиться два файла Counter.dll и Counter.sql. Всё описание и руководство к использованию содержит файл Counter.sql, вместе со скриптом.
Скачать файл можно тут: Counter.zip
Настройка Proxy Server для поддержки репликации SQL Server 7.0 через Internet Эта статья посвящена совместному использованию Microsoft SQL Server 7.0 и Microsoft Proxy Server для обеспечения поддержки репликации через Internet и защиты баз данных. Репликация может осуществляться между базами данных, находящимися на одном сервере или на разных серверах, соединение между которыми осуществляется через LAN, WAN или Internet. Используя связку SQL Server и Microsoft Proxy Server, можно реплицировать данные через Internet. Для этого необходимо иметь возможность внесения изменений в конфигурацию топологии сети, понимать методы защиты сети и СУБД, а также, иметь возможность настройки Proxy Server и SQL Server. Конфигурация топологии сети Внесение изменений в конфигурацию топологии сети - это первое, что необходимо рассмотреть, для обеспечения взаимодействия SQL Server и Proxy Server. Proxy Server обеспечивает прямое подключение через Internet к внутреннему серверу, на котором запущен SQL Server в роли издателя. Этот SQL Server обеспечивает в репликации исполнение ролей издателя (publisher) и дистрибутора (distributor). Второй SQL Server исполняет роль подписчика (subscriber), в нашем примере, это pull subscriber, а репликация между ними организована через Internet.
Рисунок 1. Топология сети
Требования к системному программному обеспечению, необходимому для организации работы Proxy сервера:
Требования к системному программному обеспечению, необходимому для обеспечения работы MS SQL Server:
Proxy сервер должен быть настроен как multihomed сервер, что предотвратит доступ неавторизованных
пользователей из Internet к внутренним ресурсам сети. Multihomed Proxy сервер имеет две сетевые платы (NIC),
которые обеспечивают безопасность подключений в гомогенных сетях. Первый NIC называется внешним Proxy
интерфейсом и изолирует пользователей Internet от внутренней сети. Внутренняя сеть имеет доступ к Proxy
серверу через второй NIC, называемый внутренним Proxy интерфейсом. Соединение может быть установлено
между внутренним и внешним Proxy интерфейсом, когда внутреннему пользователю предоставлено
соответствующее разрешение Proxy сервером. Использование подсетей Не определяйте заданный по умолчанию шлюз для внутренних подсетей, а также для работы SQL или Proxy серверов. Заданный по умолчанию шлюз внешнего интерфейса должен указать на IP адрес соответствующего маршрутизатора. ПРОДОЛЖЕНИЕ СЛЕДУЕТ ПОЛЕЗНОСТИ Обновлён SQL Server 2000 Books Online Выложена для загрузки обновлённая документация по Microsoft SQL Server 2000. Обновлённый SQL Server Books Online включает документацию конечного пользователя, которая относится к SQL Server 2000 и имеет незначительные изменения. Обновлённый SQL Server 2000 Books Online доступен для загрузки как cab-файл (.cab). Этот файл содержит множество файлов, которые были упакованы в один файл. Вы можете извлечь файлы из архива, используя утилиту Expand.exe из поставки Microsoft Windows. Инструкция по загрузке и установке обновления Загрузить файл English – версии
Размер загружаемого файла - 35.8 МБ
Как создать корпоративную автоматизированную систему для расчета прозрачных плановых затрат Новые технические статьи Microsoft
FIX: Unable to Perform Automated
Installation of SQL 7.0 Using File Images (Q229875) ФОРУМ SQL.RU: САМЫЕ ПОПУЛЯРНЫЕ ТОПИКИ
Репликация
на дискетах или по мылу ФОРУМ SQL.RU: ВОПРОСЫ ОСТАЛИСЬ БЕЗ ОТВЕТА
Перекачать
процедуры из БД в БД |
#090<< #091 |
|
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||