Delphi-Help

Главная

Создание и изменение базы данных в InterBase/Firebird

Оцените материал
(9 голосов)


Создание и изменение базы данных в InterBase/Firebird

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

Для создания базы данных можно использовать как утилиту командной строки, входящую в комплект поставки сервера базы данных (isql — самую богатую по своим функциональным возможностям утилиту), так и любую программу графического интерфейса, например, IBExpert или SQLHammer. Помимо этого вы можете написать собственную программу создания и изменения базы данных с использованием компонентов FIBPlus.

Характеристики создаваемой базы данных

Для создания базы данных используется оператор CREATE DATABASE. Вот его синтаксис:

CREATE { DATABASE | SCHEMA } '<спецификация файла>' 
USER '<имя пользователя>' PASSWORD '<пароль>' 
[PAGE_SIZE [=] < целое >] 
[LENGTH [=] < целое > [PAGE[S]]] 
[DEFAULT CHARACTER SET < набор символов >] 
[<вторичный файл>]; 
[<вторичный файл>] = FILE '<спецификация файла>' 
[LENGTH [=] < целое > [PAGE[S]] | STARTING [AT [PAGE]] < целое >] [< вторичный файл >] 

Вы можете писать CREATE DATABASE или CREATE SCHEMA — это синонимы.

Далее в апострофах указывается полный путь к файлу и имя файла, например,

' D :\ BestDatabase \ work . fdb ' 

Если вы создаете базу данных не на локальном компьютере, а на сервере, то необходимо в спецификацию файла включить имя сервера, например:

'server:D:\BestDatabase\work.fdb' 

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

Внимание. Операционные системы позволяют в именах файлов и каталогов использовать буквы кириллицы. Однако это может привести к большим неприятностям при создании, изменении, копировании и восстановлении базы данных. Например: при использовании утилиты isql вы вообще не сможете создать базу данных, указывая путь, который содержит символы кириллицы. В других программах вы можете получать совершенно загадочные сообщения об ошибках, например, что у вас неверное имя или пароль пользователя.
Это связано с особенностями реализации сервера базы данных.
Предложения USER и PASSWORD задают имя пользователя и его пароль. Пользователь должен существовать в списке учетных записей в базе данных безопасности на том компьютере, где создается база данных. Пользователь с этим именем станет владельцем созданной базы данных и будет иметь к ней неограниченные полномочия по просмотру и изменению любых данных и метаданных. Такими же полномочиями обладает и пользователь SYSDBA.

Предложение LENGTH задает размер первичного файла базы данных в страницах. Имеет смысл только для многофайловых баз данных.

Предложение PAGE_SIZE определяет размер страницы базы данных в байтах. Может иметь значения 1024, 2048, 4096, 8192 или 16384. Если размер страницы не указан, то ему присваивается значение по умолчанию — 4096 (это для Firebird 1.5; для других серверов баз данных значение по умолчанию может быть другим).

Предложение DEFAULT CHARACTER SET определяет набор символов для базы данных по умолчанию. Если не указан, то выбирается набор символов NONE. Не вдаваясь в подробности, скажем, что во всех случаях следует задать набор символов, отличный от NONE, чтобы избежать в дальнейшем ненужных приключений при попытках поместить в строковые столбцы русский текст. Для использования символов кириллицы задается набор символов WIN 1251.

Если создается многофайловая база данных, то далее перечисляются все ее вторичные файлы. Размеры первичного и вторичных файлов задаются либо указанием размера предыдущего файла (предложение LENGTH ), либо указанием номера страницы базы данных, с которой начинается текущий вторичный файл (предложение STARTING). Для последнего файла в группе нет необходимости задавать его размер — файл будет динамически увеличиваться по мере необходимости до нужных размеров. Максимальный размер файла зависит от используемой операционной системы. Он может быть 2Гб или 4Гб.

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

Еще одно интересное наблюдение. Не существует ограничений на минимальный размер любого файла. Вы можете указать его величину в одну страницу базы данных, и сервер нормально это примет. Однако при восстановлении базы данных с резервной копии существует ограничение на минимальный размер любого файла базы данных. Он должен быть не менее 200 страниц. См. статью на нашем сайте « Копирование и восстановление базы данных в InterBase/Firebird».

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

Еще одной характеристикой базы данных является ее диалект. В InterBase/Firebird существует два диалекта — 1 и 3. Диалект 1 сохраняется для поддержания совместимости с предыдущими версиями InterBase (5 и более ранними). Диалект 3 во всех отношениях является более удобным.

Существует еще и диалект 2. Он используется в целях проверки правильности преобразования базы данных диалекта 1 в базу данных диалекта 3.

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

SET SQL DIALECT 3; 

Этот диалект клиента будет присвоен создаваемой базе данных.

«Изменение» базы данных означает лишь добавление к существующей базе данных вторичных файлов. База данных должна быть открытой. Для изменения используется оператор ALTER DATABASE. Его синтаксис:

ALTER { DATABASE | SCHEMA } 
<предложение ADD > 
<предложение ADD > = ADD FILE '<спецификация файла>' 
[LENGTH [=] < целое > [PAGE[S]] | STARTING [AT [PAGE]] < целое >] < предложение ADD>] 

Внимание. В документации по InterBase синтаксис этого оператора записан неверно.

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

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

Создание и изменение базы данных с использованием isql

Вызовите окно командной строки и перейдите в каталог\Bin корневого каталога инсталляции сервера базы данных:

c: 
cd \Program Files\Firebird\Firebird_1_5\Bin 

Запустите утилиту isql. Появится предложение: использовать оператор подключения к базе данных или оператор создания базы данных и подсказка утилиты:

Use CONNECT or CREATE DATABASE to specify a database 
SQL 

Вначале задайте диалект базы данных (точнее, диалект клиента, который будет присвоен создаваемой базе данных). Любой оператор для этой утилиты должен заканчиваться точкой с запятой. Если вы введете часть оператора и нажмете Enter, то утилита выдаст подсказку продолжения:

CON> 

Введите:

SQL> set sql dialect 3; 

Теперь можно ввести оператор создания базы данных:

SQL> create database 'D:\BestDatabase\work.fdb' 
CON> user 'wizard' password 'master' 
CON> default character set WIN1251; 

Имя файла базы данных может иметь любое расширение или вовсе не иметь никакого расширения. Для Firebird принято использовать расширение fdb.

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

Commit current transaction (y/n)? 

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

Database: D:\BestDatabase\work.fdb 
Owner: WIZARD 
PAGE_SIZE 4096 
Number of DB pages allocated = 146 
Sweep interval = 20000 
Forced Writes are ON 
Transaction – oldest = 3 
Transaction – oldest active = 4 
Transaction – oldest snapshot = 4 
Transaction – Next = 7 
Default Character set : WIN 1251 

Здесь мы видим, что владельцем базы данных (Owner ) является WIZARD, размер страницы (PAGE_SIZE) равен 4096, набор символов по умолчанию (Default Character set) WIN 1251.

Для создания многофайловой базы данных введите следующий оператор:

SQL> create database 'D:\BestDatabase\work.fd1' 
CON> user 'wizard' password 'master' length 1000 
CON> default character set WIN1251 
CON> file 'D:\BestDatabase\work.fd2' length 1000 
CON> file 'D:\BestDatabase\work.fd3' length 1000; 
SQL > commit; 

Здесь после создания базы данных введен оператор подтверждения транзакции COMMIT.

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

Для создания многофайловой базы данных на сервере введите оператор:

SQL> create database 'server : C:\BestDatabase\work.fd1' 
CON> user 'wizard' password 'master' length 1000 
CON> default character set WIN1251 
CON> file 'D:\BestDatabase\work.fd2' length 1000 
CON> file 'E:\BestDatabase\work.fd3' length 1000; 

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

Базу данных можно создавать и на диске, сетевой доступ к которому запрещен.

Для изменения базы данных (добавления вторичных файлов) нужно соединиться с существующей базой данных и добавить вторичные файлы, используя оператор ALTER DATABASE:

SQL> connect 'D:\BestDatabase\work.fd1' 
CON> user 'wizard' password 'master'; 
SQL> alter database 
CON> add file 'D:\BestDatabase\work.fd4' length 1000 
CON> add file 'D:\BestDatabase\work.fd5' length 1000; 
SQL > commit ; 

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

О работе с учетными записями пользователей см. статью на нашем сайте «Учетные записи пользователя в InterBase/Firebird».

Помимо интерактивного режима утилита isql позволяет работать и в «пакетном» режиме. Вы можете создать скрипт — текстовый файл обычно с расширением sql , в котором содержатся необходимые операторы по созданию или изменению базы данных. Для выполнения скрипта используется команда INPUT.

Создайте файл с именем CreateDatabase.sql и поместите в него следующие операторы:

set sql dialect 3; 
create database 'D:\BestDatabase\work.fd1' 
user 'wizard' password 'master' length 1000 
default character set WIN1251 
file 'D:\BestDatabase\work.fd2' length 1000 
file 'D:\BestDatabase\work.fd3' length 1000; 
commit; 

В подсказке утилиты введите:

SQL> input C reateDatabase.sql; 

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

Завершите работу с isql, выдав команду:

SQL > QUIT; 

Завершите работу с командной строкой, введя команду EXIT или закрыв окно командной строки.

Создание и изменение базы данных с использованием IBExpert

В программе IBExpert есть два способа создания и изменения базы данных — с использованием операторов SQL и с использованием инструментальных средств. Рассмотрим оба.

Создание и изменение базы данных с использованием операторов SQL

Если вы уже создали базу данных при помощи утилиты isql, то перед новым созданием базы данных следует удалить этот файл (файлы), используя любую программу Windows.

В программе IBExpert вызовите инструментальное средство, которое называется Script Executive (выполнение скриптов или, если угодно, диспетчер скриптов). Для этого в меню выберите Tools | Script Executive или нажмите клавиши Ctrl + F12. Появится окно Script Executive.

Для создания базы данных в закладке Script введите те же самые операторы, что вы вводили в диалоге утилиты isql. Ключевые слова SQL программа выводит полужирным шрифтом. Любые константы выделяются фоном бирюзового цвета.

0006_01

Рис. 1. Окно Script Executive программы IBExpert для создания, редактирования и выполнения скриптов

Для выполнения введенного оператора щелкните по кнопке Run (зеленый треугольник на инструментальной панели окна) или нажмите клавишу F 9.

0006_02

Рис. 2. Инструментальная панель окна работы со скриптами

Если вы правильно ввели операторы, и на диске в указанном каталоге не существует указанного файла (перед выполнением оператора вы удалили этот файл, созданный утилитой isql ), то будет создана новая база данных, и программа выдаст информационное сообщение об успешном выполнении скрипта:

0006_03

Рис.3. Сообщение об успешном выполнении скрипта

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

Аналогичным образом вы можете и изменять существующую базу данных.

Вы можете создать базу данных и на любом компьютере в вашей локальной сети. Для этого в операторе CREATE DATABASE в пути к базе данных укажите и имя компьютера, например:

create database 'Computer02 : D:\BestDatabase\work.fdb' 

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

Аналогичным образом выполняется и изменение базы данных.

Здесь также можно загрузить созданный вами скрипт и выполнить его.

Создание базы данных с использованием инструмента Create Database

Удалите созданный файл базы данных. Вызовите инструмент Create Database: меню Database | Create Database . Появится окно Create Database.

Из выпадающего списка Server выберите Local. В поле Database введите полный путь к файлу и имя файла базы данных. В поле Username введите WIZARD, в Password  — master. Размер страницы (Page Size) выберите 4096. Из выпадающего списка Charset выберите набор символов по умолчанию WIN1251. В списке SQL Dialect выберите значение Dialect 3. Снимите флажок в поле Register Database After Creating (не запрашивается регистрация базы данных после создания).

0006_04

Рис. 4. Создание новой базы данных на локальном компьютере

Щелкните по кнопке ОК. Будет создана база данных, появится информационное окно.

0006_05

Рис. 5. Информационное окно создания новой базы данных

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

Для этого выберите в меню Database | Create Database .

0006_06

Рис. 6. Создание новой базы данных на компьютере в локальной сети

В окне Create Database в поле Server из выпадающего списка выберите Remote (удаленный), в поле Server name наберите вручную имя нужного компьютера (в используемой мною сети сервер называется незамысловато — Server, что показано на рисунке; вы можете набрать имя любого компьютера в сети, а не только сервера), оставьте протокол TCP/IP. В поле Database введите путь к файлу и имя файла создаваемой базы данных. Путь надо задавать, начиная с имени диска, как если бы файл располагался на локальном компьютере. Нужную строку пути к файлу программа сформирует надлежащим образом. Базу данных можно создавать и на диске с запрещенным доступом.

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

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

Собственная программа для создания базы данных с использованием компонентов FIBPlus

В Delphi или в C ++ Builder создайте новый проект. Положите на форму нужные компоненты, чтобы получился приблизительно следующий вид:

0006_07

Рис. 7. Программа создания базы данных

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

В ComboBox PageSize нужно поместить список допустимых размеров страниц: 1024, 2048, 4096, 8192, 16384. В ComboBox CharSet помещается список допустимых наборов символов. В ComboBox SQLDialect помещается два диалекта: 1 и 3.

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

Данные о вторичных файлах помещаются в поле Memo. Для вторичных файлов задается путь к файлу и размер файла в страницах базы данных (предложение LENGTH ).

Добавление в поле Memo данных о вторичном файле (предложения FILE ) осуществляется в обработчике события щелчка по кнопке Add Secondary:

procedure  TFormMain.BAddSecondaryClick(Sender: TObject); 
begin 
 Memo1.Lines.Add('FILE ''' + TSecondaryFile.Text + 
 ''' LENGTH ' + TLength2.Text); 
end ; 

Для компонента TpFIBErrorHandler в свойстве Options установите в True значения всех подсвойств. Напишите следующий обработчик ошибок в базе данных. Он будет очень полезен, когда вы начнете экспериментировать с программой, задавая бессмысленные или противоречивые значения создаваемой базе данных.

procedure  TFormMain.ErrorHandler1FIBErrorEvent(Sender: TObject; 
ErrorValue: EFIBError; KindIBError: TKindIBError; var  DoRaise: Boolean); 
begin 
 Application.MessageBox(PAnsiChar('Error by creating database.' + #10#13 + 
 'IBErrorCode: ' + IntToStr(ErrorValue.IBErrorCode) + #10#13 + 
 'IBMessage: ' + ErrorValue.IBMessage), 
 'Error', MB_OK + MB_ICONSTOP); 
end ;

При использовании этого компонента вам нужно явно указать включение в программу модуля FIB. Для Delphi его нужно задать в предложении uses.

Наконец собственно процедура создания новой базы данных (вызывается при щелчке по кнопке Create database ):

procedure TFormMain.BCreateDatabaseClick(Sender: TObject); 
var  DBName: String ; 
OldCursor: TCursor; 
I: Integer; 
begin 
 OldCursor := Screen.Cursor; 
 Screen.Cursor := crHourGlass; 
 Database1.DBParams.Clear; 
 Database1.DBParams.Add('USER ''' + TUserName.Text + ''''); 
 Database1.DBParams.Add('PASSWORD ''' + TPassword.Text + ''''); 
 Database1.DBParams.Add('PAGE_SIZE = ' + CBPageSize.Text); 
 Database1.DBParams.Add('LENGTH = ' + TLength.Text); 
 Database1.DBParams.Add('DEFAULT CHARACTER SET ' + 
 CBCharSet.Text); 
 DBName := ''; 
if  (CBServerName.Visible) and 
(Trim(CBServerName.Text) <> '') then 
  begin 
  CBServerName.Text := Trim(CBServerName.Text); 
   case  CBProtocol.ItemIndex of 
     1: DBName := '\\' + CBServerName.Text + '\'; { NamedPipe } 
     2: DBName := CBServerName.Text + '@'; { SPX } 
     3: DBName := CBServerName.Text + ':'; { TCP } 
  end ; 
end ; 
for  I := 0 to  Memo1.Lines.Count - 1 do 
 Database1.DBParams.Add(Memo1.Lines[I]); 
 Database1.DBName := DBName + TDatabase.Text; 
 Database1.SQLDialect := StrToInt(SQLDialect.Text); 
 try 
  Database1.CreateDatabase; 
  except 
   Screen.Cursor := OldCursor; 
   exit; 
end ; 
 Application.MessageBox('Database created', 
 'Database', MB_OK + MB_ICONINFORMATION); 
 Database1.Close; 
 Screen.Cursor := OldCursor; 
end ; 

Здесь формируются значения свойств DBParams, DBName и SQLDialect компонента базы данных. Добавляются сведения о вторичных файлах из поля Memo. Обратите внимание, что текст в DBParams соответствует синтаксису оператора CREATE DATABASE, а не содержит обычные строки в виде имя-параметра=значение.

Обратите внимание на формирование строки соединения с базой данных в зависимости от выбранного протокола.

Если при создании базы данных были ошибки, ваш обработчик ошибок выдаст подробную информацию о характере ошибки.

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

Программа изменения базы данных во многом похожа на программу создания базы данных. Для выполнения добавления вторичных файлов в базу данных нам понадобятся еще два компонента работы с базой данных: TpFIBTransaction и TpFIBQuery .

0006_08

Рис. 8. Программа изменения базы данных

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

В поле Database помещается полный путь к первичному файлу существующей базы данных. Добавляемые вторичные файлы помещаются в поле Memo. Обработчик щелчка по кнопке Add Secondary выглядит чуть иначе.

procedure  TFormMain.BAddSecondaryClick(Sender: TObject); 
begin 
 Memo1.Lines.Add('ADD FILE ''' + TSecondaryFile.Text + 
 ''' LENGTH ' + TLength2.Text); 
end ; 

Основная процедура — выполнение изменения базы данных. Здесь оператор ALTER DATABASE формируется в свойстве SQL компонента Query. При этом нужно сформировать значения подсвойств CharSet, UserName и Password свойства ConnectParams компонента Database, присвоить значения свойствам DBName и SQLDialect. В результате при подключении к базе данных будет автоматически создан необходимый список параметров в свойстве DBParams.

Заключение

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

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

В именах первичных и вторичных файлов базы данных не используйте букв кириллицы.

К существующей базе данных вы можете добавить желаемое количество вторичных файлов, однако разделить существующую базу данных на несколько файлов средствами изменения базы данных невозможно. Такое разделение можно сделать, выполнив копирование и восстановление базы данных — backup и restore. Но это уже совсем другая история. См. статью на нашем сайте «Копирование и восстановление базы данных в InterBase/Firebird».

 

Прочитано 20301 раз

Авторизация



Счетчики