SQL. ОБЗОР.


Оглавление (нажмите, чтобы открыть):

Обзор SQL Server Express

SQL Server Express является бесплатной версией основной системы управления реляционными базами данных Microsoft — SQL Server, которая может использоваться для хранения и доступа к информации, хранящейся в различных хранилищах. SQL Server обладает впечатляющим набором функций, такими как анализ, отчеты и углубленная расширенная аналитика.

Описание SQL Server Express

Корпоративная версия SQL Server конкурирует с такими ресурсами, как Oracle Database (DB) и MySQL. SQL Server Enterprise поставляется с расширенным набором функций и может быть слишком дорогим для компаний среднего звена. Однако Microsoft предлагает SQL Server в нескольких разных выпусках, включая:

SQL Server Enterprise.

SQL Server Management Studio Express.

Стандарт SQL Server.

SQL SE является самым доступным базовым предложением. Это полный механизм базы данных, который можно развернуть на сервере или внедрить в приложение.

Преимущества

Некоторые преимущества данного программного решения:

Бесплатность: огромное преимущество SQL Server Express заключается в том, что оно бесплатное. Единственными расходами являются затраты времени на загрузку и настройку системы. Если вам требуется SQL Server, то версия Express подойдет наилучшим образом.

Масштабируемость: версия SE является идеальной отправной точкой для небольших независимых поставщиков программного обеспечения (ISV), поскольку он может использоваться с любым приложением. Лицензирование позволяет Express быть включенным как часть приложения или продукта. Хотя существуют ограничения по использованию памяти и сокета, они не настолько критичны. Экспресс не ограничивается одним пользователем — это распространенный миф. Существует ограничение базы данных на 10 ГБ, но это максимальный размер для каждого хранилища, что означает, что вы можете иметь несколько баз, в которых хранится до 10 ГБ данных. Если вы являетесь независимым поставщиком программного обеспечения, и ваша компания испытывает высокие темпы роста, что приводит к увеличению потребностей в базе данных, вы можете перейти только на платную версию SQL Server.

Безопасность: в данном приложении есть возможность бесплатного онлайн-резервного копирования, которое поможет защитить ваши бизнес-данные, если что-то пойдет не так. Администраторы должны следовать правилам безопасности, таким как ограничение доступа к папкам резервного копирования и политике паролей Windows.

Особенности: несмотря на то что Express — это «облегченная» версия SQL Server, по-прежнему существует впечатляющий набор функций, который будет платным в других системах и является бесплатным в этом решении. Express поддерживает полнотекстовый поиск, собственный XML и время выполнения Common Language Runtime. Другие ключевые функции включают конструктор отчетов, позволяющий создавать настраиваемые выгрузки.

Ограничения

Перед развертыванием SQL Server Express вы должны узнать о своих ограничениях:

Максимальная память, используемая SQL Server Database Engine — 1 ГБ.

Максимальный размер каждой реляционной базы данных — 10 ГБ.

Агент SQL не включен в Express. Агент SQL — это фоновый инструмент, который позволяет администраторам автоматизировать такие задачи, как резервное копирование данных, настройка репликации базы данных, планирование заданий, пользовательские разрешения и мониторинг базы данных.

Предел в буферном кеше для каждого экземпляра составляет 1 МБ ОЗУ.

Механизм реляционной базы данных ограничен меньшим количеством сокета.

Версии

Версия 2020 была выпущена в трех модификациях:

SP1 Express — это основное предложение для экспресс-доставки, поставляется с базовыми функциями. Кроме того, такие возможности, как динамическая маскировка данных и безопасность на уровне строк, теперь доступны в Express.

Express с расширенными службами — эта версия содержит большее количество функций. Включены механизм реляционной базы данных, Management Studio, отчетность и полнотекстовый поиск. Идеально подходит для разработчиков, работающих с меньшими приложениями, которым необходимо внедрить отчетность в своих субъектах.

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

Предназначение

Ограниченная клиентская версия SQL Server Express предназначена для разработчиков, любителей и независимых авторов программного обеспечения, которым нужна база данных с низким уровнем доступа без поддержки предприятия. Общий сценарий, прменяемый для использования этого бесплатного продукта, предназначен для проекта веб-разработки с Visual Studio или для использования в качестве настраиваемой базы данных, которую разработчик может распространять среди клиентов. Версия Express основан на Yukon и содержит те же возможности программирования, как T-SQL, собственный клиент и API ADO.NET.

Технические особенности

Данная версия поставляется с Express Manager и диспетчером компьютеров, двумя инструментами GUI для настройки и установки. Версия ограничивается использованием общей памяти в локальной системе. Подключение к базе данных может осуществляться через TCP/IP или именованные каналы. Тем не менее веб-доступ через HTTP или высокопроизводительный доступ с использованием VIA не поддерживается. Вы должны специально включить сетевое взаимодействие с Express, и подключенный пользователь должен включить службу браузера SQL Server, чтобы выполнить сетевое подключение. Общая память не использует службу Browser.

Установка

Для запуска Microsoft SQL Server Express вам понадобится система, работающая под управлением Windows 2000 SP4, XP Pro SP1 или Server 2003. Рекомендуемая оперативная память — 512 МБ, но продукт будет работать с 256 МБ ОЗУ. Программное обеспечение также требует 170 МБ пространства на жестком диске, MSIE 6.0 SP1 и Microsoft .NET Framework 2.0 или более поздних версий.

Сравнение версий и бесплатные загрузки

Microsoft SQL Server — это система управления базами данных корпоративного качества, которая обычно размещается на сервере и может масштабироваться на нескольких серверах и в разных местах.

Для локального компьютера, небольших баз данных и менее критических ситуаций Microsoft предлагает ограниченную версию SQL Server под названием SQL Server Express. Данное приложение можно загрузить бесплатно и установить на локальный ПК. Это полезно для следующих ситуаций:

развертывание настольных решений Windows, использующих базы данных SQL Server для пользователей, не владеющих этим программным решением.

работа с облегченными веб-приложениями;

разработчики, желающие создавать и тестировать приложения с базой данных SQL Server самостоятельно.

Характеристики

Существует множество выпусков полной версии SQL Server с Enterprise, Standard и Web. Вот некоторые из основных отличий версии 2020 по сравнению с версией Express:

Вычислительная емкость OS Max — 4 ядра.

Максимальная оперативная память — 1 ГБ.

Интеллектуальные и зашифрованные резервные копии.

SQL Server Express не может быть установлен на сжатом диске. Он поддерживает только стандартные диски.

Обновления

На протяжении многих лет было выпущено множество версий MS SQL Server Express и пакетов обновлений. Ниже приводится сводка по основной версии:

Пакеты обновления основной версии:

2008 R2 RTM, R2 SP1 и R2 SP2.

Выбор правильного варианта

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

Если вы начинаете с нуля, выберите самую новую версию, поддерживающую все ориентированные на вас операционные системы.

Если вы разработчик и хотите в конечном итоге развертываться в уже имеющемся на вашем ПК программном обеспечении, вы можете использовать SQL Server R2 Express, которая соответствует этой или более старой версии, чтобы не вводить функции, которые не существуют на вашем SQL Server.

Более старые варианты ПО обычно работают на новых операционных системах, но официально не указаны на веб-страницах Microsoft. В версиях 2005 года есть предупреждение о возможности возникновения проблем, если они будут установлены в ОС Windows 8.x и новее.

Microsoft SQL Server 2020 – обзор новой версии СУБД

Вышла новая версия SQL сервера от компании Microsoft, а именно SQL Server 2020 и сейчас мы с Вами рассмотрим новые возможности этой версии, сравним ее с предыдущими релизами, а также узнаем в каких редакциях она выпускается.

Microsoft SQL Server – это разработанная компанией Microsoft система управления реляционными базами данных. Как известно поддержка SQL Server 2005 закончилась в апреле 2020 года и на текущий момент существуют следующие версии SQL сервера: SQL Server 2008 R2, SQL Server 2012, SQL Server 2014 и теперь SQL Server 2020.

Новые возможности Microsoft SQL Server 2020

И начнем мы, конечно же, с рассмотрения нового функционала, т.е. тех новых возможностей, которые появились в SQL Server 2020.

  • Always Encrypted (т.е. «Всегда зашифрованные») — это функционал, позволяющий хранить некоторые данные (например, персональные данные) в зашифрованном виде, при этом ключ шифрования хранится на клиенте, в результате происходит разделения между теми, кто владеет данными, и может просматривать их, например, клиент, персональные данные которого зашифрованы, и тех, кто управляет данными, но не должен иметь доступа к ним, например, администраторы или программисты SQL Server. Данная возможность обеспечивает защиту данных, как в состоянии покоя, так и в движении, т.е. в процессе передачи;
  • Real-Time Operational AnalyticsОперативная аналитика в режиме реального времени») – это возможность SQL сервера обрабатывать как рабочую OLTP нагрузку, так и аналитические запросы на одних и тех же таблицах базы данных одновременно, т.е. в режиме реального времени. Традиционный подход к аналитике имеет несколько недостатков таких как: сложность реализации ETL процессов, затраты на приобретение дополнительных хранилищ данных и лицензий, а также один из самых главных недостатков, который для многих предприятий является неприемлемым, это задержка данных. Это связанно с тем, что задание ETL обычно выполняется один раз в сутки, например, в конце рабочего дня и соответственно анализировать эти данные можно только на следующий день. Возможность Real-Time Operational Analytics позволяет в некоторых случаях устранить все вышеперечисленные недостатки, т.е. уже нет необходимости в ETL и хранилищах данных. Одним из нюансов Real-Time Operational Analytics является то, что данная возможность нацелена на работу с одним источником данных, который участвует как в OLTP нагрузке, так и в аналитике. В случае необходимости анализировать данные из нескольких источников, потребность в отдельном хранилище данных не исчезает;
  • SQL Server R Services (In-database Analytics) — это новый компонент SQL сервера который позволяет выполнять анализ внутри базы данных с использованием языка R.
  • R — это язык программирования и библиотеки с открытым исходным кодом, который широко используется как средство для анализа данных. Все возможности языка R, включая возможность использования достаточно большого количества пакетов с открытым исходным кодом для решения повседневных задач, интегрированы в SQL Server 2020, что позволяет избежать проблем с их интеграцией в приложения. Кроме этого пользователи R Services могут использовать библиотеку алгоритмов ScaleR – это набор функций масштабируемых для обработки сотен миллиардов строк посредством параллельных вычислений, что обеспечивает производительность, которую невозможно достичь при использовании распространенных пакетов с открытым исходным кодом;
  • PolyBase – это технология позволяющая посылать запросы как к реляционным, так и не реляционным данным, а также осуществлять импорт и экспорт этих данных. Другими словами в SQL Server теперь есть возможность обращаться к данным в Hadoop или Blob-хранилище Azure;
  • AlwaysOn Availability Groups – в SQL Server 2020 есть улучшения групп доступности AlwaysOn, а именно это: возможность иметь до трех синхронных реплик, циклическая балансировка нагрузки на вторичные реплики, поддержка распределенных транзакций (DTC — Distributed Transaction Coordinator), поддержка групп управляемых учётных записей сервисов (gMSA — Group Managed Service Accounts), а также улучшена пропускная способность репликации журнала;
  • Stretch Database – это технология, которая позволяет хранить «холодные» данные в облаке Azure с возможностью быстрого доступа к этим данным (под «холодными» данными здесь понимается данные, которые редко используются или вовсе не используются). Другими словами, если у Вас на предприятии в базе данных есть таблица или таблицы, в которых хранятся исторические данные, достигающие терабайтных объемов при этом этот объем постоянно увеличивается, а Вам нужно обеспечить сохранность этих данных, да так чтобы к ним можно было мгновенно обратиться, то технология Stretch Database в этом Вам поможет. Преимущества при использовании Stretch Database следующие: отсутствие необходимости в приобретение дополнительных систем хранения данных, мгновенный доступ к «холодным» данным, обычный способ обращения к «холодным» данным, т.е. отсутствует необходимость в модификации запросов и приложений, перенос «холодных» строк (например, если в одной и той же таблице есть и «горячие», и «холодные» данные, можно перенести в облако Azure только «холодные»). Все что нужно, для того чтобы начать использовать Stretch Database необходимо наличие SQL Server 2020 и подписка на облако Azure для создания новой базы данных SQL Server Stretch Database;
  • SSRS Mobile Reports – в службы Reporting Services добавлена возможность создавать отчеты оптимизированные для просмотра на мобильных устройствах;
  • Усовершенствования для Columnstore Indexes — в SQL Server 2020 есть ряд улучшений для колоночных индексов, например: кластерный columnstore индекс теперь поддерживает один или несколько некластеризованных индексов rowstore, таблица теперь может иметь один обновляемый некластеризованный индекс columnstore, а также теперь можно создать один columnstore индекс на таблице оптимизированной для памяти;
  • Улучшения In-Memory OLTP – данная технология также получила новые функциональные возможности такие как: поддержка операторов UNION, UNION ALL, DISTINCT, поддержка UNIQUE индексов, ограничений CHECK и FOREIGN KEY, триггеров, а также вложенных запросов;
  • Database Scoped Configurations – эта возможность позволяет конфигурировать ряд параметров конфигурации базы данных на индивидуальном уровне базы данных;
  • Live Query Statistics — SQL Server Management Studio 2020 предоставляет возможность просмотра живого плана выполнения активного запроса, другими словами, теперь можно в режиме реального времени смотреть, как выполняется запрос. С помощью данной возможности мы можем легко определить, какая часть запроса выполнятся достаточно долго и соответственно на основе этого скорректировать запрос, т.е. оптимизировать его;
  • Query Store – данная функция автоматически фиксирует историю запросов, планов и статистики во время выполнения, и сохраняет их для обзора, что позволяет администраторам баз данных отслеживать ресурсоёмкие запросы и оптимизировать их;
  • System-Versioned Temporal Tables – это новый тип временных таблиц, который позволяет сохранять полную историю изменений данных и получать информацию об этих данных на любой момент времени, а не только на текущий;
  • Встроенная поддержка JSON – в SQL Server 2020 появилась возможность обрабатывать данные в формате JSON, т.е. теперь мы стандартными средствами можем экспортировать и импортировать JSON данные;
  • Row-Level Security (RLS) – данная технология позволяет контролировать доступ к строкам в таблице базы данных на основе характеристик пользователя, выполняющего запрос (например, членство в группе или контекст выполнения). Другими словами, мы можем сделать так, чтобы один или несколько пользователей могли видеть (и соответственно обрабатывать) только определенные строки в таблице;
  • Dynamic Data Masking – это функция динамической маскировки данных. Целью этой функции ограничить раскрытие конфиденциальных данных, запрещая пользователям, которые не должны иметь доступ к этим данным, просматривать их. Эта функция не шифрует данные, поэтому рекомендуется использовать Dynamic Data Masking в сочетание с другими технологиями безопасности, например, с Encryption или Row-Level Security, чтобы лучше защитить свои данные;
  • Другие улучшения. Более подробную информацию можно найти в официальной документации вот ссылка — SQL Server 2020 Technical Documentation.

Сравнение версий SQL Server

Далее предлагаю сравнить все поддерживаемые версии MS SQL Server, для того чтобы было наглядно видно эволюцию SQL сервера, т.е. в какой версии появился тот или иной функционал.

Возможность, функционал Версия SQL Server
2008 R2 2012 2014 2020
In-memory OLTP + +
In-memory ColumnStore + + +
Real-time operational analytics +
Query Store +
AlwaysOn + + +
Always Encrypted +
Прозрачное шифрование данных + + + +
Row-level security +
Dynamic data masking +
Поддержка шифрования резервного копирования + +
Детальный аудит + + + +
Поддержка JSON +
PolyBase +
Stretch Database +
Архивирование в Azure + + +
Управление на основе политик + + + +
Мобильная бизнес-аналитика +
Сервисы интеграции, управляемые в качестве сервера + + +
Многомерные семантические модели + + + +
SQL Server R Services +

Редакции Microsoft SQL Server 2020

SQL Server 2020 выпускается в четырех основных редакциях: Enterprise, Standard, Developer и Express. Enterprise и Standard это реакции, которые используются в промышленной эксплуатации. Редакция Developer используется для разработки приложений, Express для обучения, или просто для знакомства с SQL сервером. Ниже представлена сравнительная таблица этих редакций, из которой Вы узнаете, какими возможностями и ограничениями обладает та или иная редакция.

Функционал, ограничение Редакции Microsoft SQL Server 2020
Enterprise Standard Developer Express
Максимальное количество ядер Неограниченно 24 Неограниченно 4
Максимальный объем используемой памяти Максимально для ОС 128 GB Максимально для ОС 1 GB
Максимальный размер базы данных 524 PB 524 PB 524 PB 10 GB
SQL Server Management Studio, управление на основе политик + + + +
In-memory OLTP + +
In-Memory Columnstore + +
Always On Availability Groups + +
Row-level security + + +
Dynamic Data Masking + + +
Always Encrypted + +
PolyBase + + +
Базовая отчетность и аналитика + + + +
T-SQL, JSON, CLR + + + +
SQL Server Integration Services + + +
Mobile Reports + +
Stretch Database + + + +
Базовая интеграция R + + + +
Расширенная интеграция R + +


Системные требования для установки SQL Server 2020

А сейчас давайте рассмотрим требования, которые необходимо выполнить, для того чтобы установить SQL Server 2020. В таблице представлены минимальные требования к процессору и ОЗУ. Рекомендовано использовать более высокие характеристики, также следует отметить то, что x86 процессоры больше не поддерживаются, что означает SQL Server 2020 можно установить только на компьютер с процессором x64 и полный функционал будет доступен только в 64 разрядных версиях Windows.

Характеристика Редакции Microsoft SQL Server 2020
Enterprise Standard Developer Express
Операционная система (64 разрядная) Windows Server 2012, 2012 R2 Windows 8, 8.1, 10, Windows Server 2012, 2012 R2 Windows 8, 8.1, 10, Windows Server 2012, 2012 R2 Windows 8, 8.1, 10, Windows Server 2012, 2012 R2
Частота процессора 1.4 ГГц 1.4 ГГц 1.4 ГГц 1.4 ГГц
Оперативная память 1 GB 1 GB 1 GB 512 MB
Свободное место на жестком диске 8 GB 8 GB 8 GB 8 GB

Подробней обо всех аппаратных и программных требованиях для установки SQL Server 2020 можете почитать в официальной технической документации вот ссылка.

На этом предлагаю заканчивать, надеюсь, материал был Вам полезен, пока!

Internal Server Error

Error 500

This could be due to one of the following reasons:

.htaccess file was misconfigured

Permissions for the file requested on site were misconfigured

PHP or CGI code was misconfigured in the file that is requested on site

Site resources are approaching their maximum limits

Please contact the server administrator webmaster@coderlessons.com and provide the following information:

The time the error occurred

The actions you took prior to and immediately following the error. This will help the administrator better understand what may have caused the error. Please refer to the server error log for more information.

SQL Server в Linux SQL Server on Linux

ОБЛАСТЬ ПРИМЕНЕНИЯ: SQL Server (только в Linux) База данных SQL Azure Azure Synapse Analytics (хранилище данных SQL) Parallel Data Warehouse APPLIES TO: SQL Server (Linux only) Azure SQL Database Azure Synapse Analytics (SQL DW) Parallel Data Warehouse

Начиная с версии SQL Server 2020 возможна работа SQL Server на Linux. Starting with SQL Server 2020, SQL Server runs on Linux. Несмотря на другую операционную систему, это то же ядро СУБД SQL Server с множеством схожих функций и служб. It’s the same SQL Server database engine, with many similar features and services regardless of your operating system.

SQL Server 2020 работает в Linux. SQL Server 2020 runs on Linux. Несмотря на другую операционную систему, это то же ядро СУБД SQL Server с множеством схожих функций и служб. It’s the same SQL Server database engine, with many similar features and services regardless of your operating system. Дополнительные сведения об этом выпуске см. в статье Новые возможности SQL Server 2020 для Linux. To find out more about this release, see What’s new in SQL Server 2020 for Linux.

SQL Server 2020 доступен! SQL Server 2020 is available! Сведения о новых возможностях см. в статье Новые возможности SQL Server 2020 для Linux. To find out what’s new for Linux in the latest release, see What’s new in SQL Server 2020 for Linux.

SQL Server 2020 доступен! SQL Server 2020 is available! Сведения о новых возможностях см. в статье Новые возможности SQL Server 2020 для Linux. To find out what’s new for Linux in the latest release, see What’s new in SQL Server 2020 for Linux.

SQL Server 2020 доступен! SQL Server 2020 is available! Сведения о новых возможностях см. в статье Новые возможности SQL Server 2020 для Linux. To find out what’s new for Linux in the latest release, see What’s new in SQL Server 2020 for Linux.

Установка Install

Чтобы начать работу, установите SQL Server на Linux, используя любое из следующих кратких руководств: To get started, install SQL Server on Linux using one of the following quickstarts:

Docker поддерживает множество платформ, то есть вы можете запускать образ Docker в Linux, Mac и Windows. Docker itself runs on multiple platforms, which means that you can run the Docker image on Linux, Mac, and Windows.

Подключение Connect

После установки подключитесь к экземпляру SQL Server на компьютере с Linux. After installation, connect to the SQL Server instance on your Linux machine. Вы можете устанавливать подключение как локально, так и удаленно, используя самые разные средства и драйверы. You can connect locally or remotely and with a variety of tools and drivers. В кратком руководстве показано, как использовать программу командной строки sqlcmd. The quickstarts demonstrate how to use the sqlcmd command-line tool. Также можно использовать следующие средства: Other tools include the following:

Инструмент Tool Учебник Tutorial
Visual Studio Code (VS Code) Visual Studio Code (VS Code) Использование VS Code с SQL Server на Linux Use VS Code with SQL Server on Linux
SQL Server Management Studio (SSMS) SQL Server Management Studio (SSMS) Использование SSMS в Windows для подключения к SQL Server на Linux Use SSMS on Windows to connect to SQL Server on Linux
SQL Server Data Tools (SSDT) SQL Server Data Tools (SSDT) Использование SSDT с SQL Server на Linux Use SSDT with SQL Server on Linux

Просмотр Explore

SQL Server 2020 использует одинаковое базовое ядро СУБД на всех поддерживаемых платформах, включая Linux. SQL Server 2020 has the same underlying database engine on all supported platforms, including Linux. Благодаря этому многие существующие функции и возможности работают в Linux так же, как и на других платформах. Therefore, many existing features and capabilities operate the same way on Linux. В этой части документации некоторые из этих функций рассматриваются с точки зрения платформы Linux. This area of the documentation exposes some of these features from a Linux perspective. Кроме того, отмечаются области, в которых платформа Linux предъявляет уникальные требования. It also calls out areas that have unique requirements on Linux.

Если вы уже знакомы с SQL Server, изучите общие рекомендации и известные проблемы в заметках об этом выпуске. If you are already familiar with SQL Server, review the Release notes for general guidelines and known issues for this release. Также ознакомьтесь с новыми возможностями в SQL Server на Linux и SQL Server 2020 в целом. Then look at what’s new for SQL Server on Linux as well as what’s new for SQL Server 2020 overall.

SQL Server 2020 (15.x) SQL Server 2020 (15.x) использует одинаковое базовое ядро СУБД на всех поддерживаемых платформах, включая Linux. has the same underlying database engine on all supported platforms, including Linux. Благодаря этому многие существующие функции и возможности работают в Linux так же, как и на других платформах. Therefore, many existing features and capabilities operate the same way on Linux. В этой части документации некоторые из этих функций рассматриваются с точки зрения платформы Linux. This area of the documentation exposes some of these features from a Linux perspective. Кроме того, отмечаются области, в которых платформа Linux предъявляет уникальные требования. It also calls out areas that have unique requirements on Linux.

Если вы уже знакомы с SQL Server на Linux, изучите общие рекомендации и известные проблемы в заметках об этом выпуске. If you are already familiar with SQL Server on Linux, review the Release notes for general guidelines and known issues for this release. Также ознакомьтесь с новыми возможностями SQL Server 2020 на Linux. Then look at what’s new for SQL Server 2020 on Linux.

SQL Server 2020 и SQL Server 2020 (15.x) SQL Server 2020 (15.x) используют одинаковое базовое ядро СУБД на всех поддерживаемых платформах, включая Linux. SQL Server 2020 and SQL Server 2020 (15.x) SQL Server 2020 (15.x) have the same underlying database engine on all supported platforms, including Linux. Благодаря этому многие существующие функции и возможности работают в Linux так же, как и на других платформах. Therefore, many existing features and capabilities operate the same way on Linux. В этой части документации некоторые из этих функций рассматриваются с точки зрения платформы Linux. This area of the documentation exposes some of these features from a Linux perspective. Кроме того, отмечаются области, в которых платформа Linux предъявляет уникальные требования. It also calls out areas that have unique requirements on Linux.

Если вы уже знакомы с SQL Server на Linux, ознакомьтесь с заметками о выпуске: If you are already familiar with SQL Server on Linux, review the release notes:

Также ознакомьтесь с новыми возможностями: Then look at what’s new:

Ответы на часто задаваемые вопросы об SQL Server на Linux см. в этой статье. For answers to frequently asked questions, see the SQL Server on Linux FAQ.

Получить справку Get help

Примите участие в разработке документации по SQL Contribute to SQL documentation

Знаете ли вы, что это содержимое вы можете изменить самостоятельно? Did you know that you could edit the content yourself? Это не только улучшит нашу документацию, но и даст вам статус участника в создании этой страницы. If you do so, not only will our documentation improve, but you’ll also be credited as a contributor to the page.

SQL обзор

пример

Реляционная алгебра не является полномасштабным языком SQL , а скорее способ получить теоретическое понимание реляционной обработки. Поэтому он не должен ссылаться на физические объекты, такие как таблицы, записи и поля; он должен ссылаться на абстрактные конструкции, такие как отношения, кортежи и атрибуты. Говоря это, я не буду использовать академические термины в этом документе и буду придерживаться более широко известных терминов непрофессионала — таблиц, записей и полей.

Пара правил реляционной алгебры, прежде чем мы начнем:

  • Операторы, используемые в реляционной алгебре, работают на целых таблицах, а не на отдельных записях.
  • Результатом реляционного выражения всегда будет таблица (это называется свойством закрытия )

Во всем этом документе я буду ссылаться на следующие две таблицы:

ВЫБРАТЬ

Оператор select возвращает подмножество основной таблицы.
выберите

, где

Например, рассмотрите выражение:

выберите Люди, где Department >

Это можно записать так:

Это приведет к тому, что таблица, записи которой состоят из всех записей в таблице People, где значение DepartmentID равно 2:

Условия также могут быть объединены для дальнейшего ограничения выражения:

выберите « Люди, где StartYear> 2005 и Department >

приведет к следующей таблице:

ПРОЕКТ

Оператор проекта возвращает значения поля из таблицы.
project

over

Например, рассмотрите следующее выражение:
проект Люди старше StartYear

Это можно записать так:

Это приведет к таблице, состоящей из отдельных значений, хранящихся в поле StartYear таблицы People .

Дублирующие значения удаляются из результирующей таблицы из-за свойства закрытия, создающего реляционную таблицу: все записи в реляционной таблице должны быть различны.

Если список полей содержит более одного поля, тогда результирующая таблица является отдельной версией этих полей.
проект People over StartYear, DepartmentID вернется:

Одна запись удаляется из-за дублирования 2006 StartYear и 1 DepartmentID .

ПРЕДОСТАВЛЕНИЕ

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


, дающее

Например, рассмотрим следующие выражения:
выберите People where Department > проект A над PersonName, дающий B

Это приведет к таблице B ниже, а таблица A будет результатом первого выражения.

Первое выражение оценивается, и результирующей таблице присваивается псевдоним A. Эта таблица затем используется во втором выражении, чтобы дать финальной таблице псевдоним B.

Другим способом написания этого выражения является замена имени псевдонима таблицы во втором выражении на весь текст первого выражения, заключенного в скобки:
проекта ( выберите « Люди, где Department >

Это называется вложенным выражением .

ПРИРОДНОЕ СОЕДИНЕНИЕ

Естественное объединение объединяет две таблицы, используя общее поле, разделяемое между таблицами.

join

и

, где =
предполагая, что находится в

, а находится в

.

Например, следующее выражение объединения присоединяется к людям и отделам на основе столбцов DepartmentID и ID в соответствующих таблицах:
присоединиться к людям и департаментам, где Department >

Обратите внимание, что отображается только идентификатор отдела из таблицы « Люди», а не идентификатор из таблицы « Департамент» . Должно быть показано только одно из сравниваемых полей, которое обычно является именем поля из первой таблицы в операции объединения.

Хотя это не показано в этом примере, возможно, что объединение таблиц может привести к тому, что два поля будут иметь один заголовок. Например, если я использовал заголовок Name для идентификации полей PersonName и Dept (т.е. для идентификации имени лица и имени отдела). Когда возникает такая ситуация, мы используем имя таблицы для определения имен полей с использованием точечной нотации: People.Name и Departments.Name

объединение в сочетании с select и проектом может использоваться вместе для получения информации:

присоединиться к людям и отделам, где Department > выберите A, где StartYear = 2005 и Dept = ‘Production’, давая B
проект B через PersonName, дающий C

или как комбинированное выражение:

проект ( выберите ( присоединитесь к людям и отделениям, где Department ) над PersonName, дающим C

Обзор SQL

Дата публикации: 2020-11-22

От автора: SQL — это язык для работы с базами данных; он охватывает операции создания базы данных, удаления, выбора строк, изменения строк и т. д. SQL является стандартным языком ANSI (Американский национальный институт стандартов), но существует множество различных его версий. В этой статье вам будет представлен обзор SQL с ответами на популярные вопросы.

Что такое SQL?

SQL — это язык структурированных запросов, который является языком компьютера для хранения, обработки и извлечения данных реляционной базы данных.

SQL является стандартным языком для системы реляционной базы данных. Все реляционные системы управления базами данных (RDMS), такие как MySQL, MS Access, Oracle, Sybase, Informix, Postgres и SQL Server, используют SQL в качестве стандартного языка баз данных.

Кроме того, они применяют разные диалекты, такие как:

MS SQL Server с использованием T-SQL,

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

Oracle, использующий PL/SQL,

Версия MS Access SQL называется JET SQL (собственный формат) и т. д.

Почему SQL?

SQL широко распространен, поскольку он предлагает следующие преимущества:

Дает возможность пользователям получать доступ к данным в системах управления реляционными базами данных.

Дает возможность пользователям описывать данные.

Дает возможность пользователям определять данные в базе данных и управлять ими.

Дает возможность встраивания в другие языки с использованием модулей SQL, библиотек и пре-компиляторов.

Дает возможность пользователям создавать и удалять базы данных и таблицы.

Дает возможность пользователям создавать в базе данных представления, хранимые процедуры, функции.

Дает возможность пользователям устанавливать права доступа для таблиц, процедур и представлений.

Краткая история SQL

1970 — д-р Эдгар Ф. «Тед» Кодд из IBM, известный как отец реляционных баз данных, описал реляционную модель для баз данных.

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

1974 — появился язык структурированного запроса.

1978 — IBM начала разработку идей Кодда и выпустила продукт под названием System/R.

1986 — IBM разработала первый прототип реляционной базы данных и стандартизирована ее в соответствии с требованиями ANSI. Первая реляционная база данных была выпущена Relational Software, которая позже стала известна как Oracle.

Процесс SQL

Когда вы выполняете команду SQL для любой СУБД, система определяет наилучший способ выполнения запроса, а движок SQL определяет, как интерпретировать задачу. Этот процесс состоит из различных компонентов. А именно:

Классический механизм запросов

Механизм запросов SQL и т. д.

Классический механизм запросов обрабатывает все запросы, отличные от SQL, а механизм запросов SQL не обрабатывает логические файлы. Ниже приведена простая диаграмма, демонстрирующая архитектуру SQL:

Команды SQL

Стандартными командами SQL для взаимодействия с реляционными базами данных являются CREATE, SELECT, INSERT, UPDATE, DELETE и DROP. Эти команды можно разделить на следующие группы, в зависимости от их природы:

DDL — язык определения данных

DML — язык управления данными

DCL — Язык управления данными

Редакция: Команда webformyself.

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

Microsoft SQL Server 6.5. Обзор основных возможностей

Введение

Коль скоро нынешний номер журнала посвящен серверам баз данных, невозможно не упомянуть о том, что создание машин для хранения и управления данными является, пожалуй, одним из самых значимых достижений человечества со времени изобретения письменности. Как известно, в начале было слово. Слово, ознаменовавшее переход от рефлексии в восприятии окружающего мира к абстрактному мышлению. Возможно, именно этот переворот в сознании нарушил первозданную гармонию и противопоставил человека природе. Как бы то ни было, при всей ограниченности и имманентной неполноте вербального общения именно слово служит основным способом передачи информации по сравнению, например, с музыкой, танцем, живописью, архитектурой и т. д. В рамках той парадигмы, в которой сегодня работает наш мозг, представляется иррациональной возможность просветления, озарения, т. е. мгновенного получения необходимых знаний. Остается процесс постепенного познания действительности, и для этого человек вынужден был научиться сохранять информацию, полученную на предыдущих этапах. Ключевым моментом стало возникновение знакового письма, которое, несмотря на большие или меньшие потери, смогло обеспечить должное хранение формализованных знаний. Как утверждают антропологи, за последние несколько десятков тысяч лет физиологические параметры homo sapiens практически не изменились — образно говоря, мы не стали лучше думать или глубже чувствовать. Единственное, что отличает современного человека от его предшественников — это объем накопленной информации и усовершенствованные способы ее обработки. Именно владение информацией обеспечило прогресс человеческого общества, позволив каждому последующему поколению опереться на объем знаний и опыта, собранный предшественниками, и в общем случае не изобретать заново велосипед.

Нелинейный рост во времени совокупной базы знаний цивилизации вызвал к жизни прогрессирующую эволюцию средств хранения, обработки и представления информации как инструментов умножения ее интеллектуальной мощи. В этом ряду применение последних достижений в области компьютерных технологий сравнимо по степени важности с изобретением печатного станка или даже его превосходит. Наблюдается и обратная зависимость: чем более изощренные средства используются для обработки информации, чем быстрее растут ее объемы, тем большее значение она приобретает практически во всех аспектах человеческой деятельности, в частности в экономике. Роль информации, как товара или предмета труда, носит совершенно особый характер. Информация сравнительно легко копируется без ущерба для своих потребительских свойств. В отличие, например, от тонны нефти, одна и та же информация может быть потреблена неоднократно, в том числе одновременно различными участниками товарных отношений. Все мы еще с уроков обществоведения усвоили, что труд является основным источником создания материальных благ. Однако даже у авторов учения о прибавочной стоимости можно встретить мысль о том, что по мере развития науки главная доля прироста общественного благосостояния будет обуславливаться ускоренными темпами обновления основного капитала в силу роста технического прогресса. Многие современные западные экономисты склонны считать, что человечество вступило в постиндустриальный период своего развития, основным средством производства в котором будет выступать информация и по отношениям собственности на которую в обществе уже начал определяться новый правящий класс — когнитариат. Можно принимать или оспаривать эти выводы, очевидно одно — в деятельности современного предприятия информация становится одним из важнейших производственных ресурсов, выделяясь в самостоятельный фактор успешного бизнеса из традиционных составляющих, таких как кадры, клиенты, каналы сбыта, технологии. Наконец, информация не может потребляться непосредственно: например, чтобы усвоить текст, нужно, как минимум, уметь читать. Отсюда с ростом значения информации возрастает роль средств ее обработки. Если зачастую стоимость информационной базы корпорации оказывается выше производимой ею продукции и услуг, если информация — это всегда деньги (и в общем-то немалые), то неудивительно, что рынок СУБД на сегодня оценивается в десятки миллиардов долларов.

Хотя предки нынешних СУБД существовали на мэйнфреймах еще до появления в 1969 г. знаменитой статьи Э. Кодда, положившей начало теории реляционных баз данных, их поистине массовое распространение и беспрецедентный рост популярности обеспечили «настольные» варианты одновременно с мировой экспансией персональных компьютеров. Однако требования корпоративного доступа к ресурсам и появление локальных вычислительных сетей на базе ПК привели к созданию наиболее многочисленных на сегодня решений на базе технологии «клиент-сервер». В последнее время необходимость поддержки мультимедийных проектов (изображений, видео, звука) и работы с другими видами неструктурированной бизнес-информации (временные ряды, географические карты) вызвала к жизни внедрение объектной идеологии в старые добрые реляционные базы независимо от того, достигалось ли это полным переписыванием ядра или интеграцией готовых реляционных и объектных баз данных. Классическую же в терминах реляционной теории СУБД, как известно, в первом приближении можно описать как комплекс из инструментария для поддержки таблиц и отношений между связанными таблицами, пользовательского интерфейса для ввода, поиска данных и их представления и высокоуровневых средств разработки приложений. Выделение в этой среде своеобразного исполнительного информационного центра, принимающего короткие запросы от клиентов, отыскивающего оптимальный путь их выполнения и передающего в ответ результирующие множества, приводит к разделению функций СУБД, часть из которых закрепляется за сервером, а часть — за клиентом. Традиционно на сервер возлагаются обязанности по оперативному исполнению транзакций, поддержке целостности данных, обеспечению безопасности хранения и доступа, обеспечению пользовательских соединений и соблюдению части логики приложения, большей или меньшей в зависимости от самого конкретного приложения. Естественно, самая минимальная часть серверной логики должна обеспечивать проектирование структурной схемы базы вместе с соответствующими ограничениями. На стороне клиента у нас, таким образом, остаются другая (как правило, все-таки меньшая) часть бизнес-логики приложения и пользовательский интерфейс. Исходя из всего сказанного выше о значении и цене информации в современном мире не будет большим преувеличением сказать, что в серверах баз данных (во всяком случае, для «большой шестерки») воплотились лучшие достижения в области информационных технологий. Microsoft SQL Server 6.5 является одним из наиболее стремительно развивающихся серверов баз данных на рынке корпоративных СУБД. Разумеется, в рамках данной статьи невозможно подробно остановиться на характеристиках этого продукта в той мере, в какой это хотелось бы сделать и какой он, безусловно, заслуживает. Поэтому мы ограничим нашу задачу рассмотрением хотя бы некоторых базовых возможностей Microsoft SQL Server 6.5 применительно к перечисленным выше функциям сервера баз данных.

Архитектура MS SQL Server 6.5

Симметричная мультипроцессорная архитектура MS SQL Server предусматривает использование «родных» сервисов операционной системы Windows NT для управления потоками (threads), памятью, операциями дискового чтения/записи, сетевыми службами, функциями безопасности, а также для поддержки параллельного выполнения потоков на нескольких CPU. Использование потоков Windows NT позволяет MS SQL Server автоматически масштабироваться при работе на многопроцессорных платформах, что исключает необходимость дополнительной конфигурации или программной настройки. Например, на Comdex была продемонстрирована работа MS SQL Server на платформе AlphaServer 8400 производства Digital, оснащенным 12 процессорами, 28 Гбайт памяти и 39-ти терабайтным хранилищем. В отличие от большинства распространенных СУБД, вынужденных иметь в своем составе механизмы дублирования ядра операционной системы для обеспечения кросс-платформенной переносимости, MS SQL Server обладает достаточно легковесной прозрачной архитектурой, не перетяжеленной несвойственными ей функциями. В результате, например, при смене типа процессора не требуется заново приобретать MS SQL Server для новой аппаратной платформы. Он ставится, по определению, на все, на чем работает Windows NT (на сегодня это Intel, Alpha, MIPS и PowerPC). По мере того как Windows NT завоевывает все большее признание и все ведущие производители СУБД уже выпустили версии своих продуктов под этой операционной системой или уже заявили о своей готовности это сделать в ближайшее время, изначальная ориентированность MS SQL Server 6.5 на тесную интеграцию с Windows NT выступает в качестве одного из серьезных преимуществ.

На каждое пользовательское соединение в MS SQL Server назначается отдельный рабочий поток (порядка 55К) в рамках единого серверного процесса. Так как каждый из этих потоков в действительности является потоком Win32, на них распространяются соответствующие функции контроля операционной системы, включая защиту памяти, правила доступа к оборудованию и планирование выполнения потоков во времени (thread scheduling). Это предоставляет улучшенные способности к масштабированию при росте числа одновременно работающих пользователей, динамическую балансировку при загрузке процессоров и повышенную надежность, так как пользовательские запросы, исполняющиеся на разных потоках, защищены друг от друга. Несмотря на то что пул соединений ограничен 1024 потоками, динамическое управление пользовательскими соединениями и свободными потоками позволяет увеличить эту величину до 32 767. Кроме этого, другие пулы потоков могут использоваться для параллельного выполнения операций сканирования данных, удаления и обновления, резервного копирования, проверки целостности базы, индексирования, асинхронного опережающего чтения данных в кэш на основе алгоритмов предсказания, создания и управления курсорами и т. д.


Сетевые службы Windows NT обеспечивают MS SQL Server поддержку протоколов TCP/IP, NWLink IPX/SPX, Named Pipes (NetBEUI), Banyan Vines, AppleTalk (ADSP) и DECNet. В версии 6.5 к ним добавилась дополнительная сетевая библиотека — multiprotocol network library, которая «умеет слушать» порты TCP/IP, сокеты SPX или поименованные каналы (named pipes), которые обычно выбираются динамически. Несомненным достоинством multiprotocol является наличие сетевого сервиса, обеспечивающего взаимодействие между процессами при помощи вызовов удаленных процедур, что позволяет, например, использовать шифрование при передаче данных.

Производительность

Многопоточное ядро и интеграция со службами планирования потоков Windows NT обеспечивает высокую производительность MS SQL Server при обработке OLTP- и DSS-запросов, что особенно заметно при одновременной работе нескольких сотен пользователей. В опубликованных результатах по тестированию MS SQL Server 6.5 на максимальное число одновременно работающих пользователей приводится цифра 3500, хотя известны реально работающие приложения, где нагрузка доходила до 5000 одновременных пользовательских соединений. За период с октября 1995 г. по декабрь 1996 г. производительность MS SQL Server, измеренная по тестам TPC-C (см. http://www.tpc.org ), выросла с 2454 до 7521 транзакции в минуту, т. е. более чем в 3 раза. Для сравнения заметим, что ежедневный объем транзакций в расчетной системе VISA составляет от 10 до 40 млн. Темп 7,5 тыс. транзакций в минуту означает, что один MS SQL Server способен при режиме работы 24х7 обслужить немногим менее 11 млн. транзакций в сутки. Существует еще один параметр, тесно связанный с производительностью, который, не являясь в строгом смысле слова техническим, очень популярен на Западе при оценке возможностей того или иного сервера баз данных, так как от него существенно зависит стоимость владения продуктом (cost of ownership). Речь идет об удельной цене за транзакцию в минуту, иными словами, сколько придется заплатить за достижение такой скорости обработки запроса. За тот же самый период, в течение которого мы рассматривали рост производительности, показатель «цена/производительность» снизился с 242 до 65 долл. за транзакцию в минуту, что говорит о разумной стоимости систем на базе MS SQL Server при высоких требованиях к скорости обработки.

Распределенная среда управления

В состав MS SQL Server 6.5 входит свыше 20 графических средств управления и утилит командной строки, которые кратко охарактеризованы в табл. 1.

Название Краткое описание Интерфейс Исполняемый файл
SQL Enerprise Manager Мощный централизованный инструмент полного управления серверами в масштабах предприятия, включая базы данных, их объекты, предупреждения (alerts), спланированные во времени задачи, тиражирование и запросы. Графический sqlew.exe
SQL Executive Локальный административный агент для планирования задач, управления предупреждениями и мониторинга активности MS SQL Server. Может быть вызван из SQL Enterprise Manager. Командная строка sqlexec.exe
Sqlmaint Определяет план необходимых рутинных действий по поддержке базы данных: регулярная проверка целостности, резервное копирование, перестройка индексов и т. д., который впоследствии будет выполняться автоматически. Аналогичный мастер включен в SQL Enterprise Manager. Командная строка sqlmaint.exe
SQL Service Manager Sqlservr Используется для запуска, останова, приостановки и возобновления деятельности сервера и агента SQL Executive. Сам MS SQL Server может быть запущен из командной строки, аргументы которой определяют его текущую настройку. Графический Командная строка sqlmgr.exe sqlservr.exe
ISQL/w Средство построения запросов, анализа плана выполнения, просмотра статистической информации и одновременного управления многими запросами в различных окнах. Графический isqlw.exe
Isql Средство интерактивного ввода операторов Transact-SQL, вызова системных процедур, запуска скриптов. Командная строка isql.exe
SQL Security Manager Управление интегрированным режимом безопасности. Графический sqsecmgr.exe
SQL Trace Средство мониторинга пользовательской активности. Позволяет отлавливать операторы Transact-SQL, вызовы процедур, инициируемые каждым клиентом, в реальном времени или записывать в журнал. Обладает возможностями фильтрации. Графический sqltrace.exe
SQL Performance Monitor Использует стандартный perfmon.ехе Windows NT для мониторинга событий и сбора статистики по MS SQL Server на основе предоставляемого им списка объектов и счетчиков. Графический
SQL Alerter Интеграция механизма предупреждений с соответствующими службами Windows NT Performance Monitor. Командная строка sqlalrtr.exe
SQL Transfer Manager Управление переносом данных и объектов с различных платформ SQL Server. Графический sqlxfr.exe
BCP (bulk copy) Перенос данных между MS SQL Server и файлами операционной системы (например, текстовыми). Командная строка bcp.exe
SQL Setup Применяется для начальной установки, удаления, upgrade, инсталляции дополнительных компонентов и изменения настроек в конфигурации: поддержки сетевых протоколов, изменения языка, выбора кодовой страницы и порядка сортировки, модели безопасности, а также для перестройки базы данных master. Графический setup.exe
Language installation Установка поддержки дополнительной языковой информации (например, локализованных сообщений). Используется в setup.exe. Командная строка langinst.exe
Sort order installation Установка кодовой страницы символов, чувствительности к регистру и отношения порядка над символами. Используется в setup.exe. Командная строка charset.exe
Check upgrade Используется MS SQL Server во время upgrade для проверки совместимости существующих пользовательских баз. Командная строка сhkupg65.exe
SQL Client Configuration Utility Настройка клиента DB-Library, различных сетевых библиотек и/или пользовательских поименованных каналов. Графический windbver.exe
Makepipe, readpipe Пытаются открыть и использовать поименованный канал между сервером и клиентом. Командная строка makepipe.exe, readpipe.exe
Odbcping Проверка правильности установки ODBC-соединения с MS SQL Server. Командная строка odbcping.exe
Console Используется вместе с оператором DUMP для резервного копирования, если устройством является дискета. Командная строка console.exe
Printdmp Форматированный дамп стека для нужд отладки. Командная строка printdmp.exe

Кроме этого, MS SQL Server 6.5 включает Web-assistant — программу-мастер для подготовки публикации на Web-cтраницах данных из базы, SQL Mail — утилиту, обеспечивающую интеграцию с электронной почтой MS Mail или MS Exchange, MS Distributed Transaction Coor-dinator (MS DTC) для проведения распределенных транзакций и некоторые другие средства. SQL Server, MS DTC и SQL Executive функционируют как сервисы операционной системы. Согласованная работа этих компонентов достигается благодаря трехуровневой архитектуре SQL-DMF (Dist-ributed Management Frame-work), схема которой приводится на рис. 1.

Легко масштабируемая распределенная среда управления позволяет значительно упростить процессы централизованного контроля над многими серверами, которые могут объединяться в группы по соображениям безопасности или с административными целями, и их объектами, к которым относятся:

  • устройства (devices), на которых физически располагаются базы данных;
  • резервные устройства, содержащие страховочные копии баз данных и объектов внутри нее;
  • базы данных:
    • пользователи и группы пользователей;
    • таблицы;
    • представления;
    • хранимые процедуры;
    • правила (rules);
    • ограничения типа default;
  • типы данных, определенные пользователем;
  • logins для соединения с сервером.

    SQL Enterprise Manager интегрирует в себе все функции управления, включая создание баз данных и объектов внутри них, назначение прав доступа, резервное копирование, тиражирование и т. д. При желании имеется возможность автоматизировать процесс составления плана поддержки базы при помощи специальной программы-помощника (Data-base Main-tenance Wizard). Различные подходы к системному администрированию зачастую могут содержать ряд малоприятных моментов, например необходимость выполнять резервное копирование базы в субботу вечером. По тем же причинам руководитель бывает вынужден командировать сотрудников в какой-нибудь удаленный филиал, где отсутствует должным образом подготовленный IT-персонал. MS SQL Server 6.5 позволяет решить эти проблемы, во-первых, за счет централизованного управления удаленными серверами, во-вторых, за счет наличия мощного средства диспетчеризации задач во времени, предоставляемого SQL Executive. Для каждой административной функции может быть назначен временной график ее выполнения. Практически все СУБД содержат развитые средства по ликвидации тех или иных неблагоприятных последствий. Microsoft SQL Server, помимо этого, предоставляет обширный инструментарий диагностики, позволяющий своевременно предотвратить причины сбоев. Утилиты SQL Performance Monitor и Alert Manager могут использоваться для программирования реакции сервера на различные классы событий, возникающих в системе, в том числе и на бизнес-события. Если, например, уровень заполнения журнала транзакций превзошел некоторое пороговое значение или по корреспондентскому счету возникло «красное» сальдо, MS SQL Server может послать вам (или указанным вами лицам) по электронной почте или на пейджер соответствующее предупреждение и/или выполнить предусмотренный вами скрипт, cmd- или exe-файл для устранения ошибки, а также зафиксировать появление этого события в системном журнале. В целом можно сказать, что распределенная среда управления позволяет существенно упростить жизнь администратора базы данных.

    SQL-DMO (Distributed Management Objects)

    В качестве промежуточного слоя в архитектуре распределенной среды управления (см. рис. 1) выступают распределенные объекты управления (DMO), которые играют исключительно важную роль в концепции построения MS SQL Server и потому заслуживают более тщательного рассмотрения. По мере того как приложения приобретали все менее централизованный характер, поддержка распределенных баз данных становилась одним из самых актуальных вопросов построения современных СУБД. Мы уже имели возможность убедиться, что SQL Enterprise Manager позволяет осуществлять удобное администрирование распределенных серверов из единого центра, однако наряду с этим хотелось бы иметь возможность программного обращения к административным функциям из высокоуровневых языков. Обычно использовавшимся для этих целей в других СУБД сценарным языкам типа REXX или PERL недоставало функциональных возможностей, библиотек классов, отладчика и т. д.

    Поэтому в случае с Microsoft SQL Server был избран более открытый подход: сервер был разработан как cовместно с набором объектов управления, которые могли быть вызваны из любого языка программирования, поддерживающего технологию СОМ (Component Object Model). MS SQL Server 6.5 предоставляет интерфейс OLE Automation с более, чем 70 объектами, обладающими 1500 свойствами (см. рис. 2, где прямоугольниками с вертикальной чертой справа обозначены коллекции).

    Это означает, что фактически любая из перечисленных нами в предыдущем пункте административных задач, включая операции над базами данных, ограничениями (constraints), триггерами, таблицами, представлениями, полями, индексами, пользователями, группами, публикациями и пр., может быть оформлена как вызов соответствующего метода соответствующего объекта и выполнена (при наличии прав доступа) из Visual Basic, Visual C++, Visual J++, Visual FoxPro и т. д. Как и для всякого OLE Automation Server, при распространении приложения, использующего вызовы SQL-DMO, на клиенте с помощью regsrv32.exe должна быть зарегистрирована библиотека поддержки объектов sqlole65.dll. Вот, например, как можно организовать просмотр содержимого таблицы MS SQL Server из MS Visual FoxPro 5.0:

    Объектная модель оказалась настолько мощной, полной и гибкой, что даже SQL Enterprise Manager (одна из основных утилит в составе MS SQL Server) был написан с использованием DMO.

    Интеграция с электронной почтой

    Рассматривая функции администрирования MS SQL Server 6.5, мы упоминали о возможности автоматической отправки сообщений по электронной почте в случае возникновения предупреждения, превышения порогового значения одного из показателей в SQL Performance Monitor или периодически на основе запланированного графика. В состав сервера входит утилита SQLMail, которая позволяет организовать взаимодействие с Microsoft Exchange Server для отправки и приема сообщений через расширенные хранимые процедуры, использующие вызовы функций MAPI. К этим процедурам относятся xp_startmail и xp_stopmail для запуска и остановки SQLMail, xp_sendmail для отправки сообщения, xp_findnextmsg для поиска следующего сообщения в почтовом ящике, xp_readmail для чтения сообщений и вложенных в них файлов, xp_deletemail для удаления. Все они находятся в библиотеке sqlmap60.dll и могут использоваться в скриптах на Transact-SQL, хранимых процедурах, триггерах и т. д. Например, в триггере на update можно предусмотреть непосредственную отправку сообщения (без вызова raiserror, как это было при работе с Alert Manager), если происходит попытка изменить какие-либо важные значения в базе данных. Приведенная ниже хранимая процедура осуществляет сканирование ящика входящих сообщений и запись параметров, поступивших сообщений в таблицу.

    SQLMail может быть сконфигурирован для автоматического запуска одновременно со стартом сервиса SQLExecutive. Сервис MS SQL Server должен быть стартован под учетной записью пользователя Windows NT (user account), которая обладает локальными административными правами и имеет соответствующие права в домене. Имя данного пользователя, под которым тот входил в Windows NT, должно совпадать с названием почтового ящика (mailbox name) MS Exchange.

    Характеристики языка Transact-SQL

    В основе практически всех вышеперечисленных утилит лежит код языка Transact-SQL. MS SQL Server 6.5 был первой СУБД, прошедшей сертификационные испытания Правительства США на соответствие входному уровню (entry level) федеральных стандартов обработки информации (FIPS) 127.2. Эти тесты основываются на известных стандартах ANSI SQL92 и включают дополнительные требования, в частности по поддержке трехуровневых архитектур. MS SQL Server 6.5 содержит большое количество черт и функций, относящихся к более высоким уровням стандарта ANSI SQL92 (intermediate и full), например скроллируемые в обоих направлениях курсоры с абсолютным и относительным позиционированием. Насколько мне известно, ни одна из СУБД на сегодня не достигла полного соответствия уровню ANSI SQL92, более высокому, чем входной.

    Transact-SQL включает операторы для изменения настроек сервера, пользовательской сессии, просмотра и редактирования данных, создания и модификации баз и их объектов. Способы обеспечения целостности данных представлены в табл. 2. В настоящее время в MS SQL Server поддерживается только строгий (restrict) тип ссылочной целостности.

    Тип целостности Пояснения Механизмы контроля
    Entity Определяет запись как уникальную для таблицы сущность Primary key, Unique key, Identity
    Domain Определяет область допустимых значений для поля Default, Check, Foreign key
    Referential Поддержка ссылочной целостности связей Check, Foreign key, Trigger
    User-defined Все прочие бизнес-правила на уровне столбца и таблицы Trigger, Rule, Stored procedure

    Вся информация об ограничениях, наложенных на таблицу, может быть просмотрена при помощи хранимой процедуры sp_helpconstraint. Ограничения всегда вызываются перед триггерами. Последовательность обработки выглядит следующим образом: rules, references, check, referenced by и затем triggers. Подробная характеристика черт Transact-SQL сама по себе могла бы составить отдельную статью или даже несколько статей, поэтому мы ограничимся констатацией лишь некоторых его новшеств по сравнению с предыдущей версией MS SQL Server:

  • операторы CUBE и ROLLUP для создания аналитических запросов при построении систем поддержки принятия решений;
  • оператор CREATE SCHEMA (создание концептуального контейнерного объекта);
  • возможность временной отмены ограничений при тиражировании;
  • дополнительные хранимые процедуры для настройки процесса тиражирования;
  • возможность тиражирования данных типа text и image;
  • возможность резервного копирования и загрузки отдельной таблицы;
  • возможность использования операторов DDL внутри транзакции;
  • новые опции DBREINDEX, PROCCACHE, ROWLOCK, UPDATEUSAGE для DBCC;
  • оператор INSERT-EXEC позволяет осуществить непосредственную вставку результатов выполнения процедуры;
  • поддержка распределенных транзакций.

    Помимо обычных хранимых процедур MS SQL Server предоставляет возможность динамической загрузки и выполнения функций, которые называются расширенными хранимыми процедурами и выполнены в виде dll-библиотек. Пример такой библиотеки, содержащий расширенные процедуры для работы с электронной почтой, мы видели, когда рассматривали интеграцию MS SQL Server с MS Exchange. Расширенные процедуры объединены в dll-библиотеки в целях повышения производительности по сравнению с оформлением в виде отдельных процессов. Кроме расширенных процедур, входящих в Transact-SQL, MS SQL Server позволяет создавать пользовательские расширенные процедуры c использованием кода на C при помощи MS Open Data Service (ODS) API. MS ODS является мощным средством разработки и применяется также для создания шлюзов к неподдерживаемым штатно пользовательским ресурсам, программирования задач аудита, извещения о событиях и пр. Добавление новых расширенных процедур осуществляется командой sp_addextendedproc ‘xp_proc’, ‘xp.dll’, где xp_proc — новая процедура, содержащаяся в библиотеке xp.dll. Удаление ненужных процедур производит команда sp_dropextendedproc. Так как расширенная процедура исполняется в адресном пространстве MS SQL Server, право на ее добавление имеет только системный администратор. Дополнительный уровень защиты обеспечивается обработчиком исключений MS SQL Server, который предотвращает сервер от сбоя в случае нарушений защиты памяти в расширенной процедуре.

    В версии 6.5 в Transact-SQL вошли хранимые процедуры для работы с объектами OLE Automation. Таким образом, фактически появилась возможность писать расширенные хранимые процедуры на любом языке программирования, поддерживающем создание cерверов OLE Automation: Visual Basic версии 4 и выше, Visual FoxPro 5.х и т. д. Экземпляр соответствующего объекта создается непосредственно в коде Transact-SQL при помощи хранимой процедуры sp_OACreate. Доступ к свойствам осуществляется через sp_OAGet-Property, sp_OASetProperty. Вызов метода организует процедура sp_OAMethod. sp_ OAGetErrorInfo сообщает информацию о последней произошедшей ошибке, наконец, sp_OADestroy высвобождает объект после его использования.

    Механизм вызовов удаленных хранимых процедур (RPC) позволяет организовать межсерверное взаимодействие и является мощным средством построения распределенных баз. RPC означает вызов с одного сервера процедуры, принадлежащей другому серверу баз данных. Клиентское приложение может вызывать процедуру на своем основном сервере, которая неявно для клиента может порождать каскад вызовов удаленных хранимых процедур на других серверах. RPC представляет собой достаточно удобный способ работы с распределенными данными без необходимости внесения изменений в клиентскую часть приложения.

    MS Distributed Transaction Coordinator (DTC) и распределенные транзакции

    Создание распределенных приложений приводит к тому, что транзакции также приобретают распределенный характер. Структуризация приложения в виде многих самостоятельных компонентов способна существенно повысить масштабируемость и повторную используемость, а также упростить его разработку. Однако при этом необходимо иметь в виду, что сбой в работе одного из компонентов (например, в результате выхода из строя компьютера, на котором она была запущена) не должен сказываться на целостности функционирования всего приложения в целом, т. е. компонент может временно выключиться из согласованной работы приложения, но связанные с ней сообщения должны быть обработаны корректно.

    Участниками распределенной транзакции являются приложение, менеджеры транзакций, менеджеры ресурсов и сами ресурсы, затрагиваемые транзакцией. В этой цепочке MS DTC выполняет роль менеджера транзакций. Тот DTC, к первому из которых обратилось приложение, инициировавшее транзакцию, называется первичным 1) менеджером транзакций. Пусть

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

    Как видно из примера, приложение начинает распределенную транзакцию, вызывая метод BeginTransaction объекта «первичный менеджер транзакции». После этого оно может работать с менеджерами ресурсов. Первое обращение к менеджеру ресурсов из приложения однозначно идентифицирует текущую транзакцию. Менеджеры ресурсов, участвующие в данной транзакции, должны прописаться в объекте «транзакция» при помощи менеджеров транзакций.

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

    Инициация распределенных транзакций сервером имеет ряд дополнительных преимуществ по сравнению с только что рассмотренной инициацией на стороне клиента. К ним относятся меньшие сетевые затраты при управлении транзакциями, а также то, что ошибка на клиенте не «подвешивает» транзакции в состоянии in-doubt. Кроме того, вызовы Transact-SQL достаточно просты в использовании. При явном определении все вызовы удаленных процедур наследуют контекст распределенной транзакции.

    При неявном определении при помощи установок sp_configure «remote proc trans», 1 (уровень сервера) или set remote_ procedure_transactions on (уровень сессии) MS SQL Server по умолчанию рассматривает локальные транзакции, начатые begin transaction, как распределенные с подключением DTC, если в них содержатся вызовы удаленных хранимых процедур.

    Корректное завершение транзакции выполняется при помощи протокола двухфазной фиксации. Когда приложение вызывает метод commit, менеджер транзакций оповещает зарегистрировавшиеся менеджеры ресурсов подготовиться к фиксации данной транзакции, и, после того как все они известили о своей готовности, менеджер транзакций рассылает широковещательное сообщение зафиксировать транзакцию. Если хотя бы один менеджер ресурсов не сообщил о готовности фиксировать транзакцию, она повсеместно откатывается. После сообщения о готовности менеджер ресурсов пребывает в состоянии сомнения (in-doubt) относительно общего исхода. Так как менеджеры ресурсов регистрируются в транзакции, то менеджеры транзакций имеют возможность отслеживать все их операции и хранят журналы о решениях фиксировать или откатить транзакцию. В свою очередь менеджер ресурсов также ведет у себя такой журнал. Следовательно, если имел место сбой в сети, то после его ликвидации менеджер транзакций связывается с вышестоящим менеджером транзакций и запрашивает его об исходах. После этого менеджер ресурсов идет на свой менеджер транзакций и получает у него информацию о том, что делать с зависшими транзакциями. Кроме этого, если исход транзакции известен, DTC предоставляет возможность «ручного» разрешения транзакций, чтобы слишком долго не держать данные блокированными.

    MS DTC содержит компоненты клиентской и серверной настройки. Установка клиентского компонента требуется только в том случае, если данный клиент будет сам инициировать распределенные транзакции, а не использовать транзакции, начатые на серверной стороне как begin distributed transaction. MS DTC достаточно легок и удобен в настройке и управлении. Он имеет окна:

  • в разных источниках он может также называться глобальным (global) или корневым (root);
  • конфигурации, позволяющее задать темп обновления информации, транзакции какой давности должны показываться, место и емкость журнала, статус DTC;
  • трассировки, отображающие сообщения от DTC;
  • транзакций, отображающие статус текущих транзакций:
  • статистики по текущим и суммарным транзакциям.

    В рассмотренном примере инициации распределенной транзакции на стороне клиента мы проиллюстрировали использование интерфейсов, соответствующих стандарту OLE Transaction. OLE Transaction выгодно отличается от некоторых других распространенных стандартов тем, что построен на основе объектной модели и поддерживает приложения, работающие одновременно со многими потоками. OLE Transaction обладает улучшенными характеристиками по сравнению с ранее разработанными стандартами, лишенными, например, возможности восстановления (recovery), инициированного менеджером ресурсов. Тем не менее при помощи процесса XA Mapper MS DTC, выполняющего роль переводчика между XA и OLE Transaction, обеспечивается определенное взаимодействие с продуктами, совместимыми со стандартом X/Open DTP XA (см. рис. 3). MS DTC может участвовать в транзакциях, координируемых мониторами транзакций Encina, TopEnd и Tuxedo, для которых он выглядит как некоторый менеджер ресурсов. Стандарт OLE Transaction содержит возможности расширения для работы с широким спектром транзакционно защищенных ресурсов, к которым могут быть отнесены документы, образы, очереди сообщений и другие виды плохо структурированной информации.

    Блокировки

    MS SQL Server использует следующие типы блокировок:

    shared — для операций, не изменяющих содержимое данных, например select;

    update — когда сервер намеревается изменить данные, во время непосредственной записи обновлений этот тип блокировки изменяется на exclusive (для таблиц см.intent);

    exclusive — при модификации данных (insert, update, delete).

    Совместимость блокировок различных типов приводится в табл. 3. Основными типами являются shared и exclusive. Блокировку типа update можно рассматривать как некий механизм для сочетания первых двух типов блокировок в одной операции в целях предотвращения взаимного блокирования транзакций (deadlock). Как правило, большинство процессов, модифицирующих данные, состоят из двух частей: поиск (чтение) необходимой информации и внесение изменений. Заметим, что при наличии кластеризованного индекса на таблицу операция вставки тоже относится к подобным процессам — сервер должен сначала отыскать правильное местоположение новых записей. Разумно во избежание излишней конкуренции разрешить другим транзакциям читать данные во время первой фазы такого процесса. Тогда возникает вопрос: зачем вообще вводить дополнительный тип блокировки и почему нельзя обойтись первыми двумя? Ответ очевиден, если рассмотреть одновременно несколько таких процессов. Они будут прекрасно уживаться на стадии поиска, но ни один из них не сможет монопольно запереть данные для записи, так как другие в это время их читают. Для исключения взаимной блокировки в MS SQL Server при выполнении первой фазы вводится тип блокировки update, который (см. табл. 3) не допускает аналогичные блокировки на протяжении периода своего действия по отношению к блокированным им данным.


    Тип блокировки shared update exclusive
    shared OK OK X
    update OK X X
    exclusive X X X

    Уровень блокировки может распространяться на:

  • запись (для операций insert);
  • cтраницу — 2-килобайтный фрагмент данных или индексов;
  • расширение (extent) — 8 последовательных страниц, используется при размещении или высвобождении страниц (например, в командах create/drop или когда операция вставки insert требует выделения новых страниц памяти);
  • таблицу, включая все входящие в нее данные и индексы 2) .

    В следующей версии блокировка уровня записи будет возможна для всех типов транзакций. Блокировка уровня записи на операции вставки позволяет в первую очередь решить задачу уменьшения вероятности конкуренции в OLTP-системах с массированным одновременным вводом информации (типичный пример — операционный день банка), где таблицы содержат только некластерные индексы или кластерный индекс построен по монотонно возрастающему ключу. По умолчанию эта опция выключена. В текущей базе данных ее можно задействовать командой sp_tableoption , ‘insert row lock’, ‘true’.

    Существует диалектическое противоречие, с которым наверняка сталкивался каждый администратор базы данных или разработчик. С одной стороны, хочется уменьшить до минимума вероятность столкновения интересов пользователей при доступе к одним и тем же ресурсам и потому блокировать все на как можно более детальном уровне. С другой — очень не хочется перегружать менеджер блокировок, который фиксирует информацию о том, кто наложил блокировку, какого типа, кто ждет, пока она освободится и т. д. Например, в MS SQL Server 6.5 каждая блокировка обходится в 32 байта. Для разрешения этого противоречия сервер умеет автоматически повышать уровень блокировки в случае, если блокировок предыдущего уровня детализации становится слишком много (lock escalation). «Слишком много» — это LE Threshold Maximum в настройках конфигурации сервера, т. е. максимальная пороговая величина числа страничных блокировок, при достижении которой происходит эскалация до уровня таблицы. По умолчанию она равна 200. Для этих же целей используется настройка LE Threshold Percentage — в относительном выражении к размеру таблицы (но не меньше, чем LE Threshold Minimum, что полезно для небольших таблиц). В перспективе возможна обратная стратегия динамической деэскалации уровня блокировки, когда блокируется заведомо больший фрагмент данных, чем требуется, но, как только появляется транзакция, конкурирующая за данные внутри данного фрагмента, уровень первой транзакции будет автоматически уменьшен.

    Управление уровнем изоляции транзакций на протяжении всего соединения (пользовательской сессии) осуществляется при помощи установки set transaction isolation level , где уровень изоляции может принимать значения:

    read uncommitted соответствует уровню изоляции 0 стандарта ANSI, т. е. просто запрещает различным транзакциям изменять одни и те же данные в одно и то же время, но допускает грязное и неповторяющееся чтение и фантомы 3) ;

    read committed (устанавливается по умолчанию) соответствует уровню изоляции 1 стандарта ANSI, т. е. предотвращает грязное чтение;

    repeatable read или serializable соответствует уровню 3 по стандарту ANSI — предотвращает грязное чтение, а также гарантирует, что два оператора select в разных местах одной транзакции будут возвращать одинаковый результат, т. е. исключает неповторяющееся чтение и фантомы.

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

    nolock то же, что read uncommitted, — дает возможность чтения грязных (еще не зафиксированных) данных, которая перекрывает аналогичные параметры конфигурации пользовательской сессии. В операторе select можно также оговорить продолжительность блокировки данных;

    holdlock инструктирует сервер держать блокировки до завершения транзакции (по умолчанию блокировки снимаются сразу же по прочтении требуемых данных;

    Тип и уровень блокировки:

    updlock заставляет применить блокировку update вместо обычной shared, используется, когда следом идет оператор update, основанный на прочитанных значениях, чтобы запретить update из других транзакций;

    paglock заставляет сервер при любых условиях использовать блокировки уровня страницы;

    tablock принудительно блокирует таблицу (shared);

    tablockx принудительно блокирует таблицу (exclusive).

    Просмотр текущих блокировок выполняется при помощи хранимой процедуры sp_lock или через включение флага трассировки 1200 на клиента: dbcc traceon (3604,1200). Также полезным являются флаги 1204 и 1205, которые выдают информацию о cитуациях взаимной блокировки (deadlocks). MS SQL Server обладает возможностью автоматического обнаружения deadlocks как циклов в цепочке блокировок. Он находит первый процесс, который мог бы разорвать цикл, убивает его и откатывает все транзакции этого процесса, находившиеся в стадии выполнения. Как правило, им оказывается тот самый процесс, который запросил блокировку, послужившую причиной зацикливания. После этого сервер генерирует сообщение об ошибке 1205. Если клиентское приложение имеет обработчик ошибок, отлавливающий ошибку 1205, то оно может предпринять соответствующие действия по исправлению ситуации, и конечный пользователь, скорее всего, даже не узнает, что имела место взаимная блокировка.

    Надежность хранения информации

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

    Как мы уже отмечали, говоря о симметричной архитектуре, операции резервного копирования и восстановления могут распараллеливаться на несколько потоков и выполняться одновременно, используя преимущества асинхронного ввода/вывода. На каждое резервное устройство отводится свой поток. Параллельное резервное копирование поддерживает до 32 одновременных резервных устройств (backup devices), что позволяет быстро создавать страховочные копии баз данных даже очень большой емкости. Возможность резервного копирования и восстановления отдельных таблиц, о чем мы упоминали, рассматривая Transact-SQL, позволяет экономить место и время, не выполняя копирование всей базы ради только некоторых ее объектов. Однако резервное копирование отдельной таблицы требует наложения на нее блокировки exclusive в отличие от резервного копирования всей базы или журнала транзакций, которые могут выполняться независимо от степени активности пользователей. Резервным копиям может быть назначен предельный срок хранения или дата утраты актуальности, до наступления которой место, занятое на устройстве этими копиями, не может использоваться для размещения других резервных копий при инициализации устройства. В качестве резервных устройств могут также применяться временные устройства, не входящие в состав базы и не имеющие записей в системной таблице sysdevices:

    Для небольшой базы данных ее журнал транзакций обычно хранится на том же устройстве, что и сама база, и архивируется вместе с ней. Журналирование транзакций ведется по принципу write-ahead, что означает, что любое изменение сначала отражается в журнале транзакций и лишь потом попадает собственно в базу. В случае нахождения журнала транзакций на отдельном устройстве существует возможность отдельного резервного копирования журнала транзакций. Как правило, резервное копирование базы данных организуется с меньшей частотой, чем журнала транзакций. Например, сохранение журнала транзакций выполняется ежедневно, а страховая копия всей базы может делаться раз в неделю, так как архивирование журнала транзакций происходит значительно быстрее по времени и занимает меньше места, чем дамп целой базы. В отличие от резервирования базы данных дамп журнала транзакций очищает его неактивную часть, т. е. все завершившиеся (зафиксированные или абортированные) с момента последнего дампа транзакции, если только не использована опция NO_TRUNCATE. Команда DUMP TRANSACTION TRUNCATE_ONLY, очищающая журнал транзакций, полезна в случае его переполнения, которое можно контролировать, например, оператором DBCC SQLPERF (LOGSPACE). Если степень переполнения журнала очень высока, можно при его очистке отказаться от журналирования факта самого этого события: DUMP TRANSACTION NO_LOG. Если резервное копирование транзакций не представляет интереса, можно включить опцию очистки последних завершенных транзакций в базе по наступлению события checkpoint. Cмысл механизма checkpoint состоит в периодической записи данных из кэша на диск, чтобы не допускать грязных данных. Такого рода события постоянно генерируются MS SQL Server или возникают по инициативе пользователя. Включенная опция truncate log on checkpoint гарантирует выполнение с определенной частотой обработчиком события действий, приблизительно эквивалентных команде DUMP TRANSACTION TRUNCATE_ONLY.

    При восстановлении журнала транзакций соответствующие транзакции применяются к базе данных. Это означает, что если в начале недели была сделана резервная копия всей базы, а потом ежедневно архивировались транзакции за каждый день, то при необходимости восстановления поднимается состояние базы на начало недели и на него последовательно накатываются дампы журнала транзакций за все дни, предшествующие моменту восстановления. MS SQL Server 6.5 имеет возможность восстановления данных из журнала транзакций на произвольный момент времени (разумеется, отраженный в журнале) при помощи команды LOAD TRANSACTION STOPAT или в окне database backup and restore выбором опции until time. Все содержащиеся в этом дампе транзакции, отмеченные завершившимися после этого момента, будут откачены.

    Возможность планирования задач резервного копирования во времени и отсылки сообщений по e-mail в случае успешного/неуспешного завершения рассматривалась нами при обсуждении SQL Executive.

    MS SQL Server 6.5 предусматривает возможность зеркалирования устройств, переключения на зеркальные устройства в качестве основных, выключения зеркалирования и уничтожения зеркального устройства также «на лету», т. е. без остановки штатной работы сервера по обслуживанию пользовательских запросов. Зеркалирование и дуплексирование устройств для работы с MS SQL Server может быть также выполнено средствами Windows NT, а также на аппаратном уровне (поддержка различных RAID-систем и т. д.). По-видимому, следует предполагать, что реализация первого этапа кластерной технологии WolfPack будет поддерживать MS SQL Server 6.5 в отказоустойчивых кластерах из двух узлов. Появление следующей версии MS SQL Server должно обеспечить работу серверов в кластере как единого виртуального сервера.

    Transfer Manager используется для экспорта/импорта объектов и данных БД на MS SQL Server между разными аппаратными платформами, например между процессорами Intel и Alpha, а также между разными версиями MS SQL Server, в частности из более ранних в более поздние или между равноценными (имеются в виду 4.х и 6.х). Очень часто проектирование объектов базы ведется с помощью различных графических средств, но проектная документация может требовать структуру объектов с точностью до операторов DDL. Для получения скриптов, описывающих создание отдельного объекта базы данных, можно использовать команду transfer из контекстного меню объекта или выбрать соответствующий класс и имя объекта в Transfer Manager. Кроме этого, содержимое данных может быть выгружено/загружено при помощи утилиты bcp (см. табл. 1).

    Тиражирование

    Наличие развитого механизма тиражирования в любой серьезной системе управления базами данных обуславливается необходимостью приближения данных к местам их непосредственного потребления, что является особенно важным фактором при построении витрин данных в системах принятия решений, разгрузки приложений от избыточных функций чтения/поиска при создании отчетов и т. д. Создание распределенных приложений с использованием средств тиражирования положительно сказывается на относительной автономии сайтов, повышении масштабируемости и производительности. Традиционно в построении распределенных систем данных существуют два основных подхода. Один из них основан на плотной целостности данных (loose consistency) и рассматривался нами в пункте, посвященном MS Distributed Transaction Coordinator. Протокол двухфазной фиксации гарантирует идентичность данных в любой момент времени на всех узлах сети, однако необходимо иметь в виду, что этот подход требует наличия высокоскоростных каналов передачи данных и постоянной доступности каждого узла. Другой подход, основанный на слабой целостности (loose consistency), допускает, вообще говоря, некоторый временной интервал между внесением изменений в оригинал и их отражением в образе. Приложения, основанные на принципе слабой целостности, являются значительно менее чувствительными к доступности узлов, а также пропускной способности и надежности каналов передачи данных. Тиражирование в MS SQL Server построено на использовании именно второго подхода.

    Основными действующими лицами в процессе тиражирования служат издатель (publisher), дистрибьютор (distributor) и подписчик (subscriber). Поскольку тиражирование является неотъемлемой составной частью MS SQL Server, последний может выступать в роли каждого из них. Конфигурирование и управление каждой ролью осуществляется из SQL Enterprise Manager через уже знакомые нам SQL-DMO или с помощью операторов и хранимых процедур языка Transact-SQL. Репликационной единицей в плане распространения и подписки является публикация (publication). Публикация состоит из одной или нескольких статей (articles). Статьей публикации называется отдельная таблица или ее вертикальный и/или горизонтальный фрагмент. Вертикальное фрагментирование осуществляется выбором соответствующих полей таблицы, горизонтальное — при помощи условия where или специальной процедуры горизонтальной фильтрации (CREATE PROCEDURE — FOR REPLICATION). Таблица обязана иметь первичный ключ. Как только на издателе созданы статьи, все тиражируемые объекты отмечаются специальным признаком в одном из полей системной таблицы sysobjects. Кроме этого, в тиражируемой базе ведется еще три справочные таблицы. Syspublications в отдельной строке хранит информацию о каждой новой публикации. Она связана отношением один-ко-многим с таблицей sysarticles, содержащей информацию о статьях и их принадлежностью публикациям. Наконец, последняя, в свою очередь, связана отношением один-ко-многим с таблицей syssubscriptions, где содержится информация о том, каким подписчикам адресована каждая статья.

    Тиражирование в MS SQL Server основано на журнале транзакций (log-based). На каждую тиражируемую базу данных на дистрибьюторе запускается процесс под названием log reader, который читает журнал транзакций на издателе, выбирает оттуда все завершенные транзакции, помеченные к тиражированию и передает их дистрибьютору, на который с того момента возлагается вся дальнейшая ответственность по доведению этих транзакций до подписчика. Издатель, таким образом, высвобождается от всякой заботы по распространению транзакций и не расходует на это свои ресурсы. Каждый подписчик обслуживается отдельным потоком дистрибьютора. Клиент, первым запустивший sp_replcmds на публикуемой базе данных, рассматривается ею как log reader, все остальные попытки это сделать вызовут сообщение об ошибке. Процедура sp_repltrans позволяет получить список завершенных транзакций базы данных, еще не переданных дистрибьютору (идентификатор ряда, страница и отметка времени поступления). sp_replcmds содержит еще информацию о самих командах, связанных с этой транзакцией, и к какой статье публикации она относится. Log reader читает эти операции, определяет соответствующие им sql-команды и пишет их в базу данных распространения (distribution database) на дистрибьюторе. База данных распространения имеет таблицы MSjobs, содержащую информацию о транзакциях для тиражирования, связанную как один-ко-многим с таблицей MSjob_commands, которая разбивает каждую транзакцию на отдельные команды. Каждая команда должна быть передана определенному подписчику, что определяется в таблице MSsubscriber_jobs. На издателе прочитанные транзакции отмечаются как переданные на распространение, и только после этого они могут быть оттуда уничтожены при резервном копировании журнала транзакций (см. выше). Например, процедура sp_repldone, определяя транзакцию в журнале базы издателя по ряду и странице, помечает ее как распространенную. Процесс синхронизации (sync task), один на публикацию, всякий раз при появлении нового подписчика создает мгновенный снимок (snapshot) данных на издателе, подлежащих тиражированию этому подписчику. При этом создаются файлы схем данных и, собственно, содержания (bcp-типа), которые будут переданы подписчику при распространении для обеспечения первоначальной идентичности данных.

    На дистрибьюторе существуют еще два вида процесса: распространение и очистка. Задача распространения создается для каждой пары «тиражируемая база/подписавшаяся база», а задача очистки — для пары «издатель/подписчик». Распространение (distribution task) применяет прочитанные из базы данных распространения sql-команды к базе данных подписчика. Процесс очистки (cleanup task) уничтожает все выполненные работы (т. е. транзакции) из базы данных распространения через некоторый настраиваемый интервал (retention period) после того, как они были доведены до подписчика. Задача очистки может быть создана вручную при помощи sp_addsubscriber, a задача распространения — как sp_addsubscription (sp_subscribe). Несмотря на то что организация всего процесса тиражирования может быть записана в кодах при помощи вызовов специальных хранимых процедур, эта черта используется на практике крайне редко и главным образом в целях отладки. В обычных ситуациях настройка и управление тиражированием осуществляются из графической среды SQL Enterprise Manager и планировщика задач SQL Executive.

    Все задачи репликации на дистрибьюторе работают под управлением SQL Executive (msdb. systasks) и под его контекстом безопасности. Процесс выполнения любой из них можно контролировать в окне task history. Дополнительным средством контроля служит SQL Performance Monitor, куда передается необходимая статистическая информация о тиражировании (sp_replcounters). Соединение дистрибьютора с издателем происходит на основе DB-Library, а с подписчиком — через ODBC. Таким образом, в качестве подписчиков MS SQL Server может выступать широкий спектр ODBC-достижимых ресурсов, к которым, например, относятся другой Access, Sybase, Oracle, DB2 и т. д. Тиражирование в MS SQL Server основано на интегрированном режиме безопасности (см. Безопасность), следовательно, между дистрибьютором и подписчиком должны быть установлены доверительные соединения (trusted connections) с использованием поименованных каналов (named pipes) или мультипротокола. Если серверы находятся в разных доменах, между доменами должны быть установлены двусторонние доверительные отношения. Схема тиражирования показана на рис. 4. В случае небольших объемов тиражируемых данных издатель часто совмещает с дистрибьютором на одном MS SQL Server. Отметим также, что серверы, участвующие в тиражировании, должны использовать одни и те же кодовые страницы.

    MS SQL Server обладает обширными возможностями настройки процесса тиражирования. Мы уже упоминали о горизонтально-вертикальных фрагментах таблиц в качестве статей публикаций. Отметим, что для каждой статьи имеется возможность назначить к тиражированию только необходимые типы транзакций. Например, можно запретить передачу подписчикам транзакции типа «delete» в рамках данной статьи. Более того, на каждый тип транзакций можно настроить вид пользовательских действий на стороне подписчика. Например, при поступлении подписчику транзакций вставки и удаления они будут отрабатываться, как обычно, а по приходе транзакции типа «update» на подписчике будет вызываться некоторая хранимая процедура. Некоторые ограничения в тиражируемых данных бывает нецелесообразно передавать подписчику. В этом случае они помечаются как not for replication. Процесс синхронизации как самый дорогой в смысле трафика предусматривает возможность ручного выполнения синхронизации или полного отказа от синхронизации данных и передачу исключительно транзакций. Существует и обратная возможность: подписчику с определенной периодичностью будут поступать только мгновенные снимки данных, а не их изменения.

    В зависимости от административного акцента MS SQL Server позволяет организовать подписку на стороне издателя либо на стороне подписчика. Первый вид подписки (push subscription) используется при централизованном распространении, когда подписки создаются «выталкиванием» статей на те или иные серверы-подписчики, которые могут не иметь своих администраторов. Второй вид (pull subscription) предполагает известную автономию сервера-подписчика, администратор которого определяет, какие публикации ему принимать. По умолчанию все публикации создаются со статусом безопасности «неограничено», они видны и на них могут подписаться любые зарегистрированные серверы подписки. Ограниченная публикация может быть выписана только теми серверами, которые имеют на это соответствующие права.

    Вопросы безопасности доступа

    Как мы уже отмечали, говоря о преимуществах интеграции с операционной системой, MS SQL Server использует в своей работе сервисы безопасности Windows NT. Напомним, что Windows NT на сегодня сертифицирована по классам безопасности С2/Е3. MS SQL Server может быть настроен на работу в одном из трех режимах безопасности. Интегрированный режим предусматривает использование механизмов аутентификации Windows NT для обеспечения безопасности всех пользовательских соединений. В этом случае к серверу разрешаются только трастовые, или аутентифицирующие, соединения (named pipes и multiprotocol). Администратор имеет возможность отобразить группы пользователей Windows NT на соответствующие значения login id MS SQL Server при помощи утилиты SQL Security Manager. В этом случае при входе на MS SQL Server login name и пароль, переданные через DB-Library или ODBC, игнорируются. Стандартный режим безопасности предполагает, что на MS SQL Server будут заводиться самостоятельные login id и соответствующие им пароли. Смешанный режим использует интегрированную модель при установлении соединений по поименованным каналам или мультипротоколу и стандартную модель во всех остальных случаях.

    MS SQL Server обеспечивает многоуровневую проверку привилегий при загрузке на сервер. Сначала идентифицируются права пользователя на установление соединения с выбранным сервером (login name и пароль) и выполнение административных функций: создание устройств и баз данных, назначение прав другим пользователям, изменение параметров настройки сервера и т.д. Максимальными правами обладает системный администратор. На уровне базы данных каждый пользователь, загрузившийся на сервер, может иметь имя пользователя (username) базы и права на доступ к объектам внутри нее. Имеется возможность отобразить нескольких login id на одного пользователя базы данных, а также объединять пользователей в группы для удобства администрирования и назначения сходных привилегий. По отношению к объектам базы данных пользователю могут быть назначены права на выполнение различных операций над ними: чтение, добавление, удаление, изменение, декларативная ссылочная целостность (DRI), выполнение хранимых процедур, а также права на доступ к отдельным полям. Если этого недостаточно, можно прибегнуть к представлениям (views), для которых сказанное остается справедливым. Наконец, можно вообще запретить пользователю непосредственный доступ к данным, оставив за ним лишь права на выполнение хранимых процедур, в которых будет прописан весь сценарий его доступа к базе. Хранимые процедуры могут создаваться с опцией WITH ENCRYPTION, которая шифрует непосредственный текст процедуры, хранящийся обычно в syscomments. Права на выполнение некоторых команд (создание баз, таблиц, умолчаний, правил, представлений, процедур, резервное копирование баз и журналов транзакций) не являются объектно-специфичными, поэтому они назначаются системным администратором сервера или владельцем (создателем) базы данных при редактировании базы данных. Администрирование пользовательских привилегий обычно ведется в SQL Enterprise Manager, тем не менее в Transact-SQL имеются хранимые процедуры (sp_addlogin, sp_password, sp_revokelogin, sp_addalias, sp_adduser) и операторы (GRANT, REVOKE), которые позволяют осуществлять действия по созданию пользователей, назначению и отмене прав при выполнении скриптов. Дополнительную возможность администрирования привилегий предоставляют рассмотренные нами выше SQL-DMO.

    Некоторые вопросы использования MS SQL Server в Internet/intranet-приложениях

    Как мы уже отмечали, SQL-DMO являются одним из наиболее мощных инструментов доступа к информации, хранящейся на MS SQL Server, и решения административных задач из клиентских приложений. Традиционные вопросы клиентского доступа к MS SQL Server достаточно подробно освещались в литературе как по отношению к средствам разработки Microsoft Visual Tools (по крайней мере применительно к Visual C++, Visual Basic, Visual FoxPro), так и к программным продуктам фирм Borland, Powersoft и т. д. Программные модели, основанные на Microsoft Jet Database Engine (Data Access Objects), Remote Data Objects, DB-Library, ODBC API хорошо известны и широко используются. Поэтому мы акцентируем наше внимание на способах работы c MS SQL Server 6.5 через Internet.

    Времена статических страниц объявлений и рекламы миновали — бурное развитие бизнеса в Internet предполагает непосредственное участие клиента в совершении сделок. Говоря об использовании MS SQL Server при построении активных Internet/intranet-приложений, мы снова должны обратиться к преимуществам его тесной интеграции со всеми продуктами семейства Microsoft BackOffice. На этот раз речь пойдет об Internet Information Server (IIS).

    Помимо исполнения CGI-скриптов MS IIS предоставляет разработчикам возможность создания с помощью соответствующего прикладного программного интерфейса (ISAPI) приложений в виде динамических библиотек, запуск которых происходит в ответ на команду или выбор линка на Web-странице. В отличие от CGI, где каждый скрипт исполняется как иной, нежели Web-сервер, процесс, что быстро «съедает» ресурсы даже достаточно мощной машины при большом количестве заходов на сервер, ISAPI-приложение выполняется в адресном пространстве Web-сервера, что, естественно, повышает скорость работы и существенно экономит машинные ресурсы. В зависимости от сложности сайта и приложений, dll могут быть предзагружены одновременно с запуском сервера, либо подгружаться/выгружаться из памяти по мере необходимости. К наиболее известным средствам разработки приложений на основе ISAPI относятся входящий в состав MS IIS Internet Database Connector (IDC), а также свободно распространяемый dbWeb.

    Microsoft dbWeb представляет собой шлюз между 32-битными ODBC-ресурсами и MS IIS. dbWeb предусматривает создавание схемы, содержащей описание данных и связанных с ними Web-страниц. Он поддерживает исполнение запросов в реальном режиме времени на основе «pull»-модели публикации, позволяя тем самым создавать активные Web-страницы. Microsoft dbWeb структурно состоит из двух основных компонентов: dbWeb Service и dbWeb Administrator. dbWeb Service является типичным ISAPI-приложением, которое обрабатывает пользовательские запросы, направляемые посетителем страницы через броузер, и управляет соединениями между броузером, ODBC-ресурсом и IIS. К функциям dbWeb Administrator относится создание HTML-страниц, содержащих результаты выполнения запросов на основе уже упоминавшихся схем, с помощью которых осуществляется управление публикуемыми данными. Схемы определяют сам запрос и структуру страниц. При этом не требуется знания HTML или ISAPI, так как в состав dbWeb Administrator входит интерактивный мастер-построитель схем (Schema Wizard), который в традиционной для любой программы-мастера манере позволяет задать поля поиска по методу Query-by-Example (QBE), выбрать поля для отображения в таблице страницы результатов и определить переходы из списка записей в отдельные страницы, содержащие развернутую информацию по текущей записи. Настройкой соответствующих свойств можно разрешать или запрещать операции вставки, удаления и редактирования. Для проверки прав пользователя используется система безопасности той СУБД, к которой происходит доступ.

    IDC входит в состав MS IIS. С помощью вызовов функций ODBC API он обеспечивает прямую связь между полями HTML-формы и соответствующим ODBC-достижимым источником данных. Для доступа к данным и публикации на Web IDC использует файлы двух типов — .idc и .htx. Файл с расширением idc (см. пример) содержит всю необходимую информацию о соединении с источником данных, текст запроса, а также ссылку на соответствующий htx-файл. Файл с расширением htx (см. пример) служит шаблоном страницы, на которой будут опубликованы данные из базы, а также элементы оформления в виде статического текста, графики, видео и т. п. MS IIS распознает расширение .idc как вызов httpodbc.dll, которая считывает http-заголовки из управляющего блока ISAPI для определения параметров запроса. Httpodbc.dll читает и разбирает idc-файл, указанный в URL. Имя источника, имя пользователя, пароль и пр. используются для подключения к соответствующему ресурсу ODBC, после чего httpodbc передает на выполнение SQL-запрос и получает результаты. Результаты используются для наполнения заготовки в виде htx-файла, затем полученный HTML-документ MS IIS передает броузеру.

    SQL Web Assistant, входящий в состав MS SQL Server 6.5, в отличие от двух только что рассмотренных инструментов, не является ISAPI-приложением и работает только с MS SQL Server. Web Assistant имеет интерфейс мастера (wizard), т. е. состоит из ряда последовательных форм с вопросами, отвечая на которые, администратор может сэкономить время по выполнению рутинного HTML-кодирования и получить готовую (в HTML-кодах) страницу, содержащую результаты опубликования произвольного запроса к базе. Полученная страница не является активной в строгом смысле этого слова, так как публикуется при помощи push-метода, т. е. обновление происходит по инициативе сервера и не допускает обновления со стороны клиента. Однако сервер может производить обновление (перегенерацию) страницы на триггерной основе или на основе расписаний задач под управлением SQL Executive. Мастер работает только с базами данных MS SQL Server и использует три хранимые процедуры sp_makewebtask, sp_runwebtask и sp_dropwebtask. При необходимости они могут использоваться самостоятельно в кодах Transact-SQL. Предположим, мы имеем каталог товаров или справочник курсов валют и хотим, чтобы все изменения в нем автоматически отражались на Web. Для этого мы определяем задачу публикации:

    а на соответствующую таблицу «вешаем» триггер

    который будет вызывать перегенерацию страницы всякий раз, как только в таблицу будут вноситься какие-либо изменения.

    Active Data Objects (ADO) в достаточно грубом приближении служат VB-интерфейсом к OLE DB. Их роль видится особенно важной в развитии компонентного подхода и технологий универсального доступа к данным. В данном случае мы рассмотрим их использование в Microsoft Active Server Pages (ASP). Активные серверные страницы представляют собой инструмент для эффективной разработки серверных Web-приложений, интегрирующих в своем составе HTML-код, VBScript и компоненты ActiveX. С их помощью в уже существующие наработки легко могут быть встроены фрагменты кода на VBScript или JavaScript, а также вызовы соответствующих объектов ActiveX. Помимо базовых объектов (Application, Request, Response, Server, Session) ASP поддерживают многочисленные компоненты ActiveX, которые упрощают создание и значительно повышают функциональность активных Web-страниц. Среди них нас в первую очередь будут интересовать компоненты, позволяющие организовать доступ к базам данных, т. е. ADO. Например, публикация результата запроса может быть выполнена, как:

    Интерфейс ADO из данного примера практически без изменений может быть использован при работе с MS SQL Server из VB, Visual FoxPro и т. д. Таким образом, с помощью ADO могут быть построены пользовательские компоненты для обращения к серверу баз данных как со стороны «толстого» (Win32), так и со стороны тонкого (броузер) клиента.

    Заключение

    MS SQL Server 6.5 представляет собой мощный полнофункциональный сервер баз данных, отличающийся высокой производительностью, быстротой освоения и удобным интерфейсом администрирования. Под его управлением могут работать базы данных в широком диапазоне от уровня среднего звена предприятия до распределенных баз масштаба корпорации. Доступ к MS SQL Server возможен из большого числа средств разработки клиентских front-end, настольных баз данных и офисных продуктов. MS SQL Server изначально ориентирован на интеграцию с другими серверами MS BackOffice, что позволяет непосредственно охватить решение комплексных задач автоматизации хранения и обработки информации, электронной почты и документооборота, построения Internet/intranet приложений и т. д. MS SQL Server работает в как в традиционных клиент-серверных платформах, так и в многоуровневых средах. Одним из основных инструментов при создании распределенных многокомпонентных приложений является Microsoft Transaction Server.

    Автор выражает признательность Дмитрию Артемову (Microsoft) за поддержку и участие в обсуждении ряда вопросов, возникших в ходе написания данной статьи.

    Литература

    1. Microsoft SQL Server 6.5. Комплект документации.

    2. MS SQL Server 6.5 Unleashed, by David Solomon, Ray Rankins, et al, ISBN 0-672-30956-4.

    3. Microsoft SQL Server 6.5 DBA Survival Guide, by Mark Spenik & Orryn Sledge, ISBN 0-672-30797-9.

    4. Hitchhiker’s Guide to Visual Basic & SQL Server, by William.R.Vaughn, ISBN 1-55615-906-4.

    5. Clustering Support for Microsoft SQL Server. White Paper.

    6. Кастер Х. «Основы Windows NT и NTFS», Microsoft Press. «Русская Редакция», 1996.

    7. Transaction Processing,by Jim Gray & Andreas Reuter, ISBN 1-55860-190-2.

    8. Круглински Д. «Основы Visual C++», части IV-V, Microsoft Press. «Русская Редакция», 1997.

    9. Inside COM, by Dale Rogerson, Microsoft Press, ISBN 1-57231-349-8.


    10. Шуленин А. «Microsoft SQL Server и активный Internet». Материалы Форума «Информационные Технологии’97».

    1) В разных источниках он может также называться глобальным (global) или корневым (root).

    2) Иногда выделяют еще блокировку intent. Однако intent не является блокировкой в строгом смысле слова, это метка в цепочке табличных блокировок, предупреждающая другие транзакции о том, что текущий процесс намерен произвести эскалацию масштаба блокирования до уровня таблицы.

    3) Напомним, что под грязным чтением (dirty read) понимается ситуация, когда транзакция Т1 модифицирует запись, транзакция Т2 ее читает, Т1 тем временем откатывает изменения и Т2 работает с записью, которая реально никогда не существовала. Неповторяющееся чтение (unrepeatable read) возникает в случае, если Т1 читает запись, Т2 ее изменяет и Т1 снова прочитывает ту же запись. Т1, дважды прочитав одну и ту же запись, фактически видела два разных значения. Фантомы: Т1 читает записи, удовлетворяющие определенному условию, после этого Т2 добавляет или удаляет записи. Если Т1 опять произведет выборку по тому же условию, она может получить множество записей, не совпадающее с предыдущим.

    Поделитесь материалом с коллегами и друзьями

    Обзор типов данных PL/SQL

    При объявлении переменной или константы необходимо задать ее тип данных (PL/SQL, за некоторыми исключениями, относится к языкам со статической типизацией — см. ниже врезку). В PL/SQL определен широкий набор скалярных и составных типов данных; кроме того, вы можете создавать пользовательские типы данных. Многие типы данных PL/SQL (например, BOOLEAN и NATURAL ) не поддерживаются столбцами баз данных, но в коде PL/SQL эти типы весьма полезны.

    Практически все заранее определенные типы данных определяются в пакете PL/SQL STANDARD . Например, определение типа данных BOOLEAN и двух числовых типов данных может выглядеть так:

    PL/SQL поддерживает распространенный «джентльменский набор» типов данных, а так-же ряд других типов. В этом разделе приводится краткий обзор различных предопределенных типов данных.

    ЧТО ТАКОЕ «СТАТИЧЕСКАЯ ТИПИЗАЦИЯ »?

    Статической (или сильной) типизацией называется проверка типов во время компиляции (а не на стадии выполнения программы). К числу языков программирования, использующих сильную типизацию, относятся PL/SQL, Ada, C и Pascal. Языки с динамической типизацией (такие, как JavaScript, Perl или Ruby) выполняют большинство проверок типов во время выполнения. Статическая типизация позволяет выявлять ошибки во время компиляции, что повышает надежность программ. Преимуществом статической типизации является и ускорение выполнения программ. Оптимизирующий компилятор, который знает точные типы данных, может подбирать более эффективные ассемблерные решения и генерировать высокооптимизированный машинный код. Динамическая типизация тоже обладает своими преимуществами: например, метаклассы и интроспекция проще реализуются на базе динамической типизации.

    Символьные типы данных

    PL/SQL поддерживает строки фиксированной и переменной длины, состоящие как из традиционных символов, так и из символов Юникода. К строкам первого типа относятся строки CHAR и NCHAR , а к строкам второго вида — VARCHAR2 и NVARCHAR2 . Объявление строки переменной длины, которая может содержать до 2000 символов, выглядит так:

    Для очень длинных символьных строк в PL/SQL предусмотрены типы данных CLOB (Character Large Object) и NCLOB (NLS Character Large Object). По соображениям совместимости PL/SQL также поддерживает тип данных LONG. Эти типы данных позволяют сохранять и обрабатывать очень большие объемы данных; так, в Oracle11g тип LOB способен хранить до 128 терабайт информации.

    Использование типа LONG ограничивается множеством правил. Мы не рекомендуем применять его в Oracle8 и последующих версиях.

    Числовые типы данных

    В PL/SQL поддерживаются как вещественные, так и целочисленные типы данных. Тип NUMBER давно был основным типом для работы с числовыми данными; он может применяться для работы с целыми и вещественными данными как с фиксированной, так и с плавающей запятой. Пример типичного объявления NUMBER :

    Из-за своей внутренней десятичной природы тип NUMBER особенно удобен при работе с денежными суммами. В отличие от двоичного представления, ему не присущи ошибки округления. Например, если сохранить в нем значение 0.95, позднее вы прочитаете именно эту величину, а не приближенную (скажем, 0.949999968).

    До выхода Oracle10g тип NUMBER был единственным числовым типом данных PL/SQL, напрямую соответствовавшим типу столбцов базы данных. В этом нетрудно убедиться, изучив содержимое пакета STANDARD . Данная особенность стала одной из причин, по которым тип NUMBER так широко применялся в программах PL/SQL.

    В Oracle10g появились два двоичных типа с плавающей запятой: BINARY_FLOAT и BINARY_DOUBLE . Как и NUMBER , эти двоичные типы данных поддерживаются и в PL/SQL, и в базах данных. Однако в отличие от NUMBER , эти типы хранят значение в двоичном виде, а следовательно, при работе с ними могут возникнуть погрешности округления. Типы BINARY_FLOAT и BINARY_DOUBLE поддерживают специальные значения NaN (Not a Number, «не является числом»), положительную и отрицательную бесконечность. В некоторых типах приложений эти типы обеспечивают огромный выигрыш в быстродействии, так как вычисления с этими двоичными типами по возможности выполняются на аппаратном уровне.

    В Oracle11g появились еще две разновидности вещественных типов. Типы SIMPLE_FLOAT и SIMPLE_DOUBLE являются аналогами BINARY_FLOAT и BINARY_DOUBLE , но они не поддерживают NULL и не инициируют исключение в случае переполнения.

    PL/SQL поддерживает несколько числовых типов и подтипов, не имеющих прямого соответствия среди типов баз данных, но все равно полезных. Особого внимания заслуживают PLS_INTEGER и SIMPLE_INTEGER . Операции с целочисленным типом PLS_INTEGER реализуются на аппаратном уровне. В частности, счетчики циклов FOR реализуются в формате PLS_INTEGER . Тип SIMPLE_INTEGER , появившийся в Oracle11g, обладает тем же диапазоном значений, что и PLS_INTEGER , но не поддерживает NULL и не инициирует исключение в случае переполнения. SIMPLE_INTEGER , как и SIMPLE_FLOAT с SIMPLE_DOUBLE , работает невероятно быстро — особенно с откомпилированным кодом.

    Дата, время и интервалы

    До появления версии Oracle9i представление дат в Oracle ограничивалось типом DATE , в котором хранится дата и время (с округлением до ближайшей секунды). В Oracle9i были введены два новых типа данных, INTERVAL и TIMESTAMP , значительно расширившие возможности разработчиков в отношении операций с датами и временем в PL/ SQL, а также вычисления и хранения временных интервалов. Их использование продемонстрировано в функции, вычисляющей возраст человека в интервальном формате с точностью до месяца:

    Логические данные

    PL/SQL поддерживает тип данных BOOLEAN . Переменные этого типа могут принимать одно из трех значений ( TRUE, FALSE или NULL ).

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

    Двоичные данные

    Oracle поддерживает несколько разновидностей двоичных данных — неструктурированных данных, не интерпретируемых и не обрабатываемых Oracle. К их числу относятся типы RAW , BLOB и BFILE . Тип BFILE используется для хранения неструктурированных двоичных данных в файлах операционной системы вне базы данных. Тип RAW имеет переменную длину, а при операциях с ним Oracle не выполняет преобразование символов при передаче данных. В остальном он аналогичен символьному типу VARCHAR2 .

    Тип данных LONG RAW поддерживается для обеспечения обратной совместимости, но в PL/SQL поддержка данных LONG RAW ограничена. В базе данных Oracle столбец LONG RAW занимает до 2 Гбайт, но PL/SQL позволяет работать только с первыми 32 760 байтами LONG RAW . Если, например, вы попытаетесь выполнить выборку в переменную PL/SQL из столбца LONG RAW , превышающего лимит в 32 760 байт, произойдет ошибка:

    Для работы с данными LONG RAW , превышающими лимит PL/SQL, потребуется программа OCI; кстати, это веская причина для перевода старого кода с LONG RAW на данные BLOB , не имеющие такого ограничения.

    Типы данных ROW >Oracle поддерживает два типа данных ROWID и UROWID , предназначенных для предоставления адреса строки в таблице. Тип ROWID представляет уникальный физический адрес строки в таблице, а тип UROWID — логическую позицию строки в индексной таблице (Index-Organized Table, IOT). Тип ROWID также является псевдостолбцом SQL, который может включаться в инструкции SQL.

    Тип данных REF CURSOR

    Тип данных REF CURSOR позволяет объявлять курсорные переменные, которые могут использоваться со статическими и динамическими SQL-командами для улучшения гибкости программного кода. Тип REF CURSOR существует в двух формах: сильной и слабой. PL/SQL относится к категории языков со статической типизацией, а слабый тип REF CURSOR является одной из немногочисленных конструкций с динамической типизацией.

    В следующем примере объявления сильной формы REF CURSOR курсорная переменная связывается с конкретной структурой записи с помощью атрибута %ROWTYPE :

    Далее следуют два слабых объявления REF CURSOR , в которых переменная не связывается ни с какой конкретной структурой. Во втором объявлении (строка 4) представлен тип SYS_REFCURSOR — заранее определенный слабый тип REF CURSOR .

    Типы данных для поддержки интернет-технологий

    В Oracle9i появилась встроенная поддержка ряда технологий и типов данных, связанных с Интернетом, в частности XML (eXtensible Markup Language) и URI (Universal Resource Identifier). В Oracle имеются специализированные типы для работы с данными XML и URI, а также специальный класс идентификаторов URI ( DBUri-REF ), который используется для доступа к базе данных. Кроме того, в Oracle появился новый набор типов данных, обеспечивающий хранение внешних и внутренних URI и обращение к ним из базы данных.

    Тип XMLType предназначен для запроса и сохранения данных в формате XML. Для работы с XML используются такие функции, как SYS_XMLGEN из пакета DBMS_XMLGEN . Поддержка XPath и встроенные команды языка SQL позволяют выполнять поиск данных в документах XML.

    Типы данных для работы с URI, включая URIType и HttpURIType , входят в иерархию объектных типов и могут использоваться для хранения URI внешних веб-страниц и файлов, а также для обращения к информации в базе данных.

    Типы данных «Any»

    Большая часть программного кода предназначается для решения узкоспециализированных задач. Однако иногда нам приходится писать более универсальные программы. Именно для таких ситуаций предназначены типы данных Any .

    Эта группа типов данных, появившаяся в Oracle9i, заметно отличается от любых других типов данных Oracle. Типы данных Any позволяют динамически инкапсулировать описания типов, экземпляры данных и наборы экземпляров данных любого другого типа SQL. С помощью этих объектных типов (и определенных для них методов) можно, к примеру, определить тип данных, хранимых во вложенной таблице, не обращаясь к объявлению типа этой таблицы!

    В группу типов данных Any входят AnyType , AnyData и AnyDataSet .

    Пользовательские типы данных

    Из встроенных типов данных Oracle и пользовательских типов можно строить типы данных произвольной сложности, которые с большой точностью отражают структуру и поведение данных в конкретных системах. В базе данных Oracle они получили еще название абстрактных типов данных.

    SQL Server 2008: обзор нововведений

    SQL Server 2008: обзор нововведений

    Microsoft SQL Server – это проприетарная система управления базами данных,
    обеспечивающая сетевой многопользовательский доступ,
    использует расширенный язык запросов T-SQL.
    Ведет свою историю с 1989 года, первоначальная версия создана Sybase.
    В предыдущей 2005 версии была введена поддержка CLR, которая позволяла
    писать процедуры с использованием языков, работающих на платформе .Net.

    История версий:
    • 1992 — SQL Server 4.2
    • 1993 — SQL Server 4.21 под Windows NT
    • 1995 — SQL Server 6.0, кодовое название SQL95
    • 1996 — SQL Server 6.5, кодовое название Hydra
    • 1999 — SQL Server 7.0, кодовое название Sphinx
    • 1999 — SQL Server 7.0 OLAP, кодовое название Plato
    • 2000 — SQL Server 2000 32-bit, кодовое название Shiloh (версия 8.0)
    • 2003 — SQL Server 2000 64-bit, кодовое название Liberty
    • 2005 — SQL Server 2005, кодовое название Yukon (версия 9.0)
    • 2008 — SQL Server 2008, кодовое название Katmai (версия 10.0)

    SQL Server используется на многих предприятиях, причем 2000 версию до сих пор используют многие компании,
    а многие DBA говорят, что лучше 2000 пока еще Microsoft не смогла сделать,
    особенно это относится к Management Studio.

    SQL Server 2008 появился в августе 2008 года.

    Более подробно о истории MSSQL можно прочитать в WikiPedia

    1. Присвоение переменных в одну строку.

    Теперь вместо:
    DECLARE @myVar intSET @myVar = 5

    Можно писать так:
    DECLARE @myVar int = 5

    2. Математический синтаксис

    DECLARE @myVar int = 5
    SET @myVar += 1

    3. Компрессия.

    a) Можно включить компрессию для таблиц/партиций таблиц, индексов.
    b) Уровней компрессий — 2: 1) Строчное, 2) Страничное
    c) В страничное сжатие включается строчное.
    В страничном сжатии есть тип сжатия основанный на «column prefix» matching
    d) Бекапы автоматически сжимаются.

    В целом сообщается, что нагрузка на процессор может возрасти и использование памяти уменьшится.

    Включить сжатие можно через Management Studio:
    Вместо PAGE можно использовать ROW и выбирать партиции таблицы

    И сгенерированный скрипт сжатия:

    ALTER TABLE [dbo].[TestTable] REBUILD PARTITION = ALL
    WITH (DATA_COMPRESSION = PAGE)

    CREATE NONCLUSTERED INDEX IX_INDEX ON TestTable (TestTableVarFieldOne)
    WITH ( DATA_COMPRESSION = PAGE ) ;

    Дополнительную информация
    Минусы лицензии: Сжатие доступно только в выпусках SQL Server 2008 Enterprise и Developer.


    4. Появились индексы с фильтрацией.

    CREATE NONCLUSTERED INDEX IX_TestTable_OneON TestTable(TestTableVarFieldOne)
    WHERE TestTableVarFieldOne = ‘SampleText’

    Правда почему то они у меня не сработали.
    Видимо нельзя было организовывать первичный ключ…

    Тут описаны примеры: [1][2]

    Для чего это нужно:

    Например мы знаем что по колонке очень часто идет какой-нибудь текстовый запрос из разряда = ‘SampleText’, ставим этот индекс, и наш план выполнения запроса становится вкусный и быстрый.

    5. В SQL Server 2008 есть автоматический аудит.
    Вызывается он из Management Studio из группы «Security»

    Создадим правило аудита, кстати, параметр «Maximum», идущий после параметра «File Path», означает, сколько файлов будет создаваться в папке.

    Теперь ставим аудит на сервер в целом или Базу данных.

    Например, нам нужно поставить аудит на то, кто смотрел данные из таблицы «TestTable», обладающий правами «db_datareader»:

    Для этого определим тип действия (их, кстати, порядка 30), класс объекта (БД/Схема/Объект), имя объекта и группу прав.

    Это же можно сделать и в T-SQL:

    CREATE DATABASE AUDIT SPECIFICATION [TestTableAuditOnView]
    FOR SERVER AUDIT [TestAudit]
    ADD (SELECT ON OBJECT::[dbo].[TestTable] BY [db_datareader])WITH (STATE = OFF)GO

    Ну и потом не забудем сделать наш аудит «Enable»
    Можно почитать про аудит больше тут или тут

    6. Новый дебаггер.

    Собственно дебаггер простой напоминает сильно дебаггер в Visual Studio,
    ходит по брякам, и по Step Into/Step Out, можно ставить Watch, смотреть Call Stack,
    автоматически заходить в триггеры.

    В 2005 версии это можно было делать либо из Visual Studio,
    либо, насколько помню, из Business Intelligence Studio и что не очень удобно,
    и права для девелоперов придеться дать не больше, не меньше как «sysadmin»

    7. Прозрачное шифрование БД.

    Прозрачное шифрование оно же TDE, очень полезная фича, но скорее всего она полезна будет только либо на специфичных задачах, когда данные являются критическими с точки зрения безопасности, либо когда требуется решить проблему:
    «Кто будет охранять самих сторожей» — когда требуется одним администраторам дать доступ к одному, вторым ко второму, а третьему к третьему и если кто-нибудь из этой тройки утащит журнал или бекап или mdf файлы, они будут бесполезны ввиду шифрования.

    Почитать подробнее: [тут] или [тут]

    Минусы лицензии: Доступно только в Developer/Enterprise версиях.

    8. Замораживание плана запросов (Plan freezing).

    Как вы знаете SQL Server иногда пытается менять план запроса, в зависимости от того, как поменялись данные (схема БД).

    Необходимо это для двух вещей:
    1) Для того, чтобы сервер не тратил время, пересчитывая план,
    2) для того чтобы сервер не «разоптимизировал» план
    Это довольно большой обьем работы, поэтому лучше посмотрите Virtual Lab.

    Позднее если эта тема будет интересна ее можно будет раскрыть.

    9. Resource Governor (Разделение и властвование над ресурсами сервера).

    В Management Studio пункт меню находится в группе «Management», в окне Object Explorer.

    Почитать можно [тут]
    А посмотреть [тут]

    10. Новые типы данных (DATE, TIME, DATETIMEOFFSET, DATETIME2, Hierarchyid, GEOMETRY, GEOGRAPHY, FILESTREAM)

    a) DATE – храним только дату
    b) TIME – храним только время
    c) DATETIMEOFFSET – храним дату и время со смещениями «+» или «-»
    d) DATETIME2 – храним дату и время от January 1, 0001 до December 31, 9999
    e) HierarchyId – храним данные иерархий причем дерево иерархий будет довольно компактным.

    Кстати хорошо описан данный тип в статье XaocCPS ( http://habrahabr.ru/blogs/sql/27774/ )

    f) Geometry и Geography это специальные типы, которые содержат в себе векторные объекты:

    Object Descripton
    Point A location
    MultiPoint A series of points.
    LineString A series of zero or more points connected by lines.
    MultiLineString A set of linestrings
    Polygon A contiguous region described by a set of closed linestrings.
    MultiPolygon A set of polygons.
    GeometryCollection A collection of geometry types.
  • g) FileStream – храним данные в файловой системе
    Почитать можно [тут]

    Отличия в том, что расстояния в типе Geography выражены в виде градусах долготы и широты, а Geometry в специфичных Unit.

    11. Table Value Parameters (можно передавать таблицы как параметр)

    Для чего может быть нужно передавать таблицу из приложения в Базу Данных?

    1) Для того чтобы уменьшить кол-во INSERT/UPDATE операций,
    2) Для того чтобы некоторые части слоя бизнеслогики перенести на сервер

    Плюсы:
    1) Строгая типизация
    2) Сортировка
    3) Мы можем в этих таблицах использовать индексы (первичный ключ)
    4) Удобство

    Минусы:
    Можно наворотить плохое, особенно людям, которые очень изобретательны (например, процедурой генерируют HTML код)

    Пример SQL кода:

    Use testDatabase
    GO
    CREATE TYPE Customer AS TABLE (id int, CustomerName nvarchar(50), postcode nvarchar(50));
    GO
    CREATE TABLE Customers (id int, CustomerName nvarchar(50));
    GO
    CREATE TABLE CustomerPostCodes(id int, postcode nvarchar(50));
    GO
    /*
    INSERT INTO Customers VALUES (1, ‘Bob’)
    INSERT INTO CustomerPostCodes VALUES (1, ‘ASD’)
    INSERT INTO Customers VALUES (2, ‘Jack’)
    INSERT INTO CustomerPostCodes VALUES (2, ‘QWE’)
    INSERT INTO Customers VALUES (3, ‘Gill’)
    INSERT INTO CustomerPostCodes VALUES (3, ‘ZXC’)
    GO
    */
    CREATE Procedure AddCustomers (@customer Customer READONLY)
    AS
    INSERT INTO Customers
    SELECT id, CustomerName FROM @customer

    INSERT INTO CustomerPostCodes
    SELECT id, postcode FROM @customer
    GO

    DECLARE @myNewCustomer Customer;
    INSERT INTO @myNewCustomer VALUES (1, ‘Harry’, ‘NEW’)
    EXEC AddCustomers @myNewCustomer
    GO

    SELECT * FROM Customers
    SELECT * FROM CustomerPostCodes
    GO

    Drop table Customers;
    go

    Drop table CustomerPostCodes;
    go

    Drop procedure AddCustomers;
    go

    Drop type Customer;
    go

    Из C# соответственно передается параметром DataTable.
    Посмотреть скринкаст

    12. Вкусности новой Management Studio:

    a) IntelliSense (дожили таки)

    b) Удобная подсветка (тултипы):

    К сожалению «+=» это только математический оператор ((

    c) Она поддерживает Addin-ы.

    d) Интегрированы новые фишечки сервера и удобства — типо дай мне «только 1000 строк»

    e) Обновился Activity Monitor
    Проще написать, что тут можно увидеть «картину в целом», хотя все же частные детали лучше смотреть SQL Profiler, он для этого более приспособлен, а счетчики эти частично заимствованы из Windows Server 2008/Vista «Мониторинг производительности».

    Вообщем смотрим кто, зачем, куда, что и сколько это будет стоить нм ресурсов.

    Довольно приятный «логгер последних ресурсоемких запросов»:

    Особенно приятно просмотреть сразу план выполнения запроса:

    Минусы: Нельзя убрать ненужные колонки или менять их местами…

    f) Мульти-серверные запросы.

    Можно выполнить запрос (ы) на группе серверов, для этого нужно открыть пункт меню (View -> Registered Servers -> New Query).

    SQL Server 2008 по использованию памяти мне кажется более эффективный нежели 2005, Management Studio стала более удобной, новые типы данных могут дать больше удобства в разработке, также я вижу что многое добавлено, но около еще года на продакшн серверах не буду ставить в силу того что буду ждать многочисленных отзывов о продукте, особенно о отзывах тех кто будет использовать TDE, DataTable в виде параметра и стабильности.

    Сильно не минусуйте, первый пост, картинки позже сделаю меньше, побежал на работу.

    SQL. ОБЗОР.


    В отличие от настольных систем серверы баз данных требуют для своей работы могучей аппаратуры, сложны в использовании и крайне надежны, при должном использовании. Между ними и настольными системами расстояние которое можно сравнить с пропастью. Можно ли преодолеть эту пропасть? Вот в чем вопрос. Надо отметить, что этим вопросом задаемся не мы первые, не мы последние. Раньше нас с вами он пришел в голову большому числу поставщиков. И что вы думаете они сделали? Они попытались его решить, создав системы, занимающее промежуточное положение между настольными базами и серверами реляционных баз данных. Таких продуктов появилось множество и о некоторых из них, автору и хотелось бы рассказать в этой статье. Сразу необходимо отметить, что статья не претендует на полноту. Нельзя объять необъятное. Но хотелось бы дать общее сравнительное представление о продуктах.

    Рассматриваемые продукты относятся к классу так называемых локальных (и серверов для рабочих групп) серверов баз данных. Однако по ходу повествования вы увидете, что под этим понятием, скрываются очень разные по своим возможностям системы.

    Участники

    Sybase SQL Anywhere – SYBASE Inc. Sybase SQL Anywhere так же не является собственной разработкой SYBASE. Продукт был приобретен вместе с фирмой WATCOM и до этого уже хорошо зарекомендовал себя как WATCOM SQL Server. Судя по последним анонсам фирмы, SYBASE действительно собирается увидеть SQL повсюду. Объявлено о разработке версии продукта, которая сможет выполняться на PDA. Дескать они уже достаточно мощные, что же мы будем упускать рынок.

    Personal ORACLE v. 7.2 – ORACLE Corporation. Personal ORACLE является одним из продуктов линии ORACLE. У автора даже язык не поварачивается назвать его персональным. Впрочем видимо это осознали и в ORACLE, поскольку уже появился Personal ORACLE Lite.

    SQLBase v. 6.1 – CENTURA Softvare Corporation. Этот сервер разрабатывался как альтернатива серверу DB2 на платформе Intel. Ранее фирма называлась GUPTA, однако продукт поставлялся под тем же наименованием. Учитывая, что рассматриваемая версия является шестой, можно с уверенностью сказать, что сервер является прекрасным, отлаженным и производительным решением для рабочих групп.

    Инсталляция и настройка

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

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

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

    Соответствие стандарту языка SQL

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

    Кратко следует остановиться на следующих возможностях описанных стандартом.

    Одним из первых в стандарте описывается набор типов данных, которые должны быть реализованы на сервере. Все рассматриваемые серверы соответствуют в этом отношении стандарту. Кроме того, все серверы поддерживают строковые данные переменной длины, описание реализации которых отсутствует в стандарте. Эта возможность описывается стандартом SQL92. Этот же стандарт описывает битовые данные фиксированной и переменной длины, и темпоральные типы данных (data, time, interval). Все рассматриваемые серверы позволяют реализовать хранимые процедуры, триггеры, курсоры и декларативную целостность, что соответствует стандарту SQL92. Однако не все реализации не отличаются полнотой. Например только SQL Anywhere и INTERBASE поддерживаетают каскадное обновление. INTERBASE также поддерживает каскадное обновление. А SQLBase выделилась реализацией сохраненных процедур – они пишутся на специальном языке – SAL. Это может свести на нет переносимость сервера, поскольку язык больше не кем не поддерживается. В стандарте SQL92 введено понятие схемы . Из всех серверов рассмотренных в обзоре только INTERBASE не поддерживает схемы.Все рассмотренные сервера поддерживают это понятие или его эквивалент. По мнению автора одной из наиболее важной особенностей описанной стандартом SQL92 является поддержка национальных языков. Все серверы позволяют указать при создании базы данных, какой национальный язык будет использоваться. Правда стоит отметить, что качество поддержки заметно отличается от продукта к продукту. Так например сервер SQL Anywhere поддерживает только кодировку 866.

    Поддержка стандартов ПО промежуточного слоя


    INTERBASE


    Sybase SQL Anywhere


    Personal ORACLE


    SQLBase


    Средства администрирования


    INTERBASE

    Надо отметить, что действий, которые Вы можете выполнить с помощью утилиты совсем немного, всего на два меню. Однако каждый из пунктов этих меню позволяет выполнить автоматически настройку множества параметров, проверить состояние базы, выполнить ее затенение (тоже самое, что и зеракальная копия), определить пользователей имеющих доступ к серверу. Все работает быстро и без проблем. Охвачены все аспекты настройки сервера.

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

    Но всетаки эти утилиты оставляют желать лучшего. Может быть это маркетинговый ход, ведь Вы всегда можете приобрести другой продукт этой же родительской фирмы, который послужит прекрасным клиентским приложением для INTERBASE — Paradox. Невероятная популярность DELPHI, тоже делает свое дело. Постоянно расширяется число продуктов поддерживающих INTERBASE. В их числе есть и приличные утилиты администрирования.Однако хотелось бы чтобы фирма BORLAND продолжала совершенствовать продукт, ведь он уже давно практически не изменялся. Кроме того с инструментальными средствами фирмы поставляется утилита SQL Explorer, которая позволяет выполнять операции над объектами баз данных. Ничего подобного в комплект поставки самого сервера не входит. Вместо этого вам предлагается старомодная утилита WSQL. В ней себя могут удобно чувствовать профессионалы, но не новички. Но может быть это маркетинговый ход BORLAND, ведь Вы всегда можете приобрести другой продукт этой же фирмы, который послужит прекрасным клиентским приложением для INTERBASE — Paradox. Невероятная популярность DELPHI, тоже делает свое дело. Постоянно расширяется число продуктов поддерживающих INTERBASE. В их числе есть и приличные утилиты администрирования.

    Sybase SQL Anywhere

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

    Personal ORACLE


    SQLBase


    Репликация


    INTERBASE


    Sybase SQL Anywhere

    Из полезных возможностей стоит отметить автоматическое разрешение конфликтов, реализованное посредством специальных триггеров. В документации к продукту указано, что потенциально возможна репликация на другие платформы, такие как ORACLE, DB2, MS SQL Server.

    Personal ORACLE


    SQLBase


    Поддержка INTERNET


    INTERBASE


    Sybase SQL Anywhere


    Personal ORACLE


    SQLBase


    Средства разработки

    BORLANDInprise предлагает полный спектр продуктов для разработчика. Сюда входят DELPHI, C++ Builder, Borland C++ 5.02, Visual dBASE, Report Smith. Не отстают и другие поставщики. SYBASE предлагает спектр полный продуктов, начиная от компонентов и серверами транзакций. От додного поставщика можено приобрести: Power Designer – средства моделирования баз данных, Power++ (бывшая OPTIMA++) – средство быстрой разработки на С++, Power Builder – средство разработки четвертого поколения. Вообще по мнению автора, позиция SYBASE в отношении развития своих продуктов сейчас одна из самых привлекательных и перспективных. ORACLE является лидером индустрии и поэтому в ее торговых рядах в можете подобрать себе средства разработки на любой вкус. Однако стоит отметить, что эти средства ориентированы на разработку крупных проектов, и поэтому требуют высокой квалификации разработчиков и финансовых затрат. Однако они обеспечивают недостижимо высокий уровень масштабируемости и переносимости приложений. Что касается фирмы CENTURA, то наверное многим известен ее флагманский продукт – SQLWindows. Весьма продвинутое средство разработки четвертого поколения. Кроме того совсем недавно между CENTURA и PROGRESS Software достигнута договоренность о взаимном лицензировании технологий. Это означает, что высокоуровневые возможности среды разработки PROGRESS, будут распространяться и на сервер SQLBase.

    Уникальные особенности


    INTERBASE

    INTERBASE разрабатывалась для работы в тяжелых условиях среды клиент-сервер и поэтому для достижения высокой производительности каждый производитель применял какие-либо хитрости.

    Наибольшей хитростью в INTERBASE по мнению автора является то, что он имеет активное ядро. Что это такое спросите вы. Представьте себе, что несколько пользователей работают с одиними и теми же данными. Один из них обновил запись. Увидят ли эти изменения другие пользователи. Да увидят! Но для этого обязательно необходимо проделать некоторую дополнительную рабату. При обычном подходе (используемом большинством других баз данных) пользователь должен заново перечитать данные с сервера. Это приводит к высокому траффику в сети и как следствие к низкой производительности. INTERBASE позволяет избежать этого с помощью механизма уведомлений. Каждый пользователь работающий с базой данных регистрирует свой интерес к определенным событиям. Когда одно из этих событий наступает, INTERBASE посылает клиентскому приложению уведомление, о том что сабытие наступило. При этом клиентское приложение может принять решение как обработать это событие. Не требуется постояннного опроса базы данных и излишнего их зачитывания. Просто и эффективно.

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

    Одной из особенностей INTERBASE, реализованной еще только в ORACLE, является многоверсионная архитектура. Это означает, что когда пользователь редактирует запись, он редактирует ее копию – так называемую версию. При этом транзакции на чтение не блокируют транзакции записи и обновления и наоборот. Ядро сервера отслеживает версии и приводит базу к актуальному виду. Это позволяет существенно повысить производительность. Кроме того это снижает требования к ресурсам, поскольку версии хранят только изменеия данных.

    В мире реляционной алгебры царит идеальный порядок. Идеальный потому, что все разработчик оперирует абстрактными наборами данных – идельными таблицами. Это и хорошо и плохо одновременно. Хорошо потому, что вы можете изменит десять записей так же лекго, как и одну. Плохо потому, что вы абстрагированы от физической структуры данных. Вы не всегда знаете сколько у вас записей, в каком порядке они следуют и т.п. Это сказывается на производительности. Вы должны явно указывать серверу как возвращать вам данные. Все настольные базы данных позволяют осуществлять передвижения от одной записи к другой. В реляционных базах для достижения этого необходимо использовать особые средства. Но из всякого правила существуют исключения. Таким исключением является INTERBASE. Ядро этого сервера позволяет осуществлять навигационный, позаписный доступ к данным.

    Как уже упоминалось ранее Interbase реализует новую технологию серверного ядра – SuperServer. Суть ее состоит в том, что для обработки каждого запроса пользователя сервер порождает не новый процесс, а только поток. Это позволяет снизить аппаратные потребности, увеличить стабильность работы и увеличить производительность.

    В последнее время появились сообщения о выпуске баз данных, которые поддерживают “длинные” форматы данных – различные мультимедиа, научные, картографические и т.п.

    В INTERBASE имеется возможность расширять функции ядра для обработки подобных данных. Называется она – фильтры. Разработчик имеет возможность посредством API создать свой фильтр для обработки специализированных данных. Причем эта возможность существует уже давно.

    Sybase SQL Anywhere


    Personal ORACLE


    SQLBase


    Субъективные впечатления

    Выполняется запрос, производящий вставку записей в таблицу из которой они этим же запросом и выбираются. Таким образом проверяется целостность транзакции чтения. SQL Anywhere, SQLBase и Personal ORACLE прошли этот тест без проблем. А вот INTERBASE выполнял бесконечный цикл вставки. Возможно это связано с поддержкой многоверсионности, однако в документации по этому поводу нет никаких замечаний. Другой тест это – порождение версии изменяемой записи, посредством триггера. Здесь уже ORACLE сел в лужу. Однако в документации черным по белому написано, что это особенность называется – мутирующая таблица. Стоит отметить, что наличие таких задокументированных или нет особенностей может существенно осложнить жизнь разработчику.

    Требования к аппаратному обеспечению


    INTERBASE SQL Anywhere Personal Oracle SQLBase
    Процессор 386 (486 и выше) 386 (486 и выше) 386 (486 и выше) 386 (486 и выше)
    Оперативная память 168 8 8 (12) 4
    Место на диске (M) 30

    Сводная таблица возможностей


    INTERBASE SQL Anywhere Personal Oracle SQLBase
    Инсталляция
    Создание демонстрационной базы
    Установка драйверов
    Программы деинсталляции
    Перносимость
    DOS
    Windows 3.1
    Windows 95
    Windows NT
    UNIX
    OS/2
    NetWare
    Сетевые протоколы
    TCP/IP
    IPX/SPX
    NetBios
    Winsoket
    Nimed Pipes
    SQL
    Декларативная целостность
    Процедурная целостность
    Каскадное удаление
    Каскадное обновление
    Типы данных в соответствии со стандартом SQL 92
    Пользовательские типы данных (домены)
    Триггеры
    Процедуры
    Генераторы последовательностей
    Серверные курсоры
    Процедурные расширения
    IF ELSE
    CASE
    FOR
    WHILE
    Защита данных
    Группы пользователей (роли)
    Зеркалирование данных
    Архивирование данных
    Журналирование транзакций
    Особенности сервера
    Многоверсионность
    Активное ядро
    Уведомления
    Автоматические транзакции
    Двухфазная таранзакция
    Массивы
    Навигационный доступ
    Пользовательские функции
    Дополнительные возможности
    Планировщик задач
    Профайлер
    Сервис мониторинга

    Советы по выбору


    Простота использования


    Производительность


    Простота программирования


    Что дальше?

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

    Мастер Йода рекомендует:  20 советов и рекомендаций по работе с данными в Google Analytics
    Добавить комментарий