Базы данных из одного и нескольких файлов
Любая база данных Firebird может состоять из нескольких файлов. Вначале вам не нужно принимать решения о количестве файлов. База данных из одного файла может
быть преобразована в многофайловую в любое время при использовании ALTER DATABASE (обсуждается в этой главе) или инструмента gbak (см. главу 38).
Задание размера файла для однофайловой базы данных
Вы можете указать размер первичного файла в страницах следом за атрибутом PAGE_SIZE. Например, следующий оператор создает базу данных в файле размером 10 000 страниц:
CREATE DATABASE '/opt/databases/mydatabase.fdb'
USER 'ADMINUSR' PASSWORD 'yyuryyub'
PAGE_SIZE 8192
LENGTH 10000 PAGES
/* ключевое слово PAGES необязательно */
DEFAULT CHARACTER SET WIN1251;
Если база данных растет до размера большего, чем указанный размер файла, то Firebird расширяет первичный файл за пределы LENGTH, пока не будет достигнут предел, существующий для файловой системы, или не будет исчерпано дисковое пространство. Чтобы не допустить этого, вы можете хранить базу данных более чем в одном файле; дополнительные файлы называются вторичными файлами. Файлы могут размещаться на нескольких дисках.
Создание многофайловой базы данных
Многофайловые базы данных являются результатом старых файловых систем, где абсолютный предел размера файла 2 Гбайта (FAT32, ext2) или 4 Гбайта (система NTFS с 32-битовым вводом/выводом). Они используются для решения общей проблемы пользователей при разрушении базы данных InterBase в случае превышения лимита, когда сервер начинает перезаписывать данные файла с самого начала. Такая же проблема появляется, когда база данных исчерпает размер вторичного файла. Firebird просто отказывается осуществлять запись, когда последний файл достигнет лимита. Следовательно, разрушение существующих данных здесь предотвращено, хотя последующие записи данных будут потеряны.
В следующем примере создается база данных, состоящая из трех файлов, каждый размером потенциально 2 Гбайта. Если файловая система поддерживает больший размер файлов, то последний файл будет продолжать расти, пока не достигнет этого предела.
CREATE DATABASE 'LOCALHOST:/data/sample.fdb'
PAGE_SIZE 8192
DEFAULT CHARACTER SET WIN1251
LENGTH 250000 PAGES
FILE '/data/sample.fdl'
FILE '/data/sample.fd2'
STARTING AT 250001;
Вы должны указать диапазон страниц для каждого файла либо задав количество страниц в каждом файле, либо указав начальный номер страницы для файла. Для последнего файла вам не нужно указывать размер, поскольку Firebird динамически устанавливает размер последнего файла и будет увеличивать его, пока не будет исчерпано дисковое пространство или пока он не достигнет лимита файловой системы.
В этом примере первый вторичный файл "начнет работать", когда первичный файл приблизится к размеру 2 Гбайта. "Следующий файл в цепочке" начинает применяться, когда запрашиваемой операции понадобится использовать больше страниц, чем могут предоставить предыдущие файлы без превышения заданных им лимитов[36].
Обязанностью администратора базы данных является отслеживание размеров базы данных и обеспечение того, чтобы у базы данных всегда существовала возможность необходимого расширения. Принятие решения, нужно ли и когда следует разделять файлы базы данных, зависит от того, какое ожидается увеличение размеров базы данных и как скоро. Большее количество файлов может быть добавлено в любое время при использовании оператора ALTER DATABASE (см. следующий раздел).
При использовании многофайловых баз данных вы можете снять ограничение размера базы данных одним дисковым устройством, если файловая система не обеспечивает размещение одного, очень большого файла на нескольких дисках. Не будет никаких проблем инсталлировать RAID-массив и распространять базу данных Firebird на нескольких дисках для любой поддерживаемой платформы.
! ! !
ПРИМЕЧАНИЕ. Все файлы должны размещаться на дисках, находящихся под прямым управлением главной машины сервера Firebird.
. ! .
Изменение базы данных
Оператор ALTER DATABASE используется для добавления одного или более вторичных файлов к существующей базе данных. Он требует исключительного доступа к базе данных - см. разд. "Исключительный доступ"главы 39.
База данных может изменяться ее создателем (владельцем), пользователем SYSDBA или - для Linux/UNIX - любым пользователем с привилегиями операционной системы root.
Синтаксис ALTER DATABASE:
ALTER {DATABASE | SCHEMA}
ADD <предложение-добавления>;
<предложение-добавления> = FILE 'спецификация-файла'
<информация-о-файле> [<предложение-добавления>]
<информация-о-файле> = {LENGTH [=] целое [PAGE[S]] |
STARTING [AT [PAGE]] целое }
[<информация-о-файле>]
Первый пример добавляет два вторичных файла в базу данных, с которой в настоящий момент существует соединение, задавая начальные номера страниц:
ALTER DATABASE
ADD FILE 'mydatabase.fd2' STARTING AT PAGE 10001