Каждая новая версия Oracle несет новые скрытые утилиты. Обычно они используются разработчиками, и эти утилиты оставляют для экстренной поддержки. Многие из этих утилит обладают большими возможностями.
Скрытые утилиты это не те, которые физически скрыты в программном обеспечении Oracle. Как правило это исполняемые файлы или пакеты PL/SQL, которые недокументированны или документация по которым сложна для поиска. Например, некоторые PL/SQL пакеты которые никогда не загружаются инсталятором Oracle, однако их описание присутствует в файлах операционной системы.
Основные директории представляющие интерес:
- $ORACLE_HOME/bin - Содержит бинарные исполняемые файлы используемые сервером Oracle. Многие из скрытых утилит расположены здесь.
- $ORACLE_HOME/plsql/demo - Эта директория содержит набор SQL скриптов свазанных со многими утилитами, включая dbms_profiler.
- $ORACLE_HOME/rdbms/admin - Эта директория содержит много SQL скриптов используемых для создания PL/SQL пакетов и требуемого окружения.
- $ORACLE_HOME/sqlplus/admin - Эта директория содержит скрипты используемые автоматическим преобразованием и другими утилитами.
- $ORACLE_HOME/otrace/admin - Это администраторская директория для утилит отладки Oracle и диагностических утилит.
- $ORACLE_HOME/otrace/sysman - Эта директория используется утилитами, как oemctl и Oracle Management Server (OMS).
- $ORACLE_HOME/otrace/lib - Содержит файлы используемые утилитой oerr.
Нахождение скрытых утилит
Простейший путь это нахождение новых пакетов между различными версиями. Следующий запрос сравнивает пакеты между Oracle 8i и Oracle 9i, используя ссылку на базу данных:
SELECT OBJECT_NAME
FROM DBA_OBJECTS@ORACLE9I
WHERE OWNER = 'SYS' AND
OBJECT_TYPE = 'PACKAGE BODY'
MINUS
SELECT OBJECT_NAME
FROM DBA_OBJECTS@ORACLE8I
WHERE OWNER = 'SYS' AND
OBJECT_TYPE = 'PACKAGE BODY';
Этот запрос покажет все пакеты принадлежащие SYS которые есть в Oracle 9i, но отсутствуют в Oracle 8i.
Поиск скрытых исполняемых файлов
Для поиска новых бинарных файлов сравниваются две директории в операционной системе и игнорируются совпадения. Команда UNIX dircmp может использоваться для этих целей:
dircmp -- s
/u01/aoracle/product/8.1.7/bin
/u01/oracle/product/9.0.3/bin
Сравниваются две директории, и ключ --s исключает совпадения.
Скрытые инициализационные параметры
Скрытые иницализационные параметры могут быть очень опасны, потому что их использование не документировано, но они могут быть очень ценными, если знать как их использовать. Можно использовать SQL*Plus для нахождения новых инициализационных параметров в новой версии Oracle:
SELECT NAME
FROM V$PARAMETER@ORACLE9I
MINUS
SELECT NAME
FROM V$PARAMETER@ORACLE8I;
Каждая версия Oracle содержит специальные, недокументированные инициализационные параметры. Эти параметры обычно используются в экстренных случаях и только по указанию администратора службы поддержки Oracle. Все имена скрытых параметров начинается с подчеркивания "_", поэтому легко можно написать запрос для получения их списка:
COLUMN PARAMETER FORMAT A37
COLUMN DESCRIPTION FORMAT A30 WORD_WRAPPED
COLUMN "SESSION VALUE" FORMAT A10
COLUMN "INSTANCE VALUE" FORMAT A10
SET LINES 100
SET PAGES 0
SPOOL UNDOC.LIS
SELECT A.KSPPINM "Parameter",
A.KSPPDESC "Description",
B.KSPPSTVL "Session Value",
C.KSPPSTVL "Instance Value"
FROM X$KSPPI A,
X$KSPPCV B,
X$KSPPSV C
WHERE A.INDX = B.INDX AND
A.INDX = C.INDX AND
A.KSPPINM LIKE '/_%' ESCAPE '/';
Следует помнить, что не каждый знает о недокументированных параметрах, и мало кто знает как их использовать. Oracle не позволяет администраторам баз данных использовать эти параметры без разрешения специалистов поддержки Oracle. Администратор должен быть уверен в применении и использовании таких параметров.
Во многих случаях недокументированные параметры описаны или в предыдущих версиях или будут описаны в будущем. Конечно использование недокументированных возможностей сильно осложнено отсутствием документации.
Скрытые представления V$
Представления V$ показыают новый функционал внутри базы данных, и не все представления описаны в документации Oracle. Следующий запрос позволяет быстро найти новые представления:
SELECT VIEW_NAME
FROM V$FIXED_VIEW_DESCRIPTION@ORACLE9I
MINUS
SELECT VIEW_NAME
FROM V$FIXED_VIEW_DESCRIPTION@ORACLE8I;
Скрытые системные события
С каждой версией Oracle, системные события и системная статистика меняется. Например, ниже представлен запрос для показа различий в статистике между Oracle8i и Oracle9i:
SELECT DISTINCT NAME
FROM V$SYSSTAT
WHERE NAME LIKE 'DBWR%';
NAME
----------------------------------------------------------------
DBWR Flush object call found no dirty buffers
DBWR Flush object cross instance calls
DBWR buffers scanned
DBWR checkpoint buffers written
DBWR checkpoint write requests
DBWR checkpoints
DBWR cross instance writes
DBWR free buffers found
DBWR incr. ckpt. write requests
DBWR lru scans
DBWR make free requests
DBWR revisited being-written buffer
DBWR skip hot writes
DBWR summed scan depth
DBWR timeouts
DBWR transaction TABLE writes
DBWR undo block writes
Далее список полученный в Oracle 9i:
SELECT DISTINCT NAME
FROM V$SYSSTAT
WHERE NAME LIKE 'DBWR%';
NAME
----------------------------------------------------------------
DBWR buffers scanned
DBWR checkpoint buffers written
DBWR checkpoints
DBWR cross instance writes
DBWR free buffers found
DBWR fusion writes
DBWR lru scans
DBWR make free requests
DBWR revisited being-written buffer
DBWR summed scan depth
DBWR transaction TABLE writes
DBWR undo block writes
Для определения новых системных событий можно использовать запрос к представлению V$EVENT_NAME:
SELECT NAME
FROM V$EVENT_NAME@ORACLE9I
MINUS
SELECT NAME
FROM V$EVENT_NAME@ORACLE8I;
Недокументированные SQL хинты
Получение списка хинтов для настройки SQL достаточно сложно. Список хинтов Oracle хранится внутри исполняемых файлов, и вы можете получить список используя команды UNIX. В UNIX вы можете использовать grep и strings для получения их напрямую из исполняемых файлов Oracle:
strings $ORACLE_HOME/bin/oracle > hints.lst
Для Oracle 9.0.2 получим список из 124 значений, из них 57 недокументированные. Они могут быть использованы при решении проблем исполнения SQL. Из за их недокументированности немногие могут их использовать, но для человека знающего их назначение и как использовать, могут принести много пользы.
В следующей части будут рассмотрены некоторые скрытые параметры и их назначение. И помните, использование этих параметров может быть небезопасным.