Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 duplicate и ora 01194  [new]
Модест
Member

Откуда:
Сообщений: 14
Всем привет.

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

Обе базы фурычат в archivelog mode

Так как канал узкий, делаю инкрементальные бэкапы, планируется раз в неделю уровня 0, и каждый день уровня 1

Вот такой командой:

rman target /
backup incremental level $1 database tag='DRC' format 'DRC_%T_%t_lvl_$1';


Потом на auxiliary сервере делаю дупликейт:

rman auxiliary /
duplicate database to $ORACLE_SID noredo nofilenamecheck backup location '$BASE_DIR';


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

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

В итоге НЕрегулярно возникает следующая проблема:
при накатываении бекапа уровня 1, после рековери, при открытии базы получаю ошибку:

contents of Memory Script:
{
   Alter clone database open resetlogs;
}
executing Memory Script

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 09/13/2018 21:49:17
RMAN-05501: aborting duplication of target database
RMAN-03015: error occurred in stored script Memory Script
RMAN-06136: ORACLE error from auxiliary database: ORA-01194: file 3 needs more recovery to be consistent
ORA-01110: data file 3: '/u01/oradata/his/system/undo_tbs.dbf'

RMAN> 


Каждый раз это undo датафайл.

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

Это меня и сбивает с толку, так как я поначалу думал, что проблема в том, что бекап контрол файла создается на секунду позже, и возможно в этот момент он уже знает о изменения в анду, о которых еще не знал бекап самого файла.

Так же прошу учесть, что это делается автоматом, то есть в идеале не починить текущее состояние, а узнать в чем проблема и не допустить её в будущем.
14 сен 18, 13:18    [21674658]     Ответить | Цитировать Сообщить модератору
 Re: duplicate и ora 01194  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7125
версия какая?

есть например такой
Bug 22360720 - RMAN duplicate on Standby fails with RMAN-6136 ORA-1194 (Doc ID 22360720.8)
> Range of versions believed to be affected Versions BELOW 12.1


Обходится
select tag,max(ABSOLUTE_FUZZY_CHANGE#) from v$backup_datafile d , v$backup_piece p
where d.SET_STAMP=p.SET_STAMP
and d.SET_COUNT=p.SET_COUNT
group by tag
/


и установкой этого SCN для восстановления
14 сен 18, 14:44    [21674784]     Ответить | Цитировать Сообщить модератору
 Re: duplicate и ora 01194  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7125
Модест,

Автомат для восстановления можно реализовать, формируя командную строку rman через sql*plus
14 сен 18, 14:59    [21674804]     Ответить | Цитировать Сообщить модератору
 Re: duplicate и ora 01194  [new]
Модест
Member

Откуда:
Сообщений: 14
Vadim Lejnin,

Версия на обоих базах 12.1.0.2

И целевая база не находится в стендбай режие. В стендбай режиме может находится база источник, но я её проверяю, да и сам бекап ругается на контрол файл, который не current.

Но я попробую ваш совет, только хочу кое что прояснить:)

Я правильно понимаю, я получаю запросом scn, а потом вместо
duplicate database to $ORACLE_SID noredo nofilenamecheck backup location '$BASE_DIR';

выполняю свой набор команд, который будет почти таким же как сгенерированные дупликейтом, только вместо
   recover
   clone database
   noredo
    delete archivelog
   ;

должен быть
   recover
   clone database until scn 111111;
   noredo
    delete archivelog
   ;

?
14 сен 18, 16:21    [21674900]     Ответить | Цитировать Сообщить модератору
 Re: duplicate и ora 01194  [new]
Модест
Member

Откуда:
Сообщений: 14
О, я забыл сказать, что самая первая попытка дупликейта закончилась другой ошибкой:)

Starting restore at 13-SEP-18
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=163 device type=DISK

channel ORA_AUX_DISK_1: restoring control file
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00601: fatal error in recovery manager
RMAN-03004: fatal error during execution of command
RMAN-04006: error from auxiliary database: ORA-01092: ORACLE instance terminated. Disconnection forced


но это делал не я, поэтому деталей не знаю
14 сен 18, 16:24    [21674903]     Ответить | Цитировать Сообщить модератору
 Re: duplicate и ora 01194  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18480
Модест
noredo - потому что копию можно делать не сто процентной, и я не добавляю в бекапы архивлоги.
Собственно, если это происходит на открытой БД, после этого разговаривать просто не о чем. То что тебе иногда везет и с простаивающей БД ты успеваешь снять инкрементальный бэкап между чекпоинтами/записями DBWR -- так это просто везет.
15 сен 18, 08:48    [21675381]     Ответить | Цитировать Сообщить модератору
 Re: duplicate и ora 01194  [new]
Модест
Member

Откуда:
Сообщений: 14
Вячеслав Любомудров,

спасибо за подсказку.

Можете чуток поподробнее объяснить?:) Если я вас правильно понял, проблема в том, что инкрементальный бекап (кстати есть разница 0-го или 1-го уровня?) снимается во время записи буфера на диск? Из-за этого они не консистенты что ли? Как вообще тогда снимать бекапы с открытой базы? И я не очень понимаю, почему проблема возникает с инкрементальными бекапами? Почему проблема из-за отсутствия архивлогов?

Заранее спасибо.
16 сен 18, 23:27    [21676225]     Ответить | Цитировать Сообщить модератору
 Re: duplicate и ora 01194  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18480
Во время горячего бэкапа работа с БД не прекращается. Соответственно есть вероятность, что в бэкап данные с разных операций, совершенных за время собственно копирования файлов, могут попасть, могут не попасть, могут попасть частично и т.п.

Например, у тебя начался бэкап, ты уже скопировал блоки 1-50, тут бухгалтер выполняет UPDATE, который затрагивает блоки 2, 10, 100, 1000, 10000 и много других. Буферный кеш маленький и все эти изменения сброшены на диск. Ты продолжаешь бэкапить файл и добрался до 5000 блока. Тут бухгалтер решает попить чайку, врубает чайник... Короче, транзакция откатывается. А ты все бэкапишь...
В файле у тебя данные:
-- до UPDATE (блок 2, 10)
-- после UPDATE (100, 1000)
-- после ROLLBACK (10000)

Вот чтобы привести все к одному знаменателю (состоянию на конец бэкапа) необходимо накатить логи как минимум с момента начала бэкапа и до его окончания. Информация об этих двух моментах хранится в заголовке файла.
RMAN для этого идет на хитрость -- заголовок файла (0 блок) копируется последним
17 сен 18, 02:05    [21676265]     Ответить | Цитировать Сообщить модератору
 Re: duplicate и ora 01194  [new]
Модест
Member

Откуда:
Сообщений: 14
Вячеслав Любомудров,

Ясно, спасибо.

А я был уверен что он делает слепок на начало бекапа, а в случае изменения блоков данных использует те же undo логи.

Не подскажите, как кошернее всего добавить в бекап архивлоги, которые сгененировались с момента начала бекапа до момента окончания?

Выражение
backup database plus archivlog

я использовать не хочу, так как архивлоги не архивируются, и мои бекапы становятся слишком большими. Да и насколько я понимаю, если есть отдельный процесс, бекапирующий архивлоги, то я в него вмешаюсь, и мои логи для бекапа он пропустит.
17 сен 18, 12:53    [21676732]     Ответить | Цитировать Сообщить модератору
 Re: duplicate и ora 01194  [new]
Модест
Member

Откуда:
Сообщений: 14
Вобщем, я решил проблему примерно так:

alter system archive log current;
select sequence# from v$log where status = 'CURRENT';

backup database;

alter system archive log current;
select sequence# from v$log where status = 'CURRENT';

backup archivelog from sequence 7777 until sequence 7778;


Всем спасибо за советы. Они очень помогли.
17 сен 18, 17:11    [21677201]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить