Прохождение оператора SQL через архитектуру


Поддержка национальных языков

Средство поддержки национальных языков Oracle (National Language Support — NLS) позволяет пользователям использовать базу данных на их собственных языках. Это средство обеспечивает следующие функции:

1) Поддержка различных схем кодирования, т.е. данные, созданные в схеме кодирования на одной машине, могут быть обработаны и представлены на другой. Для этого определяется символьный набор, который будет использоваться для хранения данных в базе данных, как часть оператора CREATE DATABASE.

2) Управление языком вывода ошибок сервера и информационных сообщений, чисел; дат, форматов, валюты и начального дня недели.

3) Поддержка лингвистической сортировки гарантирует, что символы появляются в корректном порядке.

4) Определение языка NLS осуществляется как для базы данных в целом, так и на уровне сеанса. Изменяя параметры сеанса, но не внося изменений в учетный раздел пользователя Oracle, можно выполнять одни сеансы на английском языке, другие на немецком и т.д., если одно имя пользователя Oracle соединено с базой данных через несколько различных сеансов.

 

Здесь показано как соединяются основные части архитектуры Oracle и отслежены этапы выполнения типичного оператора SQL. Для простоты будем говорить об Oracle SQL*Plus и машине сервера базы данных на платформе UNIX без какой-либо сети. Пусть экземпляр Oracle только что запущен в однозадачной конфигурации.

Алгоритм выполнения оператора SQL:

1) Пользователь запускает инструмент SQL*Plus и вводит имя пользователя Oracle и пароль.

2) Oracle подтверждает имя пользователя и пароль, сверившись со словарем данных, и посылает ответ пользовательскому процессу для подтверждения соединения.

3) Пользователь вводит оператор SELECT.

4) Oracle должен произвести разбор SELECT прежде, чем выполнить его, поэтому вызывается синтаксический анализатор и оптимизатор Oracle. Если бы какой-либо пользователь ранее уже ввел точно такой же оператор, "разобранная" версия могла бы находиться в области разделяемого пула в памяти. Oracle в этом случае использует результаты разбора, так что для данного оператора никакой дополнительный анализ не выполняется.

5) Чтобы транслировать оператор SELECT, Oracle должен получить имена объектов, привилегий и другую информацию из словаря данных. Область кэша словаря данных в разделяемом пуле в SGA не содержит информации о таблицах, поэтому анализ оператора SELECT приостанавливается для считывания информации.

6) Oracle выполняет рекурсивный оператор SQL (оператор, генерируемый системой), чтобы загрузить информацию об объектах из таблиц словаря данных, находящихся в файлах базы данных, в кэше словаря данных в памяти.

7) Разбор исходного пользовательского оператора SELECT продолжается, и Oracle строит план оптимизации, чтобы определить способ выполнения оператора.

8) Оператор обращается к таблице. Предположим, что блоки таблицы не находятся в буферном кэше базы данных в SGA. Требуемые блоки Oracle читаются из файлов базы данных и передаются в область кэша SGA.

9) Oracle выполняет оператор и возвращает результаты пользователю.

10) Пользователь вводит оператор UPDATE, чтобы изменить определенные поля в строках, которые он только что выбрал. Так как кэш словаря данных уже имеет в памяти информацию о таблице; рекурсивный SQL более не генерируется (предположим, что информация не удалена другим процессом, требующим пространства в кэше). Также блоки таблицы находятся в буферном кэше базы данных, так что не нужно выполнять новый дисковый ввод/вывод, чтобы считать эти блоки.

11) Oracle блокирует строки, которые будут модифицироваться.

12) Прежде чем Oracle выполняет UPDATE, информация старого состояния блоков регистрируется в сегменте отката, а исходная версия значений также записывается в буферном кэше журнала.

13) Oracle модифицирует строки и записывает новую версию значений в буферном кэше журнала.

14) Пользователь вводит команду COMMIT, чтобы сделать изменение в базе данных окончательным.

15) Oracle помещает элемент журнала, указывая фиксацию транзакции, в буферный кэш журнала, и все элементы журнала (старый, новый, подтверждающий) переносятся в оперативный журнальный файл.

16) Сегмент отката освобождается (но не перезаписывается) для использования другими процессами.

17) Oracle освобождает блокировки в таблице.

18) Пользователь получает сообщение об успешной фиксации транзакции (точная формулировка этого сообщения изменяется в зависимости от инструмента и версии).

19) Если пользователь вводит откат вместо фиксации транзакции, старые версии измененных значений возвращаются обратно в блоки данных Oracle из сегмента отката. Oracle также заносит в буферный кэш журнала элемент, указывающий, что выполнялся откат.

 

 

Глава 18. Безопасность

 

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

• Управление работой пользователей и аутентификация

• Управление привилегиями и ролями

• Ограничение использования ресурсов баз данных

• Работа с паролями пользователей

• Аудит баз данных