Направление Oracle  
  Типовые операции RMAN - , бэкап, восстановление, дуплицирование  


Эти материалы являются объектом авторского права и защищены законами РФ и международными соглашениями о защите авторских прав. Перед использованием материалов вы обязаны принять условия лицензионного договора на использование этих материалов, или же вы не имеете права использовать настоящие материалы

Авторская площадка "Наши орбиты" состоит из ряда тематических подразделов, являющихся моими лабораторными дневниками, содержащими записи за разное, иногда продолжительно отличающееся, время. Эти материалы призваны рассказать о прошедшем опыте, они никого ни к чему не призывают и совершенно не обязательно могут быть применимы кем-то ещё. Это только лишь истории о прошлом

Начальные слова

Oracle RMAN - фактически промышленный стандарт для операций резервирования данных, восстановления и дупликации. Хотя очень полезно уметь делать бэкап, вотановлени и дупликацию баз в полностью ручном режиме, но RMAN предоставляет внушительное количество возможностей, в ручном режиме недоступных. Это и восстановление из бэкапов праймари и стэндбаёв для ленточного режима хранения, и автоматическое подтягивание альтернативных иточников быкапов при нодеоступности основных - если админитратор озаботился избыточнотью, и простое восстановление битых блоков, которые могут появиться в БД. Полноценное использование технологий RMAN реализовано у меня в продукте OrSiMON BeSSt 2010 года, и впервые на промышленном уровне было применено для резервирования инфраструктуры Oracle DB в госкорпорации Росатом для резервирования централизованных сервиов, включая автоматизацию основных операций резервирования, журналирование каждой операции и наглядное отображение статуов операций. Начальная информация по резервированию и восстановлению размещена в статье Oracle. Введение в круг понятий. Бэкап базы Oracle

1. Бэкап БД

2. Восстановление из бэкапа

--- шаблон восстановления ---
rman target=/ << EOF
run {
set DBID=ХХХХХХХХХ;
allocate channel t1 type DISK ;
allocate channel t2 type DISK ;
-- %b - имя файла без каталогов, %N - имя табличного пространства, %f - тщмер файла, %I - DBID, %U - уникальная автогенерация
run {
-- указать новые пути для отдельных файлов
set newname for datafile '/oradata/testdb01/system01.dbf' to '/oradata/testdb01/system01.dbf' ;
set newname for datafile '/oradata/testdb01/undotbs01.dbf' to '/oradata/testdb01/undotbs01.dbf' ;
set newname for datafile '/oradata/testdb01/users01.dbf' to '/oradata/testdb01/users01.dbf' ;
set newname for datafile '/oradata/testdb01/my_oracle_db.ora' to '/oradata/testdb01/my_oracle_db.ora' ;
-- или указать новый путь для всей БД
set newname for database '/oradata/testdb01/%b' ;

restore controlfile from '/oracle_backup/testdb01/ctls/testdb01_single_control_backup_archonly.20160110.123789.ctl' ;
alter database mount ;
set until time "to_date('2016-01-08 17:01:00', 'YYYY-MM-DD HH24:MI:SS')";
RESTORE DATABASE ;
RECOVER DATABASE ;
}
ALTER DATABASE OPEN RESETLOGS ;
EOF

3. Дуплицирование БД

3.1 Клонирование (2006) базы с помощью RMAN

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

Примем, что исходный сервер содержит базу, которую предстоит сдублировать (target db в терминологии RMAN), а на целевой сервер предстоит сдублировать базу (auxiliary db в терминологии RMAN)

Для подготовки к дублированию необходимо:

  • сконфигурировать SQLNet для исходного сервера и целевого серверов
  • обеспечить на целевом сервере всю структуру каталогов для создаваемой базы (db, arc, logs)
  • обеспечить на целевом сервере initDBNAME.ora и orapwdDBNAME файлы для создаваемой базы
  • обеспечить на целевом структуру каталогов для размещения бэкапа RMAN, аналогичную структуре бэкапа RMAN на исходном сервере
  • обеспечить наличие на целевом сервере (в правильной структуре каталогов) RMAN бэкапа текущей инкарнации дублируемой базы
  • обеспечить на целевом структуру каталогов для размещения архивных журналов, аналогичную структуре архивных журналов на исходном сервере
  • обеспечить наличие на целевом сервере (в правильной структуре каталогов) наличия архивных журналов, сделаных после бэкапа, используемого для клонирования

В общем случае дублирование производится подключением RMAN к target и auxiliary базам и инициализацией дублирования командой duplicate:

  • connect target target TRG_SYS_USER/TRG_SYS_PASS@TRG_SQLNET_ALIAS
  • connect auxiliary AUX_SYS_USER/AUX_SYS_PASS@AUX_SQLNET_ALIAS
  • duplicate target database to AUX_DB_NAME nofilenamecheck
  • как вариант, коннект можно проводить сразу в командной строке
  • rman target TRG_SYS_USER/TRG_SYS_PASS@TRG_SQLNET_ALIAS \
    auxiliary AUX_SYS_USER/AUX_SYS_PASS@AUX_SQLNET_ALIAS

3.2 Клонирование (дуплицирование 2017) базы с помощью RMAN

За прошедшие с момента написания раздела о клонировании 10 лет несколько прибавилось опыта, и технологии выросли. Появился термин "дуплицирование", появилась возможность клонировать БД непосредственно с продуктовой БД, в том числе с последующим подкатом журналов. Далее тезисно опишу процедуру дуплицирования:

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

  • развернуть софт СУБД на сервере - приёмнике, например через описанную в официальном руководстве по установке процедуру клонирования домашнего каталога
  • сконфигурировать SQLNet для сервера - источника и сервера - приёмника, причём на последнем нам нужна статическая регистрация
  • обеспечить на целевом сервере всю структуру каталогов для создаваемой базы (db, arc, logs)
  • обеспечить на целевом сервере spfile и orapwdDBNAME файлы для создаваемой базы, при необходимости выправить параметры log_file_name_convert и db_file_name_convert

Далее проводится сама процедура дупликации через командный файл, содержащий RMAN скрипт дупликации

rman debug on trace=путь_к_трэйсу log=путь_к_log << EOF
connect target sys/password@src_TNS_alias
#connect target "sys/password@src_TNS_alias as sysdba"
connect auxiliary sys/password@dst_TNS_alias
#connect auxiliary "sys/password@dst_TNS_alias as sysdba"
run {
allocate channel src01 type disk;
...
allocate channel srcNN type disk;
allocate auxiliary channel dst01 type disk;
...
allocate auxiliary channel dstNN type disk;
# опционально заменить имя файлов, из опыта нужно указать
# именно номера, а не сторые имена. Switch автоматом в конце
set newname for datafile 1 to 'новое_полное_имя' ;
...
set newname for datafile NNto 'новое_полное_имя' ;
# стэндбай дупликация
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE SECTION SIZE 64G DORECOVER ;
# не стэндбай дупликация
DUPLICATE TARGET DATABASE FROM ACTIVE DATABASE SECTION SIZE 64G DORECOVER NOFILENAMECHECK ;
release channel src01;
...  например 10 каналов  ...
release channel dst01;
...  например 10 каналов  ...
}
EOF

Проследить объём дуплицированного для ASM можно следующим запросом

set linesize 400 pagesize 400
select INSTNAME,DBNAME,round(sum(BYTES_READ)/power(2,30)/2,1) gb_read,
       round(sum(BYTES_WRITTEN)/power(2,30)/2,1) gb_wrtn
       from gv$asm_disk_iostat group by INSTNAME,DBNAME order by 1,2;

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

SET LINES 200
COL name FORM a80
COL status FORM A8
COL file# FORM 9999
COL control_file_SCN FORM 999999999999999
COL datafile_SCN FORM 999999999999999

SELECT a.name,a.status,a.file#,a.checkpoint_change# control_file_SCN,b.checkpoint_change# datafile_SCN,
       CASE
       WHEN ((a.checkpoint_change# - b.checkpoint_change#) = 0) THEN 'Startup Normal'
       WHEN ((b.checkpoint_change#) = 0) THEN 'File Missing?'
       WHEN ((a.checkpoint_change# - b.checkpoint_change#) > 0) THEN 'Media Rec. Req.'
       WHEN ((a.checkpoint_change# - b.checkpoint_change#) < 0) THEN 'Old Control File'
       ELSE 'what the ?' END datafile_status
       FROM v$datafile a -- control file SCN for datafile
            ,v$datafile_header b -- datafile header SCN
       WHERE a.file# = b.file# ORDER BY a.file# ;

При необходимости недостающие и проблемные файлы можно перенести в частном порядке. Пример:

. oraenv [testdb9]
nohup rmancmdfile=rman_part_file_9.cmd log=part_file_copy_9.log1 &
-- файл rman_part_file_9.cmd содержит:
connect target sys/pwd@alias_SRC
connect auxiliary sys/pwd@alias_DST
RUN {
ALLOCATE CHANNEL src01 TYPE DISK;
ALLOCATE AUXILIARY CHANNEL dst01 TYPE DISK;
backup as copy datafile 9 auxiliary format '+DATA/dbname/datafile/file9.dbf';
backup as copy datafile 10 auxiliary format '+DATA/dbname/datafile/file10.dbf';
}

5. Технологические операции

Здесь планируется рассмотреть задачи очистки архивных журналов для стэндбаев, анализа утраченых бэкапов, регистрации перенесённых бэкапов, организации БД каталога RMAN, обработка ситуации переполнения выделенной FRA емкости и т.п.

Белонин С.С. (С), июль 2016 года

(даты последующих модификаций не фиксируются)


 
        
   
    Нравится     

(C) Белонин С.С., 2000-2024. Дата последней модификации страницы:2023-03-26 15:32:17

0000000000000

Белонин С.С. (С), май 2006 года

(даты последующих модификаций не фиксируются)


 
        
   
    Нравится     

(C) Белонин С.С., 2000-2024. Дата последней модификации страницы:2023-03-26 15:32:17