Утилита SQL*Plus. Создание и выполнение сценариев. Часть IV

Источник: ln

Команда SHOW

Команда 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

Другие полезные команды

Есть еще несколько полезных команд, не относящихся ни к одной из рассмотренных выше категорий. Вот некоторые из них.

Команда EXECUTE

Эта команда выполняет один оператор 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 позволяет изменить пароль пользователя, не отображая его на экране. Эта команда имеет следующий простой синтаксис:

<команда 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). Запуск базы данных состоит из трех шагов:

  1. Запуск экземпляра.

    Экземпляр - это совокупность фоновых процессов и областей памяти, необходимых для доступа к базе данных Oracle.

  2. Монтирование базы данных.

    При монтировании база данных связывается с запущенным ранее экземпляром.

  3. Открытие базы данных.

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

Запуск базы данных в 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;

Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=23411