Реализация больших значений RID в среде SAP при помощи DB2 9

DB2® 9 для Linux, UNIX® и Windows® поддерживает большие идентификаторы записей (record identifier, RID) в сравнении с предыдущими версиями, что позволяет значительно увеличить предел размера табличных пространств. Какие преимущества предоставляет эта функция? Узнайте, каким образом большие RID позволяют оптимизировать использование пространства на страницах данных. В этой статье будут рассмотрены усовершенствования, связанные с использованием DB2 9, например, увеличенный размер страниц пула объектов данных и идентификатор слотов.

Марианна Несьем (Marianne Nesiem), тестирование и поддержка интеграции DB2/SAP, IBM Toronto

Марианна Несьем (Marianne Nesiem) является членом центра интеграции и поддержки IBM SAP (Integration and Support Centre) лаборатории IBM в Торонто (Toronto Lab). В настоящее время она занимается тестированием SAP R/3 с DB2 UDB и помогает заказчикам выполнять анализ возникающих проблем и проводить диагностику. Она также предоставляет специализированную поддержку крупным заказчикам, работающим с SAP и DB2. Марианна является сертифицированным техническим экспертом DB2 и системным администратором UNIX, а также имеет опыт разработки программ на Java для баз данных и других приложений.



01.06.2007

Введение

Идентификатор записи (RID) представляет собой ссылку на положение строки в таблице. Их можно использовать для:

  • Указания страницы данных, на которой находятся записи;
  • Описания местоположения записей на странице данных.

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

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

Рисунок 1. Формат страницы данных и RID
Формат страницы данных и RID

RID не применяются к табличным пространствам, управляемым системой (system-managed space, SMS).

Большие RID

Что представляют собой большие RID?

В ранних версиях DB2® для Linux, UNIX ® и Windows® размер RID ограничивался четырьмя байтами и предназначался для уникальной идентификации строк в базе данных: три байта использовались для номеров страниц данных и один - для номера слота. По умолчанию типу данных табличного пространства было заданно значение "REGULAR". DB2 версии 9 (DB2 9) поддерживает большие RID, что позволяет увеличить предел размера табличных пространств. В DB2 9 размер страницы пула объектов данных увеличен с трех до четырех байтов, а размер идентификатора слота - с одного до двух байтов. Новый тип данных табличных пространств по умолчанию - "LARGE".

Увеличение длины RID, и, следовательно, количества страниц, позволяет размещать в таблице больше страниц данных. Страница также может включать больше записей, поскольку возможное количество слотов стало равным r. Создание табличных пространств с типом данных LARGE (или их преобразование в LARGE) просто позволяет использовать новую функцию, но не приводит к существенному увеличению емкости хранилищ. Чтобы таблица в табличном пространстве могла использовать это новое пространство, с индексами таблицы необходимо выполнить операцию REORG. Для использования новых слотов на странице необходимо выполнить операцию REORG с таблицей.

Примечание: Когда вы преобразовываете табличное пространство SAP в LARGE, лучше преобразовывать к этому типу как табличные пространства индекса, так и данных .

Если таблица размещается в табличном пространстве LARGE:

  • Таблица может поддерживать более 255 строк на странице данных, что позволяет улучшить использование пространства на страницах данных;
  • Для индексов, определенных в таблице, требуется два дополнительных байта на каждую строку, в сравнении с индексами, определенными в таблицах, расположенных в обычном табличном пространстве.

Тип RID (REGULAR или LARGE), хранимый в индексе, определяется типом табличного пространства, в котором размещается базовая таблица (таблица с данными) с типом RID. Этот тип не имеет ничего общего с типом табличного пространства с размещенными индексами. Системное и пользовательское временные табличные пространства поддерживают большие RID. В новых системах по умолчанию создаются табличные пространства с типом LARGE.

При изменениях для каждого RID требуется 8 байт памяти в среде с одним разделом и 16 байт - в среде базы данных с несколькими разделами; дополнительная память требуется для повышения производительности.

Преимущества использования больших RID

Создание больших табличных пространств (или преобразования табличных пространств в LARGE) позволяет значительно увеличить максимальный размер пространства в сравнении с предыдущими версиями.

Рисунок 2. Схема табличного пространства
Схема табличного пространства

Выгодно ли использовать большие слоты для моей таблицы?

Таблица 1. Указания по созданию табличных пространств
Обычное табличное пространствоБольшое табличное пространство
Размер страницыМинимальная длина записиМаксимальная длина записиМинимальная длина записиМаксимальная длина записи
4 Кб1425112287
8 Кб3025312580
16 Кб62254121165
32 Кб127253122335

Выполните следующее предложение и посмотрите, имеет ли таблица преимущества, обусловленные новой функцией:

SELECT TABSCHEMA, TABNAME, AVGROWSIZE FROM SYSCAT.TABLES

Если средний размер строки (-2) для таблицы меньше минимальной длины записи для используемого размера страницы, то при преобразовании табличного пространство в большое и реорганизации таблицы для разрешения больших слотов можно получить преимущество в использовании памяти.

Примечание: Значение, возвращаемое AVGROWSIZE, включает два байта для слота и не включает значение минимальной длины записи.

ADMINTABINFO и ADMIN_GET_TAB_INFO

Административное представление ADMINTABINFO и функцию таблиц ADMIN_GET_TAB_INFO можно использовать для запроса к таблице об использовании в ней больших RID. Эти параметры содержат информацию о таблицах с идентификаторами LARGE_RIDS и LARGE_SLOTS:

  • LARGE_RIDS(CHAR(1): Показывает, используются ли в таблице большие идентификаторы строк (RID):
    • Значение "Y" соответствует использованию в таблице больших RID;
    • Значение "N" - отсутствию использования больших RID;
    • Значение "P" (pending, ожидание) указывает на то, что таблица поддерживает большие RID, то есть таблица находится в большом табличном пространстве, но при этом хотя бы один индекс таблиц еще не реорганизован. Это означает, что таблица по-прежнему использует четырехбайтные RID. Необходимо преобразовать таблицу или индексы.
  • LARGE_SLOTS(CHAR(1)): Показывает, использует ли таблица большие слоты (допускающие более 255 строк на странице):
    • Значение "Y" соответствует использованию в таблице больших слотов;
    • Значение "N" - большие слоты в таблице не используются;
    • Значение "P" (ожидание) указывает, что таблица поддерживает большие слоты, то есть таблица находится в большом табличном пространстве, но еще не выполнена автономная реорганизация таблицы или операция усечения таблицы. В таблице по-прежнему используется 255 строк на страницу.

Табличная функция ADMIN_GET_TAB_INFO также содержит следующие идентификаторы:

  • DATA_OBJECT_L_SIZE: Логический размер объектов данных, т.е. объем дискового пространства, логически выделенный для таблицы, выраженный в килобайтах. Логический размер представляет собой объем пространства, известного для таблицы. Эта величина может быть меньше пространства, физически выделенного для таблицы (например, в случае логического усечения таблиц);
  • DATA_OBJECT_P_SIZE: Физический размер объектов данных, т.е. объем дискового пространства, физически выделенного для таблицы, выраженный в килобайтах;
  • INDEX_OBJECT_L_SIZE: Логический размер объекта индекса, т.е. объем дискового пространства, логически выделенного для индексов, определенных в таблице, выраженный в килобайтах. Логический размер представляет собой объем пространства, известного для таблицы. Эта величина может быть меньше пространства, физически выделенного для данных индекса таблицы (например, в случае логического усечения таблиц);
  • INDEX_OBJECT_P_SIZE: Физический размер объекта индекса, т.е. объем дискового пространства, физически выделенного для индексов, определенных в таблице, выраженный в килобайтах.

Пример 1: Чтобы идентифицировать таблицы, допускающие использование больших RID, но в данный момент не использующие их, воспользуйтесь следующей командой:

SELECT TABNAME FROM SYSIBMADM.ADMINTABINFO 
	WHERE LARGE_RIDS=’P'

Пример 2: После запуска преобразования и операции REORG относительно таблицы, выполните следующую команду, чтобы убедиться, что таблица использует новую функцию:

SELECT large_rids, large_slots FROM TABLE 
	(ADMIN_GET_TAB_INFO('<schema>', '<Table>')) AS X

Если функция REORG выполнена полностью, в обоих случаях значение должно соответствовать "Y".

Пример 3: Для контроля увеличения размера таблиц и индексов выполните следующую команду до и после преобразования:

  SELECT TABNAME, TABSCHEMA, DATA_OBJECT__P_SIZE, INDEX_OBJECT_P_SIZE 
    FROM TABLE(SYSPROC.ADMIN_GET_TAB_INFO(“,”)) 
    AS T WHERE TABNAME=’<tablename>’

Реализация больших RID

Требования

Для реализация этой новой функции должны соблюдаться следующие условия:

  • Преобразуемая база данных должна находиться в формате DB2 версии 9 или выше;
  • Табличное пространство должно представлять собой пространство, управляемое базой данных (database managed, DMS). Для проверки, является ли табличное пространство пространством DMS, выполните команду DB2 LIST TABLESPACES . Результат выполнения команды должен выглядеть примерно так:
Tablespace ID = 10

Name = SAMPLE

Type = Database managed space

Contents = All permanent data. Regular tablespace

State = 0x0000

Detailed explanation: Normal
  • Рекомендуется задать табличному пространству автоматический размер с неограниченным значением. Для проверки, используется ли для таблицы автоматический размер, выполните команду DB2 GET SNAPSHOT FOR TABLESPACES ON <SID> . Результат выполнения команды должен выглядеть примерно так:
Tablespace name = SAMPLE

Tablespace type = Database managed space
  
Tablespace content type = All permanent data. Large tablespace
  
Tablespace page (bytes) = 4096
	
Tablespace extent size (pages) = 2
	
Automatic prefetch size enabled = Yes

Buffer pool ID currently in use = 1

Buffer pool ID next startup = 1
  
Using automatic storage = Yes

Auto-resize enabled = Yes
  
File system caching = Yes
  
Tablespace state = 0x'00000000'
	
Detailed explanation: Normal

Размер RID увеличен в DB2 9 на два байта, что, в свою очередь, увеличивает размер индексов. Для оценки увеличения индекса по всем индексам выполните следующую команду с правами доступа "пользователь" db2<sid>:

SELECT SUM(numrids)/512 FROM syscat.indexes
WHERE tabschema = '<schema>' and tabname = '<LargeTable>'

Где <schema> представляет собой SAPR3 или SAP<SID> в зависимости от уровня системы. Обратите внимание, что во время преобразования возможно разделение некоторых страниц, что также приводит к дополнительному увеличению.

Использование больших RID приводит к увеличению размера строк наборов результатов запросов или позиционированных обновлений. Если размер строки приближается к максимальному пределу длины строки для временного системного пространства с наибольшим размером страницы, то, возможно, потребуется табличное пространство с большим размером страницы. Если размер страницы временного системного табличного пространства составляет 32 Кб, то необходимо сократить объем информации, получаемой в результате выполнения запроса, или разделить запрос. Подробнее см. в "Соответствие требованиям к размеру страниц временных системных табличных пространств".

Преобразование табличных пространств в LARGE

Для использования этой новой функции сначала необходимо объявить табличное пространство как LARGE. После этого все таблицы, созданные в данном табличном пространстве, автоматически будут использовать преимущества новой функции. Для существующих таблиц просмотрите разделы по реорганизации индексов и реорганизации таблиц. Рекомендуется после перехода на DB2 9 преобразовать в LARGE все табличные пространства. Для преобразования не требуется дополнительного дискового пространства, и само оно занимает минимум времени. По умолчанию все новые табличные пространства создаются как LARGE. Таким образом, в случае новой установки SAP на DB2 9, данный шаг выполнять не требуется.

Дя запуска процесса преобразования используйте команду ALTER TABLESPACE . Вы можете выполнить эту команду следующим образом:

% db2 ”ALTER TABLESPACE <tbsname> CONVERT TO LARGE”

Для преобразования всех существующих табличных пространств в LARGE, выполните следующие действия:

  1. Войдите в систему как владелец экземпляра (db2<sid>) и подключитесь к базе данных;
  2. Выполните следующую команду и сохраните результаты в файл:
    db2 "SELECT 'ALTER TABLESPACE' || tbspace || ‘ CONVERT TO LARGE;’ 
       AS TABSPACE FROM syscat.tablespaces 
       WHERE tbspacetype = 'D' AND datatype = ‘A’ 
       AND tbspace NOT LIKE ‘SYS%’” > convert.sql
  3. Файл convert.sql должен выглядеть так:
    …
    alter tablespace PSAPSOURCED convert to large;
    alter tablespace PSAPSOURCEI convert to large;
    alter tablespace PSAPSTABD convert to large;
    alter tablespace PSAPSTABI convert to large;
    alter tablespace PSAPUSER1D convert to large;
    alter tablespace PSAPUSER1I convert to large;
  4. Выполните файл convert.sql:
    %db2 –tvf convert.sql

Примечание:

  • Этот новый параметр невозможно объединить с другими параметрами изменения табличных пространств;
  • Можно не обращать внимания на предупреждения >SQL1237W и ADM6104W;
  • Если табличное пространство содержит раздел для диапазона секционированной таблицы, все разделы таблицы должны находиться в одном табличном пространстве;
  • Обычно преобразование длится несколько секунд, в течение которых табличное пространство и все его содержимое недоступно для пользователей;
  • Во время преобразования также обновляются таблицы для каталогов SYSCAT.TABLESPACES, SYSCAT.TABLES, сканируется SYSCAT.SATAPARTITIONS на наличие данных и длинных данных в табличном пространстве, SYSCAT.INDEXES сканируется на наличие индексов в табличном пространстве;
  • Отменить эту операцию невозможно.

Включение больших идентификаторов страниц: Реорганизация только индексов

Как было показано ранее, при реорганизации только индексов, таблицы используют преимущества функции больших RID и увеличения идентификатора страниц с трех до четырех байт. Преимущество этой операции заключается в том, что ее можно выполнить в автономном или оперативном режиме (без остановки системы SAP), при этом для операции требуется меньше времени в сравнении с реорганизацией всей таблицы. Табличные пространства данных и индексов (пространства с таблицей и индексами) необходимо преобразовать в LARGE перед выполнением операции REORG . Выполните эту операцию следующим образом:

% db2 "REORG INDEXES ALL FOR TABLE <schema>.<tabname>”

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

  1. Войдите в систему как владелец экземпляра (db2<sid>) и подключитесь к базе данных;
  2. Выполните следующую команду и сохраните результаты в файл:
    db2 "SELECT  'REORG INDEXES ALL FOR TABLE ' || CHR(34) || RTRIM(tabschema)
    	 || CHR(34) || '.' || CHR(34) || tabname || CHR(34) || ' ;' FROM syscat.tables 
    	 WHERE  type = 'T' AND tbspace = '<tbsname> " | grep 
    	 REORG  > index_reorg.sql
  3. Файл index_reorg.sql должен выглядеть следующим образом:
    …
    REORG INDEXES ALL FOR TABLE "SAPR3"."J_3RFANKA" ;
    REORG INDEXES ALL FOR TABLE "SAPR3"."/SAPHT/MEST9LG" ;
    REORG INDEXES ALL FOR TABLE "SAPR3"."/SAPHT/MESZPARM" ;
    REORG INDEXES ALL FOR TABLE "SAPR3"."DB6IDENTIFIER" ;
    REORG INDEXES ALL FOR TABLE "SAPR3"."T5BPBS01" ;
  4. Выполните файл index_reorg.sql:
    %db2 –tvf index_reorg.sql

Примечание:

  • Команда REORG должна выполняться без CLEANUP ONLY;
  • Для секционированных таблиц необходимо использовать команду ALLOW NO ACCESS;
  • Для запуска REORG в оперативном режиме, добавьте ALLOW WRITE ACCESS.

Включение больших страниц и больших идентификаторов слотов: Реорганизация таблиц

Для использования всех преимуществ функции больших RID (большие идентификаторы страниц и большие идентификаторы слотов) необходимо выполнить полную реорганизацию таблиц. После реорганизации на каждой странице данных может находиться более 255 записей (предполагая, что они умещаются на одной странице). Количество записей, умещающихся на одной странице данных, зависит от размера отдельной записи и размера страницы.

Команда REORG используется следующим образом:

% db2 "REORG TABLE <schema>.<tabname>”

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

  1. Убедитесь, что система SAP прекратила работу;
  2. Войдите в систему как владелец экземпляра (db2<sid>) и подключитесь к базе данных;
  3. Выполните следующую команду и сохраните результаты в файл:
    db2 "SELECT  'REORG TABLE ' || CHR(34) || RTRIM(tabschema)
    	 || CHR(34) || '.' || CHR(34) || tabname || CHR(34) || ' ;' FROM syscat.tables 
    	 WHERE  type = 'T' AND tbspace = '<tbsname> " | grep 
      REORG  > table_reorg.sql
  4. Файл table_reorg.sql должен выглядеть следующим образом:
    …
    REORG TABLE "SAPR3"."J_3RFANKA" ;
    REORG TABLE "SAPR3"."/SAPHT/MEST9LG" ;
    REORG TABLE "SAPR3"."/SAPHT/MESZPARM" ; 
    REORG TABLE "SAPR3"."DB6IDENTIFIER" ;
    REORG TABLE "SAPR3"."T5BPBS01" ;
  5. Выполните файл table_reorg.sql:
    %db2 –tvf table_reorg.sql

Примечание:

  • Команда REORG должна выполняться без CLEANUP ONLY;
  • Для секционированных таблиц необходимо использовать команду ALLOW NO ACCESS.

Вопросы и ответы

В: Поддерживает ли SAP большие RID?

О: Да, во всех новых системах SAP, установленных с DB2 9, эта функция включена по умолчанию.

В: Что именно делает команда ALTER TABLESPACE?

О: Данная команда выполняет три операции:

  1. Блокирует все таблицы, определенные для использования в режиме Z;
  2. Обновляет строку в SYSTABLESPACES для указания, что типом табличного пространства является LARGE, а не REGULAR;
  3. Обновляет файл SPCS в определении табличного пространства в памяти и все TCB, находящиеся в памяти, для указания на тип таблицы LARGE. Этот шаг выполняется на этапе выполнения оператора COMMIT.

В: Сначала необходимо выполнять команду REORG INDEXES, а только затем REORG TABLE?

О: Команда REORG TABLE выполняет реорганизацию данных и индексов таблицы. Поэтому REORG INDEXES (реорганизацию индексов) после этого действия выполнять не требуется. Следует учесть, что процесс реорганизации занимает некоторое время и должен выполняться в автономном режиме. В зависимости от ожидаемого увеличения таблицы операции реорганизации индексов должно быть достаточно.

В: Что произойдет, если прервать выполнение операции REORG TABLE?

О: Во время операции REORG INDEXES будет выполнен откат. Во время операции REORG TABLE (реорганизации таблицы) повторно создаются индексы для поддержки больших RID. В зависимости от момента прерывания реорганизации, индексы либо создаются повторно, либо маркируются как неправильные и создаются повторно при следующем доступе.

В: Сколько времени занимает операция преобразования CONVERT TABLESPACE? И какое ожидается увеличение размера табличного пространства?

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

В: Сколько времени занимает операция реорганизации REORG? И какое ожидается увеличение размера табличного пространства?

О: На основе лабораторных тестирований можно сказать, что выполнение операции REORG TABLE может занимать от 10 минут до 1 часа, в зависимости от размера и фрагментированности таблицы, а также от количества индексов. REORG INDEXES длится примерно вдвое меньше. Операция REORG TABLE , выполняемая с группой из 4044 таблиц, длилась около 4 часов 53 минут. При тестировании после реорганизации было отмечено увеличение размера табличного пространства примерно на 1% и уменьшение примерно на 1,2% количества свободных страниц в табличном пространстве.


Приложение

Программа SAMPLE, предоставляемая компанией IBM, для включения больших RID

-----------------------------------------------------------------------------
-- Материал предоставлен по лицензии - Собственность IBM
--
-- В соответствии с условиями Международного
-- лицензионного соглашения для примеров программ без гарантии.
--
-- (C) COPYRIGHT International Business Machines Corp. 2006 - 2006
-- Все права защищены.
--
-- Правительство США, ограниченные права пользователей - Использование, копирование или
-- разглашение ограничено договором GSA ADP Schedule с IBM Corp.
-----------------------------------------------------------------------------
--
-- ИМЯ ИСХОДНОГО ФАЙЛА: largerid.db2
--
-- ПРИМЕР: Как включить поддержку больших RID для новых таблиц / табличных пространств и 
--         для существующих таблиц / табличных пространств.
--
--         В данной примере показано следующее:
--         1. Преобразование обычных табличных пространств DMS в большие 
--            табличные пространства DMS.
--         2. Перенос таблиц с ранних версий в новую версию для обеспечения 
--            поддержки больших размеров таблиц.
--         3. Реорганизация индексов для поддержки Large RID.
--
-- ИСПОЛЬЗУЕМЫЕ SQL-ВЫРАЖЕНИЯ:
  --       ALTER TABLESPACE 
  --       CREATE TABLE
  --       CREATE TABLESPACE
  --	   REORG
  --	   SELECT
  --       SET INTEGRITY
--         TERMINATE
--
-- ВЫХОДНОЙ ФАЙЛ: largerid.out (имеется в документации, размещенной в Интернете)
-----------------------------------------------------------------------------
--
-- Подробнее о сценариях обработчика командной строки (command line processor, CLP)
-- см. файл README.
--
-- Подробнее об использовании SQL-операторов см. в справочнике SQL Reference.
--
-- Последние сведения по программированию, созданию и выполнению приложений DB2
-- можно найти в Информационном центре DB2:
--     http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp
-----------------------------------------------------------------------------

-- Подключение к базе данных.
CONNECT TO sample;

-- В следующем сценарии показано, как таблицу, размещенную в обычном 
-- табличном пространстве DMS 
-- можно преобразовать для ее размещения в больших табличных пространствах DMS и для
-- поддержки больших RID. 

-- Создайте обычное табличное пространство DMS.
CREATE REGULAR TABLESPACE largetbsp MANAGED BY DATABASE USING (FILE 'cont1' 1000);

-- Создайте таблицу в табличном пространстве DMS 'largetbsp'.
CREATE TABLE large (max INT, min INT) IN largetbsp;

-- Создайте индекс в таблице 'large'.
CREATE INDEX large_ind ON large (max);

-- Измените табличное пространство DMS на большое табличное пространство DMS для 
-- поддержки больших RID.
ALTER TABLESPACE largetbsp CONVERT TO LARGE;

-- Создайте заново/реорганизуйте индексы таблицы для поддержки больших RID.
-- Команда Reorg реорганизует все индексы, определенные в таблице, с помощью 
-- повторного создания 
-- данных индексов в нефрагментированных, физически непрерывных страницах.
-- Это позволяет использовать в таблице четырехбайтные номера страниц, но не  позволяет
-- использовать в таблице более 255 слотов на странице. 

-- Использование более 255 слотов на странице:
-- a) Определение таблицы и размер страницы табличного пространства должны 
--   быть соответственными.
-- b) Таблицу необходимо реорганизовать при помощи классической автономной операции reorg.

REORG INDEXES ALL FOR TABLE LARGE;

-- Удалите индекс, таблицу и табличное пространство.
DROP INDEX large_ind;
DROP TABLE large;
DROP TABLESPACE largetbsp;

-- В следующем сценарии показано, как секционированную таблицу, размещенную в 
-- обычных табличных пространствах DMS, можно преобразовать для размещения в больших 
-- табличных пространствах DMS для поддержки больших RID. 

-- Создайте обычные табличные пространства DMS.
CREATE REGULAR TABLESPACE tbsp1 MANAGED BY DATABASE USING (FILE 'cont1' 1000);
CREATE REGULAR TABLESPACE tbsp2 MANAGED BY DATABASE USING (FILE 'cont2' 1000);
CREATE REGULAR TABLESPACE tbsp3 MANAGED BY DATABASE USING (FILE 'CONT3' 1000);

-- Создайте секционированную таблицу.
CREATE TABLE LARGE (max SMALLINT NOT NULL, CONSTRAINT CC CHECK (max>0)) 
  PARTITION BY RANGE (max) 
    (PART  part1 STARTING FROM (1) ENDING (3) IN tbsp1, 
    PART part2 STARTING FROM (4) ENDING (6) IN tbsp2, 
    PART part3 STARTING FROM (7) ENDING (9) IN tbsp3);

-- Вставьте в таблицу данные.
INSERT INTO LARGE VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9);

-- Отображение данных таблицы.
SELECT * FROM LARGE;

-- Если в секционированной таблице разделы данных расположены в различных обычных 
-- табличных пространствах DMS, то табличные пространства невозможно 
-- преобразовать в большие при использовании текущего определения.
-- Для преобразования сначала отсоедините все разделы таблицы, а затем
-- преобразуйте все табличные пространства в большие, реорганизуйте все отсоединенные 
-- разделы в большие для поддержки больших RID. Затем снова подсоедините разделы.
-- Теперь вся таблица поддерживает большие RID.

ALTER TABLE large DETACH PARTITION PART3 INTO TABLE detach_part3;
ALTER TABLE large DETACH PARTITION PART2 INTO TABLE detach_part2;

-- Отображение записей из каждой таблицы.
SELECT * FROM large;
SELECT * FROM detach_part2;
SELECT * FROM detach_part3;

-- Преобразование всех табличных пространств DMS в большие табличные пространства DMS.
ALTER TABLESPACE tbsp3 CONVERT TO LARGE;
ALTER TABLESPACE tbsp2 CONVERT TO LARGE;
ALTER TABLESPACE tbsp1 CONVERT TO LARGE;

-- Реорганизация отсоединенных разделов для поддержки больших RID. 
-- Команда REORG реорганизует таблицу при помощи перестроения строк для устранения 
-- фрагментированных данных и сжатия информации.

REORG TABLE detach_part3;
REORG TABLE detach_part2;
REORG TABLE large;

-- Присоединение реорганизованных разделов таблицы для поддержки 
-- больших RID. 
ALTER TABLE large ATTACH PARTITION part2 STARTING FROM (4) ENDING (6) 
  FROM TABLE detach_part2;
ALTER TABLE large ATTACH PARTITION part3 STARTING FROM (7) ENDING (9) 
  FROM TABLE detach_part3;

-- После выполнения  оператора ALTER таблица переходит 
-- в заданное состояние ожидания целостности.
-- Перед выполнением SELECT таблицу необходимо вывести из состояния ожидания.
SET INTEGRITY FOR large IMMEDIATE CHECKED;

-- Отображение записей таблицы.
SELECT * FROM LARGE;

-- Удаление таблиц и табличных пространств.
DROP TABLE LARGE;
DROP TABLESPACE tbsp1;
DROP TABLESPACE tbsp2;
DROP TABLESPACE tbsp3;

-- Отключитесь от базы данных.
CONNECT RESET;

TERMINATE;

Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



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

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Information Management
ArticleID=228129
ArticleTitle=Реализация больших значений RID в среде SAP при помощи DB2 9
publish-date=06012007