В Linux есть пул узлов с устройствами непосредственного ввода/вывода, который нужно связать с устройством блокировок, прежде чем на нем можно будет выполнять операции непосредственного ввода/вывода. Информация связывания непосредственных устройств с устройствами блочного ввода-вывода хранится на контроллере непосредственных устройств. Связывание выполняется при помощи утилиты под именем raw, которая обычно поставляется дистрибьютором Linux.
Прежде чем установить в Linux непосредственный ввод-вывод, вам понадобятся:
# ln -s /dev/ваш_контр_непоср_устр /dev/rawctl
Прим.: | В распространяемых в настоящее время дистрибутивах, поддерживающих
непосредственный ввод-вывод, узлы непосредственных устройств называются
по-разному:
Дистрибутив Узлы непосредственных Контроллер непосредственных устройств устройств ------------ -------------------- --------------------- RedHat 6.2 /dev/raw/raw1 to 255 /dev/rawctl SuSE 7.0 /dev/raw1 to 63 /dev/raw DB2 поддерживает все вышеперечисленные контроллеры непосредственных устройств и большинство других названий для узлов непосредственных устройств. DB2 не поддерживает непосредственных устройств в Linux/390. |
Чтобы сконфигурировать непосредственный ввод-вывод в Linux:
В этом примере используемый раздел raw - /dev/sda5. В нем не должно быть никакой существенной информации.
Шаг 1. | Вычислите количество страниц по 4096 байт, округляя, при необходимости, в меньшую сторону. Например: # fdisk /dev/sda Command (m for help): p Disk /dev/sda: 255 heads, 63 sectors, 1106 cylinders Units = cylinders of 16065 * 512 bytes Device Boot Start End Blocks Id System /dev/sda1 1 523 4200997 83 Linux /dev/sda2 524 1106 4682947+ 5 Extended /dev/sda5 524 1106 4682947 83 Linux Command (m for help): q # Число страниц в /dev/sda5 равно num_pages = floor( ((1106-524+1)*16065*512)/4096 ) num_pages = 11170736 |
Шаг 2. | Свяжите с этим разделом неиспользуемый узел непосредственного устройства. Это необходимо делать при каждой перезагрузке компьютера; для этого нужен доступ с полномочиями root. Чтобы посмотреть, какие узлы непосредственных устройств уже используются, введите команду raw -a: # raw /dev/raw/raw1 /dev/sda5 /dev/raw/raw1: bound to major 8, minor 5 |
Шаг 3. | Задайте глобальные права чтения на контроллере непосредственного устройства и разделе диска. Задайте глобальные права чтения и записи на непосредственном устройстве: # chmod a+r /dev/rawctl # chmod a+r /dev/sdb1 # chmod a+rw /dev/raw/raw1 |
Шаг 4. | Создайте табличное пространство в DB2, выбрав непосредственное устройство, а не раздел диска. Например: CREATE TABLESPACE dms1 MANAGED BY DATABASE USING (DEVICE '/dev/raw/raw1' 11170736)
|
Табличные пространства на непосредственных устройствах поддерживаются также для всех остальных размеров страниц, поддерживаемых DB2.
После раздела, озаглавленного "Определение столбца идентификации в новой таблице", добавьте раздел "Создание последовательности":
Последовательность - это объект базы данных, поддерживающий автоматическую генерацию значений. Последовательности идеально подходят для генерации уникальных значений ключей. Прикладные программы могут использовать последовательности для предотвращения конфликтов и проблем производительности из-за генерации счетчика уникальности вне базы данных.
В отличии от атрибута столбца идентификации, последовательность не привязана к конкретному столбцу таблицы и не связана с уникальным столбцом таблицы, и только доступ к ней происходит через этот столбец таблицы.
Последовательность можно создать или изменить, чтобы генерация значений происходила по одному из следующих методов:
Ниже приводится пример создания объекта последовательности:
CREATE SEQUENCE order_seq START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE CACHE 24
В этом примере последовательность названа order_seq. Она начнется с 1 и будет увеличиваться на 1 без ограничений сверху. Поскольку верхний предел не задан, нет смысла задавать возврат к 1 и повторение сначала. Число, связанное с параметром CACHE, задает максимальное число значений последовательности, которые менеджер баз данных разместит и будет сохранять в памяти.
Генерируемые числовые последовательности обладают следующими свойствами:
Если база данных, содержащая одну или несколько последовательностей, восстанавливается до более раннего момента времени, возникает опасность генерации повторных значений для некоторых последовательностей. Чтобы исключить появление повторяющихся значений, не следует подвергать базу данных с последовательностями восстановлению до более раннего момента времени.
Последовательности поддерживаются только в одноузловых базах данных.
Для работы с последовательностями используются два выражения.
Выражение PREVVAL возвращает сгенерированное предыдущим оператором текущего сеанса значение данной последовательности.
Выражение NEXTVAL возвращает следующее значение данной последовательности. Новый член числовой последовательности генерируется, когда в выражении NEXTVAL задается имя этой последовательности. Однако если в одном запросе есть несколько экземпляров выражения NEXTVAL с одним и тем же именем последовательности, приращение счетчика последовательности производится только один раз для каждой строки результата.
Один и тот же член числовой последовательности может использоваться как значение ключа уникальности в двух отдельных таблицах, если в первой таблице ссылка на член числовой последовательности делается при помощи выражения NEXTVAL, а во всех остальных таблицах при помощи выражения PREVVAL.
Например:
INSERT INTO order (orderno, custno) VALUES (NEXTVAL FOR order_seq, 123456); INSERT INTO line_item (orderno, partno, quantity) VALUES (PREVVAL FOR order_seq, 987654, 1)
Выражения NEXTVAL и PREVVAL можно использовать в следующих контекстах:
После нового раздела под заголовком "Создание последовательности" добавьте следующий раздел:
При всем сходстве столбцов идентификации и последовательностей между ними есть и различия. Особенности этих двух подходов могут использоваться при проектировании баз данных и прикладных программ.
Особенности столбца идентификации:
Объект последовательности имеет следующие особенности:
Хотя это и не все особенности этих двух подходов, изложенное поможет вам определить, какой из них использовать с учетом структуры вашей базы данных и использующих базу данных прикладных программ.
В разделе, озаглавленном "Создание индекса, расширения индекса или спецификации индекса", к абзацу, начинающемуся предложением "Длина столбца, входящий в ключ индекса, не может быть больше 255 байт" добавьте следующее примечание:
Прим.: | Переменная реестра DB2_INDEX_2BYTEVARLEN дает разрешение включать в состав ключа индекса столбцы, длина которых превышает 255. |