Автоматическое управление памятью в Oracle 11g - Создание резервной копии и восстановление метаданных

ОГЛАВЛЕНИЕ

Создание резервной копии и восстановление метаданных

Многие люди считают ASM базой данных со своей собственной памятью. Это не совсем так – ASM не хранит данные; их хранит база данных. Однако экземпляр ASM хранит метаданные, такие как имена дисковых групп; диски, входящие в них; директории и т.д. Эти метаданные хранятся в заголовках дисков.

Предположим, что все диски разрушены и информация из заголовков исчезла. Что делать? Конечно, вы сделали резервную копию базы данных, используя RMAN, и можете восстановить её. Но её можно будет восстановить только после того, как будут созданы все дисковые группы и директории. Надеюсь, у вас есть записи обо всем этом. (Верно?) Даже если есть, этот процесс требует времени.
Что, если бы у вас была резервная копия? В Oracle Database 11g можно создать резервную копию метаданных экземпляра ASM с помощью командной строки ASM (ASMCMD), используя команду md_backup.

$ asmcmd -p
 
ASMCMD [+] > md_backup

Создается файл с именем ambr_backup_intermediate_file. Вот фрагмент этого файла с самого начала:

@diskgroup_set = (
            {
             'DISKSINFO' => {
                     'DG1_0000'  => {
                              'DG1_0000' => {
                                      'TOTAL_MB' => '103',
                                     'FAILGROUP' => 'DG1_0000',
                                      'NAME' => 'DG1_0000',
                                      'DGNAME' => 'DG1',
                                      'PATH' => '/dev/raw/raw5'
                                     }
                            }
                    },
             'DGINFO' => {
                    'DGTORESTORE'  => 0,
                    'DGCOMPAT'  => '10.1.0.0.0',
                    'DGNAME' =>  'DG1',
                    'DGDBCOMPAT'  => '10.1.0.0.0',
                    'DGTYPE' =>  'EXTERN',
                    'DGAUSZ' =>  '1048576'
                   },
             'ALIASINFO' => {},
             'TEMPLATEINFO' => {
                       '6' => {
                           'DGNAME'  => 'DG1',
                           'STRIPE'  => 'COARSE',
                           'TEMPNAME' => 'ASM_STALE',
                            'REDUNDANCY' => 'UNPROT',
                           'SYSTEM'  => 'Y'
  ... and more ... 

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

ASMCMD [+] > md_backup -g dg1 -b prolin3_asm.backup

Эта команда создает резервную копию метаданных DG1 в файле с именем prolin3_asm.backup вместо имени по умолчанию ambr_backup_intermediate_file. Этот файл должен быть новым, поэтому, если он существует, то перед генерацией его необходимо удалить.

Теперь давайте посмотрим, как работает восстановление. Существует несколько типов восстановления. Простейший способ – это восстановить ранее удаленную дисковую группу вместе с директориями. Сначала создайте директорию в дисковой группе:

ASMCMD [+] > cd DG7
ASMCMD [+DG7] > mkdir TEST
ASMCMD [+DG7] > ls
TEST/

Дисковая группа имеет директорию с именем TEST. Теперь создадим резервную копию дисковой группы:

ASMCMD [+] > md_backup -g dg7 -b g7.backup

После этого удалим дисковую группу, чтобы смоделировать случайное удаление:

SQL> drop diskgroup dg7;     
Diskgroup dropped.

Теперь дисковая группа DG7 исчезла из экземпляра ASM и необходимо восстановить её из резервной копии. Это можно сделать, используя команду md_restore:

$ asmcmd md_restore -b dg7.backup -t full  
Current Diskgroup being restored: DG7
Diskgroup DG7 created!
System template TEMPFILE modified!
System template FLASHBACK modified!
System template ARCHIVELOG modified!
System template BACKUPSET modified!
System template XTRANSPORT modified!
System template DATAGUARDCONFIG modified!
System template CONTROLFILE modified!
System template AUTOBACKUP modified!
System template DUMPSET modified!
System template ONLINELOG modified!
System template PARAMETERFILE modified!
System template ASM_STALE modified!
System template CHANGETRACKING modified!
System template DATAFILE modified!
Directory +DG7/TEST re-created!

Посмотрите на результат; создается дисковая группа, а также шаблоны и директории. Если там были какие-то данные, конечно, они будут потеряны. md_backup – это резервирование не данных, а скорее метаданных экземпляра ASM. Данные, очевидно, резервируются RMAN. После создания дисковой группы вместе с директориями можно восстановить резервную копию RMAN для этой дисковой группы.

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

ASMCMD [+] > md_restore -b dg7.backup -t full -f cr_dg7.sql

Она создает SQL-скрипт с именем cr_dg7.sql, который создаёт дисковую группу и другие объекты. Его можно вручную запустить в экземпляре ASM. Вот как выглядит этот файл:

create diskgroup DG7 EXTERNAL redundancy  disk '/dev/raw/raw14' name DG7_0000 size 100M ;
alter diskgroup /*ASMCMD AMBR*/DG7 alter template TEMPFILE attributes (UNPROTECTED COARSE);
alter diskgroup /*ASMCMD AMBR*/DG7 alter template FLASHBACK attributes (UNPROTECTED FINE);
alter diskgroup /*ASMCMD AMBR*/DG7 alter template ARCHIVELOG attributes (UNPROTECTED COARSE);
alter diskgroup /*ASMCMD AMBR*/DG7 alter template BACKUPSET attributes (UNPROTECTED COARSE);
alter diskgroup /*ASMCMD AMBR*/DG7 alter template XTRANSPORT attributes (UNPROTECTED COARSE);
alter diskgroup /*ASMCMD AMBR*/DG7 alter template DATAGUARDCONFIG attributes (UNPROTECTED COARSE);
alter diskgroup /*ASMCMD AMBR*/DG7 alter template CONTROLFILE attributes (UNPROTECTED FINE);
alter diskgroup /*ASMCMD AMBR*/DG7 alter template AUTOBACKUP attributes (UNPROTECTED COARSE);
alter diskgroup /*ASMCMD AMBR*/DG7 alter template DUMPSET attributes (UNPROTECTED COARSE);
alter diskgroup /*ASMCMD AMBR*/DG7 alter template ONLINELOG attributes (UNPROTECTED FINE);
alter diskgroup /*ASMCMD AMBR*/DG7 alter template PARAMETERFILE attributes (UNPROTECTED COARSE);
alter diskgroup /*ASMCMD AMBR*/DG7 alter template ASM_STALE attributes (UNPROTECTED COARSE);
alter diskgroup /*ASMCMD AMBR*/DG7 alter template CHANGETRACKING attributes (UNPROTECTED COARSE);
alter diskgroup /*ASMCMD AMBR*/DG7 alter template DATAFILE attributes (UNPROTECTED COARSE);
alter diskgroup /*ASMCMD AMBR */ DG7 add directory '+DG7/TEST';

Одно из наиболее полезных применений этой возможности – документирование метаданных экземпляра ASM. Можно создавать резервные копии через определенные интервалы или после важных изменений, например, добавления дисковой группы, добавления/удаления дисков или создания директорий.