Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Постоянная ORA-01578 для ничейных блоков.  [new]
msv_ck
Member

Откуда: Украина, Черкассы
Сообщений: 17
Добрый день.
Используется 10.2.0.1.
БД в рабочем состоянии, но есть ньюансы...
В alert.log-е каждые пять минут выпадает

ORA-01578: ORACLE data block corrupted (file # ORA-01578: ORACLE data block corrupted (file # 1, block # 4097)
ORA-01110: data file 1: '/opt/oracle/.../system01.dbf'
и время от времени ругается на блоки 4112 и 79556 из все того же system-а.

Создается trc-файл (..._smon_nnnn.trc)честно говоря моих знаний нехватило понять из него что-нибудь (прикрепил в конце).

SELECT a.owner, a.segment_name, a.partition_name, a.segment_type,
a.tablespace_name, a.extent_id, a.file_id, a.block_id, a.bytes,
a.blocks, a.relative_fno
FROM dba_extents a where file_id=1 and 4097 between block_id and block_id+blocks-1
выдает пустоту (как и для 4112, 79556)

V$DATABASE_BLOCK_CORRUPTION - пуст.

DBV сообщает DBV-00200 по указаным трем блокам.

Эдинственное что попалось на глаза - ошибка почти всегда прерывает сбор статистики схемы
(но сбор статистики по одному объекту проходит удачно).

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

P.S. Перенес холодную копию на другой сервер - запустилась с той же ошибкой, при пересоздании репозитария вылетело с ругательством на 4097 блок.

К сообщению приложен файл (smon_trc.arj - 85Kb) cкачать
13 янв 11, 11:15    [10064196]     Ответить | Цитировать Сообщить модератору
 Re: Постоянная ORA-01578 для ничейных блоков.  [new]
comphead
Member

Откуда: Киев
Сообщений: 3390
msv_ck,

эта задачка уже была. надо создать табличку и раздувать ее пока она не захватит эти блоки, потом таблицу дропнуть
13 янв 11, 11:48    [10064486]     Ответить | Цитировать Сообщить модератору
 Re: Постоянная ORA-01578 для ничейных блоков.  [new]
msv_ck
Member

Откуда: Украина, Черкассы
Сообщений: 17
Мне кажется все-таки, что эти блоки кому-то уже принадлежат, иначе система их задействовала бы и переформатировала (в таком случае разницы в том кому они будут принадлежать моей таблице или созданой/расширеной системой нет)
Но на копии попробую.
13 янв 11, 12:04    [10064645]     Ответить | Цитировать Сообщить модератору
 Re: Постоянная ORA-01578 для ничейных блоков.  [new]
GL
Member

Откуда: Харьков
Сообщений: 1513
msv_ck,

У вас Enterprise Edition, попробуйте бэкап/рестор табличного пространства в/из compressed backupset. Рман просто переформатирует незанятые в данный момент блоки.
13 янв 11, 12:39    [10065007]     Ответить | Цитировать Сообщить модератору
 Re: Постоянная ORA-01578 для ничейных блоков.  [new]
msv_ck
Member

Откуда: Украина, Черкассы
Сообщений: 17
Попробовал на копии.
Создал таблицу в тс system, запомнил его размер, добавил туда полтора млн записей, system увеличился.
Однако в dba_extents указанные блоки все равно никому (в том числе и моей новой таблице не принадлежат).
Удаление таблицы ситуацию не изменило.
13 янв 11, 12:42    [10065052]     Ответить | Цитировать Сообщить модератору
 Re: Постоянная ORA-01578 для ничейных блоков.  [new]
dimsy
Member

Откуда: Киев
Сообщений: 209
msv_ck,
Если битый блок принадлежит хидеру сегмента, то в dba_extents инфы про этот сегмент нет совсем, поэтому твой запрос ничего не показывает.
Покажи еще результат 2 и 3 запроса.
SELECT tablespace_name, segment_type, owner, segment_name
FROM dba_extents
WHERE file_id = &AFN
and &BL between block_id AND block_id + blocks - 1;

SELECT owner, segment_name, segment_type, partition_name 
FROM   dba_segments
WHERE  header_file = &AFN
and  header_block = &BL;

Select * 
from dba_free_space 
where file_id= <Absolute file number>
and <corrupted block number> between block_id and block_id + blocks -1;
13 янв 11, 13:07    [10065299]     Ответить | Цитировать Сообщить модератору
 Re: Постоянная ORA-01578 для ничейных блоков.  [new]
msv_ck
Member

Откуда: Украина, Черкассы
Сообщений: 17
2 dimsy
Второй запрос вернул -
owner segment_name segment_type partition_name
SYS COL_USAGE$ TABLE

Третий ничего не сказал.

Буду смотреть что такое SYS.COL_USAGE$ и с чем его едят.
Подскажите где можно глянуть список блоков, которые market corrupted,
а то V$DATABASE_BLOCK_CORRUPTION пустой а DBV сообщает, что блоки уже помечены как поврежденные.
13 янв 11, 13:33    [10065529]     Ответить | Цитировать Сообщить модератору
 Re: Постоянная ORA-01578 для ничейных блоков.  [new]
dimsy
Member

Откуда: Киев
Сообщений: 209
msv_ck
Буду смотреть что такое SYS.COL_USAGE$ и с чем его едят.

Если есть возможность то пересоздай БД через exp/imp или expdp/impdp и пропатч хотя бы до 10.2.0.4.

msv_ck
Подскажите где можно глянуть список блоков, которые market corrupted

В алерт логе.
Проверить БД на наличие битых блоков можно с помощью:
1. RMAN backup or RMAN 'backup validate'
2. DBVERIFY
3. ANALYZE TABLE tablename VALIDATE STRUCTURE CASCADE
4. DBMS_REPAIR.CHECK_OBJECT
Если есть битые блоки то, в зависимости от способа их обнаружения, будут сообщения или на консоли или в системных вьюхах.

msv_ck
а то V$DATABASE_BLOCK_CORRUPTION пустой а DBV сообщает, что блоки уже помечены как поврежденные.

V$DATABASE_BLOCK_CORRUPTION displays information about database blocks that were corrupted after the last backup.
13 янв 11, 16:26    [10067381]     Ответить | Цитировать Сообщить модератору
 Re: Постоянная ORA-01578 для ничейных блоков.  [new]
msv_ck
Member

Откуда: Украина, Черкассы
Сообщений: 17
2 dimsy

Пересоздать сейчас возможности нет.

По COL_USAGE$ нашел - https://www.sql.ru/Forum/actualthread.aspx?bid=3&tid=664929&hl=

Но вот незадача - после создания REPAIR_TABLE и ORPHAN_KEY_TABLE, пытаюсь проверить таблицу

SET SERVEROUTPUT ON
DECLARE num_corrupt INT;
BEGIN
num_corrupt := 0;
DBMS_REPAIR.CHECK_OBJECT (
SCHEMA_NAME => 'SYS',
OBJECT_NAME => 'COL_USAGE$',
REPAIR_TABLE_NAME => 'REPAIR_TABLE',
CORRUPT_COUNT => num_corrupt);
DBMS_OUTPUT.PUT_LINE('number corrupt: ' || TO_CHAR (num_corrupt));
END;

получаю
15:49:43 DECLARE num_corrupt INT;
15:49:43 *
15:49:43 ORA-01578: ORACLE data block corrupted (file # 1, block # 4097)
15:49:43 ORA-01110: data file 1: '/opt/oracle/oradata/region23/system01.dbf'
15:49:43 ORA-06512: at "SYS.DBMS_REPAIR", line 293
15:49:43 ORA-06512: at line 4

т.е. мне выдает эту же ошибку при попытке ее исправить (file # 1, block # 4097 - табица COL_USAGE$).
13 янв 11, 16:54    [10067644]     Ответить | Цитировать Сообщить модератору
 Re: Постоянная ORA-01578 для ничейных блоков.  [new]
huliGUN
Member

Откуда: Ахметов Сити; Санкт Харьков; Донецк (Киев);
Сообщений: 466
Да у вас каруптные хедеры, недавно страдал такой болячкой, а как насчет:
RMAN>recover datafile {file_id} block {block_no,...}
13 янв 11, 17:10    [10067753]     Ответить | Цитировать Сообщить модератору
 Re: Постоянная ORA-01578 для ничейных блоков.  [new]
huliGUN
Member

Откуда: Ахметов Сити; Санкт Харьков; Донецк (Киев);
Сообщений: 466
К слову, перед ошибкой карапта нет случайно ли других сообщений об ошибках?
13 янв 11, 17:12    [10067761]     Ответить | Цитировать Сообщить модератору
 Re: Постоянная ORA-01578 для ничейных блоков.  [new]
GL
Member

Откуда: Харьков
Сообщений: 1513
huliGUN
Да у вас каруптные хедеры, недавно страдал такой болячкой, а как насчет:
RMAN> blockrecover datafile {file_id} block {block_no,...}
13 янв 11, 17:25    [10067867]     Ответить | Цитировать Сообщить модератору
 Re: Постоянная ORA-01578 для ничейных блоков.  [new]
msv_ck
Member

Откуда: Украина, Черкассы
Сообщений: 17
2 huliGUN
Как выяснилось копия делается холодная, раз в неделю (никаких RMAN-ов и прочего),
ошибка эта появилась (со слов выживших) после сбоя питания лет ннадцать назад. Так что никаких восстановлений
не подразумевается.
Собственно SYS.COL_USAGE$ действительно может быть просто очищена, но пока не могу избавиться
от ошибки чтения.
13 янв 11, 17:31    [10067909]     Ответить | Цитировать Сообщить модератору
 Re: Постоянная ORA-01578 для ничейных блоков.  [new]
huliGUN
Member

Откуда: Ахметов Сити; Санкт Харьков; Донецк (Киев);
Сообщений: 466
GL
huliGUN
Да у вас каруптные хедеры, недавно страдал такой болячкой, а как насчет:
RMAN> blockrecover datafile {file_id} block {block_no,...}


Пардонте версию спутал...
13 янв 11, 17:34    [10067940]     Ответить | Цитировать Сообщить модератору
 Re: Постоянная ORA-01578 для ничейных блоков.  [new]
huliGUN
Member

Откуда: Ахметов Сити; Санкт Харьков; Донецк (Киев);
Сообщений: 466
В REPAIR_TABLE запись появляется об объекте?
13 янв 11, 17:53    [10068114]     Ответить | Цитировать Сообщить модератору
 Re: Постоянная ORA-01578 для ничейных блоков.  [new]
msv_ck
Member

Откуда: Украина, Черкассы
Сообщений: 17
2 huliGUN
В том-то и дело, что не появляется. Запись там должна появится в результате работы DBMS_REPAIR.CHECK_OBJECT, а он, падла, говорит, что не может прочитать таблицу SYS.COL_USAGE$ и вылетает.
13 янв 11, 18:01    [10068185]     Ответить | Цитировать Сообщить модератору
 Re: Постоянная ORA-01578 для ничейных блоков.  [new]
huliGUN
Member

Откуда: Ахметов Сити; Санкт Харьков; Донецк (Киев);
Сообщений: 466
11g: (для 10,2 проверте синтаксис)

DBMS_REPAIR.SKIP_CORRUPT_BLOCKS (
   schema_name  IN VARCHAR2,
   object_name  IN VARCHAR2,
   object_type  IN BINARY_INTEGER DEFAULT TABLE_OBJECT,
   flags        IN BINARY_INTEGER DEFAULT SKIP_FLAG);

И после этого пробуйте чтение. может повезет ;)
13 янв 11, 18:09    [10068243]     Ответить | Цитировать Сообщить модератору
 Re: Постоянная ORA-01578 для ничейных блоков.  [new]
msv_ck
Member

Откуда: Украина, Черкассы
Сообщений: 17
2 huliGUN
В доке сказано -
Use the FIX_CORRUPT_BLOCKS procedure to fix the corrupt blocks in specified objects based on information in the repair table that was previously generated by the CHECK_OBJECT procedure.
т.е. FIX_CORRUPT_BLOCKS работает с данными, которые генерирует CHECK_OBJECT. А он их не генерирует.
Сам FIX_CORRUPT_BLOCKS работает, но к сожалению ничего не правит (оно и понятно - данных, то в таблице восстановления нету :().
Разбираюсь дальше.
Видимо CHECK_OBJECT в своей работе использует данные из таблицы SYS.COL_USAGE$ а она сама запорчена...
13 янв 11, 18:20    [10068312]     Ответить | Цитировать Сообщить модератору
 Re: Постоянная ORA-01578 для ничейных блоков.  [new]
huliGUN
Member

Откуда: Ахметов Сити; Санкт Харьков; Донецк (Киев);
Сообщений: 466
На моем опыте эта процедура ни разу не полечила мне карапты ;) может кому больше везло. Кстати физические карапты она кажись не лечит.
13 янв 11, 18:24    [10068327]     Ответить | Цитировать Сообщить модератору
 Re: Постоянная ORA-01578 для ничейных блоков.  [new]
msv_ck
Member

Откуда: Украина, Черкассы
Сообщений: 17
2 huliGUN
Она действительно не лечит, она позволяет системе пропускать блоки, которые повреждены.
При этом можно очистить, удалить или переместить таблицу. Пока система не пропускает поврежденные блоки такие операции провести не получится. Т.е. можно восстановить работоспособность системы путем очистки таблицы, хранящей данные, которые не являются критически важными для нее.
13 янв 11, 18:41    [10068405]     Ответить | Цитировать Сообщить модератору
 Re: Постоянная ORA-01578 для ничейных блоков.  [new]
dimsy
Member

Откуда: Киев
Сообщений: 209
msv_ck,
Твоя SYS.COL_USAGE$ уже не жилец и никакой DBMS_REPAIR ей не поможет.
Попробуй ее пересоздать, у меня получилось даже при БД открытой в нормальном режиме.

+
SQL> select count(*) from col_usage$;

COUNT(*)
----------
1658

SQL> drop table col_usage$ purge;

Table dropped.

SQL> create table col_usage$
(
obj# number, /* object number */
intcol# number, /* internal column number */
equality_preds number, /* equality predicates */
equijoin_preds number, /* equijoin predicates */
nonequijoin_preds number, /* nonequijoin predicates */
range_preds number, /* range predicates */
like_preds number, /* (not) like predicates */
null_preds number, /* (not) null predicates */
timestamp date /* timestamp of last time this row was changed */
);

Table created.

SQL> create unique index i_col_usage$ on col_usage$(obj#,intcol#);

Index created.

SQL> select count(*) from col_usage$;

COUNT(*)
----------
0
13 янв 11, 19:13    [10068561]     Ответить | Цитировать Сообщить модератору
 Re: Постоянная ORA-01578 для ничейных блоков.  [new]
huliGUN
Member

Откуда: Ахметов Сити; Санкт Харьков; Донецк (Киев);
Сообщений: 466
msv_ck
2 huliGUN
Она действительно не лечит, она позволяет системе пропускать блоки, которые повреждены.
При этом можно очистить, удалить или переместить таблицу. Пока система не пропускает поврежденные блоки такие операции провести не получится. Т.е. можно восстановить работоспособность системы путем очистки таблицы, хранящей данные, которые не являются критически важными для нее.


Читайте доку. То что вы написали делает процедура указанная мною выше.
13 янв 11, 20:05    [10068800]     Ответить | Цитировать Сообщить модератору
 Re: Постоянная ORA-01578 для ничейных блоков.  [new]
dimsy
Member

Откуда: Киев
Сообщений: 209
huliGUN
На моем опыте эта процедура ни разу не полечила мне карапты ;) может кому больше везло. Кстати физические карапты она кажись не лечит.

huliGUN
Читайте доку.

Это тебе следовало бы внимательней почитать про DBMS_REPAIR.
13 янв 11, 22:18    [10069187]     Ответить | Цитировать Сообщить модератору
 Re: Постоянная ORA-01578 для ничейных блоков.  [new]
msv_ck
Member

Откуда: Украина, Черкассы
Сообщений: 17
Проблема решилась проще - rename (ни удалятся ни перемещатся нихотела никак) + create по новому.
Алерты пропали. Всем сенкс, и с прошедшими праздниками.
14 янв 11, 10:34    [10070702]     Ответить | Цитировать Сообщить модератору
 Re: Постоянная ORA-01578 для ничейных блоков.  [new]
huliGUN
Member

Откуда: Ахметов Сити; Санкт Харьков; Донецк (Киев);
Сообщений: 466
dimsy
huliGUN
На моем опыте эта процедура ни разу не полечила мне карапты ;) может кому больше везло. Кстати физические карапты она кажись не лечит.

huliGUN
Читайте доку.

Это тебе следовало бы внимательней почитать про DBMS_REPAIR.


ну ну...
14 янв 11, 12:29    [10071774]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить