7. Базы данных (DATABASE)
Прежде, чем начать создавать объекты базы данных и заполнять базу данными конкретной предметной области, необходимо создать базу данных с необходимыми характеристиками.
7.1. Создание базы данных
Для создания базы данных используется оператор SQL CREATE DATABASE. Его синтаксис в
нотациях Бэкуса-Наура представлен в листинге .
Листинг 7.1 Синтаксис оператора создания базы данных CREATE DATABASE
CREATE {DATABASE | SCHEMA} '<спецификация файла>'
[USER '<имя пользователя>' [PASSWORD '<пароль>'] [ROLE <имя роли>]]
[PAGE_SIZE [=] <целое>]
[LENGTH [=] <целое> [PAGE[S]]]
[SET NAMES '<набор символов>']
[DEFAULT CHARACTER SET <набор символов>
[COLLATION <сортировка по умолчанию>]]
[DIFFERENCE FILE '<имя файла>']
[<вторичный файл> [<вторичный файл>...]]
<спецификация файла> ::=
[<спецификация удалённого сервера>] { <путь к файлу БД> | <алиас БД> }
<спецификация удалённого сервера> ::=
<хост>[\<порт> | <имя сервиса>]:
| \\<хост>[@<порт> | <имя сервиса>]\
| <протокол>://[ <имя сервиса>[: <порт> | <имя сервиса>]/]
<протокол> = inet | inet4 | inet6 | xnet
<вторичный файл> ::= FILE '<путь к файлу>'
[LENGTH [=] <целое> [PAGE[S]]]
[STARTING [AT [PAGE]] <целое>]
Можно использовать оператор CREATE DATABASE или CREATE SCHEMA. Это синонимы.
Примечание
Создать новую базу данных может только администратор и пользователь с привилегией CREATE DATABASE.
База данных может состоять из одного или нескольких файлов. Первый, основной, файл называется первичным, остальные файлы — вторичными. В настоящее время многофайловые базы данных являются атавизмом. Многофайловые базы данных имеет смысл использовать на старых файловых системах, в которых существует ограничение на размер любого файла. Например, в FAT32 нельзя создать файл больше 4х гигабайт.
Для того, чтобы база данных была создана в нужном вам диалекте SQL, следует перед выполнением оператора
создания базы данных задать нужный диалект, выполнив оператор SET SQL DIALECT:
SET SQL DIALECT 3;
Для вновь создаваемых баз данных по умолчанию используется диалект 3, который позволяет более эффективно использовать внешнюю память и средства системы управления базами данных РЕД Базы Данных.
Спецификация файла
Спецификация файла — имя файла базы данных и его расширение с указанием к нему полного пути в соответствии с правилами используемой операционной системы. Сам файл должен отсутствовать на диске. В противном случае будет выдано диагностическое сообщение, и база данных не будет создана. Если полный путь к базе данных не указан, то база данных будет создана в одном из системных каталогов. В каком именно зависит от операционной системы.
Файл может иметь любое расширение или не иметь вообще никакого расширения. Для файлов СУБД РЕД База Данных
принято использовать расширение .fdb.
Вместо полного пути к первичному файлу базы можно использовать псевдонимы (aliases). Псевдонимы описываются
в файле databases.conf в формате:
<алиас БД> = <путь к файлу БД>
Спецификация удаленного сервера
При создании базы данных на удалённом сервере необходимо указать спецификацию удалённого сервера. Спецификация удалённого сервера зависит от используемого протокола.
Если вы при создании базы данных используете протокол TCP/IP, то спецификация первичного файла должна выглядеть следующим образом:
<хост>[\<порт> | <имя сервиса>]:{ <путь к файлу БД> | <алиас БД> }Например, следующая спецификация файла использует этот протокол для размещения вновь создаваемого файла базы данных на сервере с именем в сети Server, на диске D в каталоге RedSoftDatabase:
'Server:D:\RedSoftDatabase\work.fdb'
Если вы при создании базы данных используете протокол под названием именованные каналы (Name Pipes), то спецификация первичного файла должна выглядеть следующим образом:
\\<хост>[@<порт> | <имя сервиса>]\{ <путь к файлу БД> | <алиас БД> }Аналогичный путь к файлу базы данных можно задать следующим образом:
'\\Server\D:\RedSoftDatabase\work.fdb'
Существует также унифицированный URL-подобный синтаксис спецификации удалённого сервера. В этом синтаксисе первым параметром указывается наименование протокола, далее указывается имя сервера или IP адрес, номер порта и путь к первичному файлу базы данных или псевдоним. В качестве протокола можно указать следующие значения:
INET
TCP/IP (сначала пробует подключится по протоколу TCP/IP v6, если не получилось, то TCP/IP v4)
INET4
TCP/IP v4
INET6
TCP/IP v6
XNET
Локальный протокол
<протокол>://[ <имя сервиса>[:<порт>|<имя сервиса>]/]{ <путь БД>|<алиас БД>}
USER, PASSWORD, ROLE
Необязательные предложения в операторе создания базы данных USER и PASSWORD задают, соответственно, имя
и пароль пользователя, присутствующего в базе данных безопасности security5.fdb. Файл базы данных безопасности
находится в корневом каталоге инсталляции РЕД Базы Данных. Заданный в предложении USER пользователь становится
владельцем созданной базы данных и имеет к ней неограниченные полномочия.
Пользователя и пароль можно не указывать, если установлены переменные окружения ISC_USER и ISC_PASSWORD.
Имя пользователя и его пароль будут выбраны из этих переменных окружения. Использование таких переменных окружения
не рекомендуется в промышленно работающих системах, так как подобная практика резко ухудшает безопасность системы.
Подробнее см. документ «Руководство администратора».
Необязательное предложение ROLE задаёт имя роли (обычно это RDB$ADMIN), права которой будут учитываться при
создании базы данных. Роль должна быть назначена пользователю в соответствующей базе данных безопасности.
После инсталляции РЕД Базы Данных на компьютере база данных безопасности содержит ровно одного пользователя
SYSDBA с паролем masterkey. Это особый пользователь, администратор всех баз данных, расположенных на
сервере. Этот пользователь может создавать учетные записи других пользователей и имеет неограниченные полномочия
к любой базе данных, располагающейся на данном компьютере.
PAGE_SIZE
Необязательное предложение PAGE_SIZE задает размер страницы базы данных
в байтах. Этот размер страницы будет установлен как для первичного, так
и для всех вторичных файлов создаваемой базы данных в том случае, если
создается многофайловая база. Допустимыми значениями являются 4096, 8192 (значение по умолчанию),
16384 или 32768. Если вы зададите неправильное значение размера страницы, то система установит размер
до ближайшего меньшего числа. Если указать значение меньше чем 4096, то будет выбрано значение — 4096.
LENGTH
Предложение LENGTH задает максимальный размер первичного или вторичного файла базы данных в страницах.
При создании базы данных любой файл (первичный или вторичный) независимо от значения LENGTH будет иметь
минимально необходимый размер как минимум для хранения системных
данных. Для единственного или последнего файла базы данных значение,
указанное в предложении LENGTH, никак не влияет на величину
используемой файлом памяти. Размер файла будет при необходимости
автоматически увеличиваться в процессе добавления новых строк в таблицы
до максимальной величины, которую обеспечивает используемая
операционная система, или пока не будет исчерпано дисковое пространство
носителя, на котором располагается этот файл.
SET NAMES, DEFAULT CHARACTER SET
Необязательное предложение SET NAMES задаёт набор символов подключения, доступного
после успешного создания базы данных. По умолчанию используется набор символов NONE.
Предложение DEFAULT CHARACTER SET задает набор символов по умолчанию для
строковых (символьных) данных для всей базы данных. Наборы символов
применяются только для типов данных CHAR, VARCHAR и BLOB. Если для
символьного столбца не указать набора символов, то ему будет присвоен
набор символов NONE, иными словами, никакой. Работа с данными такого
столбца крайне затруднительна. Помимо набора символов строковым
столбцам задаются и соответствующие указанным наборам символов
допустимые порядки сортировки. Для столбцов, которые будут содержать
помимо латинских букв и спецсимволов также и буквы кириллицы, следует
задавать набор символов WIN1251, а в качестве порядка сортировки
желательно использовать PXW_CYRL, чтобы сортировка данных выполнялась
в соответствии с правилами русского языка. Списки наборов символов и
допустимых порядков сортировки для каждого набора символов представлены
в 33.
Необязательный параметр COLLATION, связанный с набором символов, позволяет создавать все текстовые столбцы,
домены и переменные с указанной последовательностью сортировки, если не указан другой COLLATE.
Примечание
Сортировка по умолчанию для набора символов может быть изменена с помощью ALTER CHARACTER SET.
DIFFERENCE FILE
Ключевое слово DIFFERENCE FILE задаёт путь и имя дельта файла, в который будут записываться изменения,
внесённые в БД после перевода её в режим «безопасного копирования» («copy-safe») путём выполнения команды
ALTER DATABASE BEGIN BACKUP.
Вторичные файлы
База данных может состоять более чем из одного файла. Первый, основной, файл называется первичным,
остальные — вторичными. Количество вторичных файлов произвольно, оно ограничивается только возможностями
используемой операционной системы. Файлы базы данных могут располагаться на различных носителях серверной
машины. Для них обычно используются расширения .fd2, .fd3 и т.д.
При создании многофайловой базы данных необходимо либо для предыдущего файла в списке указать предложение
LENGTH, либо для каждого из последующих файлов задавать предложение STARTING AT. В одном операторе
создания базы данных могут одновременно использоваться и предложения LENGTH, и предложения STARTING AT
(см. раздел 7.2 Примеры создания базы данных).
Предложение STARTING AT задает номер страницы базы данных, с которой
должен начинаться следующий вторичный файл. Когда предыдущий файл будет
полностью заполнен данными в соответствии с заданным номером страницы
следующего файла, система начнет помещать вновь добавляемые данные в
следующий вторичный файл. Управлять размещением в разные файлы
отдельных добавляемых новых строк в таблицы базы данных пользователь не
имеет возможности.
Если для первичного файла указать слишком малое количество страниц, в которые не смогут поместиться все системные данные, размещаемые при первоначальном создании базы данных (системные таблицы, ссылки на вторичные файлы, на оперативные копии и др.), то система все равно распределит для первичного файла соответствующее количество страниц, необходимое для хранения системных данных.
Предупреждение
Средствами операторов SQL можно лишь добавить новые вторичные файлы к существующей базе
данных — см. оператор ALTER DATABASE. Другие характеристики изменить таким образом невозможно.
Размер страницы, количество и размеры вторичных файлов можно изменять, выполняя резервное копирование
и восстановление базы данных. Подробности см. в документе «Руководство администратора».
7.2. Примеры создания базы данных
Пример 1. Для создания однофайловой базы данных в isql или в любой
соответствующей программе графического интерфейса нужно ввести и
выполнить следующие операторы (имеется в виду операционная система Windows, в UNIX-подобных системах нужно
только внести некоторые изменения в путь к файлу базы данных):
SET SQL DIALECT 3;
CREATE DATABASE 'localhost:D:\RedSoftDatabase\work.fdb'
USER 'wizard' PASSWORD 'master'
PAGE_SIZE = 32768
DEFAULT CHARACTER SET WIN1251;
Здесь будет создана база данных в диалекте 3, владельцем которой
является описанный в системе пользователь wizard с паролем master (этот
пользователь должен быть создан в базе данных безопасности до создания
демонстрационной базы данных — см. документ «Руководство администратора»).
Размер страницы для этой базы данных установлен максимальным — 32768.
Мы предполагаем, что в строковых типах данных таблиц будут
присутствовать и буквы кириллицы, поэтому указываем набор символов по
умолчанию для строковых данных базы данных WIN1251. Для отдельных
столбцов таблиц можно задать наборы символов, отличные от набора символов по умолчанию — см. главу 10.
В isql можно отобразить состояние созданной базы данных, соединившись с базой данных (для этого используется
оператор CONNECT — см. далее в этой главе раздел 7.3) и выполнив оператор isql SHOW DATABASE:
SHOW DATABASE;
Owner: WIZARD
PAGE_SIZE 32768
Number of DB pages allocated = 199
Number of DB pages used = 184
Number of DB pages free = 15
Sweep interval = 20000
Forced Writes are ON
Transaction - oldest = 6
Transaction - oldest active = 7
Transaction - oldest snapshot = 7
Transaction - Next = 10
ODS = 13.1
Database not encrypted
Wire crypt plugin: ChaCha64
Creation date: May 30, 2024 15:42:36
Replica mode: NONE
Protocol version = 18
Default Character set: WIN1251
Publication: Disabled
Примечание
Некоторые характеристики созданной базы данных можно просмотреть и в различных программах графического интерфейса, предназначенных для работы с базами данных.
Пример 2. Пусть демонстрационная база будет использовать три файла — один первичный и два вторичных. Тогда в предыдущие операторы следует добавить некоторые изменения, задав пути к вторичным файлам и значения номеров страниц, с которых должны начинаться вторичные файлы:
SET SQL DIALECT 3;
CREATE DATABASE 'localhost:D:\RedSoftDatabase\work.fdb'
USER 'wizard' PASSWORD 'master'
PAGE_SIZE = 4096
DEFAULT CHARACTER SET WIN1251
FILE 'D:\RedSoftDatabase\work.fd2'
STARTING AT PAGE 10001
FILE 'D:\RedSoftDatabase\work.fd3'
STARTING AT PAGE 20001;
Первичный файл будет содержать 10000 страниц размером 4096 байтов. Как
только первичный файл в процессе работы с базой данных будет заполнен
пользовательскими и системными данными (количество всех данных превысит
\(4096\times 10000\) байтов, включая и системные данные — заголовки страниц,
указатели, индексы, генераторы и т.д.), система управления базами
данных начнет помещать новые строки таблиц во второй файл базы данных,
work.fd2. Аналогичные действия произойдут, когда будет заполнен и этот
вторичный файл. Система начнет помещать данные в следующий вторичный
файл — work.fd3. Размер последнего вторичного файла будет увеличиваться
до того предела, который допускает используемая версия операционной
системы, или пока не будет исчерпана память на внешнем носителе.
Управлять размещением в различных файлах базы данных отдельных строк
для различных таблиц пользователь не имеет возможности, все эти
действия выполняет система управления базами данных.
Выполнив оператор SHOW DATABASE, можно увидеть результат создания такой базы данных:
SHOW DATABASE;
Owner: WIZARD
File 1: 'localhost:D:\RedSoftDatabase\work.fdb', length 10000, start 10001
File 2: 'D:\RedSoftDatabase\work.fd2', length 0, start 20001
PAGE_SIZE 4096
Number of DB pages allocated = 199
Number of DB pages used = 184
Number of DB pages free = 15
Sweep interval = 20000
Forced Writes are ON
Transaction - oldest = 6
Transaction - oldest active = 7
Transaction - oldest snapshot = 7
Transaction - Next = 10
ODS = 13.1
Database not encrypted
Wire crypt plugin: ChaCha64
Creation date: May 30, 2024 15:42:36
Replica mode: NONE
Protocol version = 18
Default Character set: WIN1251
Publication: Disabled
Пример 3. Точно такую же базу данных мы получим, если зададим оператор следующим образом:
SET SQL DIALECT 3;
CREATE DATABASE 'localhost:D:\RedSoftDatabase\work.fdb'
USER 'wizard' PASSWORD 'master'
PAGE_SIZE = 4096
LENGTH = 10000 PAGES
DEFAULT CHARACTER SET WIN1251
FILE 'D:\RedSoftDatabase\work.fd2'
LENGTH = 10000 PAGES
FILE 'D:\RedSoftDatabase\work.fd3';
Здесь вместо предложения STARTING AT для вторичных файлов было использовано предложение
LENGTH для первичного и первого вторичного файла.
Отобразив базу данных в isql, получаем такие же характеристики, что и в предыдущем примере.
Пример 4. Смешанный вариант задания предложений LENGTH и STARTING AT.
Такую же многофайловую базу данных мы получим, если зададим оператор следующим образом:
SET SQL DIALECT 3;
CREATE DATABASE 'localhost:D:\RedSoftDatabase\work.fdb'
USER 'wizard' PASSWORD 'master'
PAGE_SIZE = 4096
DEFAULT CHARACTER SET WIN1251
FILE 'D:\RedSoftDatabase\work.fd2'
LENGTH = 10000 PAGES STARTING AT PAGE 10001
FILE 'D:\RedSoftDatabase\work.fd3';
Здесь в первом из вторичных файлов указано и предложение STARTING AT, и предложение LENGTH.
Во втором вторичном файле в данном случае не задается предложение STARTING AT.
Отобразив базу данных в isql, получаем те же характеристики, что и в предыдущих двух примерах.
Пример 5. Наконец, можно и иначе перемешать предложения STARTING AT и
LENGTH. В следующем примере для первичного файла указывается
предложение LENGTH, для первого вторичного файла нет никаких
соответствующих указаний, а для второго вторичного файла задается
предложение STARTING AT. В результате будет создана точно такая же база
данных, как и в предыдущих трех примерах:
SET SQL DIALECT 3;
CREATE DATABASE 'localhost:D:\RedSoftDatabase\work.fdb'
USER 'wizard' PASSWORD 'master'
PAGE_SIZE = 4096
LENGTH = 10000 PAGES
DEFAULT CHARACTER SET WIN1251
FILE 'D:\RedSoftDatabase\work.fd2'
FILE 'D:\RedSoftDatabase\work.fd3'
STARTING AT PAGE 20001;
7.3. Соединение с существующей базой данных
После создания любой базы данных для работы с ней (для выполнения добавления, изменения, удаления метаданных,
добавления, изменения, удаления, поиска данных) с этой базой данных вначале нужно соединиться. Для этого
используется оператор CONNECT (доступно в ISQL). Его синтаксис представлен в листинге .
Листинг 7.2 Синтаксис оператора соединения с существующей базой данных CONNECT
CONNECT '<спецификация файла>'
[USER '<имя пользователя>' [PASSWORD '<пароль>']]
[CACHE <целое> [BUFFERS]]
[ROLE '<имя роли>'];
В операторе соединения с базой данных указывается имя только первичного
файла базы данных, независимо от того, существуют ли у этой базы данных
вторичные файлы. Если на компьютере не заданы переменные окружения
ISC_USER и ISC_PASSWORD, то обязательно нужно указать имя
пользователя (предложение USER) и его пароль (PASSWORD). Имя
пользователя и пароль можно не указывать, если пользователь
операционной системы имеет статус trusted user — см. документ
«Руководство администратора».
Предложение CACHE задает количество буферов кэш-памяти для соединения,
чтобы указать для подключаемой программы количество сохраняемых в
памяти доступных страниц базы данных. По умолчанию это значение
равняется 256. Максимальное количество зависит от используемой
операционной системы и доступной оперативной памяти. Во многих случаях
лучше это значение оставить значением по умолчанию. Тогда операционная
система, скорее всего, примет не худшее решение по размеру кэша.
Предложение ROLE задает имя роли, с которой пользователь соединяется с
данной базой данных. Имя роли может содержать до 63 символов.
Подробности создания и использования ролей см. в «Руководство администратора».
В настоящей версии РЕД База Данных с каждой базой данных на сервере может соединиться любой пользователь, описанный в системе.
После успешного соединения с базой данных пользователь может выполнять с
ней необходимые действия. Каждое новое соединение с базой данных при
работе с утилитой isql или программой графического интерфейса вызывает
отключение от базы данных, с которой перед этим было выполнено
соединение.
Перед соединением с базой данных необходимо установить диалект клиента
при помощи оператора SET SQL DIALECT и набор символов клиента для
строковых данных, используя оператор SET NAMES. Во избежание сложностей
в использовании базы данных следует задавать тот же диалект, который
был указан при создании базы данных.
При работе с базой данных из программы графического интерфейса имеет
смысл в операторе SET NAMES задать тот же набор символов, который
является набором символов по умолчанию для базы данных (предложение
DEFAULT CHARACTER SET в операторе создания базы данных). Однако если
работа с базой данных осуществляется из среды DOS при помощи утилиты
isql и если в таблицах базы данных присутствуют буквы кириллицы, то для
корректного отображения данных следует задать набор символов DOS866.
Допустимые в системе наборы символов и порядки сортировки представлены в 33.
Синтаксис оператора SET SQL DIALECT (листинг ):
Листинг 7.3 Синтаксис оператора задания диалекта клиента SET SQL DIALECT
SET SQL DIALECT {1 | 3};
Синтаксис оператора SET NAMES см. в листинге :
Листинг 7.4 Синтаксис оператора задания набора символов для клиента SET NAMES
SET NAMES <набор символов>;
Пример. Для соединения с любой из баз данных, созданных в примерах предыдущего раздела, при работе с любой программой графического интерфейса нужно использовать следующие операторы:
SET SQL DIALECT 3;
SET NAMES WIN1251;
CONNECT 'localhost:D:\RedSoftDatabase\work.fdb'
USER 'wizard' PASSWORD 'master';
При работе из командной строки DOS оператор SET NAMES должен быть записан в следующем виде:
SET NAMES DOS866;
7.4. Строки подключения
Если Вы хотите подключиться к базе данных или создать ее, Вы должны, среди прочего, предоставить клиентскому приложению (или, если Вы программист, подпрограммам, которые Вы вызываете) строку подключения к базе данных. Строка соединения однозначно идентифицирует местоположение базы данных на Вашем компьютере, в локальной сети или даже в интернете.
Строка подключения к локальной базе данных
Строка локального подключения состоит из пути к базе данных и имени файла в формате файловой системы, используемой на серверной машине.
На Linux и других Unix серверах, например:
/opt/RedDatabase/examples/empbuild/employee.fdb
На Windows серверах, например:
C:\Biology\Data\Primates\Apes\populations.fdb
Многие клиенты пользуются относительными путями для подключения (например, ..\examples\empbuild\employee.fdb).
Но пользоваться ими нужно с осторожностью, т.к. не всегда очевидно как они будут расширены. Случайно можно
подключиться к другой базе данных и изменения в них могут привести к катастрофическим последствиям.
Вместо пути к файлу лучше указывать алиас базы данных из файла databases.conf.
Получив строку локального подключения без указания сетевого протокола, клиент РЕД Базы Данных сначала попытается
сделать прямое embedded соединение с файлом базы данных, минуя аутентификацию, но учитывая привилегии и ограничения
для предоставленного имени пользователя и/или роли (если провайдер Engine12 включен в firebird.conf или databases.conf
параметр Providers). Если файл базы данных существует, но соединение не устанавливается, поскольку клиентский процесс
не имеет необходимых прав доступа к файлу, выполняется попытка подключения клиент-сервер (провайдером Loopback) в следующем порядке:
используя TCP/IP протокол через
localhost;на Windows: используя XNET протокол.
Можно явно указывать определенный протокол в строке подключения (в стиле URL) и таким образом обойти
попытку embedded подключения:
inet://zappa(TCP/IP подключение, используя алиас на локальном компьютере)inet:///opt/RedDatabase/examples/citylife.fdb(TCP/IP подключение, используя абсолютный путь на локальном Posix компьютере)inet://C:\Work\Databases\Drills.fdb(TCP/IP подключение, используя абсолютный путь на локальном Windows компьютере)xnet://security.db(XNET подключение, используя алиас на локальном Windows компьютере)xnet://C:\Programmas\Firebird\Firebird_3_0\security5.fdb(XNET подключение, используя абсолютный путь на локальном Windows компьютере)
Строка подключение через TCP/IP
Если Вы при подключении используете протокол TCP/IP, то спецификация файла базы данных должна выглядеть следующим образом:
{<имя сервера>|<IP адрес>}[/<номер порта>|/<имя сервиса>]:{<абс. путь>|<алиас>}
Для Linux/Unix:
pongo:/opt/RedDatabase/examples/empbuild/employee.fdb bongo/3052:fury 112.179.0.1:/var/Firebird/databases/butterflies.fdb localhost:blackjack.fdb
Для Windows:
siamang:C:\Biology\Data\Primates\Apes\populations.fdb sofa:D:\Misc\Friends\Rich\Lenders.fdb inca/fb_db:D:\Traffic\Roads.fdb 127.0.0.1:Borrowers
URL-подобная строка подключения
Существует также унифицированный URL-подобный синтаксис спецификации удалённого сервера. В этом синтаксисе первым параметром указывается наименование протокола, далее указывается имя сервера или IP адрес, номер порта и путь к первичному файлу базы данных или псевдоним.
<протокол>://[{<имя сервера>|<IP адрес>}[:<номер порта>|:<имя сервиса>]/]{<абс. путь>|<алиас>}
В качестве протокола можно указать следующие значения:
INET — TCP/IP;
XNET — локальный протокол.
Для Linux/Unix:
inet://pongo//opt/RedDatabase/examples/empbuild/employee.fdb inet://bongo:3052/fury inet://112.179.0.1//var/Firebird/databases/butterflies.fdb inet://localhost/blackjack.fdb
Для Windows:
inet://siamang/C:\\Biology\Data\Primates\Apes\populations.fdb inet://sofa:4044/D:\Misc\Friends\Rich\Lenders.fdb
7.5. Изменение существующей базы данных
В тех случаях, когда созданную и заполненную данными базу данных нужно изменить, добавив к существующему
файлу (существующим файлам) дополнительные вторичные файлы, следует использовать оператор
ALTER DATABASE / ALTER SCHEMA. Этот оператор можно выполнять только после успешного соединения с базой данных.
Синтаксис оператора представлен в листинге :
Листинг 7.5 Синтаксис оператора изменения базы данных ALTER DATABASE
ALTER {DATABASE | SCHEMA}
[ADD FILE <вторичный файл> [ADD FILE <вторичный файл> ...]]
[ADD DIFFERENCE FILE '<имя файла>' | DROP DIFFERENCE FILE]
[{BEGIN | END} BACKUP]
[SET DEFAULT CHARACTER SET <набор символов>]
[SET LINGER TO <секунды> | DROP LINGER]
[SET DEFAULT SQL SECURITY {DEFINER | INVOKER}]
[ENCRYPT WITH <плагин шифрования> [KEY <ключ шифрования>] | DECRYPT]
Примечание
Изменять базу данных может ее владелец, пользователь с административными привилегиями и пользователь с привилегией ALTER DATABASE.
Оператор ALTER DATABASE изменяет структуру файлов базы данных или переключает её в состояние «безопасное для копирования»
Примечание
Оператор ALTER DATABASE позволяет лишь добавлять к существующей базе данных дополнительные вторичные файлы.
Изменить размер страницы или размеры первичного или вторичных файлов этим оператором невозможно. Подобные
изменения можно выполнить путем копирования и последующего восстановления существующей базы данных.
Подробности см. в документе «Руководство администратора».
Добавление вторичного файла
Предложение ADD FILE добавляет к существующей базе данных дополнительные
вторичные файлы. Может быть указано произвольное количество добавляемых
вторичных файлов. Описание вторичного файла в этом операторе аналогично
тому, что представлено в описании оператора создания базы данных (см. раздел 7.1 этой главы).
Пример. Как только в предыдущем первичном или вторичных файлах будет заполнено 30000 страниц, СУБД будет помещать
данные во вторичный файл test4.fdb.
ALTER DATABASE
ADD FILE 'D:\RedSoftDatabase\work.fd4'
STARTING AT PAGE 30001;
Изменение пути и имени дельта файла
Предложение ADD DIFFERENCE FILE задает путь и имя дельта файла, в который будут записываться изменения,
внесенные в базу данных после перевода ее в режим «безопасного копирования» («copy-safe»). Этот оператор в
действительности не добавляет файла. Он просто переопределяет умалчиваемые имя и путь файла дельты.
Для изменения существующих установок необходимо сначала удалить ранее указанное описание файла дельты с
помощью оператора DROP DIFFERENCE FILE, а затем задать новое описание файла дельты. Если не переопределять
путь и имя файла дельты, то он будет иметь тот же путь и имя, что и БД, но с расширением .delta.
Предложение DROP DIFFERENCE FILE удаляет описание (путь и имя) файла дельты. На самом
деле файл не удаляется. Он удаляет путь и имя файла дельты и при последующем переводе БД в режим
«безопасного копирования» будут использованы значения по умолчанию (т.е. тот же путь и имя что и у
файла БД, но с расширением .delta).
Перевод базы данных в режим «безопасного копирования»
Предложение BEGIN BACKUP предназначено для перевода базы данных в режим «безопасного
копирования» («copy-safe»). Этот оператор «замораживает» основной файл базы данных, что позволяет
безопасно делать резервную копию средствами файловой системы, даже если пользователи подключены и
выполняют операции с данными. При этом все изменения, вносимые пользователями в базу данных, будут
записаны в отдельный файл, так называемый дельта файл (delta file).
Предложение END BACKUP предназначено для перевода базы данных из режима «безопасного копирования»
«copy-safe» в режим нормального функционирования. Этот оператор объединяет файл дельты с основным файлом
базы данных и восстанавливает нормальное состояние работы, таким образом, закрывая возможность создания
безопасных резервных копий средствами файловой системы.
Изменение набора символов по умолчанию
Предложение SET DEFAULT CHARACTER SET изменяет набор символов по умолчанию для
базы данных. Это изменение не затрагивает существующие данные. Новый набор символов
по умолчанию будет использоваться только в последующих DDL командах, кроме того для них
будет использоваться сортировка по умолчанию для нового набора символов.
LINGER
Предложение SET LINGER позволяет установить задержку закрытия базы данных. Этот
механизм позволяет ядру SuperServer, сохранять базу данных в открытом состоянии в
течение некоторого времени после того как последние соединение закрыто, т.е. иметь
механизм задержки закрытия базы данных. Это может помочь улучшить производительность и
уменьшить издержки в случаях, когда база данных часто открывается и закрывается, сохраняя при
этом ресурсы «разогретыми» до следующего открытия.
Предложение DROP LINGER удаляет задержку и возвращает базу данных к нормальному
состоянию (без задержки). Эта команда эквивалентна установки задержки в 0.
Удаление LINGER не самое лучшее решение для временной необходимости его отключения для некоторых
разовых действий, требующих принудительного завершения работы сервера. Утилита gfix имеет переключатель
-NoLinger, который сразу закроет указанную базу данных, после того как последнего соединения не стало,
независимо от установок LINGER в базе данных. Установка LINGER будет сохранена и нормально отработает в следующий раз.
Изменение привилегий выполнения по умолчанию
Предложение SET DEFAULT SQL SECURITY меняет поведение по умолчанию, которое определяет в контексте
какого пользователя будет выполняться объект базы данных (процедура, функция, пакет, триггер, таблица).
Ключевое слово INVOKER указывает, что объект выполняется с правами вызвавшего его пользователя.
Задание ключевого слова DEFINER означает, что объект выполняется с правами к объектам базы данных
его владельца (создателя). Изначально для базы данных стоит значение INVOKER.
Шифрование базы данных
Предложение ENCRYPT WITH шифрует базу данных с помощью указанного плагина
шифрования. Шифрование начинается сразу после этого оператора и будет выполняться в
фоновом режиме. Нормальная работа с базами данных не нарушается во время шифрования.
Процесс шифрования может быть проконтролирован с помощью поля MON$CRYPT_PAGE в таблице MON$DATABASE
или просмотрен на странице заголовка базы данных с помощью gstat -e. gstat –h также будет
предоставлять ограниченную информацию о состоянии шифрования.
Необязательное предложение KEY позволяет передать имя ключа для плагина шифрования. Что делать с этим
именем ключа решает плагин.
Предложение DECRYPT дешифрует базу данных.
7.6. Удаление базы данных
Для удаления существующей базы данных, с которой выполнено в настоящий момент соединение, используется
оператор SQL DROP DATABASE (листинг ):
Листинг 7.6 Синтаксис оператора удаления существующей базы данных DROP DATABASE
DROP DATABASE;
Прежде чем удалять базу данных, с ней нужно соединиться. Оператор удаляет первичный, все вторичные файлы базы данных и все файлы оперативных копий (см. главу 8), связанные с этой базой данных.
Примечание
Удалять базу данных может ее владелец, администратор и пользователь с привилегией DROP DATABASE.
Следует быть осторожным при использовании этого оператора. При удалении базы данных теряются все содержащиеся в ней данные и метаданные.
Примечание
Удалить базу данных можно и обычными средствами операционной системы, просто удалив все файлы
базы данных. Однако использование оператора DROP DATABASE гарантированно вызовет удаление всех
связанных с базой данных файлов — первичного, всех вторичных файлов, а также файлов всех оперативных копий базы данных.
Пример. Следующие операторы позволяют удалить существующую базу данных. Вначале выполняется соединение с базой данных, затем эта база данных удаляется:
CONNECT 'localhost:D:\RedSoftDatabase\work.fdb'
USER 'wizard' PASSWORD 'master';
DROP DATABASE;
7.7. Создание примечаний для базы данных и объектов базы данных
Объекты базы данных и сама база данных могут содержать примечания. Это довольно удобное средство
документирования процесса разработки создаваемой базы данных и ее
объектов. Для этих целей используется оператор COMMENT. Синтаксис
оператора представлен в листинге .
Листинг 7.7 Синтаксис оператора создания примечания для объектов базы данных COMMENT
COMMENT ON <объект> IS {'<текст>' | NULL}
<объект> ::= DATABASE
| <базовый тип> <имя>
| COLUMN <таблица>.<столбец>
| [PROCEDURE | FUNCTION] PARAMETER [<пакет>.]<процедура>.<параметр>
| {PROCEDURE | [EXTERNAL] FUNCTION} [<пакет>.]<процедура>
<базовый тип> ::= CHARACTER SET
| COLLATION
| DOMAIN
| EXCEPTION
| FILTER
| GENERATOR
| INDEX
| PACKAGE
| USER
| ROLE
| SEQUENCE
| TABLE
| TRIGGER
| VIEW
Примечание можно создавать для любого объекта базы данных.
Примечание
Добавить комментарий может администратор, владелец объекта, для которого добавляется комментарий,
пользователь с привилегией ALTER ANY <тип объекта>.
Если задается ключевое слово DATABASE, то текст примечания создается
именно для самой базы данных, иначе нужно указать базовый тип (объект
метаданных), для которого будет создаваться примечание.
Если текст любого примечания задать в виде двух подряд идущих апострофов
'', то это равносильно заданию NULL, то есть удалению существующего примечания объекта.
При создании базы данных можно также одновременно задать следующим оператором и текст примечания. Например:
CREATE DATABASE 'localhost:D:\RedSoftDatabase\work.fdb'
USER 'wizard' PASSWORD 'master'
PAGE_SIZE = 16384
DEFAULT CHARACTER SET WIN1251;
COMMENT ON DATABASE IS 'Проверочная база данных';
Текст примечания любого объекта базы данных можно изменить в любое
время, соединившись с базой данных и выполнив оператор COMMENT:
CONNECT 'localhost:D:\RedSoftDatabase\work.fdb'
USER 'wizard' PASSWORD 'master';
COMMENT ON DATABASE IS '<Новый текст примечания>';