Сообщение отдельно
10.07.2006 10:30
OlegON
 
Вот,вдогонку... Кстати, с exp есть вариант нарваться на битый индекс...
Есть три способа проверки файлов на наличие порченых блоков:
1. Утилита DBVERIFY (ограничение на размер datafile - 2Gb ?). Справку по параметрам можно получить так:
C:\> dbv help=y
Обязательно указывайте размер блока (BLOCKSIZE)

2. Команды
a) ANALYZE TABLE ... VALIDATE STRUCTURE [CASCADE];
Дополнительная опция CASCADE проверяет также все индексы и их корректность, т.е. что индекс указывает на правильный блок. Правда, при этом таблица заблокирована для модификаций. Это самый полный метод проверки, но и самый "дорогой".
b) ANALYZE INDEX ... VALIDATE STRUCTURE;

3. Утилита RMAN - наиболее предпочтительный метод проверки, хотя и не так полон по сравнению с 2a) CASCADE. Можно одновременно выполнить и резервирование БД. Если нужна только проверка, то в команде RMAN'а COPY или BACKUP можно указать опцию VALIDATE (бэкап создаваться не будет), а также дополнительно включить проверку логической структуры блока - CHECK LOGICAL.
Кроме того, в отличие от первых двух методов, можно ограничить потребление ресурсов утилитой RMAN, например, чтобы не мешать нормальной работе пользователей. Для этого следует указать ограничение для канала (ALLOCATE CHANNEL ... RATE = x). Пример:
C:> RMAN @X.RMN
============================== X.RMN ==============================
CONNECT TARGET / RUN {
ALLOCATE CHANNEL c1 TYPE DISK RATE=512K;
BACKUP CHANNEL c1 VALIDATE CHECK LOGICAL DATABASE; }; EXIT;
===================================================================

Для проверки файла данных #1 без ограничений на загрузку диска ============================== X1.RMN ==============================
CONNECT TARGET / RUN {
ALLOCATE CHANNEL c1 TYPE DISK;
BACKUP CHANNEL c1 VALIDATE CHECK LOGICAL (DATAFILE 1); }; EXIT;
=======================================================