Введение в Oracle 10g. Часть 2

Олег Зайцев

Введение

Учетные записи SYS и SYSTEM

   Стандартные роли

Работа с базой данных: первые шаги

 

Введение

В предыдущей части мы рассмотрели установку Oracle 10g XE, а теперь речь пойдет о резервном копировании и восстановлении, основных учетных записях и ролях базы.

Резервное копирование и восстановление

Операции резервного копирования и восстановления в Oracle можно разделить на три вида:

  • логическое резервное копирование — производится при помощи входящей в состав Oracle утилиты exp, которая позволяет экспортировать всю базу, заданные схемы или таблицы. В случае экспорта всей базы выполняется так называемый полный экспорт (при этом экспортируются все таблицы базы данных) или инкрементный (выгружаются таблицы, изменившиеся с момента последнего экспорта). Для Oracle 10g XE, в котором объем базы не превышает 4 Гбайт, можно пользоваться полным экспортом;
  • физическое резервное копирование — выполняется после остановки базы и предполагает копирование файлов данных, управляющих файлов, оперативных журналов повтора и файла init.ora с настройками базы;
  • оперативное резервное копирование — осуществляется в базе, функционирующей в режиме ARCHIVELOG. В этом режиме производится архивация оперативных журналов повтора и ведется журнал всех транзакций.

Для небольших учебных баз данных наиболее простым и надежным является полное логическое резервное копирование и физическое резервное копирование. Логическое резервное копирование выполняется при помощи утилиты exp.exe, размещенной в папке oraclexe\app\oracle\product\10.2.0\server\BIN\. Утилита является консольным приложением, получающим параметры через командную строку. Поскольку параметров обычно бывает много (5-10 штук), удобно создать профиль с параметрами и затем передать его утилите экспорта при помощи параметра parfile.

Рассмотрим пример типовых профилей. Для начала решим наиболее распространенную задачу — создание резервной копии одной или нескольких схем. В качестве примера рассмотрим копирование схемы SCOTT с учебным примером. Для этого создадим текстовый файл exp_scott.prm, содержащий следующие строки:

USERID = имя/пароль

LOG = ora10scott.log

FILE = ora10scott.dmp

OWNER= SCOTT

Затем произведем экспорт, выполнив команду exp parfile=exp_scatt.prm, в результате чего будет создан файл ora10scott.dmp, содержащий резервную копию схемы SCOTT. Этот файл имеет бинарный формат и очень хорошо сжимается любым архиватором, поэтому для автоматизации процедуры резервного копирования удобно создать BAT-файл, содержащий команду экспорта и вызов архиватора для сжатия полученного дампа.

В нашем случае параметр USERID содержит имя и пароль для доступа к базе данных, параметр LOG задает имя файла, в который записывается протокол работы, параметр FILE задает имя файла резервной копии, OWNER — одна или несколько экспортируемых схем (если указывается несколько схем, то они перечисляются через запятую).

Для выполнения полного экспорта профиль немного изменится:

USERID = имя/пароль

LOG = ora10full.log

FILE = ora10 full.dmp

FULL = Y

Важным моментом является то, что экспорт конкретной схемы можно выполнять от имени ее владельца, но для полного экспорта необходимо обладать ролью DBA, в противном случае попытка полного экспорта завершится ошибкой EXP-00023 с сообщением «Must be a DBA to do Full Database or Tablespace export». Размер дампа в случае полного экспорта пустой базы Oracle 10g XE составляет 43 Мбайт (9 Мбайт после сжатия WinRar). Настоятельно рекомендуется выполнять периодическое резервное копирование даже на учебной базе — известны десятки и сотни случаев, когда в ходе изучения Oracle происходит повреждение базы, удаление пользователя или иная операция, приводящая к потере созданных объектов. Проще всего создавать резервную копию после каждого сеанса работы. Для упрощения этой операции можно применить BAT-файл следующего вида:

del ora10scott.dmp

del ora10scott.log

exp parfile=exp_scott_d.prm

"C:\Program Files\WinRAR\WinRAR.exe" a -agDDMMYYYY -m5 ora10g- ora10scott.dmp ora10scott.log

del ora10scott.dmp

del ora10scott.log

В данном случае параметры экспорта содержатся в файле exp_scott_d.prm. После выполнения резервного копирования производится архивация дампа и протокола экспорта, причем в имени архива содержится дата его создания. Размер архива определяется количеством объектов и объемом данных в таблицах; для учебной схемы SCOTT-архив с резервной копией имеет размер 2 Кбайт.

Логический импорт является зеркальной операцией по отношению к экспорту и выполняется при помощи утилиты IMP. В ходе импорта необязательно импортировать всю имеющуюся в дампе информацию — можно произвести импорт заданных схем или таблиц. Параметры утилиты IMP удобно размещать в профилях, например для импорта схемы SCOTT можно применить профиль следующего вида:

USERID = scott/tiger

LOG = ora10scottimp.log

FILE = ora10scott.dmp

ROWS = Y

GRANTS = Y

INDEXES = Y

FROMUSER= SCOTT

TOUSER= SCOTT

Параметр FROMUSER указывает, из каких учетных записей в дампе берется информация, а TOUSER — в какие учетные записи она импортируется. Это очень удобная возможность утилиты импорта, так как она позволяет импортировать данные одной схемы в другую.

Параметры ROWS (строки таблиц), GRANTS (полномочия на объекты), INDEXES (индексы) указывают, какие типы объектов импортируются.

Рассмотрим несколько типичных ситуаций, встречающихся на практике:

  • необходимо импортировать таблицы, но не требуется загружать в них данные — в этом случае следует задать параметр ROWS=N;
  • необходимо импортировать объекты учетной записи SCOTT в учетную запись SCOTT1. В этом случае следует задать параметры FROMUSER=SCOTT и TOUSER= SCOTT1;

Перед импортом необходимо удалить все объекты из схемы, иначе в процессе импорта будут выдаваться ошибки IMP-00015 для каждой импортируемой таблицы (импорт данных в этом случае не производится). Если по каким-либо причинам необходимо загрузить данные в существующую таблицу, то можно применить параметр IGNORE=Y, что приведет к игнорированию ошибок при создании объектов и к продолжению импорта данных. Однако в случае применения параметра IGNORE=Y необходимо учитывать, что в таблицах без первичного ключа может возникнуть удвоение записей (так как каждая операция импорта загружает новые данные, а старые при этом не уничтожаются).

У IMP есть одна интересная функция — вместо выполнения команд в базе данных эта утилита выводит их в протокол, генерируя тем самым скрипты, содержащие DML-операторы. Для включения этой функции необходимо указать параметр SHOW=Y.

В начало В начало

Учетные записи SYS и SYSTEM

Каждая база Oracle с момента своего создания содержит две схемы (следует отметить, что термины «учетная запись», «схема» и «пользователь» обозначают в Oracle одно и то же) — SYS и SYSTEM. Схема SYS содержит все системные объекты — внутренние таблицы базы данных, пакеты, процедуры. Кроме того, пользователь SYS является владельцем словаря данных. Словарь данных Oracle — это совокупность таблиц и представлений, позволяющих получить любую информацию о структуре базы данных, о ее настройках и состоянии при помощи стандартных SQL-запросов. Учетная запись SYS является также учетной записью администратора базы данных с неограниченными полномочиями. Учетная запись SYSTEM предоставляет доступ ко всем объектам базы и наделена ролью DBA. При работе с учетными записями SYS и SYSTEM необходимо соблюдать ряд правил:

  • разработка в базе данных не должна вестись от имени пользователей SYS и SYSTEM;
  • нельзя удалять или изменять системные объекты, размещенные в этих схемах, — подобные действия могут привести к непредсказуемым последствиям;
  • у учетных записей SYS и SYSTEM должны быть заданы сложны устойчивые к подбору пароли длиной не менее 6-8 символов. В случае необходимости можно вообще запретить регистрацию пользователей под учетными записями SYS и SYSTEM.

Стандартные роли

Роли в Oracle — это именованные группы привилегий. После создания базы данных в ней создается несколько стандартных ролей:

  • роль CONNECT — содержит только одну привилегию CREATE SESSION, позволяющую создавать соединение с базой;
  • роль DBA — полный набор привилегий, необходимых администратору базы;
  • роль RESOURCE — базовый набор привилегий, необходимых разработчику;
  • роль DELETE_CATALOG_ROLE — привилегии для удаления информации из таблицы аудита;
  • роль SELECT_CATALOG_ROLE — привилегии для чтения информации из таблиц аудита;
  • роль EXP_FULL_DATABASE — необходима пользователю, из-под учетной записи которого будет производиться полный экспорт базы;
  • роль IMP_FULL_DATABASE — необходима пользователю, из-под учетной записи которого будет производиться полный импорт базы.
В начало В начало

Работа с базой данных: первые шаги

Итак, мы рассмотрели основные вопросы, связанные с резервным копированием и восстановлением. Теперь перейдем непосредственно к изучению возможностей Oracle. Начнем с языка запросов Oracle SQL. Язык запросов содержит операторы двух типов:

  • DML — язык манипулирования данными (команды SELECT, INSERT, UPDATE и DELETE);
  • DDL — язык определения данных. Позволяет создавать, изменять и удалять объекты, изменять настройки базы данных.

В некоторых классификациях операторов SQL выделяют также подмножество операторов DCL — это категория SQL-операторов, управляющих доступом к данным и базе данных. В частности, к этой категории относятся операторы GRANT (выдача привилегий на некоторый объект) и REVOKE (аннулирование ранее выданных привилегий).

Начнем рассмотрение Oracle SQL с оператора SELECT, предназначенного для извлечения данных из базы. Базовый синтаксис оператора SELECT имеет вид:

SELECT список столбцов через запятую

FROM список таблиц через запятую

[WHERE условия]

[HAVING условия]

[GROUP BY группировка]

[ORDER BY сортировка]

Вместо списка столбцов допускается использование символа «*», который рассматривается как «все столбцы всех перечисленных в FROM таблиц».

Рассмотрим простейший запрос

SELECT *

FROM SCOTT.EMP

Данный запрос извлекает всю информацию из таблицы EMP. При использовании «*» следует учитывать ряд факторов:

  • порядок следования столбцов при применении «*» не гарантируется. Следовательно, если использование конкретного списка столбцов по какой-либо причине недопустимо, то необходимо обращаться к возвращаемым столбцам по именам, а не по индексу. Это распространенная ошибка, поскольку, как правило, столбцы возвращаются в порядке их следования в таблице и любая реорганизация таблицы может привести к возникновению трудно диагностируемых ошибок;
  • во многих случаях клиентское приложение применяет только часть имеющихся в таблице столбцов. Если вместо перечисления необходимых столбцов указать «*», то на клиентскую сторону будут передаваться неиспользуемые данные, что приведет к избыточной нагрузке на сеть и, как следствие, к снижению производительности;
  • в случае извлечения информации из двух и более таблиц может оказаться, что в таблицах существуют столбцы с одинаковыми именами. В этом случае возникнет ошибка «ORA-00918 column ambiguously defined» и запрос не выполнится. Это один из подводных камней, с которыми сталкиваются начинающие разработчики, — запрос может работать во время отладки, а затем через некоторое время производится модификация базы, что приводит к появлению в применяемых запросом таблицах столбцов с одинаковыми именами, в результате чего запрос перестает работать.

В некоторых случаях может потребоваться вернуть при помощи запроса результат работы некоторой хранимой функции или результат вычисления. В этом случае можно использовать специальную системную таблицу DUAL, доступную всем пользователям и всегда содержащую единственный столбец с именем DUMMY и типом VARCHAR2(1) и единственную строку. Пример запроса, производящего вычисления и применяющего таблицу DUAL:

SELECT 4 + 5*20

FROM DUAL

В качестве другого примера с использованием таблицы DUAL можно рассмотреть вызов функции SYSDATE, возвращающей текущую дату:

SELECT SYSDATE

FROM DUAL

КомпьютерПресс 5'2006