Команда SHOW позволяет получить значение системных переменных SQL*Plus, а также ряд информации о среде, базе данных, к которой подключена утилита, и об ошибках в последней выполненной команде. Эта команда имеет следующий синтаксис:
- <команда SHOW> ::=
- SHO[W] <опция>
- <опция> ::=
- <имя системной переменной>
/ ALL
/ BTI[TLE]
/ ERR[ORS] [[<объект>] [<схема>.]<имя объекта>]
/ LNO
/ PARAMETERS [<часть параметра>]
/ PNO
/ REL[EASE]
/ REPF[OOTER]
/ REPH[EADER]
/ SGA
/ SPOO[L]
/ SQLCODE
/ TTI[TLE]
/ USER
- <объект> ::=
- FUNCTION / PROCEDURE
/ PACKAGE
/ PACKAGE BODY
/ TRIGGER
/ VIEW
/ TYPE
/ TYPE BODY
/ DIMENSION
/ JAVA CLASS
Назначение опций представлено в табл. 16.
Таблица 16. Опции команды SHOW.
Опция |
Назначение |
ALL |
Выдает значения всех опций SHOW, кроме ERRORS и SGA, и всех системных переменных. |
BTI[TLE] |
Выдает текущее определение BTITLE (нижнего колонтитула). |
ERR[ORS] |
Выдает ошибки компиляции хранимой программной единицы. При компиляции выдается сообщение, что ошибки есть. Для получения детальной информации об ошибках необходимо выполнить команду SHOW ERRORS. При выполнении этой команды без аргументов, выдается информация об ошибках при компиляции последней созданной или измененной программной единицы. Если же указать тип и имя программной единицы, будут выданы ошибки, полученные при ее компиляции.
Выдается номер строки/столбца (в столбце LINE/COL), в которых обнаружена ошибка, и текст сообщения об ошибке (в столбце ERROR). Форматом выдачи можно управлять с помощью команды COLUMN. |
LNO |
Показывает номер текущей строки на странице. |
PARAMETERS |
Выдает имя, тип и текущее значение одного или нескольких параметров инициализации. При вызове без дополнительных параметров, эта команда выдает информацию обо всех параметрах инициализации. Если указать части имен параметров, будет выдана информация только о параметрах, в имена которых указанные части присутствуют.
Для использования этой опции необходима объектная привилегия SELECT на представление V_$PARAMETER. |
PNO |
Выдает номер текущей страницы результатов. |
REL[EASE] |
Выдает номер версии сервера Oracle, к которой подключена утилита SQL*Plus. |
REPF[OOTER] |
Выдает текущее определение REPFOOTER. |
REPH[EADER] |
Выдает текущее определение REPHEADER. |
SGA |
Выдает информацию об области SGA экземпляра, к которому подключена утилита SQL*Plus.
Для использования опции SGA необходима объектная привилегия SELECT на представление V_$SGA. |
SPOO[L] |
Выдает информацию о том, направляются ли результаты в файл или на принтер. |
SQLCODE |
Выдает код завершения последнего оператора SQL. |
TTI[TLE] |
Выдает текущее определение TTITLE (верхнего колонтитула). |
USER |
Выдает имя текущего пользователя. |
Рассмотрим пример использования ряда опций команды SHOW:
17:21:24 SQL> connect system/manager
Соединено.
17:21:47 SQL> show sga
Total System Global Area 152581388 bytes
Fixed Size 70924 bytes
Variable Size 78741504 bytes
Database Buffers 73691136 bytes
Redo Buffers 77824 bytes
17:21:49 SQL> show sqlcode
sqlcode 0
17:33:36 SQL> select * from emp;
select * from emp
*
ошибка в строке 1:
ORA-00942: таблица или представление пользователя не существует
Затрач.время: 00:00:00.40
17:33:43 SQL> show sqlcode
sqlcode 942
17:33:50 SQL> show spool
spool OFF
17:34:52 SQL> show linesize
linesize 128
17:36:07 SQL> show user
USER имеет значение "SYSTEM"
17:36:10 SQL> show parameters buff
NAME TYPE VALUE
buffer_pool_keep string
buffer_pool_recycle string
db_block_buffers integer 17991
log_buffer integer 32768
use_indirect_data_buffers boolean FALSE
Есть еще несколько полезных команд, не относящихся ни к одной из рассмотренных выше категорий. Вот некоторые из них.
Эта команда выполняет один оператор PL/SQL. Чаще всего, это вызов хранимой процедуры или функции. Команда, по сути, неявно создает анонимный блок, в котором выполняется оператор. Рассмотрим пример:
18:02:02 SQL> set timing off
18:02:36 SQL> set serverout on
18:02:41 SQL> exec ListBlackFridays(sysdate, 3);
13.09.02
13.12.02
13.06.03
Процедура PL/SQL успешно завершена.
Команда PASSWORD позволяет изменить пароль пользователя, не отображая его на экране. Эта команда имеет следующий простой синтаксис:
- <команда PASSWORD> ::=
- PASSW[ORD] [<имя пользователя>]
По умолчанию, изменяется пароль текущего пользователя. Чтобы изменять пароль другого пользователя, необходима соответствующая привилегия:
18:02:49 SQL> set time off
SQL> connect system/manager
Соединено.
SQL> password scott
Изменение пароля для scott
Новый пароль: *****
Повторите новый пароль: *****
SQL> connect scott/tiger
Соединено.
Ряд команд утилиты SQL*Plus предназначен для АБД. По сути, SQL*Plus - полнофункциональное средство администрирования. Доступные в SQL*Plus команды администрирования рассматриваются в данном разделе.
Начиная с Oracle8, утилиту SQL*Plus можно использовать для запуска и остановки базы данных (ранее для этих целей использовались утилиты svrmgrl и SQL*DBA). Запуск базы данных состоит из трех шагов:
- Запуск экземпляра.
Экземпляр - это совокупность фоновых процессов и областей памяти, необходимых для доступа к базе данных Oracle.
- Монтирование базы данных.
При монтировании база данных связывается с запущенным ранее экземпляром.
- Открытие базы данных.
Открытие базы данных делает ее доступной пользователям для обычных операций.
Запуск базы данных в SQL*Plus выполняется командой STARTUP, имеющей следующий синтаксис:
- <команда STARTUP> ::=
- STARTUP [FORCE] [RESTRICT] [PFILE=<имя файла параметров>] <действие запуска>
- <действие запуска> ::=
- MOUNT [<имя базы данных>]
/ OPEN [<опция открытия>][<имя базы данных>]
/ NOMOUNT
- <опция открытия> ::=
- READ ONLY
/ READ WRITE [RECOVER]
/ RECOVER
Все варианты команды STARTUP, так или иначе, запускают экземпляр (выделяется память и запускаются фоновые процессы). Опции команды STARTUP представлены в табл. 17.
Таблица 17. Опции команды STARTUP.
Опция |
Назначение |
FORCE |
Останавливает (с опцией ABORT) и потом перезапускает экземпляр. Это единственная опция команды STARTUP, которую можно применять к работающему экземпляру. Используется при отладке и в экстраординарных ситуациях. |
RESTRICT |
Позволяет подключаться к базе данных после запуска только пользователям, обладающим системной привилегией RESTRICTED SESSION. Это ограничение в дальнейшем можно снять с помощью команды ALTER SYSTEM. |
PFILE |
Задает нестандартный файл параметров инициализации. Если эта опция не указана, используется стандартный файл (в ОС UNIX это обычно $ORACLE_HOME/admin/dbs/init$ORACLE_SID.ora, а в Windows - %ORACLE_HOME%\database\init%ORACLE_SID%.ora). |
MOUNT |
Монтирует указанную (стандартную локальную - значение параметра инициализации DB_NAME) базу данных, но не открывает ее. |
OPEN |
Монтирует и открывает указанную базу данных. |
NOMOUNT |
Экземпляр запускается, но база данных не монтируется. |
RECOVER |
Требует выполнить восстановление носителей, если необходимо, перед запуском экземпляра. Применение этой опции аналогично выполнению команды RECOVER DATABASE с последующим обычным запуском. Так можно выполнять только полное восстановление. |
Эту команду может выполнять только пользователь, подключившийся как SYSOPER или SYSDBA к выделенному серверному процессу. По умолчанию используется опция OPEN. Команда STARTUP OPEN RECOVER монтирует и открывает базу данных, даже если полное восстановление закончилось неудачно.
Команда SHUTDOWN в SQL*Plus останавливает текущий экземпляр Oracle, к которому подключен пользователь, и может при этом закрыть и демонтировать базу данных. Эту команду можно применять только для серверов версии 8 и выше.
Команда SHUTDOWN имеет следующий синтаксис:
- <команда SHUTDOWN> ::=
- SHUTDOWN <режим остановки>
<режим остановки> ::=
- ABORT / IMMEDIATE / NORMAL / TRANSACTIONAL [LOCAL]
Назначение опций команды SHUTDOWN описано в табл. 18:
Таблица 18. Опции команды SHUTDOWN.
Опция |
Назначение |
ABORT |
Выполняет немедленную остановку базы данных, не дожидаясь завершения транзакций и отключения пользователей. Эта опция используется при аварийном завершении одного из фоновых процессов или при невозможности нормальной остановки. При перезапуске потребуется восстановление. |
IMMEDIATE |
Не ждет завершения транзакций (автоматически их откатывает) и отключения пользователей. Новые подключения запрещаются. База данных закрывается и демонтируется, затем останавливается экземпляр. При перезапуске восстановление не потребуется. |
NORMAL |
Ждет отключения всех пользователей от базы данных (новые подключения запрещены). База данных закрывается и демонтируется, затем останавливается экземпляр. При перезапуске восстановление не потребуется.
Эта опция используется по умолчанию. |
TRANSACTIONAL [LOCAL] |
Ждет завершения активных транзакций. При попытке начать новую транзакцию происходит отключение сеанса. После завершения всех активных транзакций все сеансы автоматически отключаются. Затем остановка идет как при вводе опции IMMEDIATE.
Режим LOCAL задает такой режим остановки только для локальных транзакций. Сервер не ждет завершения удаленных транзакций. |
Эту команду может выполнять только пользователь, подключившийся как SYSOPER или SYSDBA к выделенному серверному процессу. По умолчанию используется опция NORMAL.
Каждая база данных Oracle имеет набор из двух или более файлов журнала повторного выполнения, который обобщенно называют просто журналом повторного выполнения . В этот журнал записываются изменения данных, которые используются при восстановлении базы данных после сбоев. Для защиты от сбоя самого журнала сервер Oracle поддерживает его мультиплексирование (поддержку нескольких копий на разных дисках в виде группы ) и архивирование .
Если база данных работает в режиме ARCHIVELOG, выполняется архивирование оперативного логического журнала, что обеспечивает полное восстановление при сбое как экземпляра, так и диска с журналами повторного выполнения, поскольку все изменения данных сохраняются в отдельном, заархивированном журнальном файле.
Для управления режимом архивирования журналов повторного выполнения утилита SQL*Plus предлагает команду ARCHIVE LOG, которая имеет следующий синтаксис:
- <команда ARCHIVE LOG > ::=
- ARCHIVE LOG <команда или журнал> [TO <место назначения>]
- <команда или журнал> ::=
- LIST / STOP / START / NEXT / ALL / <номер журнала>
Эта команда позволяет начать или остановить автоматическое архивирование оперативных файлов журнала повторного выполнения, явно заархивировать указанные по номерам файлы или выдать информацию о них. Опции команды ARCHIVE LOG описаны в табл. 19.
Таблица 19. Опции команды ARCHIVE LOG.
Опция |
Назначение |
LIST |
Выдает информацию о режиме архивирования, каталоге, в котором создаются файлы архива, номерах текущей, последней заархивированной и требующей архивирования группы журналов. Вид выдаваемой информации представлен в примере ниже. |
STOP |
Останавливает автоматическое архивирование. Если экземпляр по- прежнему работает в режиме ARCHIVELOG и все группы журналов повторного выполнения заполнены, работа базы данных приостанавливается, пока файл журнала повторного выполнения не будет заархивирован (например, командами ARCHIVE LOG NEXT или ARCHIVE LOG ALL). |
START |
Включает автоматическое архивирование. Запускает фоновый процесс ARCH, выполняющий автоматическое архивирование при необходимости. Если запускается процесс ARCH и в команде указано имя файла, этот файл становится новым стандартным местом назначения для архива. Процесс ARCH запускается автоматически при запуске экземпляра, если параметр инициализации LOG_ARCHIVE_START имеет значение TRUE. |
NEXT |
Явно архивирует следующую заполненную, но еще не заархивированную оперативную группу файлов журнала повторного выполнения. |
ALL |
Явно архивирует все заполненные, но еще не заархивированные оперативные группы файлов журнала повторного выполнения. |
номер журнала |
Вызывает архивирование любой еще доступной оперативной группы файлов журнала повторного выполнения с указанным номером последовательности. Если такая группа не найдена, выдается сообщение об ошибке. Эта опция позволяет повторно выполнить архивирование группы. |
Если место назначения для архива не указано явно в командной строке, используется параметр инициализации LOG_ARCHIVE_DEST ( стандартное место назначения ). Если новое место назначения указано с опцией START, оно становится стандартным. В остальных случаях туда записываются только соответствующие архивы, инициированные данной командой.
Команду ARCHIVE LOG может выполнять только пользователь, подключившийся как SYSOPER или SYSDBA. Она применяется только к текущему экземпляру. Для управления другими экземплярами и кластером в целом используется SQL-оператор ALTER SYSTEM.
Если все оперативные группы файлов журнала повторного выполнения заполнены и не доступны для повторного использования (т.е. сервер работает в режиме ARCHIVELOG, и они не скопированы) работа базы данных приостанавливается. Явное архивирование решает эту проблему.
Рассмотрим простой пример использования команды ARCHIVE LOG для просмотра информации о текущем состоянии архивирования журналов повторного выполнения:
SQL> archive log list
Режим журнала базы данных Режим архива
Автоматическое архивирование Включено
Место размещения архива g:\oracle\oradata\training
Самая старая последовательность оперативных журналов 745
Следующая последовательность журналов для архивирования 747
Текущая последовательность журналов 747
SQL> archive log 745
ORA-16013: журнал 1 с номером последовательности 745 не требует
архивирования
ORA-00312: оперативный протокол 1 процесса 1:
'G:\ORACLE\ORADATA\TRAINING\REDO01.LOG'
Если база данных работала в режиме ARCHIVELOG, после сбоя носителя ее можно полностью или частично восстановить. Для этого в SQL*Plus предлагается команда RECOVER, имеющая следующий, весьма объемный, синтаксис:
- <команда RECOVER> ::=
- RECOVER <режим восстановления> [<степень параллелизма>]
- <режим восстановления> ::=
- <общее восстановление> / <управляемое восстановление> / END BACKUP
- <общее восстановление> ::=
- [AUTOMATIC] [FROM <местонахождение>] <команда восстановления>
- <команда восстановления> ::=
- <вид восстановления> [TEST ALLOW <целое число> CORRUPTION]
/ CONTINUE [DEFAULT]
/ CANCEL
- <вид восстановления> ::=
- <полное восстановление>
/ <частичное восстановление>
/ LOGFILE <имя файла>
- <полное восстановление> ::=
- [STANDBY] DATABASE { <уровень восстановления >} <уровень восстановления> UNTIL <точка восстановления>
/ USING BACKUP CONTROLFILE
- <точка восстановления> ::=
- CANCEL / TIME <дата> / CHANGE <целое число>
- <частичное восстановление> ::=
- <табличные пространства или файлы данных>
/ STANDBY <табличные пространства или файлы данных>
UNTIL [CONSISTENT] [WITH] CONTROLFILE
- <табличные пространства или файлы данных> ::=
- TABLESPACE <табличное пространство>{, <табличное пространство>}
/ DATAFILE <файл данных>{, <файл данных>}
- <управляемое восстановление> ::=
- MANAGED STANDBY DATABASE <опция управляемого восстановления>
- <опция управляемого восстановления> ::=
- NODELAY
/ [TIMEOUT] <целое число>
/ CANCEL [IMMEDIATE] [NOWAIT]
/ DISCONNECT [FROM SESSION] [FINISH [NOWAIT]]
- <степень параллелизма> ::=
- PARALLEL [<целое число>] / NOPARALLEL
Опции команды RECOVER кратко описаны в табл. 20.
Таблица 20. Опции команды RECOVER.
Опция |
Назначение |
AUTOMATIC |
Автоматически генерирует имя архивного файла журнала повторного выполнения, необходимого для продолжения операции восстановления. Для этого используются значения параметров конфигурации LOG_ARCHIVE_DEST и LOG_ARCHIVE_FORMAT (или соответствующие стандартные значения). Если файл с таким именем не найден, SQL*Plus запрашивает имя файла, выводя автоматически сгенерированное в качестве подсказки. Имя запрашивается также, если не указана ни опция AUTOMATIC, ни опция LOGFILE. Если заранее известно, что архивирование выполнялось в файл с нестандартным именем, имеет смысл сразу указать опцию LOGFILE. |
FROM <местонахождение> |
Задает местонахождение архивных файлов журнала повторного выполнения. По умолчанию используется значение параметра инициализации LOG_ARCHIVE_DEST. Можно также задать местонахождение архивных файлов с помощью команды SQL*Plus SET LOGSOURCE. |
LOGFILE |
Продолжает восстановление носителей, применяя указанный файл журнала повторного выполнения. При восстановлении в интерактивном режиме (AUTORECOVERY OFF), запрашивает новое имя файла, если указанный файл журнала не найден. |
TEST ALLOW <целое число> CORRUPTION |
В случае повреждения файла журнала указывает, при скольких поврежденных блоках еще можно продолжать восстановление. В ходе обычного восстановления это значение не должно быть более 1. |
CONTINUE |
Продолжает восстановление нескольких экземпляров после прерывания для отключения восстановления одного из них. |
CONTINUE DEFAULT |
Продолжает восстановление, используя автоматически сгенерированное имя архивного файла журнала повторного выполнения, если оно не указано явно. Аналогично опции AUTOMATIC, но не запрашивает альтернативное имя файла, если файл не найден. |
CANCEL |
Прерывает восстановление, ведущееся до CANCEL (см. опцию UNTIL CANCEL). |
STANDBY DATABASE |
Восстанавливает резервную базу данных, используя управляющий файл и архивные файлы журнала повторного выполнения основной базы данных. Резервная база данных должна быть смонтирована, но не открыта. |
DATABASE |
Восстанавливает всю базу данных в целом. |
UNTIL CANCEL |
Задает неполное восстановление, до прерывания администратором. Необходимо указать или подтвердить автоматически сгенерированные имена файлов журналов повторного выполнения. Восстановление завершится, если указать CANCEL вместо очередного имени файла. |
UNTIL TIME |
Задает неполное восстановление до момента времени. Момент времени указывается в одиночных кавычках по формату 'YYYY-MM-DD:HH24:MI:SS'. |
UNTIL CHANGE |
Задает неполное восстановление до указанного по номеру изменения (SCN), не включая его. |
USING BACKUP CONTROLFILE |
Указывает, что вместо текущего управляющего файла должна использоваться его резервная копия. |
TABLESPACE |
Восстанавливает указанные табличные пространства текущей базы данных (до 16). |
DATAFILE |
Восстанавливает любое количество указанных файлов данных. |
STANDBY TABLESPACE |
Реконструирует потерянное или поврежденное табличное пространство на резервной базе данных, используя архивные файлы журнала повторного выполнения и управляющий файл основной базы данных. |
STANDBY DATAFILE |
Реконструирует потерянный или поврежденный файл данных на резервной базе данных, используя архивные файлы журнала повторного выполнения и управляющий файл основной базы данных. |
UNTIL CONSISTENT WITH CONTROLFILE |
Указывает, что восстановление старого табличного пространства или файла данных использует текущий управляющий файл резервной базы данных. |
MANAGED STANDBY DATABASE |
Задает режим устойчивого восстановления резервной базы данных. В этом режиме предполагается, что резервная база данных является активным компонентом. В таком режиме можно восстанавливать только носители. |
NODELAY |
Немедленно применяет отложенный архивный журнал к резервной базе данных, независимо от установки параметра DELAY в параметре инициализации LOG_ARCHIVE_DEST_n в основной базе данных. |
TIMEOUT |
Задает период ожидания (в минутах) для операции устойчивого восстановления. Если за это время не станет доступным архивный журнал повторного выполнения, процесс восстановления завершается с ошибкой. Если эта конструкция не указана, резервная база данных остается в состоянии ожидания восстановления, пока не будет повторно выполнена команда RECOVER с конструкцией CANCEL или пока не произойдет остановка или сбой экземпляра. |
CANCEL |
При управляемом восстановлении конструкция CANCEL прерывает восстановление резервной базы данных после применения текущего архивного файла повторного выполнения. Приглашение SQL*Plus снова появится после остановки процесса восстановления. |
CANCEL IMMEDIATE |
Прерывает управляемое восстановление резервной базы данных после применения текущего архивного файла повторного выполнения или после прочтения следующего, в зависимости от того, какое событие произойдет раньше. Приглашение SQL*Plus снова появится после остановки процесса восстановления. Команду RECOVER CANCEL IMMEDIATE нельзя выполнять из того же сеанса, из которого была выполнена команда RECOVER MANAGED STANDBY DATABASE. |
CANCEL NOWAIT |
Прерывает управляемое восстановление резервной базы данных после прочтения следующего файла журнала повторного выполнения и выдает приглашение SQL*Plus. |
DISCONNECT FROM SESSION |
Указывает, что в ходе управляемого восстановления архивные файлы повторного выполнения должны применяться отдельным фоновым процессом, не блокирующим текущий сеанс. |
FINISH |
Немедленно восстанавливает резервные файлы текущего журнала повторного выполнения резервной базы данных. Используется при сбое основной базы данных. |
NOWAIT |
Возвращает управление немедленно, не дожидаясь завершения процесса восстановления. |
Для выполнения команды RECOVER необходимо обладать ролью SYSDBA и подключиться через выделенный серверный процесс.
Чтобы можно было выполнить восстановление носителей для всей базы данных в целом (для всех табличных пространств), база данных должна быть смонтирована, но закрыта, а все требующие восстановления табличные пространства должны быть включены (online). Для восстановления же отдельного табличного пространства база данных должна быть смонтирована и открыта, а само табличное пространство отключено. Для восстановления файла данных, база данных может оставаться открытой и смонтированной, а поврежденные файлы - отключены (если только они не входят в табличное пространство SYSTEM).
Рассмотрим простой пример остановки, запуска и восстановления носителя из SQL*Plus:
SQL> connect system/manager as sysdba
Соединено.
SQL> shutdown
База данных закрыта.
База данных размонтирована.
Экземпляр ORACLE завершен.
SQL> startup mount
Экземпляр ORACLE запущен.
Total System Global Area 152581388 bytes
Fixed Size 70924 bytes
Variable Size 78741504 bytes
Database Buffers 73691136 bytes
Redo Buffers 77824 bytes
База данных смонтирована.
SQL> recover database until time '2001-12-09:00:00:00'
Восстановление носителя завершено.
SQL> alter database open;