Шрифт:
Интервал:
Закладка:
Таблица 14.2. Пример набора скриптов для схемы
Файл
Содержимое
leisurestore_01 .sql
Оператор CREATE DATABASE; определения CREATE DOMAIN, CREATE GENERATOR и CREATE EXCEPTION
leisurestore_02.sqi
Все операторы CREATE TABLE, включая ограничения UNIQUE; операторы ALTER TABLE добавляют все первичные ключи в виде именованных ограничений PRIMARY KEY
leisurestore_03.sql
Операторы ALTER TABLE, добавляющие ограничения FOREIGN KEY
leisurestore_04.sql
Операторы CREATE INDEX
leisurestore_05.sql
Операторы CREATE TRIGGER
leisurestore_06.sql
Операторы CREATE PROCEDURE
leisurestore_07.sql
Скрипт операторов DML, который добавляет строки в статичные (управляющие) таблицы
leisurestore_08.sql
Операторы GRANT (скрипт безопасности)
leisurestore_09.sql
Более поздние изменения в корректной последовательности зависимостей
leisurestore_10.sql
Скрипты QA (тестовые данные)
Цепочки скриптовУстойчивый набор скриптов может быть соединен вместе в цепочку с использованием оператора isql INPUT В качестве последнего оператора в предыдущем скрипте. Например, для присоединения скрипта leisurestore_0.sql к leisurestore_01.sql завершите скрипт следующим образом:
. . .
COMMIT;
-- присоединение к операторам CREATE TABLE
INPUT 'd:scriptsleisurestore_02.sql' ;
-- не забудьте добавить пустую строку!
Подход, основанный на главном скриптеОператор INPUT не обязательно должен быть последним в скрипте. Поэтому другим полезным подходом к поддержке набора скриптов является наличие "главного" скрипта, который вводит каждый дополнительный скрипт в нужном порядке. Это создает преимущества в поддержке больших наборов скриптов. Вы можете включить комментарии для сообщения о содержании каждого входного скрипта.
Пора дальшеА теперь - за создание баз данных! В следующей главе вы не только научитесь создавать базы данных, но также и сохранять их чистыми, безопасными и с хорошей производительностью. Существует не так много способов разрушения баз данных Firebird, однако раздел в конце этой главы описывает пять способов сделать это. Предупрежден, значит вооружен!
ГЛАВА 15. Создание и ведение базы данных.
База данных Firebird - это, прежде всего, файл файловой системы, находящийся под управлением подсистемы ввода/вывода главной машины, на которой выполняется сервер Firebird. Как только сервер создаст этот файл, его система управления начинает управлять его пространством, используя протокол низкого уровня для связи с подсистемой ввода/вывода.
По причине использования этого протокола база данных Firebird должна существовать на той же физической машине, что и сервер Firebird. Она не может размещаться ни на каком устройстве хранения данных, которое не находится под прямым управлением физической системы ввода/вывода машины сервера.
Новая, "пустая" база данных занимает на диске около 540-600 Кбайт. Файл базы данных вовсе не является пустым, поскольку "акт создания" - оператор CREATE DATABASE- приводит к созданию более 30 системных таблиц. Эти таблицы будут хранить каждую деталь метаданных, как только объект базы данных будет добавлен или изменен. Так как системные таблицы являются обычными объектами базы данных Firebird, они уже содержат для себя записи метаданных. Сервер уже выделил страницы базы данных на диске для этих данных и создал инвентарные страницы для различных типов объектов.
Обсуждение страниц базы данных см. в предыдущей главе.
Физическое хранение базы данных
Размещение
До создания базы данных вы должны знать, где собираетесь ее создавать. Это не столь глупо, как звучит. Оператор CREATE DATABASE (альтернатива- CREATE SCHEMA) будет создавать файл или файлы с указанными вами именами, однако он не может создать каталоги и не может изменить полномочия доступа файловой системы. Этим деталям следует уделить внимание в первую очередь.
Дополнительно сервер Firebird 1.5 может быть сконфигурирован для ограничения размещения баз данных. Проверьте параметр DatabaseAccess в файле firebird.conf (см. главу 3), чтобы выяснить, где ваш сервер ограничен в доступе. Если у вас установки по умолчанию (Full), то вы можете создавать базу данных в любом месте. Иначе:
* установка Restrict указывает файловой системе иерархию, в которой разрешен доступ к базе данных. Убедитесь, что пользователь, запускающий ваш сервер, имеет достаточные полномочия для создания там файла (или, в случае встроенного сервера Windows, подключающийся пользователь);
* установка None позволяет серверу соединяться только с базами данных, находящимися в списке в aliases.conf. Вы можете создавать базу данных в любом месте, однако, за исключением создания, никакой клиент не будет иметь возможности соединиться с ней, если алиас БД и ее абсолютный адрес не будут присутствовать в aliases.conf.
! ! !
ВНИМАНИЕ! Настоятельно рекомендуется устанавливать режим DatabaseAccess в NONE и использовать средства алиасов базы данных. Более подробную информацию об алиасах базы данных см. в разд. "Алиасы базы данных" главы 4.
. ! .
Безопасность доступа
Для новичков не всегда бывает очевидным, что существует разница между доступом к серверу и безопасностью базы данных. Когда вы соединяетесь с базой данных Firebird, используя isql или ваш любимый инструмент администратора, вы всегда указываете имя пользователя и пароль вместе с сервером, портом (иногда) и путем к базе данных. Когда вы это делаете, вы соединяетесь с сервером и открываете соединение с базой данных.
Если база данных еще не существует, и вы запустили из командной строки isql без параметров, то произойдут две вещи:
* вы соединяетесь с сервером;
* пока вы не отправите на сервер запрос CONNECT или CREATE DATABASE, программа не будет соединена с базой данных.
Пароль доступа всегда требуется для соединения с сервером. После этого вы можете соединяться с любой базой данных. Что вы можете делать, соединившись с базой данных, зависит от привилегий SQL, которые хранятся в базе данных. Пользователь SYSDBA имеет полные разрушительные права к любой базе данных и к любому ее объекту. Владелец (пользователь, создавший базу данных) имеет автоматические права к базе данных, но не к объектам, которые были созданы другими пользователями. Хотя любой пользователь, соединившись с сервером, может соединяться с любой базой данных, у него не будет прав делать что угодно с чем угодно, отличных от прав, которые были предоставлены ему явно или неявно владельцем базы данных операторами GRANT.
Вопросы доступа к серверу и безопасности базы данных подробно обсуждаются в части VIII.
ISC_USER и ISC_PASSWORD
На сервере можно установить две переменные окружения: ISC_USER и ISC_PASSWORD, чтобы избежать необходимости явно записывать пароли в скриптах. Вы можете делать все, что разрешено указанному пользователю. Эта возможность удобна для административных задач, однако она должна быть использована с большой осторожностью, потому что оставляет доступ к вашей базе данных открытым для любого локального пользователя, кто случайно натолкнется на ваше окно командной строки.
Если вы хотите играть с огнем, сделайте эти две переменные постоянными. Если же вы хотите иметь высокий уровень удобства и защищенности скриптов, временно устанавливайте их каждый раз при работе и не забывайте отменять установку при завершении работы с окном командной строки.
В Linux в том же окне командной строки, из которого вы запускали приложение, введите:
]# setenv ISC_USER=SYSDBA
]# setenv ISC_PASSWORD=masterkey
Для отмены установок используйте следующее:
]# setenv ISC_USER=
]# setenv ISC_PASSWORD=
или просто закройте окно.
В Windows в командной строке введите:
set ISC_USER=SYSDBA
set ISC_PASSWORD=masterkey
Для отмены введите:
set ISC_USER=
set ISC_PASSWORD=
Создание базы данных
Вы можете создавать базу данных интерактивно в isql. Некоторые другие инструменты администрирования баз данных могут отвечать требованиям API, перечисленным в этом разделе, и позволяют создавать базу данных интерактивно, в то время как другие требуют использования скрипта.
В любом случае более предпочтительным является использование файла определения данных (скрипта DDL), потому что он предоставляет простой способ "проиграть снова" ваши операторы при ошибочном выполнении скрипта. Проще запустить исходный файл, чем заново вводить интерактивные операторы SQL.
Диалект
По умолчанию Firebird создает базу данных диалекта 3. Если вы хотите создать базу данных диалекта 1, первым оператором в вашем скрипте (или первым действием в вашем инструменте администратора) должен быть:
SET SQL DIALECT 1;
! ! !
ВНИМАНИЕ! Если isql в настоящий момент соединен с базой данных, он предложит вам подтвердить текущую транзакцию. Ответьте Yes (Да) для продолжения создания новой базы данных. Некоторые инструменты сторонних разработчиков вначале могут потребовать, чтобы вы отсоединились от базы данных.
- Delphi. Учимся на примерах - Сергей Парижский - Программирование
- Сделай видеоигру один и не свихнись - Слава Грис - Программирование / Руководства
- Психбольница в руках пациентов - Алан Купер - Программирование