Средства диагностики и утилиты отладки в Oracle - Анализ журнала с помощью LogMiner
ОГЛАВЛЕНИЕ
Анализ журнала с помощью LogMiner
Архивные файлы журналов повторов очень важны, особенно для восстановления БД. Для того, чтобы прочитать внесенные в БД изменения, которые содержаться в архивном файле журнала повторов, необходимо открыть указанный файл и изучить его содержимое.
Для этого существует специальный инструмент под названием LogMiner.
Для работы с этим инструментом необходимо:
1. Установить utl_file_dir в init.ora
2. Запустить $ORACLE_HOME/rdbms/admin/dbmslogmnrd.sql
3. SQL> EXECUTE dbms_logmnr_d.build('dictionary.ora', '<utl_file_dir>');
4. SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LogFileName => ' /oradata/test/arc/test454.arc', Options => dbms_logmnr.NEW);
для каждого добавляемого к списку файла журнала удалить
DBMS_LOGMNR.REMOVEFILE
5. EXECUTE DBMS_LOGMNR.START_LOGMNR(DictFileName => <utl_file_dir/dictionary.ora');
6. select scn, log_id, username, sql_redo, sql_undo from v$logmnr_contents where username='SCOTT';
список всех изменений, выполненных пользователем SCOTT
7. SQL> EXEC DBMS_LOGMNR.END_LOGMNR;
Поиск и исправление поврежденных блоков данных с помощью модуля DBMS_REPAIR
Для устранения повреждений в блоках, таблицах и индексах Oracle предлагает инструмент DBMS_REPAIR.
Этот модуль позволяет:
- мягко повреждать блоки, чтобы показать, что они повреждены;
- пропускать поврежденные блоки в ходе полного сканирования таблицы или индекса;
- обслуживать ставшие ненужными строки индекса, которые указывают на поврежденные блоки данных;
- перестраивать списки свободной памяти для указанной таблицы или индекса.
Создание таблиц администрирования модуля DBMS_REPAIR
1. sqlplus " / as sysdba"
2. Создать (по желанию) табличное пространство.
3. SQL> EXEC DBMS_REPAIR.ADMIN_TABLES( ' REPAIR_ADMIN', 1, 1, 'REPAIR_TS');
SQL> EXEC DBMS_REPAIR.ADMIN_TABLES( ' ORPHAN_ADMIN' , 2, 1, 'REPAIR_TS');
Если нужно удалить таблицу:
SQL> EXEC DBMS_REPAIR.ADMIN_TABLES( ' ORPHAN_ADMIN' , 2, 3, NULL);
Чтобы очистить таблицу (удалив все ее строки ) :
SQL> EXEC DBMS_REPAIR.ADMIN_TABLES( ' ORPHAN_ADMIN' , 2, 2, NULL);
Сканирование конкретной таблицы или индекса с помощью процедуры DBMS_REPAIR.CHECK_OBJE
Проверим на повреждения таблицу data схемы prod. Допустим, что в схеме sys была создана таблица repair_admin
1. sqlplus " / as sysdba"
SQL> VARIABLE A NUMBER;
2. SQL> EXEC DBMS_REPAIR.CHECK_OBJECT ( ' PROD', 'DATA', NULL, 1,
'REPAIR_ADMIN' , NULL, NULL, NULL, NULL, :A);
3. PRINT A;
4. SELECT RELATIVE_FILE_ID FILE,
BLOCK_ID BLOCK,
OBJECT_NAME OBJECT,
CORRUPT_DESCRIPTION,
REPAIR_DESCRIPTION,
MARKED_CORRUPT MARKED FROM REPAIR_ADMIN;
Исправление поврежденных блоков с помощью процедуры DBMS_REPAIR.FIX_CORRUPT_BLOCKS
1. VARIABLE A NUMBER;
2. EXEC DBMS_REPAIR.FIX_CORRUPT_BLOCKS( 'PROD', 'DATA', NULL, 1, 'REPAIR_ADMIN', NULL, :A);
3. Проверим помечены ли элементы блока, как программно поврежденные:
SELECT RELATIVE_FILE_ID FILE,
BLOCK_ID BLOCK,
OBJECT_NAME OBJECT,
CORRUPT_DESCRIPTION,
REPAIR_DESCRIPTION,
MARKED_CORRUPT MARKED FROM REPAIR_ADMIN;
Пропуск поврежденных блоков с помощью процедуры DBMS_REPAIR.SKIP_CORRUPT_BLOCKS
EXEC DBMS_REPAIR.SKIP_CORRUPT_BLOCKS ( 'PROD', 'DATA', 1,1);
Использование процедуры DBMS_REPAIR.DUMP_ORPHAN_KEYS для просмотра висячих ключей
EXEC DBMS_REPAIR.DUMP_ORPHAN_KEYS ('PROD', 'SNO_IDX', NULL, 2, 'REPAIR_ADMIN',
'ORPHAN_ADMIN', NULL, :A);
SELECT SCHEMA_NAME, INDEX_NAME, INDEX_ID, TABLE_NAME, KEYROWID, KEY,
DUMP_TIME FROM ORPHAN_ADMIN;
Чтобы перестроить список свободной памяти таблицы DATA:
EXEC DBMS_REPAIR.REBUILD_FREELISTS( 'PROD', 'DATA', NULL, 1);