(Возврат на основную страницу)

Содержание номера за Сентябрь 2003 год

 

Editorial

Как правильно подобрать СУБД Microsoft для ваших нужд

Майк Гандерлой (Mike Gunderloy)

В течение последних лет корпорация Microsoft выпустила впечатляющий набор программного обеспечения. Вспомните за минуту все известные вам варианты Windows: если ваш экскурс в прошлое подобен моему, то вы поработали, по крайней мере, с дюжиной версий этой операционной системы. Такое же многообразие существует и в других областях вселенной Microsoft, включая предмет нашей статьи — базы данных.

Для прикладных нужд разработчиков Microsoft предлагает четыре СУБД:

Как принять верное решение, какую из БД использовать для данного приложения и клиента? Хотя непреложные правила встречаются редко, фундаментальное понимание отличия (и сходства) этих БД поможет вам сделать разумный выбор.

Хочу обратить ваше внимание на то, что существует множество прекрасных СУБД, произведенных другими компаниями. В зависимости от ограничивающих условий ваших клиентов и приложений некоторые из этих продуктов могли бы заслуживать внимания. Но эта статья больше рассчитана на тех консультантов, чьи клиенты уже ориентированы на программное обеспечение Microsoft.

Microsoft Jet 4.0 и Microsoft Access 2002

Прежде всего я бы хотел прояснить некоторую путаницу. Хотя Jet и Access часто используются как взаимозаменяемые названия, это различные компоненты. На самом деле Microsoft Jet 4.0 является ядром (engine) БД, выполняющим работу по чтению и записи данных в файле БД. Microsoft Access 2002 — это надстройка, расположенная над Jet и обеспечивающая пользовательский интерфейс. В базе данных Access таблицы и запросы обрабатываются Jet, в то время как формы и отчеты — самой Access.

Важно понимать разницу, поскольку эти два продукта могут поставляться отдельно. Само ядро Jet свободно распространяется и легко вызывается из приложений на Visual Basic, Visual C++, Visual Basic .NET или C#, а также из других языков. Но чтобы распространять Access, вам необходимо приобрести лицензию (доступна при покупке Office XP Developer Edition).

Используется ли оно как часть Access или как резервное хранилище данных для другого приложения, в своем современном воплощении Jet предлагает ряд преимуществ. Это относительно недорогая альтернатива даже в случае приобретения соглашения об использовании Access. Access — одна из простейших для изучения сред разработки, что делает ее привлекательной для начинающих разработчиков или для собственных разработок, выполняемых непрофильными подразделениями.

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

Многие разработчики, однако, на некотором этапе исчерпывают возможности машины Jet. И хотя современные версии не содержат проблем при одновременном подключении большого числа пользователей, как это было в ранних выпусках Jet, вы все же обнаружите, что ядро «выдыхается» при числе пользователей от 30 до 200, в зависимости от конфигурации приложения или загрузки БД. Jet является скорее файл-серверной базой данных, чем истинной клиент-серверной БД (например SQL Server), что приводит к росту сетевого трафика при попытке множества пользователей соединиться с ней.

В заключение, как утверждает статья 300216 Базы Знаний (Knowledge Base) Microsoft, «Microsoft Jet не подходит для использования с сильно загруженными, с высокой степенью параллелизма, круглосуточно доступными серверными приложениями, такими как Web-коммерция, транзакционные серверы и серверы передачи сообщений. Для этих типов приложений лучшим решением является переход на подлинные клиент-серверные СУБД, такие как Microsoft Data Engine (MSDE) или Microsoft SQL Server».

Практический вывод: для приложений масштаба подразделения, выполняющих небольшой объем работы, особенно для тех, что должны быстро разрабатываться и поддерживаться опытными пользователями, Jet (либо через Access, либо иным способом) является прекрасным выбором. Но проведите практическую оценку потенциала роста приложения перед тем, как решитесь на это.

Microsoft Visual FoxPro 8.0

Иногда создается впечатление, что Microsoft забыла о том, что Visual FoxPro — это ее собственная БД. Microsoft приобрела FoxPro в середине 90-х годов, перенесла некоторые из ее производительных возможностей в машину Jet, а затем длительное время развивала ее как независимый продукт. Но FoxPro никогда не пожинала плоды той полномасштабной маркетинговой программы, что проводилась компанией для таких продуктов, как Access и SQL Server. И это весьма досадно, поскольку Visual FoxPro выросла в весьма перспективную систему для построения приложений баз данных.

Первоначально являясь клоном dBASE, FoxPro далее развивалась в стороне от своих xBASE-корней. Последняя версия, выпущенная в начале 2003 года, демонстрирует целый ряд мощных возможностей, включая такие как:

Ядро  FoxPro имеет заслуженную репутацию быстродействующей. В совокупности с истинной объектной ориентированностью языка FoxPro великолепно подходит разработчикам БД для настольных систем, целью которых является производительность и скорость. Однако FoxPro остается файл-серверной БД для настольных систем и непригодна для мощных, большого объема транзакционных приложений. (FoxPro может использовать SQL Server как базу данных, но в этом случае вы будете использовать ядро SQL Server, а не FoxPro).

Также FoxPro является единственной БД Microsoft, которая хорошо работает на системах Linux, используя WINE-библиотеки, — хотя встает вопрос, законно ли это с точки зрения лицензирования.

Возможно, наибольший недостаток Visual FoxPro — ее нишевый статус в Microsoft. Интегрированная среда разработки FoxPro выглядит и работает не так, как другие средства Microsoft; уникальным также является и язык FoxPro. И хотя FoxPro взаимодействует с другими продуктами Microsoft, подчас реализация этого взаимодействия запаздывает.

Если вы готовы сделать ставку в карьере на единственный продукт БД, Visual FoxPro будет отвечать всем вашим требованиям. Но если вы часто меняете один продукт на другой, то можете обнаружить, что переход на FoxPro и обратно вызывает у вас некоторое раздражение.

Microsoft Data Engine 2000

До некоторой степени Microsoft Data Engine (чаще упоминаемая как MSDE) служит примером маркетинга. На самом деле MSDE является несколько демонтированной версией флагмана Microsoft — базы данных SQL Server, а не полностью обособленным продуктом. MSDE доступна через такие среды разработки, как Access, FoxPro и Visual Studio .NET, и вы можете свободно распространять ее среди ваших заказчиков. Таким образом, ее позиционируют, как нечто похожее на Jet. Это компонент, включаемый вами в полные приложения.

Подобно SQL Server, MSDE является клиент-серверной БД. Это означает, что умная программа выполняется на сервере, делая возможной распределенную обработку и уменьшая сетевой трафик, — большая победа для распределенных приложений. MSDE полностью совместима с версией языка SQL для SQL Server, поэтому время обучения для разработчиков SQL Server по этому продукту незначительно. MSDE также предлагает такие мощные возможности, как подлинная транзакционная обработка с восстановлением, отказоустойчивость и репликация.

Итак, что же отсутствует в MSDE? Начнем с того, что некоторые искусственные ограничения навязаны этой версии кода, чтобы удержать ее от соперничества с полным продуктом SQL Server. Размер баз данных MSDE ограничен 2 Гб, кроме того, этот продукт внедряет «регулятор запросов» (query governor), когда присутствует более пяти одновременно выполняющихся заданий. Значит, для каждого активного пользователя, подключающегося вслед за пятым, производительность MSDE искусственно замедляется. Для некоторых приложений (таких как приложения ASP.NET, где присутствует единственный пользователь — ASPNET процесс) это едва ли имеет значение. Но для транзакционных приложений с большим числом пользователей регулятор запросов может быстро сделать MSDE непригодной к использованию.

Этому продукту также недостает какого-либо клиентского пользовательского интерфейса или инструментов управления. MSDE ничего не предоставляет для создания пользователей, резервного копирования БД, управления безопасностью или выполнения других административных задач. Вам приходится либо писать собственный код, либо размещать (и поддерживать) продукты сторонних производителей с целью выполнения подобных задач.

MSDE хорошо работает с клиент-серверными приложениями с относительно небольшим числом пользователей. Кроме того, это прекрасная БД для приложений, которые, вероятно, вырастут в дальнейшем. Вы можете отказаться от MSDE и заменить ее на SQL Server, ничего не меняя в самом приложении. Когда клиент сможет позволить себе обновить сервер БД, переход с MSDE будет безболезненным.

Microsoft SQL Server 2000

Microsoft SQL Server является флагманской мощной БД Microsoft, имеющей соответствующую стоимость. Приготовьтесь заплатить по крайней мере 5 тысяч долларов, чтобы установить SQL Server. Для больших реализаций ценник с шестизначным числом (включая стоимость аппаратного обеспечения) не является чем-то необычным. Если вы устанавливаете большую БД SQL Server, то вам также необходимо предусмотреть расходы на серьезное администрирование. Позаботьтесь об администраторе БД с полным рабочим днем для поддержки активности сервера, резервного копирования данных и внедрения пакетов безопасности.

За эту цену, однако, вы получите одну из лучших БД в мире. SQL Server разработана для поддержки большинства требуемых приложений баз данных. Современная ее версия демонстрирует некоторые впечатляющие цифры:

Кроме внушительных размеров поддерживаемых БД, SQL Server имеет много дополнительных возможностей. Он поддерживает полнотекстовый поиск, XML (включая службы XML Web Service, доступные через дополнение SQLXML), хранилища данных и OLAP-кубы (используя SQL Server Analysis Services), гибкий механизм репликации и запросы на естественном языке. SQL Server поставляется с полным набором графических административных инструментов, а также пакетом административных утилит командной строки.

SQL Server также совместим с различными стандартами, включая такие как ANSI SQL, ODBC и OLE DB. Очень просто получать данные и извлекать их из SQL Ser­ver, используя множество различных API и клиентов.

Если ваши данные настолько велики, что SQL Server не может обработать их, то, возможно, вы не нуждаетесь в какой-либо подсказке с моей стороны.

Делаем свой выбор

Любые наставления, высказанные мною, чтобы помочь сделать реальный выбор среди этих продуктов, кого-нибудь огорчат. Каждая из БД Microsoft имеет своих пылких сторонников, которые с ходу выразят недовольство по поводу того, что вы пренебрегли их продуктом. Тем не менее, думаю, что стоит упомянуть некоторые здравые принципы, которыми нужно руководствоваться:

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

Programming

Выясним, что они делают с fn_get_sql…

Эндрю Новик (Andrew Novick)

В SQL Server 2000 не только введена концепция пользовательских функций — команда разработчиков Microsoft также позаботилась о создании нескольких подобных функций как части этого продукта. Наряду с многими недокументированными системными пользовательскими функциями, используемыми и самим SQL Server, эта версия продукта имеет девять документированных пользовательских функций, являющихся частью специальной схемы в БД master, называемой system_ function_schema. Они предоставляют информацию о внутренних действиях SQL Server, недоступную каким-либо иным образом.

SQL Server 2000 Service Pack 3 (SP3) включает новую системную пользовательскую функцию fn_get_sql, которая входила в вышедшую ранее «заплатку», но установка SP3 является наилучшим способом для ее получения (Смотри статью 325607 в Базе Знаний (Knowledge Base) компании Microsoft).

fn_get_sql облегчает администраторам БД, программистам и диагностическим инструментам получение кода SQL, исполняемого активными SQL-процессами. Эта технология обычно используется для диагностики взаимоблокировок или других проблем, связанных с блокировками. Ее также могут использовать диагностические инструменты, наблюдающие активность в ядре СУБД.

Перед началом использования fn_get_sql необходимо получить описывающую ее документацию. Существует обновленная справочная система Books Online для SP3, содержащая новую документацию по fn_get _sql. Вы можете получить ее, не устанавливая SP3 и воспользовавшись следующей ссылкой: http://www. mic­ro­­soft.com/sql/techinfo/productdoc/2000/books.asp.

Автоматизация управления SQL Server с помощью WMI

Марцин Полихт (Marcin Policht)

Инструментальные средства управления средой Windows (WMI, Windows Management Instrumentation) становятся одной из общепринятых технологий управления в средах Windows. И хотя они известны главным образом среди администраторов серверов и персональных компьютеров Windows, их потрясающая многосторонность включает в себя также и другие сферы управления. Цель данной серии статей — демонстрация применения WMI в управлении SQL Server.

Через использование провайдеров (provider) архитектура WMI может быть расширена. Провайдер — это кусочек кода, обычно в виде библиотеки DLL (Dyna­mic Link Library), служащий интерфейсом между WMI и компонентами программного или аппаратного обеспечения. Их подкомпоненты представляются с помощью классов. Например, в случае SQL Server существуют классы, представляющие БД, хранимую процедуру, представление и т.д. Однако классы — это только определение этих подкомпонентов. Реальные подкомпоненты представлены экземплярами некоторого класса. Например, если SQL Server размещает десять БД, то это означает, что здесь будет представлено десять экземпляров класса database.

Классы также разбиты на пространства имен (namespace). Пространства имен выполняют три функции:

Способность управления SQL Server реализуется как провайдер SQL Server, который не устанавливается по умолчанию, но включен в исходные файлы SQL Server 2000 и находится в папке X86\Other\WMI. Он может быть использован для управления как SQL Server 2000, так и 7.0. Чтобы установить его, просто запустите файл SQLWMI80.MSI. При этом также создается пространство имен root/MicrosoftSQLServer и заполняется определениями всех классов SQL Server. Обратите внимание, что вам необходимо установить этот провайдер только на сам SQL Server, но вы можете соединяться с ним с любого компьютера Windows, на котором представлены компоненты WMI.

Other

Передача журналов через брандмауэр — простое решение T-SQL

Линчи Шиа (Linchi Shea)

Если ваша компания контролирует безопасность своей сети, вы можете обнаружить, что передача журналов (log shipping) при наличии брандмауэра между главным и резервным сервером — задача не из легких. В этой статье предлагается простое решение, позволяющее доставлять файлы резервной копии с главного сервера на резервный (при этом основная работа ложится на последний). Также рекомендуем прочесть статью Рона Талмэджа о лучших приемах организации передачи журналов.

Полагаю, что когда вы настраиваете и поддерживаете решение по передаче журналов через брандмауэр, расположенный между главным и резервным сервером, вы можете вступить в войну за открытие различных портов с персоналом, обслуживающим ваш брандмауэр. В нашу эпоху, когда все осознают необходимость обеспечения сетевой безопасности, не должно быть сюрпризом и то, что вы, возможно, проиграете. Корпоративная безопасность найдет способ дать взбучку администраторам БД, которым необходимы дополнительные порты, считающиеся небезопасными.

Но не отчаивайтесь. Существует достаточно простое, но сильное решение, которое позволит пребывать в прекрасном настроении не только обслуживающему брандмауэр персоналу, но и вам. Поблагодарим за это функцию SQL Server 2000, включающую ключевую информацию о резервном копировании в сам файл резервной копии. Мы можем обратиться к файлу резервной копии — тому, который уже был передан на резервный сервер, чтобы определить, как осуществить восстановление, не имея доступа к главному серверу. Специалисты, обслуживающие брандмауэр, будут счастливы, поскольку вы больше не будете пытаться использовать какой-либо считающийся небезопасным порт, а вы будете счастливы, потому что вам больше не придется мириться с часто конфликтующими требованиями к портам между инструментом передачи журналов и политиками корпоративного брандмауэра. И что важнее, вам больше не нужно бороться с трудной задачей координации резервного копирования, передачи файлов и восстановления через брандмауэр. До тех пор пока файлы резервной копии не появятся в назначенной папке на резервном сервере, вас, как администратора БД, должно меньше всего заботить то, как они там окажутся.

Я реализовал эту идею в утилите, названной мною TSQLRestore, чтобы подчеркнуть два очевидных факта. Не только то, что она полностью написана на языке T-SQL, но и то обстоятельство, что ее целью является восстановление БД или журнала. В этой статье описана работа TSQLRestore с SQL Server 2000. Если вы хотите использовать ее в SQL7, то вам потребуется внести некоторые незначительные изменения в этот сценарий. Вот почему несколько новых столбцов, например unicode_locale и collation_name, были добавлены к системной таблице msdb (например backupset и restorehistory) и в результирующий набор операторов RESTORE HEADERONLY и RESTORE FILELISTONLY в SQL 2000.

(Возврат на основную страницу)

Hosted by uCoz