Сайт Koder.kz сайт для Delphi программистов.

koder.kz

Web or desctop App Developer

Написать

Добавил admin | Категория Наши материалы | 12 Августа 2014


что такое "диалект"?

A: В IB 6 появилось несколько расширений, как SQL так и типов данных, которые поддерживаются при помощи диалектов.

  • Диалект 1 - базы данных 4.x или 5.x, "импортированные" в 6.0 посредством backup в 4.x/5.x и restore в 6.0. Не содержат никаких отличий от 5.x.
  • Диалект 2 - предназначен для проверки возможности перевода баз данных диалекта 1 в диалект 3.
  • Диалект 3 - "родной" формат IB 6, поддерживающий INT6, DATE, TIME, TIMESTAMP и прочие расширения.
SQL Item Dialect 3 Dialect 2 * Dialect 1 **
DATE Только дата Сообщение об ошибке Дата и время (Timestamp)
TIMESTAMP Дата и время Дата и время Дата и время (для v.6.x только)
TIME только время сообщение об ошибке? Ошибка
"" имя поля, таблицы, и т.п. сообщение об ошибке строковая константа
Точность: 1/3 = 0 0 (с предупреждением ?) 0.3333333... (double precision)
NUMERIC(11,*) 64 bit int 64 bit int (с предупреждением ?) double precision

Диалект 1 в версии 6 отличается от версии 5.x поддержкой следующих ключевых слов: TIMESTAMP, TIME, EXTRACT, YEAR, MONTH, DAY, WEEKDAY, HOUR, MINUTE, SECONDS, ?TYPE?, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP. Т.е. использование этих ключевых слов в качестве идентификаторов полей, таблиц и других объектов будет приводить к ошибке.

примечание: Firebird имеет расширенный список зарезервированных слов. Список отличий Firebird от Interbase см. выше.

Кроме этого в диалекте 3 не поддерживается автоматическая конвертация типов в выражениях. Например, если раньше в SQL можно было написать 1+'3' и получить ответ 4, то в диалекте 3 будет выдано сообщение об ошибке.
Более подробно диалекты описаны здесь. Работа с большими NUMERIC и DECIMAL очень подробно описана в документе. Облегчить переход с 5.x на 6.0 поможет соответствующий документ. Для облегчения перехода с диалекта 1 на диалект 3 как минимум рекомендуется не использовать строки в двойных кавычках.
В InterBase 6/7, Yaffil и Firebird поддерживаются как 1 так и 3-й диалекты.

Может-ли база данных быть больше 2-х (4-х) гигабайт?

А: Да, может. Однако это зависит от многих факторов - от версии сервера, от версии операционной системы, и от типа файловой системы, на которой находится база данных. Понятно, что на FAT16 нельзя сделать логический диск больше 2-х гигабайт. Также известно что при копировании больших файлов с FAT32 на NTFS не копируется более 2-х гигабайт. На Linux ядро системы должно быть версии 2.4 для нормальной работы с файлами таких размеров. Достаточно сказать, что все самые последние версии InterBase, Firebird и Yaffil могут работать с базой данных любого размера более 4-х гигабайт. Версия Interbase 5.x - повредит БД при переходе за границу в 4 гигабайта. Поэтому, если вы не уверены в версии ОС, файловой системе или версии сервера - используйте многофайловую БД, т.е. базу данных, разбитую на части. Максимальный размер базы данных для многофайловой БД равен 131 терабайт (это не ошибка, именно терабайт).

Какой размер страницы выбрать?

В InterBase при создании БД обычно используется умолчательный размер страницы в 1 килобайт (1024 байта). Такое значение было сформировано по умолчанию достаточно давно, поэтому сейчас не актуально.
Для большинства современных баз данных следует выбирать размер страницы в 4К (4096 байт), а также для файловой системы, где эта БД будет располагаться, выбрать размер кластера равный тем же 4К.
Размер страницы в первую очередь влияет на индексы с длинными (строковыми) ключами. Чем больше размер ключа или средний размер записи таблицы, тем больший размер страницы следует выбрать. Также стоит выбрать больший размер страницы, если в БД предполагается хранить много blob размером 50К и больше. Разные версии серверов допускают разные предельные размеры страниц для БД. Например, InterBase не может создать БД со страницами больше 8К, а Firebird имеет ограничение на размер страницы в 16К. Также можно учесть особенности конкретной файловой системы - например, на W2K можно создавать логические диски с размером кластера = 8К, однако такой том будет невозможно дефрагментировать.

Надо-ли дефрагментировать диск с базой?

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

Лучший "дефрагментатор" для базы данных - это backup/restore.

Кроме этого, у разных файловых систем есть свои особенности - NTFS при наличии свободного места на диске менее 13% и сильной фрагментированности начинает работать медленнее.

Можно ли установить 2 разных сервера на один компьютер

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

  • настройки и пути в registry
  • системные объекты (mutex, семафоры и т.п.)
  • конфигурационный файл

Например, Firebird 1.5, Yaffil и InterBase 7.x сейчас имеют свои собственные вышеперечисленные характеристики. Единственный конфликтный параметр - это номер порта, используемый клиентом и сервером для работы по TCP. Соответственно, при одновременном запуске этих серверов нужно знать, что только клиентские части FB и Yaffil могут принимать альтернативный номер порта в строке коннекта (например, srv/3070:c:\dir\data.gdb). А на сервере номер порта, используемого конкретным сервером, устанавливается: Firebird 1.5 - в firebird.conf, Firebird 1.0 - services, InterBase - services, Yaffil - ключи командной строки ibserver.exe (это на Windows. На Linux разводка по портам осуществляется конфигурированием inetd/xinetd). Будьте осторожны при запуске двух серверов одновременно - если вы перепутаете и откроете базу не тем сервером (если базы имеют одинаковый ods), то возможны проблемы при дальнейшей работе правильной комбинации сервер+база данных (несовместимый код BLR процедур или триггеров и т.п.).

Не берется база с расшаренного диска

И не должна. Файл базы данных должен находиться на том же компьютере, что и сервер IB/FB/YA. Причем строка подключения должна содержать диск и путь к базе данных в именах локальных для этого сервера дисков (c:, d:, e: и так далее). Теоретически файл БД можно положить на другой компьютер, если организовать том Networking File System (чаще встречается на unix). Однако это может привести к нестабильной работе и безусловной порче данных в случае обрыва соединения между компьютером с БД и компьютером с IB/FB/YA. Кроме того, при связи например в 100 мегабит сервер будет очень медленно работать с БД (сравните скорость обмена данными по сети со скоростью доступа к IDE HDD).

При отключении клиентов остаются коннекты на сервере

для Windows можно посмотреть и изменить настройки tcp:
http://support.microsoft.com/default.aspx?kbid=140325
http://support.microsoft.com/default.aspx?kbid=120642
Для Linux - то же самое, т.е. конфигурирование tcp. Однако все равно проблема есть, и она чаще всего проявляется на Classic. Будем надеяться что окончательно проблема будет решена в Firebird версии > 1.5.

В чем разница между архитектурами SuperServer и Classic?

A: Если в двух словах, то Classic создает процесс для каждого пользовательского коннекта, а SuperServer - один процесс, который обрабатывает запросы клиентов в разных threads (этого же процесса). Архитектура Classic надежнее, но требует больше памяти, т.к. кэш данных и метаданных у каждого процесса (пользователя) свой. SuperServer - производительнее, и имеет общий кэш данных и метаданных, но не распараллеливает запросы разных пользователей на многопроцессорных машинах. Распараллеливаемый SuperServer выпущен тольо Borland в версии Interbase 7.
В Windows архитектура SuperServer была введена с версии 4.2. С тех пор (1995 год) версия Classic для Windows не выпускается. Для Linux (Unix) большинство портов были Classic, однако порт SuperServer также существует. Firebird выпускается, как правило, для всех вариантов Unix как в архитектуре Classic, так и SuperServer.
Borland в версии 6.5 прекратил выпуск Classic для всех платоформ.
Для Windows есть Classic - Yaffil и Firebird 1.5
Borland Interbase 7 имеет архитектуру SuperServer, нормально распараллеливаемую на несколько процессоров.

Я удалил SYSDBA. Что делать?

A: пока что в IB/FB/Yaffil все пользователи хранятся в файле ISC4.GDB (IB7 - admin.ib, FB 1.5 - security.fdb). Это обычная база данных. В дальнейшем, возможно какой-либо из серверов будет поддерживать пользователей прямо в базах данных, без необходимости ISC4.GDB, но пока это только в планах. Следовательно, нужно сделать следующее:

  1. остановить сервер IB
  2. скопировать isc4.gdb например в isccopy.gdb
  3. взять isc4.gdb из того самого дистрибутива, версия которого установлена, подсунуть на место isc4.gdb
  4. запустить сервер IB. теперь логиниться сможет только SYSDBA с паролем masterkey
  5. подсоединиться к isccopy.gdb, и например IBExpert-ом извлечь данные из таблицы users в скрипт
  6. применить скрипт к новой isc4.gdb
  7. не забыть сменить пароль masterkey у SYSDBA, продолжить работу.