Программирование баз данных в Delphi

Введение в клиент-серверные БД. InterBase

Показывать лекцию целиком

Цель лекции

Предварительное знакомство с сервером InterBase.

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

(рис 14.1) Организация архитектуры клиент-сервер

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

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

Работа клиент-серверной БД выглядит совершенно иначе. Компьютер, "выделенный под сервер", не только выполняет все необходимые работы по обслуживанию БД, он еще и обрабатывает запросы от клиентских ПК, и пересылает им не всю таблицу или связанные таблицы, а лишь те сведения, которые были запрошены. В результате многократно снижается нагрузка на сеть, а безопасность работы увеличивается: в файл-серверных БД очень сложно реализовать непротиворечивость данных, если несколько клиентов обращаются к одной записи. Клиент-серверная архитектура же пользуется транзакциями - пакетом запросов, который последовательно производит изменения БД и либо принимается, если все изменения записи подтверждены, либо отвергается, если хоть один запрос завершился неуспешно. Мощным можно оставить лишь один компьютер - сервер. Пользовательские же ПК могут быть неприхотливыми и недорогими. Таким образом, происходит разделение всей работы с базой данных на две части: обслуживание БД, и обслуживание клиентов. Первая часть возлагается на SQL -сервер, вторая - на клиентскую программу.

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

  • Поиск в БД по заданному условию.
  • Сравнение, сортировка и вывод данных в виде таблиц.
  • Редактирование данных (изменение, добавление и удаление).
  • Создание новой базы данных и ее структуры.
  • Выполнение программного кода на стороне сервера.
  • Обмен сообщениями с другими клиентами, которые в данный момент также подключены к серверу.
  • Программист, используя архитектуру клиент-сервер, должен быть также и неплохим администратором БД, то есть, он должен уметь устанавливать серверное программное обеспечение и обслуживать саму базу данных: делать резервные копии, удалять накопившийся "мусор", регистрировать новых пользователей и т.п.

    InterBase

    InterBase представляет собой полнофункциональный SQL -сервер. Сервер баз данных - это программа или служба, которая выполняется на сетевом компьютере (сервере), где физически расположена сама база данных. На этом курсе мы изучим установку сервера InterBase версии 6.5, который входит в поставку Delphi 7. InterBase - очень надежный сервер БД, при этом он не требователен к ресурсам ПК, благодаря чему является одним из самых популярных SQL -серверов на рынке программного обеспечения. Благодаря тому, что InterBase обеспечивает автоматическое восстановление и готовность к работе после сбоев системы (пользователи часто даже не замечают, что у сервера были проблемы), он используется во многих военных проектах США. Во многом из-за этого InterBase так поздно появился на нашем рынке.

    InterBase выгодно отличается от многих других серверов следующими качествами:

  • Высокая производительность и надежность при минимальных требованиях к ПК.
  • Поддержка стандарта SQL -92, что позволяет обеспечить переносимость программ.
  • Относительно низкая стоимость продукта (с Delphi поставляется сервер InterBase с бесплатной лицензией на 5 клиентов, этого достаточно для разработки БД и приложения, но обычно недостаточно для развертывания сервера в организации).
  • Простота управления и поддержки сервера. InterBase имеет простой и удобный механизм администрирования БД, не требующий специальных знаний.
  • В 1985 году сервер носил название GDS ( Groton Database System ), но вскоре был переименован в InterBase. В 1991 году сервер был перекуплен фирмой Aston Tate, но уже в 1992 году вместе с фирмой сервер перешел во владение корпорацией Borland. Начиная со второй версии Delphi, дистрибутив включает в себя бесплатную локальную версию сервера InterBase. Поскольку InterBase является "родным" для Delphi сервером БД и не требует для своей работы установки дополнительных драйверов, а также, принимая во внимание все вышесказанное, мы остановимся именно на нем. Средств самой Delphi вполне достаточно для программирования приложений, работающих с InterBase, однако имеются разработки и сторонних производителей - компоненты, программы для облегчения администрирования БД и т.д.

    Предполагается, что при установке Delphi вы также установили и InterBase Server. Впрочем, если это не так, то вставьте дистрибутивный диск и установите InterBase 6.5 Server:

    (рис 14.2) Выбор установки сервера в поставляемом дистрибутиве Delphi

    Если же вы не знаете, установлен ли у вас уже InterBase, достаточно посмотреть в список меню "Программы", где он должен присутствовать отдельной папкой. Тут следует сделать одно замечание: если вы используете ОС Windows NT, 2000 или XP, то InterBase может запускаться как служба (по умолчанию) или как приложение. В случае Windows 95, 98 или ME InterBase запускается только как приложение. Вне зависимости от того, какая ОС у вас установлена, если сервер запущен как приложение, в правом нижнем углу (в трее) вы увидите значок InterBase Guardian:

    (рис 14.3) Значок InterBase Guardian

    InterBase Guardian - утилита, которая устанавливается вместе с сервером. Эта утилита осуществляет начальный запуск сервера, и его перезапуск, если по каким то причинам сервер "рухнул".

    Если же у вас установлена Windows NT, 2000 или XP, то загрузите Панель управления (Пуск -> Настройки -> Панель управления). Среди прочих имеющихся служб вы увидите и InterBase Manager :

    (рис 14.4) Панель управления в Windows XP SP-2

    Щелкните дважды по этой службе, чтобы открыть ее. Вы увидите следующее окно:

    (рис 14.5) Окно службы InterBase Manager

    В группе Startup Mode этого окна вы можете выбрать одну из радиокнопок: Automatic (Сервер запускается автоматически) и Manual (Сервер запускается вручную). Если вы установили InterBase на ПК, который действительно будет сервером, то лучше оставить включенной кнопку Automatic. Но если же это ваш рабочий ПК, на котором вы лишь разрабатываете приложение, используя локальный сервер, то запускать его лучше вручную. Дело в том, что запущенный сервер пусть немного, но отнимает оперативную память. Кроме того, сервер постоянно "прослушивает" свой порт, по которому к нему может обращаться клиентское приложение, что также незначительно снижает производительность ПК. Данные между компьютерами передаются "пакетами", которые в служебной части содержат и номер порта. Порт - это целое число, которое используется при приеме и передаче данных для идентификации процесса (программы), которая этими данными обменивается. Например, протокол HTTP использует порт 80. Сервер InterBase использует порт 3050. (Все установленные порты описаны в файле SERVICES, расположенном в одном из папок Windows. Для Windows XP это адрес C:\WINDOWS\SYSTEM32\DRIVERS\ETC).

    Ниже расположен раздел Root Directory (корневая папка сервера). В этом разделе указан адрес, по которому была произведена установка InterBase.

    Еще ниже расположен раздел Status. Если сервер находится в рабочем состоянии, то зеленым цветом выводится Running (выполняется), а кнопка справа имеет название Stop (остановить). Если же сервер не работает, то красным цветом выводится надпись Stopped (остановлено), а кнопка справа содержит надпись Start (запустить). Вы можете безбоязненно попробовать нажимать на эту кнопку, запуская или останавливая сервер. "Галочка" Run the InterBase server as a service on Windows NT (Загружать сервер InterBase как службу Windows NT ) позволяет вам указать способ загрузки сервера: как службу Windows (при отмеченном состоянии) или как простое приложение. Рекомендуется запускать сервер, как службу.

    В самом низу расположен раздел Properties (Свойства), где вы можете посмотреть или изменить текущие свойства сервера или служебной программы InterBase Guardian .

    Регистрация сервера

    При использовании старых версий InterBase (до 5.5 включительно), для администрирования сервера использовалась утилита InterBase Windows ISQL . Мы не будем рассматривать работу с устаревшим ПО, ведь в новых версиях InterBase (начиная с 6.0) используется утилита IBConsole, и маловероятно, что кто то еще использует старые версии. IBConsole - это графическая оконная утилита, с помощью которой можно выполнять множество операций: регистрировать и конфигурировать серверы, создавать и администрировать базы данных, добавлять и удалять зарегистрированных пользователей, имеющих доступ к базам данных, а также запускать запросы SQL в интерактивном режиме. Существует множество утилит для работы с сервером InterBase, выполненных сторонними разработчиками, которые более удобны для работы с базами данных, например InterBase Expert, IBManager, IBAdmin. Но IBConsole - "родная" утилита InterBase, ее не нужно искать и устанавливать специально, поэтому мы будем использовать именно ее. IBConsole устанавливается вместе с сервером и запускается из папки InterBase (Пуск -> Программы -> InterBase ).

    При первом запуске окно IBConsole выглядит так:

    (рис 14.6) Утилита IBConsole

    Дерево серверов в левой части окна содержит только корневую ветвь " InterBase Servers" (Серверы InterBase ), но не содержит пока ни одного сервера. Для начала работы требуется зарегистрировать хотя бы один сервер (служба InterBase должна быть запущена). Выберите команду меню Server -> Register или нажмите в панели инструментов первую кнопку "Register a new InterBase Server". Появится окно регистрации нового сервера:

    (рис 14.7) Окно регистрации нового сервера

    В верхней части окна необходимо выбрать расположение сервера: Local (локальный, установленный на этой же машине) или Remote (удаленный, расположенный на другом ПК в сети). В случае использования локального сервера все просто: достаточно будет указать только User Name (имя пользователя) и Password (пароль). При выборе удаленного сервера придется также указать имя компьютера, на котором находится сервер и используемый сетевой протокол. Данный курс не ставит целью изучение сетевой архитектуры, однако необходимо коротко прояснить некоторые вопросы. Прежде всего, в сетях обычно используют протокол TCP/IP ( Transmission Control Protocol / Internet Protocol - Протокол контроля передачи данных / Интернет протокол). Каждый компьютер в сети имеет собственный уникальный IP-адрес, состоящий из четырех чисел от 0 до 255, разделенных точками, например:

    120.0.0.5

    В строке Server Name можно указать имя компьютера в сети либо его сетевой адрес. Вы должны быть уверены, что удаленный компьютер, который вы регистрируете, работает, подключен к сети и на нем имеется запущенный сервер InterBase. Помимо этого, при регистрации удаленного сервера, потребуется указать Alias Name - псевдоним, под которым будет зарегистрирован удаленный сервер в дереве серверов на IBConsole (при регистрации локального сервера этого делать не нужно).

    Однако в качестве удаленного сервера можно указать и локальный, расположенный на этом же ПК. Дело в том, что во всех операционных системах принято, чтобы IP-адрес

    127.0.0.1

    был зарезервирован для служебных нужд и указывал на локальный компьютер. Другими словами, если вы обращаетесь на адрес 127.0.0.1, то обращаетесь сами к себе. А зарезервированное имя, по которому ПК может обращаться к самому себе, как к сетевому компьютеру-

    localhost

    В Windows эти данные прописаны в файле hosts, который содержит сопоставления IP-адресов именам узлов. Если у вас Windows XP, то этот файл находится по адресу

    C:\WINDOWS\system32\drivers\etc

    Вы также самостоятельно можете найти этот файл, с помощью команды меню Пуск -> Найти.

    Сейчас мы рассмотрим регистрацию локального сервера. Для этого в верхней части окна оставим выделенным Local Server, а в строках User Name и Password напишем:

    SYSDBA
    masterkey

    " SYSDBA " - это имя администратора БД по умолчанию, регистр символов здесь не имеет значения. А " masterkey " - пароль администратора, здесь регистр букв имеет значение: пароль нужно вводить маленькими буквами. Вообще-то, хотя пароль может содержать до 32 символов, значимыми являются только первые 8, так что можно ввести просто " masterke ". Для реального сервера рекомендуется изменить пароль администратора сразу после установки InterBase (в примерах последующих лекций пароль " masterkey " не меняется). В любом случае, чтобы зарегистрировать нового пользователя, нужно будет войти в систему под именем SYSDBA. Как только вы нажмете кнопку OK, то зарегистрируете локальный сервер. В дереве серверов IBConsole появится вложенная ветвь Local Server:

    (рис 14.8) Зарегистрированный локальный сервер

    При выборе команды " Logout " во всплывающем меню, или двойном щелчке по разделу " Logout " в колонке " Action " правого окна, вы завершаете текущий сеанс работы. Ветвь " Local Server" закроется, но сам сервер будет продолжать свою работу:

    (рис 14.9) Сеанс подключения к серверу завершен.

    Чтобы вновь подключиться к серверу, следует выбрать команду " Login " (можно просто дважды щелкнуть по " Local Server "), вписать имя пользователя и пароль, нажать кнопку " Login ":

    (рис 14.10) Подключение к серверу

    Подключаться к серверу придется и при каждой загрузке утилиты IBConsole.

    Следует отметить один момент: локальный сервер может быть только один! Другими словами, если вы попытаетесь зарегистрировать еще один сервер, то пункт " Local Server " будет уже недоступен:

    (рис 14.11) Недоступность локального сервера (локальный сервер уже зарегистрирован)

    Если вам нужно зарегистрировать локальный сервер заново, то предыдущую регистрацию следует вначале удалить. Для этого нужно щелкнуть правой кнопкой по строке " Local Server" (рис. 14.7) и отключить его командой " Logout ", а затем удалить регистрацию командой "Un- Register ". После этих действий вы вновь получите возможность зарегистрировать новый локальный сервер.

    Удаленных же серверов может быть множество.

    Регистрация нового пользователя

    Если у вас в окне с деревом выбран Local Server, как на рисунке 14.7, то в правой части в колонке Action вы видите список доступных команд. Выполнить любую команду можно, дважды щелкнув по ней мышью. Щелкните дважды по команде User Security или выполните команду меню Server -> User Security. Выйдет окно диалога безопасности:

    (рис 14.12) Окно диалога безопасности

    Здесь вы можете изменить пароль у выбранного пользователя или зарегистрировать нового пользователя, нажав на кнопку New. Нажмите на эту кнопку, затем в строке User Name впишите

    PUPKIN

    а в строках Password (пароль) и Confirm Password (подтверждение пароля) напишите

    qwerty

    Сразу заметим, что выбор простых паролей недопустим с точки зрения безопасности, хотя на практике нередко встречаются такие пароли, как "1", "111" и т.п.; также нередко пароль пользователя совпадает с его именем. Конечно, такие пароли проще запомнить конечному пользователю, но имейте в виду, что при этом вы не сможете ручаться за безопасность данных! Так что в реальных серверах используйте более сложные пароли. Нажмите кнопку Apply (применить), которая стала доступна. Как только регистрация нового пользователя закончилась, нажмите кнопку Close. А в дереве серверов выделите раздел Users (пользователи):

    (рис 14.13) Вывод сведений о зарегистрированных пользователях

    Как видно в правой части окна, мы получили нового пользователя PUPKIN.

    Вернуться к учебному плану