Диагностика сбоев и ошибок в базе данных Oracle

Светлана Комарова

Светлана Комарова

Автор статьи. Системный администратор, Oracle DBA. Информационные технологии, интернет, телеком. Подробнее.

Диагностика сбоев и устранение ошибок в базе данных OracleВ базе данных Oracle Database 11g и 12c используется встроенная инфраструктура диагностики сбоев, которая помогает обнаруживать, диагностировать ошибки и разрешать проблемы в базе данных. Эта инфраструктура сосредоточена на перехвате и разрешении критичных ошибок, таких как повреждение данных и ошибки в коде базы данных. Целью является проактивное (упреждающее) обнаружение проблем и ограничение повреждений баз данных при сокращении времени диагностики и разрешения проблем. Средство диагностики сбоев также содержит элементы, которые облегчают взаимодействие со службой поддержки Oracle. Ниже перечислены ключевые компоненты новой инфраструктуры диагностики сбоев.

  • Automatic Diagnostic Repository. Этот основанный на файлах репозиторий предназначен для хранения данных диагностики базы данных. Обращаться к ADR можно из командной строки или диспетчера Enterprise Manager. Помимо многих прочих вещей он включает файлы трассировки, журналы сигналов тревоги и отчеты монитора работоспособности. Каждый экземпляр базы данных имеет свой собственный домашний каталог ADR, но структура каталогов унифицирована между экземплярами и продуктами, что позволяет службе поддержки Oracle сравнивать и анализировать диагностические данные множества продуктов и экземпляров. Немедленно после возникновения проблемы в базе данных диагностическая информация захватывается и сохраняется внутри ADR. Данные диагностики используются для отправки в службу поддержки Oracle того, что называется пакетами инцидентов (incident packages).
  • ADR Command Interpreter (ADRCI). Инструмент командной строки для управления диагностической информацией, создания и управления отчетами об инцидентах.
  • Health Monitor. Этот инструмент запускает автоматическую диагностику после ошибок базы данных. Запускать проверку работоспособности базы данных можно также вручную.
  • Support Workbench. Это мастер Enterprise Manager, который помогает диагностировать критические ошибки, обрабатывает и пакетирует диагностические данные для отправки в службу поддержки Oracle и заполнения запросов на техническое обслуживание.
  • Incident packaging service. Это новый инструмент, позволяющий легко создавать, редактировать и модифицировать информацию об инцидентах в физические пакеты для отправки в службу поддержки Oracle для диагностики.
  • Data Recovery Advisor. Этот инструмент автоматически диагностирует сбои данных, такие как потеря или повреждение файлов данных, и подсказывает соответствующие опции восстановления.
  • SQL Repair Advisor. Это новый инструмент, генерирующий сбойный оператор SQL вместе с рекомендациями по его исправлению.
  • SQL Test Case Builder. Этот инструмент помогает службе поддержки Oracle воспроизвести сбой.

 

Automatic Diagnostic Repository

Экземпляры базы данных, подобно другим продуктам и компонентам Oracle, хранят различные типы диагностических данных в ADR. К ADR можно обратиться всегда, даже при остановленном экземпляре, что позволяет некоторым сравнивать ADR с черным ящиком самолета, который позволяет диагностировать причины авиакатастрофы.

 

Настройка каталога Automatic Diagnostic Repository

Местоположение ADR настраивается с помощью параметра инициализации DIAGNOSTIC_DEST. Установка этого параметра означает, что вам не придется устанавливать такие традиционные параметры инициализации, как CORE_DUMP_DEST.

Если опустить параметры DIAGNOSTIC_DEST, то база данных назначит местоположение базового репозитория ADR так, как описано ниже.

  • Если установлена переменная ORACLE_BASE, то базой ADR станет каталог, который был назначен для ORACLE_BASE.
  • Если переменная ORACLE_BASE не установлена, то значением параметра DIAGNOSTIC_DEST по умолчанию станет $ORACLE_HOME/log.

Параметр DIAGNOSTIC_DEST устанавливает местоположение базы ADR на сервере. Домашний каталог ADR настраивается для каждого индивидуального экземпляра базы данных. База ADR может состоять из множества домашних каталогов ADR, по одному для каждого экземпляра продукта Oracle.

Домашний каталог ADR связан с базой ADR. Вот как выглядит общая структура домашнего каталога ADR, начиная с базы ADR:

diag/product_type/product_id/instance_id

Итак, если ваша база данных имеет имя и SID-идентификатор orcl1, а базой ADR является /u01/app/oracle, то домашний каталог ADR для базы orcl1 будет выглядеть так: 

/u01/app/oracle/diag/rdbms/orcl1/orcl1

 

Структура ADR

Различные подкаталоги домашнего каталога ADR содержат различные типы диагностических данных, вроде журналов сигналов тревоги, отчетов Health Monitor, отчетов об инцидентах и файлов трассировки ошибок. Обратите внимание, что в Oracle Database 11g есть два типа журналов сигналов тревоги: нормальный текстовый файл и журнал в формате XML. Для просмотра различных подкаталогов ADR экземпляра можно опросить представление V$DIAG_INFO

SQL> select * from v$diag_info;
INST_ID  NAME            VALUE
-------  --------------  ----------------------------------------------
1        Diag Enabled    TRUE
1        ADR Base        /u01/app/oracle
1        Diag Trace      /u01/app/oracle/diag/rdbms/orcl2/orcl2/trace
1        Diag Alert      /u01/app/oracle/diag/rdbms/orcl2/orcl2/alert
1        Diag Incident   /u01/app/oracle/diag/rdbms/orcl2/orcl2/incident
1        Diag Cdump      /u01/app/oracle/diag/rdbms/orcl2/orcl2/cdump
1        Health Monitor  /u01/app/oracle/diag/rdbms/orcl2/orcl2/hm1
1        Def Trace File  /u01/app/oracle/diag/rdbms/orcl2/orcl2/trace
                         /orcl2_ora_4813.trc
1        Active Problem  Count 2
1        Active Incident Count 4
11 rows selected.
SQL>

Следующие каталоги требуют пояснений:

  • ADR Base — базовый каталог ADR;
  • ADR Home — домашний каталог ADR для экземпляра;
  • Diag Trace — содержит текстовый журнал сигналов тревоги;
  • Diag Alert — содержит журнал сигналов тревоги в формате XML;
  • Diag Incident — каталог, содержащий созданные вами пакеты инцидентов.

 

ADRCI

ADRCI — это новая утилита командной строки, помогающая взаимодействовать с ADR. Утилиту ADRCI можно использовать для просмотра диагностических данных, создания пакетов инцидентов и просмотра отчетов Health Monitor.

ADRCI вызывается вводом adrci в командной строке:

$ adrci
ADRCI: Release 11.1.0.6.0 - Beta on Thu Sep 27 16:59:27 2007
Copyright (c) 1982, 2007, Oracle. All rights reserved.
ADR base = "/u01/app/oracle"
adrci>
 

Наберите команду help, чтобы увидеть команды, которые можно использовать в приглашении ADRCI. Для выхода из утилиты ADRCI введите exit или quit.

Утилиту ADRCI можно также применять в пакетном режиме, который позволяет использовать команды ADRCI внутри сценариев оболочки и командных файлов. При запуске ADRCI в пакетном режиме должны применяться параметры командной строки exec и script

adrci exec 'команда [; команда]. . . '
adrci script=имя_файла

 

Домашний путь ADR

При наличии нескольких экземпляров Oracle, все они будут текущими, когда вы входите в ADRCI. Есть некоторые команды ADRCI, которые работают, когда есть несколько домашних каталогов ADRCI, но другие требуют, чтобы текущим был только один экземпляр. По умолчанию после запуска ADRCI домашний путь ADRCI получает значение null. Когда домашний путь ADRCI равен null, все домашние каталоги ADR являются текущими. Вот пример:

adrci> show homes
adrci>
ADR Homes:
diag/rdbms/orcl/orcl
diag/rdbms/orcl2/orcl2
diag/rdbms/eleven/eleven
diag/rdbms/nina/nina
adrci>

Все домашние каталоги ADR всегда показаны относительно базы ADR. Таким образом, если базой ADR является /u01/app/oracle, а именем и SID базы — orcl1, то полный путь к домашнему каталогу ADR должен выглядеть так: 

/u01/app/oracle/diag/rdbms/orcl1/orcl1

В приведенном примере домашний путь ADR указывает на то, что несколько домашних каталогов ADR являются текущими. С помощью команды SET HOMEPATH путь ADR можно установить так, чтобы он указывал на единственный экземпляр.


Совет. После входа в ADRCI всегда первым делом устанавливайте домашний путь:

adrci> set homepath diag/rdbms/orcl1/orcl1
adrci> show homes
ADR Homes:
diag/rdbms/orcl1/orcl1
adrci>

Теперь, если ввести команду adrci, база данных извлечет диагностические данные только из экземпляра orcl1.

 

Просмотр журнала сигналов тревоги

Журнал сигналов тревоги просматривается следующим образом:

adrci> show alert –tail
2008-10-17 16:49:50.579000 -
Starting background process FBDA
Starting background process SMCO
. . .
Completed: ALTER DATABASE OPEN
adrci> 

Перед запуском этой команды удостоверьтесь в корректной настройке домашнего пути. Вернуться в приглашение ADRCI можно, нажав <Ctrl+C>.

Помимо ADRCI, есть и другие возможности для просмотра содержимого журнала сигналов тревоги. Просмотреть традиционный текстовый журнал можно, зайдя в каталог, указанный в поле Diag Trace представления V$DIAG_INFO. Естественно, просматривать содержимое журнала сигналов можно и через домашнюю страницу диспетчера Enterprise Manager. Для этого просто щелкните на ссылке Alert Log Contents (Содержимое журнала сигналов тревоги) в группе Related Links (Связанные ссылки).

 

Служба пакетирования инцидентов

Диагностическая инфраструктура Oracle основана на двух ключевых концепциях: проблемах и инцидентах. Проблема — это критичная ошибка, например, сопровождаемая сообщением ORA-4031, которая возникает при нехватке разделяемой памяти. Инцидент — отдельное проявление проблемы; таким образом, если проблема проявляется многократно, каждое такое событие помечается отдельным инцидентом со своим уникальным идентификатором инцидента. Когда инцидент случается в базе данных, база собирает диагностические данные о нем, прикрепляет идентификатор инцидента к событию и сохраняет его в подкаталоге ADR. Инцидент связывается с проблемой посредством ключа проблемы. База данных автоматически создает инцидент при возникновении проблемы, но можно также создавать свои собственные инциденты, когда необходимо сообщить об ошибках, которые не возникают, и послать критичный сигнал тревоги службе поддержки Oracle.

ADR использует контролируемую по объему систему инцидентов, которая допускает ограниченное количество инцидентов для каждой данной проблемы. Это делается, чтобы избежать затопления ADR большим количеством информации об идентичных инцидентах. База данных позволяет каждой проблеме регистрировать в журналах диагностические данные только для определенного числа инцидентов в ADR. Например, после появления 25 инцидентов по причине одной и той же проблемы в течение дня ADR не станет фиксировать новые инциденты с тем же ключом проблемы. ADR использует два типа политики сохранения: один управляет хранением метаданных инцидента, а другой — хранением инцидента и файлов дампа. По умолчанию ADR сохраняет метаданные инцидента в течение месяца, а инцидент и файлы дампа — в течение одного года.

 

Просмотр инцидентов

Проверить текущее состояние инцидента можно с помощью команды SHOW INCIDENT, как показано ниже: 

adrci> show incident
ADR Home = /u01/app/oracle/diag/rdbms/orcl1/orcl1:
****************************************************************
INCIDENT_ID    PROBLEM_KEY         CREATE_TIME
------------   -----------------   -----------------------------------
17060          ORA 1578            2007-09-25 17:00:18.019731 -04:00
14657          ORA 600             2007-09-09 07:01:21.395179 -04:00
2 rows fetched
adrci>

Детальную информацию об инциденте можно просмотреть, выполнив команду SHOW INCIDENT...MODE DETAIL, показанную ниже: 

adrci> show incident -mode DETAIL -p "incident_id=1234" 

Приведенная команда показывает детальную информацию об инциденте с идентификатором 1234.

Пакет инцидента содержит диагностические данные, касающиеся одного или более инцидентов (охватывающих одну или более проблем). Пакет инцидентов позволяет легко передавать диагностическую информацию службе поддержки Oracle. Пакеты инцидентов создаются либо в Support Workbench, либо из командной строки с использованием инструмента ADRCI. Пакет инцидентов отправляется в службу поддержки Oracle, когда требуется помощь Oracle в разрешении проблем и инцидентов. После создания пакета инцидентов можно отредактировать пакет, добавляя к нему и удаляя из него диагностические файлы.

 

Создание пакета инцидентов

Служба пакетирования инцидентов ( incident packaging service — IPS) позволяет создать пакет инцидентов. С помощью IPS осуществляется сбор диагностических данных об ошибке, таких как файлы трассировки, файлы дампов, отчеты о состоянии работоспособности системы, тестовые сценарии SQL и прочая информация, и пакетирование этих данных в zip-файл для отправки в службу поддержки Oracle. IPS отслеживает и собирает диагностическую информацию об инцидентах, используя номера инцидентов. Перед передачей zip-файла в службу поддержки Oracle можно добавлять, удалять или прочищать диагностические файлы. Ниже перечислены ключевые моменты, которые следует знать относительно пакетов инцидентов.

  • Пакет инцидентов — логическая сущность, содержащая только метаданные проблемы. По умолчанию база данных включает в zip-пакет первые и последние три
    инцидента для проблемы.
  • Zip-файл, который вы в действительности отправляете Oracle, конечно, является физическим пакетом и содержит диагностические файлы, специфицированные метаданными в логическом пакете инцидентов.
  • В службу поддержки Oracle можно отправлять инкрементные или полные zip-файлы.

Рассмотрим шаги, которые потребуется выполнить для создания службы пакетирования инцидентов, используя команды IPS в ADRCI.

1. Создайте логический пакет, который будет использован для хранения метаданных инцидента. Создать можно пустой или непустой логический пакет. Непустой пакет требует указания номера инцидента, номера или ключа проблемы, и автоматически включает диагностическую информацию об указанном инциденте или проблеме. В следующем примере создается пустой пакет с помощью команды IPS CREATE PACKAGE

adrci> ips create package
Created package 4 without any contents,
correlation level typical
adrci>

Чтобы создать непустой пакет, укажите номер инцидента:

adrci> ips create package incident 17060
Created package 5 based on incident id 17060,
correlation level typical
adrci> 

Можно также создать пакет, охватывающий интервал времени:

adrci> ips create package time '2007-09-20 00:00:00 -12:00' to
'2007-09-30 00:00:00 -12:00' 

2. Если на первом шаге был создан пустой логический пакет, в него необходимо добавить диагностические данные:

adrci> ips add incident 17060 package 4
Added incident 17060 to package 4
adrci> 

Добавление диагностических файлов к пакету производится следующим образом:

adrci> ips add file  package  

3. Сгенерируйте физический пакет, который будет передан в службу поддержки Oracle:

adrci> ips generate package 4 in /u01/app/oracle/support
Generated package 4 in file
/u01/app/oracle/diag/IPSPKG_20070929163401_COM_1.zip,
mode complete
adrci> 

COM_1 в имени файла говорит о том, что это полный файл, а не инкрементный. Для создания инкрементного физического пакет инцидентов служит следующая команда:

adrci> ips generate package 4 in /u01/app/oracle/diag
incremental
Generated package 4 in file
/u01/app/oracle/diag/IPSPKG_20070929163401_INC_2.zip,
mode incremental
adrci> 

4. Прежде чем отправлять пакет инцидентов в службу поддержки Oracle для диагностики и получения помощи, нужно формально финализировать пакет инцидентов, как показано ниже: 

adrci> ips finalize package 4
Finalized package 4
adrci>

После этого финализированный zip-файл можно пересылать в службу поддержки Oracle, загрузив его вручную. В следующем разделе данной статьи ниже, где пойдет речь о Support Workbench, будет показано, как автоматизировать передачу пакетов инцидентов в службу поддержки Oracle.

 

Support Workbench

Автоматизированное рабочее место поддержки (Support Workbench), к которому можно обратиться из Enterprise Manager, позволяет автоматизировать управление инцидентами, включая заполнение запросов на обслуживание в Oracle Support и отслеживание хода выполнения таких запросов. Помимо просмотра проблем и инцидентов, можно также генерировать диагностические данные о проблеме и запускать советники для решения проблемы. С помощью Support Workbench легко создавать пакеты инцидентов и отправлять их в службу поддержки Oracle.

Чтобы включить Support Workbench для загрузки файлов IPS в службу поддержки Oracle, понадобится инсталлировать и сконфигурировать Oracle Configuration Manager (Диспетчер конфигурации Oracle). Этот диспетчер можно установить во время инсталляции программного обеспечения Oracle, как показано на рисунке 1 ниже:

Установка Oracle Configuration Manager

Установить и сконфигурировать Oracle Configuration Manager можно и после инсталляции сервера, вызывая для этого Oracle Universal Installer.

В следующих разделах статьи будут подведены итоги по применению Support Workbench для решения проблем.


Совет. Хотя база данных автоматически отслеживает все критичные ошибки, сохраняя данные в ADR, через Support Workbench можно также произвести созданную пользователем проблему для ошибок, которые не трактуются базой данных как критичные. Для этого нужно щелкнуть на ссылке Create User-Reported Problems (Создать проблемы, сообщаемые пользователем) в группе Related Links (Связанные ссылки).


Поиск и устранение ошибок, диагностика сбоев в СУБД Oracle

 

Просмотр сигналов об ошибках

На домашней странице Support Workbench можно просматривать информацию о нерешенных проблемах. Критичные сигналы проверяются на странице Database Home (Домашняя страница базы данных) в разделе Diagnostic Summary (Диагностическая сводка), щелкая на ссылке Active Incidents (Активные инциденты), либо перейдя в раздел Critical Alerts (Критичные сигналы) внутри раздела Alerts (Сигналы). Чтобы получить доступ к Support Workbench, щелкните на ссылке Software and Support (Программное обеспечение и поддержка), а затем — на ссылке Support Workbench (Автоматизированное рабочее место поддержки) внутри раздела Support (Поддержка). На рисунке 2 ниже показана страница Support Workbench.

На домашней странице Support Workbench в списке View (Показать) выберите вариант All (Все) для просмотра всех проблем.

страница Support Workbench

 

Просмотр подробностей о проблемах

Чтобы просмотреть детальную информацию по любой проблеме, щелкните на кнопке View Incident Details (Просмотреть детальную информацию об инциденте) на странице Incidents (Инциденты).

 

Сбор дополнительных данных

Помимо автоматического сбора диагностических данных после возникновения в базе данных критичной ошибки, Support Workbench также используется для выполнения проверки работоспособности и сбора диагностических данных. Чуть позже, в разделе “Запуск проверки работоспособности”, будут даны дополнительные пояснения на эту тему.

 

Создание запросов службы

Через интерфейс Support Workbench можно создавать запросы службы в формате MetaLink. Для дальнейших ссылок имеет смысл записать номер запроса службы.

 

Создание пакетов инцидентов

Для создания и отправки пакетов инцидентов используется либо метод Quick Packaging (Быстрое пакетирование), либо Custom Packaging (Настраиваемое пакетирование). Метод Quick Packaging проще, но не позволяет редактировать или подстраивать диагностические данные, которые отправляются в службу поддержки Oracle. Метод Custom Packaging более сложен, однако обеспечивает возможность тонкой настройки пакета инцидента.

Ниже перечислены шаги, которые необходимо предпринять для создания пакета инцидента и отправки его в службу поддержки Oracle посредством метода Custom Packaging.

    1. На странице Incident Details (Детальная информация об инциденте) щелкните на ссылке Package (Пакетировать).
    2. На странице Select Packaging Mode (Выберите режим пакетирования) выберите вариант Custom Packaging (Настраиваемое пакетирование) и щелкните на кнопке OK.
    3. На странице Select Package (Выберите пакет) выберите опцию Create New Package (Создать новый пакет). Введите имя пакета и щелкните на кнопке OK.
    4. Support Workbench отобразит страницу Customize Package (Настройка пакета), подтверждая создание пакета. Страница Customize Package показана на рисунке 3 ниже:

Страница Customize Package

  1. Завершив задачи вроде редактирования содержимого пакета или добавления диагностических данных, финализируйте пакет щелчком на ссылке Finish Contents Preparation (Завершить подготовку содержимого) в подразделе Send to Oracle Support (Отправить в службу поддержки Oracle) раздела Packaging Tasks (Задачи пакетирования) на странице Customize Package.
  2. Сгенерируйте файл для загрузки, щелкнув на ссылке Generate Upload File (Сгенерировать файл для загрузки). Щелкните на опции Immediately (Немедленно) или Later (Позже), а затем на кнопке Submit (Отправить) для планирования отправки пакета об инциденте в службу поддержки Oracle.
  3. После отправки пакета в службу поддержки Oracle служба IPS обрабатывает zip-файл и подтверждает его, прежде чем вернуть на страницу Customize Package. Щелкните на кнопке Send to Oracle (Отправить в Oracle) для отправки подтвержденного zip-файла Oracle. Затем потребуется заполнить мандат MetaLink и указать, нужно ли создать новый запрос обслуживания. Щелкните на кнопке Submit для отправки файла в службу поддержки Oracle.

 

Отслеживание запросов на обслуживание

После отправки пакета инцидента в службу поддержки Oracle можно добавлять к нему новые инциденты. Кроме того, можно также позволить другим администратором баз данных в организации получать детали пакета инцидента, добавив комментарии в журнал активности проблемы.

 

Реализация восстановлений и закрытие инцидентов

Если рекомендации по восстановлению включают использование советника Oracle, такое восстановление можно выполнить непосредственно из Support Workbench, например, запустить Data Recovery Advisor и SQL Repair Advisor.

Разрешенный инцидент можно закрыть или позволить Oracle очистить его; по умолчанию Oracle очищает все инциденты по истечении 30 дней.

 

Health Monitor

Монитор работоспособности Health Monitor представляет собой диагностический каркас базы данных Oracle, который автоматически запускает диагностические проверки в том случае, если база данных сталкивается с серьезными ошибками. В дополнение к реактивным проверкам при желании можно запускать ручные проверки. Для запуска ручных проверок работоспособности базы данных применяется либо Enterprise Manager, либо пакет DBMS_HM. В ответ на реактивные или ручные проверки база данных проверяет такие компоненты, как память и транзакционная целостность, и предоставляет отчеты о результатах.

Следующий запрос к представлению V$HM_CHECK показывает различные типы проверок работоспособности, которые могут быть выполнены:

SQL> SELECT name, description FROM v$hm_check;
NAME                             DESCRIPTION
ИМЯ                              ОПИСАНИЕ
---------------------            ---------------------------
HM Test Check                    Check for HM Functionality
Проверка HM                      Проверка функциональности HM
DB Structure Integrity Check     Checks integrity of all Database files
Целостность структуры БД         Проверка целостности всех файлов базы данных
Data Block Integrity Check       Checks integrity of a datafile block
Целостность блоков данных        Проверка целостности блоков файлов данных
Redo Integrity Check             Checks integrity of redo log content
Целостность данных повторного    Проверка целостности содержимого журналов
выполнения                       повторного выполнения
Logical Block Check              Checks logical content of a block
Логические блоки                 Проверка логического содержимого блока
Transaction Integrity Check      Checks a transaction for corruptions
Целостность транзакций           Проверка транзакции на предмет разрушения
Undo Segment Integrity Check     Checks integrity of an undo segment
Целостность сегмента отмены      Проверка целостности сегмента отмены
All Control Files Check          Checks all control files in the database
Все управляющие файлы            Проверка всех управляющих файлов в базе данных
CF Member Check                  Checks a multiplexed copy of the control file
Члены управляющих файлов         Проверка мультиплексированной копии
                                 управляющего файла
All Datafiles Check              Checks for all datafiles in the database
Все файлы данных                 Проверка всех файлов данных в базе данных
Single Datafile Check            Checks a datafile
Одиночный файл данных            Проверка отдельного файла данных
Log Group Check                  Checks all members of a log group
Группа журналов                  Проверка всех членов группы журналов
Log Group Member Check           Checks a particular member of a log group
Член группы журналов             Проверка отдельного члена группы журналов
Archived Log Check               Checks an archived log
Архивный журнал                  Проверка архивного журнала
Redo Revalidation Check          Checks redo log content
Повторная проверка достоверности Проверка содержимого журнала
данных повторного выполнения     повторного выполнения
IO Revalidation Check            Checks file accessibility
Повторная проверка достоверности Проверка доступности файлов
ввода-вывода
Block IO Revalidation Check      Checks file accessibility
Повторная проверка достоверности Проверка доступности файлов
блочного ввода-вывода
Txn Revalidation Check           Revalidate corrupted txn
Повторная проверка               Повторная проверка разрушенного txn
достоверности txn
Failure Simulation Check         Creates dummy failures
Эмуляция сбоев                   Создание фиктивных сбоев
Dictionary Integrity Check       Checks dictionary integrity
Целостность словаря              Проверка целостности словаря
21 rows selected.
SQL>

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

 

Запуск проверки работоспособности Health Monitor

Запуск проверки работоспособности базы данных осуществляется из интерфейса Health Monitor в консоли Enterprise Manager, к которому можно добраться, щелкнув на вкладке Checkers (Средства проверки) на странице Advisor Central (Центр советников). Запустить проверку работоспособности можно также с использованием пакета DBMS_HM. Следующий пример демонстрирует запуск проверки работоспособности с помощью процедуры RUN_CHECK

BEGIN
dbms_hm run_check (
check_name => 'Transaction Integrity Check',
run_name => 'testrun1',
input_params => 'TXN_ID=9.44.1');
END;
/
PL/SQL procedure successfully completed.
SQL>

В приведенном выше примере для указанной транзакции запускается проверка транзакционной целостности.

 

Просмотр результатов проверки работоспособности Health Monitor

Health Monitor хранит все результаты запусков в ADR. Для просмотра рекомендаций и обнаружений проверки работоспособности можно опросить представления V$HM_RECOMMENDATION, V$HM_FINDING и V$HM_RUN. Однако более простой способ просмотра результатов проверки работоспособности состоит в вызове функции GET_RUN_REPORT, как показано в следующем примере: 

SQl> SET LONG 100000
SQL> SELECT dbms_hm.get_run_report('TestCheck1') FROM DUAL;
DBMS_HM.GET_RUN_REPORT('TESTCHECK1')
------------------------------------------------------------
Basic Run Information
Run Name                     : TestCheck1
Run Id                       : 42721
Check Name                   : Dictionary Integrity Check
Mode                         : MANUAL
Status                       : COMPLETED
Start Time                   : 2008-10-03 16:40:47.464989 -04:00
End Time                     : 2008-10-03 16:41:23.068746 -04:00
Error Encountered            : 0
Source Incident Id           : 0
Number of Incidents Created  : 0
Input Paramters for the Run
TABLE_NAME=ALL_CORE_TABLES
CHECK_MASK=ALL
Run Findings And Recommendations
Finding
Finding Name                 : Dictionary Inconsistency
Finding ID                   : 42722
Type                         : FAILURE
Status                       : OPEN
Priority                     : CRITICAL
Message                      : SQL dictionary health check:
dependency$.dobj# fk 126 on object DEPENDENCY$ failed
Message                      : Damaged rowid is AAAABnAABAAAOiHABI –
description: No further damage description available
SQL>

Для просмотра результатов проверки Health Monitor можно также воспользоваться ADRCI. Для начала выполните команду SHOW HM_RUN, чтобы увидеть результаты проверки работоспособности:

adrci> SHOW hm_run
****************************************************************
HM RUN RECORD 2131
****************************************************************
RUN_ID                         42721
RUN_NAME                       TestCheck1
CHECK_NAME                     Dictionary Integrity Check
NAME_ID                        24
MODE                           0
START_TIME                     2008-10-03 16:40:47.4649 -04:00
RESUME_TIME 
END_TIME                       2008-10-03 16:41:23.0687 -04:00
MODIFIED_TIME                  2008-10-03 16:41:59.7867 -04:00
TIMEOUT                        0
FLAGS                          0
STATUS                         5
SRC_INCIDENT_ID                0
NUM_INCIDENTS                  0
ERR_NUMBER                     0
REPORT_FILE
/u01/app/oracle/diag/rdbms/orcl2/orcl2/hm/HMREPORT_TestCheck1
2131 rows fetched
adrci>

В этом примере команда SHOW HM_RUN показывает имя файла отчета в столбце REPORT_FILE. Увидев имя файла, можете просмотреть сам отчет, выполнив команду SHOW REPORT HM_RUN, как показано ниже: 

adrci> SHOW REPORT hm_run TestCheck1

Если столбец REPORT_FILE показывает значение NULL, сначала потребуется сгенерировать файл отчета: 

adrci> CREATE REPORT hm_run TestCheck1

Сгенерировав отчет, как показано выше, с помощью команды SHOW REPORT HM_RUN можно просмотреть его содержимое.

 

Восстановление операторов SQL с помощью SQL Repair Advisor

SQL Repair Advisor (Советник по исправлению SQL) — это новый инструмент, который помогает исследовать ситуации, когда оператор SQL завершается критической ошибкой. Например, если имеется известная ошибка в коде, которая служит причиной критической ошибки при его выполнении, можно применить SQL Repair Advisor. В противоречии с его названием, SQL Repair Advisor на самом деле не переписывает и не восстанавливает сбойный оператор SQL, а рекомендует исправление, которое поможет этому оператору обойти ошибку. Другими словами, советник предлагает обходной путь для выполнения проблемного оператора SQL. Обратите внимание, что исправление SQL в этом случае очень похоже на профиль SQL, и его применение изменяет план выполнения запроса. Вызывать SQL Repair Advisor можно из Support Workbench или же с помощью пакета DBMS_SQLDIAG. Оба метода рассматриваются в последующих разделах этой статьи.

 

Вызов SQL Repair Advisor из Support Workbench

Для вызова SQL Repair Advisor из Support Workbench выполните следующие шаги.

  1. На домашней странице Support Workbench щелкните на идентификаторе проблемы, которую вы пытаетесь решить.
  2. На странице Problem Details (Детальная информация о проблеме) щелкните на сообщении о проблеме от сбойного оператора SQL.
  3. В разделе Investigate and Resolve (Исследование и разрешение) на вкладке Self Service (Самообслуживание) щелкните на SQL Repair Advisor (Советник по исправлению SQL).
  4. Выберите расписание для запуска советника и щелкните на кнопке Submit (Отправить). Щелкните на View (Просмотреть) на странице результатов SQL Repair Advisor для просмотра страницы Report Recommendations (Отчет о рекомендациях).
  5. Щелкните на ссылке Implement (Реализовать), если хотите, чтобы советник реализовал выданные рекомендации. После реализации рекомендаций советник SQL Repair Advisor отобразит страницу подтверждения.

При переходе на новый выпуск базы данных можно легко сбросить исправления, примененные через SQL Repair Advisor.

 

Вызов SQL Repair Advisor через пакет DBMS_SQLDIAG

В следующем примере демонстрируется создание задачи SQL Repair Advisor и применение исправления SQL, рекомендованной советником для исправления дефектного оператора SQL.


Несколько слов о следующем примере


Следующий пример был позаимствован из материалов курса Oracle University. Если вы попытаетесь выполнить пример как он есть, то не увидите никаких ошибок. В курсе Oracle ошибка вызывается использованием механизма управления исправлений, который позволяет отключать исправления ошибок, связанных с оптимизатором. Управление этим механизмом осуществляется установкой недокументированного параметра инициализации _FIX_CONTROL.

Для нахождения ошибок, исправления которых можно отключить, можно запросить представление V$SESSION_FIX_CONTROL. Для этого понадобится выполнить запрос SELECT DISTINCT BUGNO FROM V$SESSION_FIX_CONTROL. Когда вы решите, исправления каких ошибок нужно отключить в целях тестирования, можете выдать запрос ALTER SESSION SET "_FIX_CONTROL"= '4728348:OFF';, чтобы временно отключить исправление ошибки на время тестирования кода этого примера.

По завершении тестирования не забудьте выполнить оператор ALTER SESSION SET "_FIX_CONTROL"='4728348:ON';, чтобы вновь включить исправление ошибки. Как видите, это довольно запутанная процедура, помимо того, что она требует использования недокументированного параметра на свой страх и риск, без помощи службы поддержки Oracle. Несмотря на упоминание стратегии для тестирования следующего кода, возможно, разумней не использовать никаких недокументированных параметров инициализации, поскольку это может принести потенциальный ущерб базе данных.


Предположим, что приведенный ниже оператор SQL идентифицирован как причина возникновения критичной ошибки в базе данных: 

SQL> DELETE FROM t t1
WHERE t1.a = 'a'
AND rowid <> (select max(rowid)
FROM t t2 WHERE t1.a= t2.a AND t1.b = t2.b AND t1.d=t2.d);

Для устранения проблемы можно воспользоваться SQL Repair Advisor, выполнив следующие шаги.

1. Запустите процедуру CREATE_DIAGNOSTIC_TASK из пакета DBMS_SQLDIAG, чтобы создать задачу SQL Repair Advisor: 

SQL> declare
2 report_out clob;
3 task_id varchar2(50);
4 begin
5 task_id := dbms_sqldiag.create_diagnosis_task(
6 sql_text=>' delete from t t1 where t1.a = ''a''
and rowid <> (select max(rowid) from t t2
where t1.a= t2.a and t1.b = t2.b
and t1.d=t2.d)',
7 task_name =>'test_task1', 8 problem_type=>dbms_sqldiag.problem_type_compilation_error); 9* end; SQL> / PL/SQL procedure successfully completed. SQL>

Здесь в качестве значения параметра PROBLEM_TYPE в процедуре CREATE_DIAGNOSTIC_TASK было выбрано PROBLEM_TYPE_COMPILATION. Этот параметр можно также установить в PROBLEM_TYPE_EXECUTION.

2. Запустите процедуру SET_TUNING_PARAMETERS для применения параметров для новой задачи, созданной на предыдущем шаге:

SQL> exec dbms_sqltune.set_tuning_task_parameter('task_id,
'-SQLDIAG_FINDING_MODE', dbms_sqldiag.SQLDIAG_FINDING_FILTER_PLANS);

3. Выполните следующую задачу после указания имени задачи в параметре процедуры EXECUTE_DIAGNOSTIC_TASK:

SQL> exec dbms_sqlldiag.execute_diagnosis_task('test_task1');
PL/SQL procedure successfully completed.
SQL> 

Обратите внимание, что для выполнения процедуры EXECUTE_DIAGNOSTIC_TASK потребуется только параметр TASK_NAME.

4. Отчет о диагностической задаче можно получить с помощью функции REPORT_DIAGNOSTIC_TASK:

SQL> declare rep_out clob;
2 begin
3 rep_out := dbms_sqldiag.report_diagnosis_task
4 ('test_task1',dbms_sqldiag.type_text);
5 dbms_output.put_line ('Report : ' || rep_out);
6* end;
SQL> /
Report                  : GENERAL INFORMATION
SECTION
-------------------------------------------------
Tuning Task Name        : test_task1
Tuning Task Owner       : SYS
Tuning Task ID          : 3219
Workload Type           : Single SQL Statement
Execution Count         : 1
Current Execution       : EXEC_3219
Execution Type          : SQL DIAGNOSIS
Scope                   : COMPREHENSIVE
Time Limit(seconds)     : 1800
Completion Status       : COMPLETED
Started at              : 10/20/2007 06:33:42
Completed at            : 10/20/2007 06:36:45
Schema Name             : SYS
SQL ID                  : 44wx3x03jx01v
SQL Text                : delete from t t1 where t1.a = 'a'
                        and rowid <> (select max(rowid)
                        from t t2 where t1.a= t2.a
                        and t1.b = t2.b and t1.d=t2.d)
. . .
PL/SQL procedure successfully completed.
SQL>

5. Исправление, рекомендованное SQL Repair Advisor, принимается с использованием процедуры ACCEPT_SQL_PATCH:

SQL> exec dbms_sqldiag.accept_sql_patch (
task_name => 'test_task1',
task_owner => 'SYS') 

При выполнении этого оператора SQL после применения предложенного исправления вы увидите другой план выполнения оператора. Используйте представление DBA_SQL_PATCHES для нахождения имен всех рекомендуемых SQL Repair Advisor исправлений. Удаляется исправление с помощью процедуры DROP_SQL_PATCH. Исправление SQL можно также экспортировать в другую базу данных, используя промежуточную таблицу.

 

SQL Test Case Builder

Быстро создать тестовый сценарий для отправки в службу поддержки Oracle можно в новом построителе сценариев тестирования SQL (SQL Test Case Builder). Этот инструмент предоставляет информацию о запросе SQL, определениях объектов, процедур, функций и пакетов, статистике оптимизатора и настройках параметров инициализации. SQL Test Case Builder создает сценарий SQL, который может выполняться в другой системе для воссоздания объектов базы, имеющихся в исходной базе. Вызывается SQL Test Case Builder с помощью функции DBMS_SQLDIAG.EXPORT_SQL_TESTCASE_DIR_BY_INC. Эта функция сгенерирует тестовый сценарий SQL, соответствующий идентификатору инцидента, переданного функции. Вместо этого можно воспользоваться функцией DBMS_SQLDIAG.EXPORT_SQL_TESTCASE_DIR_BY_TEXT и сгенерировать тестовый сценарий SQL, который соответствует тексту SQL, переданному в качестве аргумента. Однако обычно намного проще обратиться к SQL Test Case Builder со страницы Support Workbench в Enterprise Manager, выполнив для этого следующие шаги.

  1. Зайдите на страницу Problem Details (Детальная информация о проблеме), щелкнув на идентификаторе соответствующей проблемы.
  2. Щелкните на Oracle Support (Служба поддержки Oracle).
  3. Щелкните на Generate Additional Dumps and Test Cases (Сгенерировать дополнительные дампы и сценарии тестирования).
  4. Щелкните на пиктограмме в столбце Go to Task (Перейти к заданию) на странице Additional Dumps and Test Cases (Дополнительные дампы и сценарии тестирования). В результате будет запущен анализ SQL Test Case Builder для соответствующего оператора SQL.

Вас заинтересует / Intresting for you:

Oracle и непроцедурный доступ ...
Oracle и непроцедурный доступ ... 8522 просмотров Antoni Tue, 21 Nov 2017, 13:32:50
Видеокурс по администрированию...
Видеокурс по администрированию... 10719 просмотров Илья Дергунов Mon, 14 May 2018, 05:08:47
Отмена сессий в Oracle (ALTER ...
Отмена сессий в Oracle (ALTER ... 23217 просмотров Stepan Ushakov Thu, 01 Nov 2018, 18:04:59
СУБД Oracle: обзор характерист...
СУБД Oracle: обзор характерист... 15812 просмотров Antoni Fri, 24 Nov 2017, 07:35:05
Войдите чтобы комментировать

apv аватар
apv ответил в теме #8854 6 года 5 мес. назад
инструментарий ADR сильно облегчает процесс диагностики администратору базы Oracle в случае сбоев и возникновения ошибок.