Миграция на области хранения Типа II
Переход на области хранения Типа II
Краткий план для выгрузки и загрузки данных.
Необходимо придерживаться определенной последовательности действий при перегрузке базы:
Важное замечание: Большинство приложений обычно используют таблицу _User и последовательности (sequences). Если ваше приложение тоже использует эти таблицы, то не забудьте выгрузить таблицу _User и текущие значения последовательностей при выгрузке базы данных. (кроме того, могут быть использованы скрытые таблицы — Hidden Tables. Как пример — линейка Syteline ERP 6.x. Выгружайте такие таблиы используя галку «show hidden tables» , прим /dmi)
- Выполнить dbanalys перегружаемой базы данных
- Сделать резервную копию базы данных и проверить её
- Сделать файл описания структуры основываясь на данных dbanalys (или использовать старый, если мы не делаем никаких изменений в расположении, типе, количестве или размере областей хранения)
- Выгрузить файл словаря данных (df-файл)
- Выгрузить данные (о способах выгрузки — читайте ниже)
- Привести df-файл к соответствию со структурой базы данных (если необходимо)
- Скопировать правильную empty базу данных в директорию, где расположен файл структуры (возможно, придется стереть предыдущую базу данных)
- Загрузить df-файл определения данных
- Проверить, что все сделано правильно (используя Data Dictionary или dbanalys)
- Загрузить данные (способы описаны ниже)
- Проверить загрузку утилитой dbaanlys
- Сделать резервную копию базы данных
Вывод утилиты dbanalys является не только источником информации о среднем размере записи в таблице, но еще и содержит информацию о количестве записей в каждой таблице. Выполнив dbanalys после загрузки данных можно сравнить количество записей в таблице до выгрузки и после загрузки. Они должны совпасть.
Необходимо всегда делать резервные копии базы данных перед каждым действием с базой, ведь при любых проблемах можно откатиться на резервную копию. Это полезно, если вы ограничены по времени в своих работах. Если ваши утилиты еще работают, а отведенное на работы время подходит к концу, то просто восстановитесь из последней резервной копии. Очень важно иметь план работ и четко его придерживаться. Например, в вашем плане отмечено, что загрузка должна быть закончена в 12:00 воскресенья, а она все еще выполняется. В этом случае необходимо остановиться. Как правило оценки оставшегося времени в такой ситуации совсем не блещут точностью. Кроме того, необходимо скорректировать план.
Скорее всего еще понадобится отредактировать файл словаря данных (df-файл). Если у вас уже есть области Типа I и вы просто переходите на области Типа II, то как правило никаких изменений делать не нужно. Однако, при необходимости сделать такие изменения совсем просто — нужно открыть df-файл в любом текстовом редакторе и поискать слово «AREA«. Как правило у начинающих администраторов все объекты лежат в «Schema Area«. Как мы знаем из предыдущих глав — это неправильно и Schema Area должна cодержать только схему.
Замечание: Если в названии области есть пробел, то такое название должно быть заключено в кавычки в параметрах утилит. Поэтому, если возможно, избегайте пробела и используйте вместо него значок «_». Возьмем, к примеру наименования : «Data Area» и Data_Area. Оба этих варианта имеют право на жизнь, но со вторым наименованием проще работать. Этото совет кажется поначалу банальным, однако вы его впоследствии оцените.
Выгрузка и загрузка данных
Выгрузить данные можно множеством способов. Самый простой способ — использование Data Administration. В секции Admin необходимо выбрать необходимые таблицы и директорию для выгрузки. Проблема в том, что выгрузка и загрузка в этом случае будут выполнены последовательно для каждой таблицы, причем будут использованы промежуточные текстовые файлы для выгружаемых (и соответственно загружаемых таблиц). Можно немного доработать процесс и использовать BUFFER-COPY из одной базы данных в другую, но это требует места для копии базы данных.
Перед выполнением dump и load базы данных надо определиться со следующими вопросами:
- Выключать ли индексы на время загрузки? Это зависит от нашей цели. Если мы хотим перегрузить базу данных наиболее оптимально, то мы должны выключить индексы при загрузке и выполнить перестройку индексов по её окончанию.
- Нужно ли загружать данные в ином порядке, чем это задано первичным ключом? Если это необходимо, то следует написать свою утилиту для выгрузки данных в определенном порядке.
Самый простой способ уменьшения времени на перегрузку базы данных — это распараллеливание процессов выгрузки и загрузки. Как правило в существующих базах данных есть ряд больших таблиц, выгрузку которых можно выполнять параллельными процессами. В результате должно работать по одному процессу на большие таблицы и один процесс на выгрузку остальных таблиц. Проведите тестирование и определите, сколько одновременных процессов выгрузки может работать на вашем сервере — это число, естественно, варьируется на каждом отдельном сервере. Можно написать свой код для выгрузки большой таблицы частями множеством потоков и потом склеить выгруженные части при загрузке. Полезным может оказаться и использование private buffers (-Bp) для каждого процесса выгрузки, тем самым процессы буду работать со своими частными буферными пулами и не будут претендовать на весь буфферный пул базы данных.
Многопоточная загрузка немного сложнее — ведь нам нужно получить самый оптимальный результат и вместе с тем потратить на его достижение как можно меньше времени. Эти цели противоречат друг другу. Но многопоточность возможна и в этом случае — пр одному потоку загрузки на одну область хранения. Некоторые общие правила загрузки данных:
- Выполнять загрузку в многопользовательском режме
- Увеличить размер кластера BI до 128MB или больше
- Вернуть размер кластера BI обратно после загрузки
- Запускать процесс BIW и оптимальное количество процессов APW
- Выключить журналирование After-Image или не включать его пока загрузка не будет завершена.
После загрузки данных будет необходимо запустить утилиту построения индексов, если индексы при загрузке не строились. И последнее — запустить утилиту dbanalys и сравнить количество записей в таблицах до выгрузки и после загрузки данных. После того, как проверка пройдена база данных готова к работе.