16.01.2019 05:39
Nik_75
 
Доброго времени суток. Сегодня при проверке базы вышла следующая ошибка:

16. 1.2019 10:51:48 TEST Индексы
Отсутствует не уникальный INDEX FFMAPREP_INCOMEDOC : FFMAPREP(INCOMETYPE,INCOMEID,INCOMESPECITEM)

Пред историю данной ошибки сказать не могу. Сама база работает. Пробовал делать инициализацию, прошла без ошибок.
Можно ли руками создать этот индекс?
16.01.2019 05:41
Nik_75
 
версия СМ 1.036.1 sp4 версия oracle 10.2.0.4.0
16.01.2019 07:37
Propil
 
Возможно, вот так:
Код:
CREATE INDEX SUPERMAG.FFMAPREP_INCOMEDOC ON SUPERMAG.FFMAPREP
(INCOMETYPE, INCOMEID, INCOMESPECITEM)
LOGGING
TABLESPACE FFINDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          331M
            NEXT             331M
            MINEXTENTS       1
            MAXEXTENTS       2147483645
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;
цыферки (и TABLESPACE) могут быть другие

Есть еще в админмодуле Супермага - "задания".
Там одно из административных - Полное пересоздание индексов.
Но я ими уже давно не пользовался.

Правка: Propil, 16.01.2019 08:23
16.01.2019 08:57
Nik_75
 
при попытке создать индекс вышла ошибка о поврежденном блоке

CREATE INDEX SUPERMAG.FFMAPREP_INCOMEDOC ON SUPERMAG.FFMAPREP
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 2, block # 38786)
ORA-01110: data file 2: 'D:\ORACLE\ORADATA\PRIVOZGT\PRIVOZGT\USERS03.DBF'
16.01.2019 09:25
Propil
 
Это хуже.
Выявлять источник проблем - железо или сбой питания, восстанавливать из бэкапа, читать тему
Битый блок в файле данных.....RMAN рулит )))
16.01.2019 10:44
Nik_75
 
подскажите почему при проверке базы на битые блоки скриптами:
Код:
SELECT distinct d.SEGMENT_TYPE||':'||d.OWNER||'.'||d.SEGMENT_NAME
FROM DBA_EXTENTS d, v$database_block_corruption b
where b.file#=d.file_id and b.block# between d.block_id and d.block_id+d.blocks-1
/
или если блок в свободном пространстве файлов
Код:
SELECT count(*)
FROM DBA_free_space d, v$database_block_corruption b
where b.file#=d.file_id and b.block# between d.block_id and d.block_id+d.blocks-1
/
Код:
SELECT e.owner, e.segment_type, e.segment_name, e.partition_name, c.file#
, greatest(e.block_id, c.block#) corr_start_block#
, least(e.block_id+e.blocks-1, c.block#+c.blocks-1) corr_end_block#
, least(e.block_id+e.blocks-1, c.block#+c.blocks-1)
- greatest(e.block_id, c.block#) + 1 blocks_corrupted
, null description
FROM dba_extents e, v$database_block_corruption c
WHERE e.file_id = c.file#
AND e.block_id <= c.block# + c.blocks - 1
AND e.block_id + e.blocks - 1 >= c.block#
UNION
SELECT s.owner, s.segment_type, s.segment_name, s.partition_name, c.file#
, header_block corr_start_block#
, header_block corr_end_block#
, 1 blocks_corrupted
, 'Segment Header' description
FROM dba_segments s, v$database_block_corruption c
WHERE s.header_file = c.file#
AND s.header_block between c.block# and c.block# + c.blocks - 1
UNION
SELECT null owner, null segment_type, null segment_name, null partition_name, c.file#
, greatest(f.block_id, c.block#) corr_start_block#
, least(f.block_id+f.blocks-1, c.block#+c.blocks-1) corr_end_block#
, least(f.block_id+f.blocks-1, c.block#+c.blocks-1)
- greatest(f.block_id, c.block#) + 1 blocks_corrupted
, 'Free Block' description
FROM dba_free_space f, v$database_block_corruption c
WHERE f.file_id = c.file#
AND f.block_id <= c.block# + c.blocks - 1
AND f.block_id + f.blocks - 1 >= c.block#
order by file#, corr_start_block#;


возвращается 0 строк?
16.01.2019 11:55
Propil
 
Цитата:
Nik_75 возвращается 0 строк?
Насколько я понимаю, прежде чем читать скриптом сведения о повреждениях из v$database_block_corruption,
эти сведения туда нужно занести.
Выполнив проверку, типа
Код:
RMAN> VALIDATE DATABASE;
Код:
RMAN> VALIDATE RECOVERY AREA;
Код:
RMAN> BACKUP VALIDATE DATABASE;
RMAN> BACKUP VALIDATE DATABASE ARCHIVELOG ALL;
Кстати, RMAN-то используете?
16.01.2019 12:15
Nik_75
 
точно, спасибо большое. rman да, используется. Вот что выдал запрос

(C) Корпорация Майкрософт, 2006. Все права защищены.

C:\Users\Администратор>sqlplus / as sysdba;

SQL*Plus: Release 10.2.0.4.0 - Production on Wed Jan 16 18:07:19 2019

Copyright (c) 1982, 2007, Oracle. All Rights Reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> SELECT distinct d.SEGMENT_TYPE||':'||d.OWNER||'.'||d.SEGMENT_NAME
2 FROM DBA_EXTENTS d, v$database_block_corruption b
3 where b.file#=d.file_id and b.block# between d.block_id and d.block_id+d.bl
ocks-1
4 /

D.SEGMENT_TYPE||':'||D.OWNER||'.'||D.SEGMENT_NAME
--------------------------------------------------------------------------------

TABLE:SUPERMAG.SMDOCLOG
TABLE:SUPERMAG.SMPOSTINLOG
TYPE2 UNDO:SYS._SYSSMU12$
TABLE:SUPERMAG.SMMARKUPCLASS
INDEX:SUPERMAG.SMSPEC_ART
TABLE:SYS.IDL_UB1$
TABLE:SUPERMAG.SMSPECACTS
TABLE:SUPERMAG.FFMAPREP
INDEX:SUPERMAG.SMCCARDSECURITYLOG_PK
INDEX:SUPERMAG.SMPOSTINLOG_OBJIDX
TABLE:SUPERMAG.SMSPECNACL

D.SEGMENT_TYPE||':'||D.OWNER||'.'||D.SEGMENT_NAME
--------------------------------------------------------------------------------

INDEX:SUPERMAG.SMCSPEC_PK
INDEX:SUPERMAG.FFMAPREP_DOC
LOBSEGMENT:SUPERMAG.SYS_LOB0000052650C00007$$

14 rows selected.

SQL>



судя по всему много данных повреждено.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.