Все данные Informix хранятся в табличных пространствах, или просто пространствах (dbspace).
Если вы хотите только попробовать работать с Informix, дополнительные табличные пространства можно не выделять. Все, что вы создаете в СУБД, будет размещаться в корневом пространстве (пока там не закончится место). Можно сразу перейти к созданию базы данных.
В реально работающей системе корневое пространство обычно используют только для хранения служебных баз данных sys*, а все остальные массивы информации размещают в отдельных пространствах. Это позволяет минимизировать риск переполнения корневого пространства (Informix очень болезненно реагирует на такое переполнение).
Рекомендуется выделить следующие пространства:
Если какое-либо из перечисленных пространств не выделялось, соответствующие объекты будут располагаться в корневом пространстве.
Замечание. Термин "табличное пространство" не вполне корректен, поскольку в пространстве могут находиться не только таблицы. В оригинальной документации пространство обозначается словом "dbspace" - то есть пространство баз данных. К сожалению, мне пока не удалось подобрать русское слово, наиболее точно соответствующее этому понятию.
Informix хранит все свои данные в пространствах. Корневое пространство (rootspace) существует всегда. Координаты корневого пространства указываются в файле конфигурации СУБД ($INFORMIXDIR/etc/$ONCONFIG или просто onconfig). Координаты всех остальных пространств сохраняются в служебной базе данных (sysmaster) и в конфигурации не указываются.
Пространство - это логическая группа блоков дисковой памяти. Эти блоки называются чанками (chunks). Чанки размещаются в физических файлах операционной системы. Один чанк может либо занимать какой-то файл целиком, либо занимать только часть этого файла.
Выделение дисковой памяти производится чанками. В момент выделения очередного чанка указывается, к какому именно пространству он добавляется. Нельзя создать пространство, не содержащее ни одного чанка.
Координаты чанка определяются тремя параметрами:
Небольшое уточнение относительно корневого пространства: в файле конфигурации СУБД указываются координаты первого чанка этого пространства. Координаты всех остальных чанков хранятся в служебной базе sysmaster.
Выделение нового чанка происходит в две стадии:
Чанк может размещаться либо в обычном файле в файловой системе, либо на так называемом сыром устройстве - например, в физическом разделе жесткого диска или на логическом томе, созданном каким-либо менеджером томов (например, LVM). Следует заметить, что сырые устройства бывают двух видов - байт-ориентированные (символьные) и блочные. Для размещения чанков Informix можно использовать только символьные тома.
Начнем с варианта - файл в файловой системе. Итак, нужно:
Создание физического файла в файловой системе - самое простое дело:
/usr/informix > touch имя_файла /usr/informix >
Установка прав доступа: файл должен принадлежать пользователю informix, группе informix и должен быть доступен для чтения и записи только этому пользователю и этой группе:
/usr/informix > chown informix:informix имя_файла /usr/informix > chmod 660 имя_файла /usr/informix >
Создать ссылку на файл - в принципе не обязательно, но в ряде случаев может быть удобно. Дело в том, что имя файла, содержащего чанк, записывается в служебные базы в том виде, как его указал администратор. При этом СУБД все равно, чему соответствует указанное имя - реальному файлу или ссылке на него. Указание реального имени приведет к тому, что файл затем будет нельзя (или будет сложно) перенести в другое место. Это особенно неудобно, если чанк помещен в сырой раздел - имя файла, обозначающего этот раздел (как и имя любого специального файла) изменять не следует. Так что рекомендую делать ссылки всегда.
/usr/informix > ln -s имя_файла ссылка /usr/informix >
Регистрация чанка выполняется командой onspaces. Как у большинства команд, у нее много параметров (попробуйте onspaces --help). При регистрации чанка обязательны четыре:
Перед тем, как создавать что-то новое, следует вначале осмотреться и понять, что мы имеем на данный момент. Для просмотра списка имеющихся пространств и чанков воспользуемся командой onstat -d
/usr/informix > onstat -d IBM Informix Dynamic Server Version 11.70.FC7 -- On-Line -- Up 00:03:32 -- 432924 Kbytes Dbspaces address number flags fchunk nchunks pgsize flags owner name 5ac3c028 1 0x60001 1 1 2048 N BA informix rootdbs 1 active, 2047 maximum Chunks address chunk/dbs offset size free bpages flags pathname 5ac3c1d0 1 1 0 400000 163611 PO-B-- /Spaces/rootspace 1 active, 32766 maximum NOTE: The values in the "size" and "free" columns for DBspace chunks are displayed in terms of "pgsize" of the DBspace to which they belong. Expanded chunk capacity mode: always /usr/informix >
Полученная распечатка состоит из двух частей. Первая часть - с заголовком Dbspaces - содержит список табличных пространств. Вторая часть - с заголовком Chunks - содержит список уже имеющихся чанков. В нашем примере показано состояние дисковой памяти непосредственно после инициализации СУБД: имеется только одно пространство - корневое пространство rootdbs, и это пространство состоит из единственного чанка, размещенного в файле /Spaces/rootspace.
В листинге выделены имя пространства и координаты чанка.
Информация о табличном пространстве занимает одну строку и включает:
Информация о чанке занимает тоже только одну строку и включает:
Создадим новое пространство, в котором будем размещать наши базы данных. Назовем его "sp1" (от space 1). Физический файл поместим в каталог /fs2/Spaces, сам файл назовем space1_chunk1 (первый чанк первого пространства). Выделим под этот файл 20 гигабайт памяти.
/usr/informix 1> touch /fs2/Spaces/space1_chunk1 /usr/informix 2> chown informix:informix /fs2/Spaces/space1_chunk1 /usr/informix 3> chmod 660 /fs2/Spaces/space1_chunk1 /usr/informix 4> ln -s /fs2/Spaces/space1_chunk1 /Spaces/s01c01 /usr/informix 5> onspaces -c -d sp1 -p /Spaces/s01c01 -o 0 -s 20000000 Verifying physical disk space, please wait ... Space successfully added. ** WARNING ** A level 0 archive of Root DBSpace will need to be done. /usr/informix 6>
Для удобства команды в примере пронумерованы; номер указан в тексте приглашения к вводу
Первые четыре команды мы уже использовали, когда создавали файл для корневого пространства. Это были подготовительные действия. Реальное создание пространства происходит по пятой команде - onspaces. Ее параметры:
Теперь посмотрим, что у нас получилось.
/usr/informix > onstat -d IBM Informix Dynamic Server Version 11.70.FC7 -- On-Line -- Up 00:10:14 -- 432924 Kbytes Dbspaces address number flags fchunk nchunks pgsize flags owner name 5ac3c028 1 0x60001 1 1 2048 N BA informix rootdbs 5ac3c8e8 2 0x60001 2 1 2048 N BA informix sp1 2 active, 2047 maximum Chunks address chunk/dbs offset size free bpages flags pathname 5ac3c1d0 1 1 0 400000 163611 PO-B-- /Spaces/rootspace 5ac3ca90 2 2 0 10000000 19999947 PO-B-- /Spaces/s01c01 2 active, 32766 maximum NOTE: The values in the "size" and "free" columns for DBspace chunks are displayed in terms of "pgsize" of the DBspace to which they belong. Expanded chunk capacity mode: always /usr/informix >
Итак, мы видим, что появилось еще одно пространство с именем sp1 и еще один чанк.
Обратите внимание на следующие важные обстоятельства:
Итак, пространство выделено, но использовать его на самом деле пока нельзя. Об этом говорит предупреждение A level 0 archive of Root DBSpace will need to be done. Попросту говоря, СУБД не будет использовать новое пространство до тех пор, пока вы не сделаете ее архивирование.
Архивирование мы пока не настраивали, а работать хочется. Что ж, у нас имеется возможность сделать фиктивный архив - пометить экземпляр СУБД как архивированный, не делая реальной копии.
/usr/informix > onbar -b -F /usr/informix >
На тестовой системе такой трюк вполне допустим, в реальной производственной конфигурации так делать, конечно, не следует. Во всяком случае, если вам вдруг срочно понадобилось сделать архив реальной системы, а у вас нет на это времени или возможности, вы всегда можете сделать фиктивный архив, но при этом помнить, что настоящее архивирование нужно будет выполнить при первой же возможности.
В оригинальной документации такие пространства называют "temp spaces". Они предназначены для размещения разного рода временных объектов, создаваемых либо пользователями, либо самой СУБД. Временными объектами могут быть:
Для краткости будем называть такие пространства временными (хотя существуют они постоянно)
Если временное пространство не выделено, все перечисленные объекты создаются в корневом пространстве, что увеличивает нагрузку на него и создает риск его переполнения.
В нагруженных системах часто создают несколько временных пространств - в этом случае СУБД может использовать их одновременно, распределяя массивы данных между ними, что может способствовать ускорению работы, так как операции с разными пространствами могут выполняться параллельно.
Для примера создадим временное пространство размером 2 Гбайт. Файл первого чанка этого пространства разместим на отдельном носителе (физическом диске) в файловой системе fs4
/usr/informix 11> touch /fs4/Spaces/tmp1
/usr/informix 12> chown informix:informix /fs4/Spaces/tmp1
/usr/informix 13> chmod 660 /fs4/Spaces/tmp1
/usr/informix 14> ln -s /fs4/Spaces/tmp1 /Spaces/tmp1
/usr/informix 15> onspaces -c -d temp1 -t -p /Spaces/tmp1 -o 0 -s 2000000
Verifying physical disk space, please wait ...
Space successfully added.
** WARNING ** A level 0 archive of Root DBSpace will need to be done.
/usr/informix 16> onbar -b -F
/usr/informix 17>
Как видно, все очень похоже на операцию добавления основного (табличного) пространства. Единственное отличие - флаг -t в команде onspaces. Именно этот флаг (temporary) указывает на необходимость создания временного пространства. Что ж, посмотрим, что получилось:
/usr/informix > onstat -d IBM Informix Dynamic Server Version 11.70.FC7 -- On-Line -- Up 00:10:14 -- 432924 Kbytes Dbspaces address number flags fchunk nchunks pgsize flags owner name 5ac3c028 1 0x60001 1 1 2048 N BA informix rootdbs 5ac3c8e8 2 0x60001 2 1 2048 N BA informix sp1 5e39d230 3 0x42001 3 1 2048 N TBA informix temp1 3 active, 2047 maximum Chunks address chunk/dbs offset size free bpages flags pathname 5ac3c1d0 1 1 0 400000 163611 PO-B-- /Spaces/rootspace 5ac3ca90 2 2 0 10000000 19999947 PO-B-- /Spaces/s01c01 5e39d3d8 3 3 0 1000000 999947 PO-B-- /Spaces/tmp1 3 active, 32766 maximum NOTE: The values in the "size" and "free" columns for DBspace chunks are displayed in terms of "pgsize" of the DBspace to which they belong. Expanded chunk capacity mode: always /usr/informix >
Видно, что добавилось еще одно пространство. Признаком того, что оно - временное, служит символ T в колонке flags.
Еще одна тонкость. Хотя пространство выделено, СУБД не будет использовать его в качестве временного - до тех пор, пока не получит на это разрешения. Чтобы дать такое разрешение, необходимо отредактировать конфигурационный файл onconfig. Для этого нужно найти в файле параметр DBSPACETEMP и добавить в качестве его значения имя нашего нового пространства. Строка будет выглядеть примерно так:
DBSPACETEMP temp1
После этого, так как менялся конфигурационный файл, СУБД нужно перезапустить.
/usr/informix 20> onmode -ky /usr/informix 21> oninit /usr/informix 22>
Временное пространство готово к использованию.
Теперь пришло время для создания базы данных.