Замечания по выпуску


7.3 Глава 3. Создание базы данных

7.3.1 Создание табличного пространства

7.3.1.1 Использование непосредственного ввода/вывода в Linux

В Linux есть пул узлов с устройствами непосредственного ввода/вывода, который нужно связать с устройством блокировок, прежде чем на нем можно будет выполнять операции непосредственного ввода/вывода. Информация связывания непосредственных устройств с устройствами блочного ввода-вывода хранится на контроллере непосредственных устройств. Связывание выполняется при помощи утилиты под именем raw, которая обычно поставляется дистрибьютором Linux.

Прежде чем установить в Linux непосредственный ввод-вывод, вам понадобятся:

Прим.:В распространяемых в настоящее время дистрибутивах, поддерживающих непосредственный ввод-вывод, узлы непосредственных устройств называются по-разному:
Дистрибутив   Узлы непосредственных Контроллер непосредственных
              устройств              устройств
------------  --------------------  --------------------- 
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.

7.3.2 Создание последовательности

После раздела, озаглавленного "Определение столбца идентификации в новой таблице", добавьте раздел "Создание последовательности":

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

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

Последовательность можно создать или изменить, чтобы генерация значений происходила по одному из следующих методов:

Ниже приводится пример создания объекта последовательности:

   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 можно использовать в следующих контекстах:

7.3.3 Сравнение столбцов идентификации (IDENTITY) и последовательностей

После нового раздела под заголовком "Создание последовательности" добавьте следующий раздел:

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

Особенности столбца идентификации:

Объект последовательности имеет следующие особенности:

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

7.3.4 Создание индекса, расширения индекса или спецификации индекса

В разделе, озаглавленном "Создание индекса, расширения индекса или спецификации индекса", к абзацу, начинающемуся предложением "Длина столбца, входящий в ключ индекса, не может быть больше 255 байт" добавьте следующее примечание:
Прим.:Переменная реестра DB2_INDEX_2BYTEVARLEN дает разрешение включать в состав ключа индекса столбцы, длина которых превышает 255.


[ Начало страницы | Страница назад | Страница вперед | Содержание | Индекс ]