Saturday, August 11, 2007

Перенос базы в новую ASM_DISKGROUP

После того, как был добавлен новый LUN, был настроен автостарт базы осталось решить последнюю проблему - необходимо перенести базу из текущих asm_diskgroups, поднятых на RAID0 в новую asm_diskgroup, созданную на базе нового добавленного LUN'а RAID1.
При подготовке к данному переносу почитал доку, ноты металинка и провел ряд тестов на своей тестовой базе в VMVare-машине. В результате составил след.инструкцию, которую и использовал при работе с продакшн базой.
====
Задача: Перенести базу в новую asm_diskgroup
Данные: Имя новой asm_diskgroup - EVA01R1


1) Сделать бэкап control- файла

SQL> select name from v$controlfile;
SQL> alter database backup controlfile to '+EVA01R1';

2) Задать новое месторасположение control-файла в spfile

SQL> alter system set control_files='+EVA01R1\ITC\CONTROLFILE\CONTROL01.CTL' SCOPE=SPFILE;

Прим. если spfile не используется экземпляром, то прописать в его init.ora

3) Восстановить новый из старого control-файла


$ rman target /
RMAN > shutdown immediate;
RMAN > startup nomount;
RMAN> restore controlfile from '+EVA02/itc/controlfile/current.266.610247845';

4) Запустить копирование базы

RMAN> alter database mount;
RMAN> backup as copy database format ' +EVA01R1 ';

5) Переключить базу на копию

RMAN> switch database to copy;
RMAN> RUN
{
SWITCH TEMPFILE 1 TO '+EVA01R1';
}


6) Добавить в init.ora
параметр Db_create_file_dest=+eva01r1

7) Открыть базу
RMAN> alter database open;

8) Добавить в новую asm_diskgroup зеркальные копии онлайн-логов во всего журнальные группы экземпляра

alter database add logfile member ' +EVA01R1 ' to group 1 ;
alter database add logfile member ' +EVA01R1 ' to group 2;
alter database add logfile member ' +EVA01R1 ' to group 3 ;
alter database add logfile member ' +EVA01R1 ' to group 4 ;
alter database add logfile member ' +EVA01R1 ' to group 5 ;

9) Переключить журнал
alter system archive log current

10) Удалить старые копии журналов из старой asm_diskgroup

Можно использовать скрипт (здесь старая группа +EVA02)

declare
strSQL varchar2( 200 );
begin
for pList in (select member from v$logfile where member like '+EVA02/%' ) loop
strSQL:= 'alter database drop logfile member "' || pList.member || '"' ;
begin
EXECUTE IMMEDIATE strSQL;
end;
end loop;
end;

или вручную через

alter database drop logfile member '+EVA02/itc/onlinelog/group_1.256.609887989’
(имя файла изменять на свое)

Проверить остались ли старые файлы
select member from v$logfile where member like '+EVA02/%'

11) Переместить файл block_change_tracking

SQL> select status,filename
from v$block_change_tracking;

SQL> alter database disable block change tracking

SQL> alter database enable block change tracking
using file '+EVA01R1' reuse;


12) Проверить месторасположение всех фалов

select name from v$controlfile
union
select name from v$datafile
union
select name from v$tempfile
union
select member from v$logfile
union
select filename from v$block_change_tracking


13) Удалить все старые дисковые группы как ненужные

SQL> drop diskgroup eva01 including contents;
SQL> drop diskgroup eva02 including contents;

No comments: