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


|13.3 Как использовать приостановленный ввод-вывод для восстановления баз данных

| | | | |

|Представленная ниже информация об утилите db2inidb замещает информацию в |книге Что нового Версии 7.2.

|С DB2 поставляется инструмент db2inidb, позволяющий выполнить |восстановление после сбоев или перевести базу данных в состояние отложенного |повтора транзакций.

|Приостановленный ввод-вывод поддерживает постоянную доступность системы, |полностью реализуя оперативное отделение зеркальной копии, то есть отделение |зеркальной копии без закрытия базы данных. Если вы не можете получить |автономные или оперативные резервные копии большой базы данных, резервные |копии или копии системы можно получить из ее зеркальной копии, используя |приостановленный ввод-вывод и отделенную зеркальную копию.

|Приостановка ввода-вывода запрещает запись данных на диск при отделении |зеркальной копии базы данных. При этом будут нормально работать все |операции базы данных, кроме операций оперативного резервного копирования и |восстановления. Однако некоторые операции могут ждать возобновления |операций записи ввода-вывода, если страницы, ожидающие записи в журналы, |должны быть сброшены на диск из пула буферов или из буферов журналов. |Эти операции продолжат нормальную работу после возобновления ввода-вывода для |базы данных. Важно, чтобы ввод-вывод базы данных был возобновлен из |того же соединения, в котором он был ранее приостановлен. Иначе |последующие попытки соединения могут зависнуть, если они требуют сброса |ожидающих страниц из пула буферов на диск. Эти соединения будут |завершены, как только ввода-вывода базы данных возобновится. Если ваши |попытки соединения зависают и не удается возобновить ввод-вывод из соединения, |использованного для его приостановки, надо выполнить восстановление после |сбоев с помощью команды RESTART с опцией WRITE RESUME.

|В среде многораздельных баз данных не требуется приостанавливать операции |записи во всех разделах одновременно. Чтобы создать отделенную |зеркальную копию для автономного резервного копирования, можно приостановить |некоторый поднабор из одного или нескольких разделов. Если в поднабор |входит узел каталога, этот раздел нужно приостанавливать последним.

|При создании зеркальной копии базы данных прежде всего копируется все |содержимое каталога базы данных и каталога локальных баз данных. |Каталог локальных баз данных sqldbdir расположен на том же уровне |файловой структуры, что и каталог системных баз данных. Кроме того, |если каталог журналов и контейнеры табличного пространства находятся не в |каталоге базы данных, их также надо скопировать. Поскольку зеркальная |копия базы данных использует пути этих каталогов, пути, куда копируются эти |каталоги, должны быть идентичны путям исходной системы. Это означает, |что и экземпляр должен быть тем же самым. Из-за такой зависимости |невозможно создать зеркальную копию базы данных на той же системе, что и |исходная база данных, если не использовать новую опцию "relocate" |инструмента db2inidb.

|Назначение опции "relocate" - изменить положение базы данных на |определенной системе, используя указанный файл конфигурации. Это может |потребовать изменения каталога системных баз данных, каталога контейнеров, |каталога журналов, имени экземпляра и имен баз данных. Если для |каталога базы данных, каталогов контейнеров и каталога журналов были успешно |созданы зеркальные копии в других каталогах на той же системе, что и исходная |база данных, можно использовать утилиту db2inidb с опцией "relocate", |чтобы изменить внутренние пути зеркальной копии базы данных. Сценарий с |использованием этой опции можно найти ниже.

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

|В многоузловой среде, прежде чем можно будет использовать отделенную |зеркальную копию какого-либо из разделов, надо выполнить команду db2inidb для |всех разделов. Утилиту db2inidb можно выполнить для всех разделов |одновременно при помощи команды db2_all. |

  1. |

    |Создание клона базы данных

    |Цель этой операции - получить клон исходной базы данных, используемый |другой системой. Далее описывается, как создать клон базы данных: |

    1. |Приостановите операции записи на диск для исходной базы данных, введя |команду:
      |     db2 set write suspend for database
    2. |Используйте команды уровня операционной системы и дисковой подсистемы, |чтобы отделить зеркальную копию от исходной базы данных. Не забудьте |отделить как данные, так и журналы.
    3. |Возобновите операции записи на диск для исходной базы данных, введя |команду:
      |     db2 set write resume for database

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

    4. |Смонтируйте отделенную зеркальную копию первичной базы данных на другой |системе.
    5. |Запустите этот экземпляр базы данных на другой системе, введя |команду:
      |     db2start
    6. |Запустите восстановление после сбоев DB2, введя команду:
      |db2inidb имя_базы_данных AS SNAPSHOT
      |Прим.:
      Эта команда отменит состояние приостановки записи и выполнит откат изменений, |внесенных транзакциями во время отделения зеркальной копии. |
      |

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

  2. |

    |Использование отделенной зеркальной копии в качестве резервной базы |данных

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

    1. |Приостановите операции записи в исходной базе данных:
      |	db2 set write suspend for database
    2. |Используйте команды уровня операционной системы и дисковой подсистемы, |чтобы отделить зеркальную копию от исходной базы данных. Отделить надо |только данные, но не журналы.
    3. |Возобновите операции записи на диск для исходной базы данных, чтобы |вернуть ее в обычный режим.
      |	db2 set write resume for database
    4. |Смонтируйте отделенную зеркальную копию базы данных для другой |системы.
    5. |Запустите экземпляр первичной базы данных, введя команду |db2start.
    6. |Переведите зеркальную копию в состояние отложенного повтора и выполните |для нее повтор транзакций:
      |	db2inidb имя_базы_данных AS STANDBY

      |

      |Прим.:
      Эта команда отменит состояние приостановки записи и переведет зеркальную |копию базы данных в состояние отложенного повтора. |
    7. |Скопируйте журналы, установив программу обработчика пользователя для |получения файлов журналов из исходной системы, чтобы для этой зеркальной копии |базы данных были доступны самые последние журналы.
    8. |Выполните для базы данных повтор транзакций до конца журналов.
    9. |Вернитесь к шагу f и повторяйте данный процесс, пока исходная база данных |не будет закрыта.
    10. |Выполните для базы данных повтор транзакций до конца журналов, используя |опцию AND STOP, чтобы перевести базу данных в рабочий режим. Она будет |готова к работе. |
  3. |

    |Использование отделенной зеркальной копии в качестве резервной |копии

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

    1. |Остановите экземпляр исходной базы данных с помощью команды |db2stop.
    2. |При помощи команд операционной системы и дисковых подсистем скопируйте |данные зеркальной копии обратно на место исходной базы данных. Не |копируйте файлы журналов. Для операций восстановления с повтором |транзакций необходимо использовать журналы исходной базы данных.
    3. |Запустите экземпляр исходной базы данных с помощью команды |db2start.
    4. |Чтобы перевести зеркальную базу данных в состояние отложенного повтора |транзакций и отменить состояние приостановленной записи, выполните |команду:
      |db2inidb имя_базы_данных AS MIRROR
    5. |Выполните для базы данных повтор транзакций до конца журналов, используя |опцию AND STOP, чтобы перевести базу данных в рабочий режим. Она будет |готова к работе. |
  4. |

    |Отделение зеркальной копии в той же системе, что и исходная база |данных

    |Ниже описано, как использовать опцию "relocate" утилиты db2inidb для |создания зеркальной копии базы данных в той же системе, что и исходная база |данных. В этом примере предполагается, что такая база данных будет |использоваться под новым экземпляром. |

    1. |Создайте новый экземпляр в текущей системе.
    2. |Приостановите операции записи в исходной базе данных:
      |	db2 set write suspend for database
    3. |Используйте команды уровня операционной системы и дисковой подсистемы, |чтобы отделить зеркальную копию от исходной базы данных.
      |Прим.:
      Каталог базы данных, каталоги контейнеров и каталог журналов должны быть |скопированы в новый экземпляр. Если каталоги контейнеров или каталог |журналов находятся под каталогом базы данных, нужно скопировать только каталог |базы данных и каталог локальных баз данных. |
    4. |Возобновите в исходной базе данных операции записи, чтобы вернуть ее в |обычный режим:
      |	db2 set write resume for database
    5. |Создайте файл конфигурации, содержащий следующую информацию:
      | DB_NAME=имя,необязательное_новое_имя
      | DB_PATH=путь_каталога_исходной_базы_данных,путь_каталога_зеркальной_копии_базы_данных
      | INSTANCE=исходный_экземпляр,экземпляр_зеркальной_копии_базы_данных
      | LOG_DIR=каталог_журналов_исходной_базы_данных,каталог_журналов_зеркальной_копии_базы_данных
      | CONT_PATH=путь_контейнера_1_исходной_базы_данных,
      | путь_контейнера_1_зеркальной_копии_базы_данных ...
      | CONT_PATH=путь_контейнера_n_исходной_базы_данных,
      | путь_контейнера_n_зеркальной_копии_базы_данных
      | NODENUM=номер_узла

      |

      |Прим.:
      Поля LOG_DIR и CONT_PATH требуются только в тех случаях, когда каталог |журналов и каталоги контейнеров расположены вне каталога базы данных. |Все остальные поля - обязательные, за исключением NODENUM; если оно не |задано, по умолчанию используется нулевое значение. |
    6. |Запустите базу данных из нового созданного экземпляра:
      |	db2start
    7. |Измените положение зеркальной копии базы данных, отмените для нее |состояние приостановки и переведите ее в состояние отложенного повтора |транзакций:
      |	db2inidb имя_базы_данных as STANDBY relocate using config_file
    8. |Скопируйте журналы, установив программу обработчика пользователя для |получения файлов журналов из исходной базы данных, чтобы для этой зеркальной |копии базы данных были доступны самые последние журналы.
    9. |Выполните для базы данных повтор транзакций до конца журналов.
    10. |Вернитесь к шагу h и повторяйте данный процесс, пока исходная база данных |не будет закрыта.
    11. |Выполните для базы данных повтор транзакций до конца журналов, используя |опцию AND STOP, чтобы перевести базу данных в рабочий режим. Она будет |готова к работе. |
    |


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