Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
ORA-01115
Guest
Oracle 11.2.0.1 (SE)
Подскажите как решить следующие задачи:
1. Сравнить рабочую и StandBy БД поблочно. Если возможно, сделать это не останавливая
рабочую БД.
2. Найти битые блоки на рабочей БД. Найти битые блоки на StandBy.
3. Восстановить битые блоки на рабочей БД. Восстановить битые блоки на StandBy.


+ дайте ссылку на доку по нахождению и восстановлению битых блоков, пожалуйста.
2 апр 12, 12:19    [12350101]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
sinitsa
Member

Откуда:
Сообщений: 207
ORA-01115,

поищите по :
blockrecover
check logical
2 апр 12, 12:28    [12350184]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
jan2ary
Member

Откуда: Киев
Сообщений: 1780
sinitsa
поищите по :
blockrecoverl
Не в SE.
dbverify
2 апр 12, 12:43    [12350337]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
ORA-01115
Guest
jan2ary
sinitsa
поищите по :
blockrecoverl
Не в SE.
dbverify

вы хотите сказать, что в SE я лишён такого удовольствия - использовать dbverify?
а analyze будет работать?
2 апр 12, 12:52    [12350445]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
ORA-01115
Guest
ещё вопросы:
запрос на standby показывает, что битых блоков нет, хотя в алерт логе стенбая
явно указано, что они есть. это следствие того, что сперва на StandBy нужно дать
команду backup? после этого в представлении появятся данные о повреждённых блоках?
select *
from v$database_block_corruption;


получается, что в EE явно удобнее и проще восстанавливать битые блоки через
RMAN> blockrecover

а в версии SE для этих целей нужно извращаться? как оптимальнее всего восстанавливать битый блок в SE?
для поиска битых блоков Oracle Предлагает использовать команду ANALYZE. но насколько я понимаю, она применима
только лишь к таблице и индексу. это так? можно ли сделать analyze всей БД в целом?

можно ли через пакет DBMS_REPAIR проверить всю БД на битые блоки в SE?
2 апр 12, 13:21    [12350778]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
ORA-01115
Guest
Проверил БД на битые блоки так:

RMAN>backup validate database archivelog all;


конкретное имя датафайлов и номера блоков смотрю тут:
select *
from v$database_block_corruption;


теперь вопрос по восстановлению блока в SE:
чем команда
RMAN> blockrecover datafile N block M;

отличается от восстановления того же датафайла N и блока M
с помощью пакета DBMS_REPAIR?

можно ли восстановить повреждённый блок, если отсутствует необходимый архивлог?
другими словами, ситуация следующая:

архивлоги хранятся во FRA две недели. 
В алерт логе вчера было обнаружено что месяц назад был повреждён блок данных,
который соответствует таблице в схеме рабочей БД.  Следовательно нужного архивлога нет,
как быть? RMAN> blockrecover datafile N block M; нам уже не поможет?
2 апр 12, 16:12    [12352364]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
ORA-01115
Guest
запустил проверку файла данных на StandBy через dbv. Получил следующее:

DBV-00201: Block, DBA 46496734, marked corrupt for invalid redo application

DBV-00201: Block, DBA 46496735, marked corrupt for invalid redo application

DBV-00600: Fatal Error - [28] [27070] [0] [0]


Опять ошибка 600. Аргумент - 27070.
Как быть?
2 апр 12, 16:38    [12352558]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
dba123
Member

Откуда:
Сообщений: 1054
ORA-01115,

скопируйте в онлайне файл с основной
какие сложности?

on prod:
alter tablespace users begin;
host cp users01.dbf /backup
alter tablespace users end backup;
copy /backup/users01.dbf to_stb_host

on stb:
dbv users01.dbf
mount standby database
recovery standby database

по логу найдите тс,сегмент
select tablespace_name, segment_type, owner, segment_name, partition_name
  from dba_extents
    where file_id = &&1
      and  &&2 between block_id AND block_id + blocks - 1;
--можно и там и там проверять, только подсуетиться заранее для стб. варианта
--analyze table ... validate structure cascade into invalid_rows;
--analyze index ... validate structure;

и force logging посмотрите, иначе легко потерять доверие к резервной базе
2 апр 12, 16:49    [12352660]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
ORA-01115
Guest
dba123
ORA-01115,

скопируйте в онлайне файл с основной
какие сложности?

on prod:
alter tablespace users begin;
host cp users01.dbf /backup
alter tablespace users end backup;
copy /backup/users01.dbf to_stb_host

on stb:
dbv users01.dbf
mount standby database
recovery standby database

по логу найдите тс,сегмент
select tablespace_name, segment_type, owner, segment_name, partition_name
  from dba_extents
    where file_id = &&1
      and  &&2 between block_id AND block_id + blocks - 1;
--можно и там и там проверять, только подсуетиться заранее для стб. варианта
--analyze table ... validate structure cascade into invalid_rows;
--analyze index ... validate structure;

и force logging посмотрите, иначе легко потерять доверие к резервной базе


возникающие вопросы:
1. как посмотреть force logging и что там посмотреть?
select force_logging
from v$database;

выдаёт NO на рабочей БД и на StandBy.

2. Скопировав на StandBy database файл данных как мы согласуем Управляющий файл
с новым скопированным файлом данным? через recovery standby database?


и что значит при dbv ошибка:
DBV-00600: Fatal Error - [28] [27070] [0] [0]
2 апр 12, 17:06    [12352784]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
jan2ary
Member

Откуда: Киев
Сообщений: 1780
ORA-01115,

В SE вы лишены удовольствия под названием blockrecover.
2 апр 12, 17:11    [12352828]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
ORA-01115
Guest
скажите, если у меня в ТБС 100 датафайлов, и лишь один из них повреждён (много битых блоков),
я на стендбай должен переносить все сто датафайлов, или достаточно в режиме
begin backup end backup перенести только один проблемный датафайл и накатить
архивлоги на стендбай после этого?
2 апр 12, 17:38    [12353023]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
dba123
Member

Откуда:
Сообщений: 1054
ORA-01115,

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

dbv (database verify) - натравливают на файлы уже остановленной бд
на промышленной
alter database force logging;
3 апр 12, 08:36    [12354769]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
ORA-01115
Guest
dba123
ORA-01115,

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

dbv (database verify) - натравливают на файлы уже остановленной бд
на промышленной
alter database force logging;


а я на рабочей запущенной dbv запускал. чем это грозит?

и могли бы кратко объяснить, зачем нужен force logging?
3 апр 12, 10:45    [12355386]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
dba123
Member

Откуда:
Сообщений: 1054
ORA-01115,

надеюсь, что ничем не грозит
для того, чтобы при переключении на резервную базу(стб алерт чист от ошибок), вы смогли работать сразу,
а не натыкались на ошибки и не пересоздавали индексы, например и т.д. и т.п.
http://docs.oracle.com/cd/E11882_01/server.112/e25494/create004.htm#i1009449
Some data definition language statements (such as CREATE TABLE) allow the NOLOGGING clause, which causes some database operations not to generate redo records in the database redo log. The NOLOGGING setting can speed up operations that can be easily recovered outside of the database recovery mechanisms, but it can negatively affect media recovery and standby databases.

Oracle Database lets you force the writing of redo records even when NOLOGGING has been specified in DDL statements. The database never generates redo records for temporary tablespaces and temporary segments, so forced logging has no affect for objects.
3 апр 12, 11:45    [12355757]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
ORA-01115
Guest
dba123
ORA-01115,

надеюсь, что ничем не грозит
для того, чтобы при переключении на резервную базу(стб алерт чист от ошибок), вы смогли работать сразу,
а не натыкались на ошибки и не пересоздавали индексы, например и т.д. и т.п.
http://docs.oracle.com/cd/E11882_01/server.112/e25494/create004.htm#i1009449
Some data definition language statements (such as CREATE TABLE) allow the NOLOGGING clause, which causes some database operations not to generate redo records in the database redo log. The NOLOGGING setting can speed up operations that can be easily recovered outside of the database recovery mechanisms, but it can negatively affect media recovery and standby databases.

Oracle Database lets you force the writing of redo records even when NOLOGGING has been specified in DDL statements. The database never generates redo records for temporary tablespaces and temporary segments, so forced logging has no affect for objects.


возникает вопрос: стоит ли nologging того? к примеру я в Бд создаю индекс на большую таблицу из 200 миллионов записей.
при создании индекса я указываю NOLOGGING. и много ли я с этого выиграю? доли секунды? секунды? минуты?
вопрос в том, вообще насколько это оправдано. да, в доке написано что NOLOGGING setting can speed up operations that can be easily recovered outside of the database recovery mechanisms. Вопрос стоит ли это того? и на сколько ускоряет?

насколько я понял, включение force logging на рабочей БД никак не скажется на её проивзодительности, если конечно
в этой БД не используется активно nologging повсеместно. правильно?
3 апр 12, 12:01    [12355876]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
ORA-01115
Guest
подскажите, для 11.1 какое лучше руководство почитать по begin backup end backup?
где наиболее полно расписано, что можно один датафайл копировать из ТБС, состоящего из
скажем более одного датафайла.
Backup and Recovery 11.1?
3 апр 12, 12:17    [12356025]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
dba123
Member

Откуда:
Сообщений: 1054
ORA-01115,

я не знаю сколько выиграете, может быть даже часы, но
как только на основной появится unrecoverable операция, вам придется сразу делать бекап/ресторе с основной на резервную
или рманом, или копированием файла в онлайне(begin|end backup)
select d.name, d.unrecoverable_change#,t.name  tablespace
 from v$datafile d, v$tablespace t
    where d.unrecoverable_change# > 0
      and d.ts#=t.ts#;
3 апр 12, 12:18    [12356029]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
ORA-01115
Guest
dba123
ORA-01115,

я не знаю сколько выиграете, может быть даже часы, но
как только на основной появится unrecoverable операция, вам придется сразу делать бекап/ресторе с основной на резервную
или рманом, или копированием файла в онлайне(begin|end backup)
select d.name, d.unrecoverable_change#,t.name  tablespace
 from v$datafile d, v$tablespace t
    where d.unrecoverable_change# > 0
      and d.ts#=t.ts#;

извините за излишние вопросы,

правильно ли я понимаю, что данный SQL запрос выявит файлы данных,
которые были затронуты, операция NOLOGGING? да/нет?

т.е. я хочу сказать, что если используется NOLOGGING, то для мониторинга
нужно использовать ваш запрос, чтобы узнать какие файлы данных нужно
скопировать в онлайне. так?
3 апр 12, 12:31    [12356177]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
dba123
Member

Откуда:
Сообщений: 1054
ORA-01115,

да , можно ,если форс логирование не включено
3 апр 12, 12:32    [12356194]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
dba123
Member

Откуда:
Сообщений: 1054
dba123,

только сверяйте результаты на промышленной и на резервной базах
т.е. не копируйте одно и тоже несколько раз
3 апр 12, 12:36    [12356234]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
ORA-01115
Guest
jan2ary
ORA-01115,

В SE вы лишены удовольствия под названием blockrecover.


Извините, но могли бы повторить, чем же мне тогда восстанавливать
повреждёный блок, если blockrecover в SE нет?
покажите на примере пожалуйста


вчера ночью я запустил проверку БД:
backup validate database;

и было выявлено, что в поле Blocks Failing 0, а в поле Marked Corrupt >0

вопрос: как такое может быть? почему если поле Marked Corrupt >0 в поле Blocks Failing 0?
4 апр 12, 09:35    [12361798]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
ORA-01115
Guest
dba123:

force_logging действительно необходим!.
я посмотрел представление производительности v$database_block_corruption
после проведения backup validate database в поле corruption_type везде значение NOLOGGING.

пока что главный вопрос, который я не совсем понял ответа:

как восстановить повреждённый блок на целевой БД в SE при отсутствии пользоваться
возможностью blockrecovery?


покажите на примере пожалуйста для SE!
4 апр 12, 09:55    [12361964]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
ORA-01115
Guest
ещё один вопросик возник: нашёл что коррумпируемой является таблица и индекс для этой
таблицы в целевой БД. вижу last_analyzed для этой таблицы 20.01.2011

могу я узнать когда эта таблица была создана?
для этого должен быть включён аудит? из представления sys.aud$ я это смогу узнать?
запросы к каким представлениям мне для этого нужны?
4 апр 12, 10:26    [12362214]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
ORA-01115
Guest
а как искусственно пометить блок как поврежденный?
и можно ли восстановить блок с помощью DBMS_REPAIR в режиме Mount?
4 апр 12, 11:15    [12362666]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01115: как сравнить две БД поблочно. Как найти и восстановить битые блоки на StandBy?  [new]
dba123
Member

Откуда:
Сообщений: 1054
ORA-01115,

в маунт DBMS_REPAIR? - это вряд ли и зачем,
вы ремонтируете на промышленной базе блок (FIX_CORRUPT_BLOCKS), а затем переносите в онлайне файл или рманом на резервную

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

затем вы по непонятным причинам активировали стб базу(за которой не следили) и получили эти блоки,
oerr ora 26040
26040, 00000, "Data block was loaded using the NOLOGGING option\n"
//* Cause: Trying to access data in block that was loaded without
//* redo generation using the NOLOGGING/UNRECOVERABLE option
//* Action: Drop the object containing the block.
потому что, выполняя такие же операции на основной вы их не получите
это легко проверить:
- создайте отдельное ТС, таблицу, любую nologging операцию (ctas, change partion с таблицей, ...) и все будет в порядке:
данные возвращаются, индекс работает ... никаких ошибок

посмотрите, оракле сразу советует удалить и создать заново такой объект, а если делать ребилд индекса, то только так, чтобы не читал сам себя
alter index idx_name unusable
set skip_unusable_indexes = true
стб базу можно поднять в РО и там запустить проверку (только первоначально на осн создайте в темп тс invalid_rows и накатите на стб)
--analyze table ... validate structure cascade into invalid_rows; (прародитель DBMS_REPAIR, не знаю будет ли последний работать так, может подскажет кто)
4 апр 12, 14:59    [12364627]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить