Подключаться и работать с базами данных Oracle можно многими способами.Однако чаще всего для этого применяется предлагаемый в Oracle интерфейс и набор команд SQL*Plus. Интерфейс SQL*Plus, по сути, открывает окно в базу данных Oracle и потому очень широко используется разработчиками Oracle для создания программных единиц SQL и PL/SQL. Для администраторов баз данных Oracle этот интерфейс тоже является очень ценным инструментом по следующим причинам.
- Он позволяет выполнять запросы на языке SQL и блоки кода на языке PL/SQL (который представляет собой предлагаемую в Oracle расширенную процедурную версию языка SQL) и получать результаты.
- Он позволяет выполнять команды, связанные с администрированием баз данных,и автоматизировать их.
- Он позволяет запускать и завершать работу базы данных.
- Он предоставляет удобный способ для создания отчетов по администрированию баз данных.
В этой статье я начинаю рассказывать о том, как использовать SQL*Plus для выполнения типичных задач по администрированию баз данных Oracle, о важных командах SQL*Plus, а также, вкратце, о том, как с помощью SQL*Plus создавать отчеты. Возможно, применять интерфейс SQL*Plus для создания большинства отчетов и не придется, но знать,как работают его многочисленные средства для генерации отчетов, совершенно не помешает.
Запуск сеанса SQL*Plus
Интерфейс SQL*Plus представляет собой утилиту, которая чаще всего применяется для подключения и работы с базами данных Oracle. Он поставляется в составе как серверного программного обеспечения Oracle Database 11g, так и клиентского программного обеспечения Oracle Client, а также нового программного обеспечения Oracle Instant Client.
После установки SQL*Plus на сервере или клиентской машине процесс подключения к серверу или клиенту и запуска сеанса SQL*Plus выглядит очень просто. Из-за того, что каждый сеанс SQL*Plus подразумевает установку соединения с базой данных (если только не применяется параметр /NOLOG), все, что требуется для запуска SQL*Plus и подключения к базе данных — это действительное имя пользователя и пароль.
Настройка среды
Перед вызовом SQL*Plus потребуется сначала правильно настроить среду Oracle.В частности, необходимо установить значения для таких переменных среды, как ORACLE_SID, ORACLE_HOME и LD_LIBRARY_PATH. Помимо этого иногда нужно установить значения и для таких переменных среды, как NLS_LANG и ORA_NLS11.
В случае не установки правильных значений для необходимых переменных среды будет возникать ошибка. Например, не установка надлежащего значения для переменной ORACLE_HOME перед запуском SQL*Plus будет приводить к появлению следующей ошибки:
$ sqlplus Error 6 initializing SQL*Plus Message file sp1.msb not found SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory Ошибка 6 при инициализации SQL*Plus Не удалось обнаружить файл sp1.msb SP2-0750: Возможно, требуется указать в ORACLE_HOME каталог, в котором установлено программное обеспечение Oracle
В случае получения показной выше ошибки достаточно установить значение для переменной среды ORACLE_HOME:
$ export ORACLE_HOME= /u01/app/oracle/product/11.1.0/db_1
Программное обеспечение SQL*Plus Instant Client
Для использования SQL*Plus инсталлировать полностью все серверное программное обеспечение Oracle Database вовсе не обязательно. Если нужно взаимодействовать через интерфейс SQL*Plus с базой данных, которая находится на другом сервере,вполне хватит и программного обеспечения SQL*Plus Instant Client. С помощью этого программного обеспечения к любой базе данных Oracle, функционирующей под управлением любой операционной системы, можно подключаться удаленным образом за счет указания ее имени и применения идентификатора сетевого подключения Oracle.Единственным требованием для подключения к удаленной базе данных подобным образом является указание имени удаленной базы данных в файле tnsnames.ora. Именно поэтому для SQL*Plus Instant Client требуется задавать переменную среды ORACLE_HOME.Существует также метод, который не требует применения на клиентском сервере файла tnsnames.ora. Называется он методом простого подключения (easy connect). Ниже приведен пример, показывающий, как с помощью идентификатора простого подключения установить от имени пользователя OE подключение к базе данных testdb, расположенной на сервере myserver:
$ sqlplus oe/oe@//myserver.mydomain:1521/testdb
В этом примере 1521 — это порт, используемый слушателем для получения запросов на установку подключения.
Запуск сеанса SQL*Plus из командной строки
Прежде чем подключаться к сеансу SQL*Plus, необходимо сначала правильно настроить среду и указать, с какой базой данных на сервере должно устанавливаться соединение по умолчанию. Делается это с помощью переменной среды ORACLE_SID.
Например:
$ ORACLE_SID=orcl $ export ORACLE_SID
После указания базы данных, которая должна использоваться по умолчанию (в приведенном примере это orcl) в переменной среды ORACLE_SID, можно получать доступ к SQL*Plus из приглашения командной строки, просто вводя команду sqlplus безо имени пользователя и пароля. SQL*Plus предложит ввести имя пользователя и пароль. В случае предоставления имени пользователя вместе с командой (например: sqlplus salapati),SQL*Plus будет приглашать ввести только пароль. Администратор баз данных должен входить от имени одной из административных учетных записей.
На заметку! На серверах UNIX ввод должен обязательно выполняться в нижнем регистре. В Windows интерфейс не чувствителен к регистру символов. За исключением этой небольшой детали, во всем остальном командный интерфейс SQL*Plus работает одинаково и на платформе Windows, и на всех вариантах платформ UNIX и Linux.
Разумеется, вводить имя пользователя и пароль можно и непосредственно при вызове SQL*Plus, но тогда пароль будет виден другим при его вводе. Ниже приведен пример:
$ sqlplus salapati/sammyy1 SQL>
Приглашение SQL (SQL>) означает, что соединение с SQL*Plus инициировано, и можно начинать вводить команды и операторы SQL, PL/SQL и SQL*Plus.
Для того чтобы подключиться к другой базе данных, а не той, что установлена по умолчанию, нужно использовать следующую команду:
$ sqlplus имя_пользователя@идентификатор_подключения
Определенные операции, например запуск и завершение работы, разрешено выполнять только в случае подключения к SQL*Plus с привилегиями SYSDBA или SYSOPER. При наличии привилегий SYSDBA (или SYSOPER) подключаться к SQL*Plus можно следующим образом:
$ sqlplus sys/sammyy1 AS SYSDBA SQL> SHO USER USER is "SYS" SQL>
Конструкция AS позволяет устанавливать привилегированные подключения пользователям, которым были выданы системные привилегии SYSDBA или SYSOPER.
Если в базе данных была создана учетная запись аутентифицированного пользователя операционной системы (ранее называвшаяся OPS$имя; см. главу 12), устанавливать подключение можно и просто указанием символа косой черты (/), как показано ниже:
$ sqlplus / SQL> SHO USER USER is "OPS$ORACLE" SQL>
Можно также подключаться через метод аутентификации операционной системы, за счет включения владельца программного обеспечения Oracle в группу администраторов баз данных (DBA):
$ sqlplus / AS SYSDBA SQL> SHO USER USER is "SYS" SQL>
Обратите внимание, что во всех предыдущих примерах имя базы данных при подключении через SLQ*Plus не указывалось. Объясняется это тем, что подключение устанавливалось к принятому по умолчанию экземпляру, т.е. к базе данных, на которую указывает значение переменной среды ORACLE_SID. Указывать имя базы данных при использовании SQL*Plus для подключения к принятой по умолчанию базе данных не обязательно. Для подключения к другой базе данных, доступной по сети, нужно обязательно использовать идентификатор подключения (имя сетевой службы).
На заметку! Имя экземпляра, имя базы данных и имя службы могут как совпадать, так и отличаться.
С теоретической точки зрения, подключаться к базе данных можно с использованием полного синтаксиса идентификатора подключения, как показано в следующем примере, где для подключения к базе данных orcl применяется весь адрес целиком:
$ sqlplus salapati/sammyy1@(DESCRIPTION = (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521) (CONNECT_DATA= (SERVICE_NAME=orcl.mycompany.com)))
Однако за счет использования имени сетевой службы, определенного в сетевом файле tnsnames.ora, можно подключаться к базе данных более простым образом:
$ sqlplus salapati/sammyy1@orcl
Кроме того, для подключения к базе данных можно применять простой метод подключения. Синтаксис простого метода подключения выглядит так:
$ [//]хост[:порт][/[имя_службы]]
Например, вот как подключиться с помощью этого метода к базе данных orcl:
$ sqlplus hr/hr_passwd@sales-server:1521/orcl.mycompany.com
Обратите внимание, что в случае применения простого метода подключения сетевой файл (tnsnames.ora) не нужен.
Какой бы из перечисленных методов не использовался, в конечном итоге будет обязательно успешно устанавливаться сеанс SQL*Plus либо с базой данных по умолчанию,либо с той, что была указана в идентификаторе подключения.
Установка подключения с помощью команды CONNECT
В SQL*Plus поддерживается команда CONNECT, которая позволяет после входа в SQL*Plus выполнять подключение от имени другого пользователя. Кроме того, она позволяет после подключения к одной базе данных подключаться к другой базе данных.Ниже приведен пример использования команды CONNECT для выполнения подключения от имени другого пользователя:
SQL> CONNECT новый_пользователь/пароль Connected. SQL>
Следующий пример демонстрирует, как в SQL*Plus подключаться к другой базе данных за счет предоставления идентификатора подключения в виде части команды CONNECT:
SQL> CONNECT salapati/sammyy1@orcl Connected. SQL>
Перед подключением к другой базе данных необходимо проверять, что в файле tnsnames.ora присутствует необходимая информация о подключении к удаленной базе данных.
Команду CONNECT можно использовать в SQL*Plus вместе с синтаксисом / AS SYSDBA и / AS SYSOPER, как показано ниже:
CONNECT sys/sammy1@prod1 as sysdba CONNECT / AS SYSDBA CONNECT пользователь/пароль AS SYSDBA CONNECT / AS SYSOPER CONNECT пользователь/пароль AS SYSOPER
Запуск сеанса SQL*Plus без установки подключения к базе данных с помощью параметра /NOLOG
Сеанс SQL*Plus можно также запускать и без установки подключения к базе данных,счет указав вместе с командой sqlplus параметр /NOLOG. В подобном может возникать необходимость, например, при запуске базе данных или просто для использования доступных в SQL*Plus команд для записи или редактирования сценариев. После запуска сеанса SQL*Plus для подключения к базе данных всегда можно применить команду CONNECT.
Ниже приведен пример использования параметра /NOLOG:
$ sqlplus /NOLOG SQL*Plus: Release 11.1.0.6.0 - Production on Wed Jan 2 18:35:25 2008 Copyright (c) 1982, 2007, Oracle. All rights reserved. SQL> SHO USER USER is " " SQL> SHO SGA SP2-0640: Not connected SQL> CONNECT salapati/sammyy1 Connected. SQL>
Подключение к SQL*Plus через графический интерфейс Windows
В случае использования графического интерфейса SQL*Plus на машине Windows для запуска сеанса SQL*Plus достаточно щелкнуть на пиктограмме SQL*Plus и на экране появится приглашение ввести имя пользователя. При условии, что соединение с базой данных устанавливается через соответствующие сущности в файле tnsnames.ora , после ввода имени пользователя можно приступать к работе с интерфейсом SQL*Plus.
Работать с утилитой SQL*Plus можно как в ручном, так и в сценарном не интерактивном режиме. Само собой разумеется, что уязвимые административные задачи, вроде восстановления базы данных, лучше выполнять в интерактивном режиме. Что же касается рутинных операций по обработке SQL, то их выполнение лучше автоматизировать с помощью сценариев. И в том и в другой случае сами команды будут выглядеть одинаково — отличаться будет лишь режим, в котором они будут выполняться.
Ниже показан синтаксис команды подключения к SQL*Plus:
CONN[ECT] [{ регистрационное_имя | / } [AS {SYSOPER | SYSDBA | SYSASM}]]
На заметку! В Oracle Database 11g команда SQLPLUS поддерживает новый аргумент -F, позволяющий SQL*Plus получать от базы данных RAC события FAN (Fast Application Notification — быстрое уведомление приложений).
Подключаться от имени пользователя с привилегиями SYSOPER, SYSDBA или SYSASM необходимо для выполнения привилегированных операций, вроде завершения работы и запуска базы данных или резервного копирования либо восстановления базы данных.Привилегия SYSAM является новой в Oracle Database 11g и предназначена для разделения обычных операций по администрированию баз данных и операций автоматического управления памятью (Automatic Storage Management — ASM).
Работа в SQL*Plus
После подключения к интерфейсу SQL*Plus можно начинать вводить в нем любые команды SQL*Plus, SQL или PL/SQL. Как будет объясняться позже в этой главе, операторы SQL оканчиваются либо символом точки с запятой (;), либо символом косой черты (/), а блоки кода PL/SQL — только символом косой черты (/). Вывод можно как просматривать на экране, так и при желании записывать в файл. Команды SQL*Plus всегда оканчиваются символов новой строки. При вводе команды SQL*Plus клиентская программа SQL*Plus анализирует ее, и если та представляет собой оператор SQL или PL/SQL, отправляет ее серверу баз данных для обработки.
В качестве символа продолжения можно использовать дефис (-), хотя при окончании первой строки применять символ продолжения вовсе не обязательно. В каждой строке SQL можно вводить любое количество символов или слов и затем просто нажимать клавишу <Enter> для продолжения на следующей строке. SQL*Plus будет автоматически добавлять перед каждой строкой ее номер.В некоторых случаях, однако, символ продолжения (-) оказывается полезным, как в следующем примере, где требуется ввести SQL-оператор SELECT 200 - 100 FROM dual:
SQL> SELECT 200 - > 100 from dual; select 200 100 from dual * ERROR at line 1: ORA-00923: FROM keyword not found where expected Не удалось обнаружить ключевое слово FROM там, где оно ожидалось SQL>
В этом примере из-за перехода на вторую строку после дефиса (-), который еще так же является и знаком минус, утилита SQL*Plus автоматически интерпретировала его как символ продолжения и выдала ошибку, потому что оператор получился синтаксически некорректным (select 200 100 from dual). Избежать этой проблемы можно за счет использования в конце первой строки второго дефиса (знака минус) для выполнения роли символа продолжения:
SQL> SELECT 200 - - > 100 FROM dual; 200-100 ---------- 100 SQL>
В Oracle для выполнения определенных запросов необходимо использовать таблицу DUAL, поскольку в поддерживаемом Oracle синтаксисе SQL наличие конструкции FROM в операторе SELECT является обязательным (например, SELECT sysdate FROM dual;).В базах данных Microsoft SQL Server, с другой стороны, использовать таблицу DUAL не требуется, потому что в синтаксисе SQL Server допускается применение операторов SELECT без конструкции FROM.
Завершение сеанса SQL*Plus
Завершается сеанс SQL*Plus вводом команды EXIT, причем как в нижнем, так и в верхнем регистре. С помощью команды QUIT осуществляется выход в операционную систему (регистр символов тоже роли не играет).
Внимание! В случае выполнения аккуратного выхода из SQL*Plus по команде EXIT (или QUIT) будет немедленно происходить фиксация всех транзакций. Если не нужно, чтобы происходила фиксация транзакций, перед выходом потребуется выполнить команду rollback.