- •Приложение. Утилита sql*Plus. Создание и выполнение сценариев Назначение sql*Plus
- •Базовые понятия
- •Расширенные формулы Бэкуса-Наура
- •Запуск sql*Plus и выход из него
- •Опции командной строки
- •Регистрационная информация
- •Начальный сценарий
- •Использование профилей сайта и пользователя
- •Выход из sql*Plus
- •Подключение к стандартной и удаленной базе данных
- •Использование команды connect
- •Формат строки связи для удаленной базы данных
- •Основные команды
- •Выполнение команд Буфер sql
- •Выполнение операторов sql
- •Выполнение блоков pl/sql
- •Выполнение команд sql*Plus
- •Прекращение команды по ходу работы
- •Получение информации о времени выполнения команды
- •Выполнение команд базовой операционной системы
- •Получение оперативной справки
- •Команда help
- •Команда describe
- •Редактирование команд
- •Форматирование результатов запросов
- •Стандартный формат столбцов
- •Команда column
- •Команда break
- •Команда compute
- •Команда clear
- •Команды btitle и ttitle
- •Команды repheader и repfooter
- •Копирование данных из одной базы данных в другую
- •Команды для работы с файлами
- •Создание командных файлов
- •Команда save
- •Команда edit
- •Загрузка командных файлов
- •Выполнение командных файлов
- •Передача параметров командных файлов при вызове
- •Сокращенные формы команды start (@, @@)
- •Коды возврата командных файлов
- •Комментарии в командных файлах
- •Запоминание установок среды sql*Plus
- •Запись в файл и печать результатов выполнения запросов
- •Параметры командных файлов
- •Команды define и undfefine
- •Использование подставляемых переменных
- •Подстановка без повторного запроса
- •Подстановка параметров командных файлов
- •Ограничения
- •Системные переменные, влияющие на подстановку
- •Взаимодействие с пользователем
- •Команда prompt
- •Команда accept
- •Команда pause
- •Связываемые переменные
- •Команда variable
- •Команда print
- •Трассировка операторов
- •Настройка среды sql*Plus
- •Команда set
- •Команда show
- •Другие полезные команды
- •Команда execute
- •Команда password
- •Команды администрирования базы данных
- •Запуск базы данных
- •Остановка базы данных
- •Управление архивированием журналов повторного выполнения
- •Восстановление базы данных
- •Дополнительные источники информации
Команда print
Команда PRINT имеет следующий синтаксис:
<команда PRINT> ::=
PRI[NT] { <имя переменной>}
Эта команда выдает текущее значение перечисленных связываемых переменных. При вызове без параметров выдаются значения всех связываемых переменных.
Продолжая предыдущий пример:
SQL> print a
SP2-0625: Ошибка печати переменной "a"
SQL> print
DEP
----------
10
DEP2
----------
SP2-0625: Ошибка печати переменной "a"
SQL> set autoprint off
SQL> exec open :a for select ename,sal,comm from emp where deptno=:dep;
Процедура PL/SQL успешно завершена.
SQL> print dep a
DEP
----------
10
ENAME SAL COMM
---------- ---------- ----------
CLARK 2450
KING 5000
MILLER 1300
Трассировка операторов
Утилита SQL*Plus позволяет автоматически получать отчет о способе выполнения оператора, выбранном оптимизатором SQL, а также статистическую информацию о выполнении. Этот отчет выдается после успешного выполнения операторов SELECT, INSERT, UPDATE и DELETE. Такой отчет полезен для контроля и настройки производительности этих операторов.
Для управления данным отчетом используется команда SET AUTOTRACE. Эта команда имеет пять опций:
OFF |
Отчет не выдается. Это стандартный режим работы SQL*Plus. |
ON EXPLAIN |
Выдается только выбранный оптимизатором план выполнения оператора. |
ON STATISTICS |
Выдается только статистическая информация о выполнении оператора. |
ON |
Выдается план выполнения запроса и статистическая информация о выполнении оператора. |
TRACEONLY |
Выдается отчет о статистике, но не выдаются результаты выполнения оператора. Используется для трассировки запросов, возвращающих большие объемы данных. |
Для использования этой возможности SQL*Plus необходимо создать в схеме пользователя таблицу PLAN_TABLE и получить роль PLUSTRACE (предоставить ее может только DBA). Выполним следующие действия:
SQL> set autotrace on
SP2-0613: Невозможно проверить формат или существование PLAN_TABLE
SP2-0611: Ошибка разблокирования EXPLAIN report
SP2-0618: Невозможно найти Идентификатор Сеанса. Проверьте,
разрешена ли роль PLUSTRACE
SP2-0611: Ошибка разблокирования STATISTICS report
Как видите, по умолчанию эта возможность не поддерживается. Создадим таблицу с помощью сценария $ORACLE_HOME/rdbs/admin/utlxplan.sql:
SQL> @g:\oracle\ora81\rdbms\admin\utlxplan
Таблица создана.
Затем создадим роль PLUSTRACE, дадим ей необходимые привилегии, а затем предоставим ее роли DBA (с помощью сценария $ORACLE_HOME/sqlplus/admin/plustrce.sql):
SQL> connect system/manager as sysdba
Соединено.
SQL> @g:\oracle\ora81\sqlplus\admin\plustrce
SQL>
SQL> drop role plustrace;
drop role plustrace
*
ошибка в строке 1:
ORA-01919: роль 'PLUSTRACE' не существует
SQL> create role plustrace;
Роль создана.
SQL>
SQL> grant select on v_$sesstat to plustrace;
Привилегии предоставлены.
SQL> grant select on v_$statname to plustrace;
Привилегии предоставлены.
SQL> grant select on v_$session to plustrace;
Привилегии предоставлены.
SQL> grant plustrace to dba with admin option;
Привилегии предоставлены.
SQL> set echo off
Теперь предоставим роль PLUSTRACE пользователю, который будет использовать трассировку:
SQL> grant plustrace to scott;
Привилегии предоставлены.
Проверяем, что трассировочный отчет теперь выдается:
SQL> connect scott/tiger
Соединено.
SQL> set autotrace on
SQL> set pagesize 25
SQL> select ename, dname, sal
2 from emp, dept
3 where emp.deptno = dept.deptno;
ENAME DNAME SAL
---------- -------------- ----------
SMITH RESEARCH 800
ALLEN SALES 1600
WARD SALES 1250
JONES RESEARCH 2975
MARTIN SALES 1250
BLAKE SALES 2850
CLARK ACCOUNTING 2450
SCOTT RESEARCH 3000
KING ACCOUNTING 5000
TURNER SALES 1500
ADAMS RESEARCH 1100
JAMES SALES 950
FORD RESEARCH 3000
MILLER ACCOUNTING 1300
14 строк выбрано.
План выполнения
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=3 Card=2 Bytes=88)
1 0 HASH JOIN (Cost=3 Card=2 Bytes=88)
2 1 TABLE ACCESS (FULL) OF 'DEPT' (Cost=1 Card=4 Bytes=44)
3 1 TABLE ACCESS (FULL) OF 'EMP' (Cost=1 Card=41 Bytes=1353)
Статистика
----------------------------------------------------------
62 recursive calls
8 db block gets
6 consistent gets
0 physical reads
0 redo size
1267 bytes sent via SQL*Net to client
424 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
2 sorts (memory)
0 sorts (disk)
14 rows processed
Подробнее использование возможностей трассировки в SQL*Plus рассмотрено в отдельном модуле, посвященном настройке производительности.