Архитектура СУБД Oracle . Архитектура Баз Данных. ФКН ВГУ 3 курс (Беляев А.С.)

СУБД Oracle состоит из

  1. Базы данных
  2. Файлов данных
  3. Служебный файлов

Экземпляра сервера

База данных Oracle – одна на один экземпляр -
экземпляр - это процессы и память - короче - работающий софт базы

Каждому пользователю выделяется схема – именованный набор объектов БД - то есть по умолчанию к пользователю привязывается собственное (не знаю что - может "табличное пространство")

Табличное пространство

табличное пространство - логическая единица хранения информации

Следующие табличные пространство являются общими для всей базы:

SYSTEM =

  • Всегда ONLINE
  • Словари данных

SYSAUX -Хранение дополнительных метаданных (EM)
UNDO - Табличное пространство для записи данных для восстановление в случае сбоя транзакции
TEMP- Для временных данных , например для сортировок на диске.

Табличные пространства нужны для объединения файлов данных. - логического объединения.
Когда мы создаём объект внутри табличного пространства - мы не говорим в какой именно файл он запишется - это связано с тем. что размер файла ограничен.
При установке табличного пространства можно указать "авторасширение" - новые файлы будут добавляться автоматически.

Когда вы работаете с объектами базы вы изолированы от физического уровня - вы не знаете в какой файл будут записаны объекты - знаете лишь табличное пространство.

Такое логическое объединение полезно в случае если ваше приложение оперирует несколькими основными типами данных - их хранение можно организовать в разных табличных пространствах.

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

При создании табличного пространства указывается полный путь к файлу. Если табличное пространство не указано , то объект создаётся в табличном пространстве пользователя по умолчанию.

Итак:

  1. Табличное пространство состоит из одного или нескольких файлов данных
  2. Файл данных может принадлежать ТОЛЬКО ОДНОМУ табличному пространству
  3. Размер и имя файла определяется при создании
  4. Можно включить автоматическое увеличение размера файла по мере заполнения
  5. могут находиться ONLINE и OFFLINE - то есть можно сделать его недоступным для пользователей (целиком)

Запись и чтение из файла данных происходит блоками (select .....)
Блок данныхминимальная единица доступа к данным

  • DB_BLOCK_SIZE - в это переменной указывается размерность блока
  • 2К – 64К = размер минимального блока

Если база работает мелкими транзакциями - то лучше размер блока делать меньше, если же данные читаются большими объёмами -то побольше .
В среднем размер блока устанавливают = 8 килобайт

Экстент – набор из нескольких подряд идущих блоков - непрерывная последовательность
Сегмент – набор экстентов, выделенных для определенной цели - для хранения объектов определённого типа.

Внутри сегмента создаются уже определённые объекты

  1. Данных (таблицы)
  2. Индексы
  3. Временные данные
  4. Откаты (данные отката)

В одном файле данных можно создавать и таблицы и индексы - они хранятся в разных сегментах.

Управляющие файлы

Управляющие файлы - хранят сведения о физической структуре базы данных.

Управляющие файлы зеркалируются - их обычно несколько копий .
Если управляющий файл теряется - база сразу останавливается.

Они же - Control Files

  • Несколько копий
  • Бинарный формат
  • Постоянно обновляются (каждые 3 сек или меньше)
  • Хранится информация о физической структуре БД, необходимая для запуска:
    • Имя БД
    • Дата создания
    • Пути к файлам данных и журналам транзакций
    • Информация о табличных пространствах
    • Номер контрольной точки (SCN) - сначала производится запись в журнал транзакции - потом уже в лог

ЖУРНАЛЫ ТРАНЗАКЦИЙ

Сначала commit операция записывает сведения в журнал, а уж потом только начинается реальная операция.
Так например - если update затрагивает миллион строк , то имеет смысл сначала записать сведения о том, что собираешься сделать в журнал транзакций, а потом только производиться реальная операция.

журналы транзакций =

  1. Хранят информацию о зафиксированных транзакциях
  2. Несколько копий
  3. Применяются для восстановления БД после сбоя
  4. Перезаписываются - то есть можно выделить фиксированный размер файла - и он будет перезаписываться по кругу
  5. Можно включить архивирование - чтобы хранить побольше данных в журнале транзакций - когда файл полностью записан он будет скопирован и заархивирован

Файл параметров

Он же init.ora
Существует в бинарном и тексктовом виде
Хранит в основном значения глобальных переменных , в том числе значения -

  • Имя БД
  • Имена управляющих файлов
  • Значения глобальных переменных
  • Режим архивирования журналов транзакций
  • Имя табличного пространства для UNDO

Запуск базы:

  1. запускает процесс oracle.exe читает файл параметров
  2. из файла определяет сколько памяти выделять под процесс и т.д. =- потом происходит чтение управляющих файлов.
  3. из управляющих файлов в частности узнают о местоположении файлов данных.
  4. читаем из файлов данных номер транзакции - если они не совпадают с номерами в журналах транзакции - делаем откат или накат транзакции
  5. после приведённых выше операций (в общем виде) база готова к работе.

Экземпляр Oracle

Экземпляр Oracle - представляет собой:

  • Набор процессов ОС
  • Область памяти - разделяемая область памяти, где хранятся данные ,используемые в различных нуждах - также выделяются отдельные области памяти для пользовательских и серверных процессов
  • SGA (\syatem globbal area) состоит из:

  1. кэш буфера - вся работа с блоками происходит в этом буфере, потом только происходит запись на диск
  2. shared pool - здесь храняться "разобранные операторы" и загруженные хранимые процедуры.
  3. Redo buffer - буфер журнала транзакций - когда мы производим операции над данными базы, сведения о них буферизируется - при вызове commit происходит "выталкивание данных журнала" на диск

SGA (глобальная системная область) – участок памяти, используемый экземпляром для хранения кэшей, буферов и т.д.
Кэш базы данных – блоки данных, считанные с диска
Буфер сегмента отката – информация, необходимая для восстановления БД
Разделяемый пул – различные объекты, которые могут использоваться разными пользователями
Java-пул
Large пул – опциональная область, используемая процессами Backup, I/O

PGA (глобальная программная область) – область памяти, выделяемая для каждого фонового процесса
Управление размерами областей (деление на буферы) может осуществляться вручную и автоматически

  • SGA_TARGET = 0
  • SGA_MAX_SIZE
  • DB_CACHE_SIZE
  • LOG_BUFFER
  • SHARED_POOL_SIZE
  • LARGE_POOL_SIZE
  • JAVA_POOL_SIZE

Выделение областей памяти производится гранулами – 4 Мб (SGA 1 Гб)

Процессы экземпляра

делятся на два вида:

  1. Серверные - Создаются для обработки пользовательских запросов
  2. Фоновые(Постоянно запущены, выполняют служебные функции)
    1. DBW -пишут данные в базу - их может быть несколько
    2. LGWR - ведёт журнал транзакций
    3. CKPT - ставит контрольные точки
    4. SMON - отвечает за восстановление базы при старте
    5. PMON - предназначен дял отстрела "мёртвых" сессий - если какая-то сессия долго не производит данные - её закрывают
    6. RECO - производит откат при старте

DBWn – записывает содержимое буфера данных в БД
LGWR – записывает данные в журнал транзакций -

  • При COMMIT
  • Каждые 3 сек (SCN)
  • Когда буфер заполнен на 1/3

CKPT – обновление заголовков файлов данных и управляющих файлов
SMON – восстановление после сбоя
PMON – отслеживание состояния процессов
RECO – восстановление после сбоя распределенных транзакций

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

ПОсле запуска проходит несколько стадий:

  1. SHUTDOWN - запущен только сервисный процесс (служба) в
  2. NOMOUNT - читаем int.ora - здесь фактически запускается экземпляр (пустой) и запускаются фоновые процессы
  3. MOUNT - открываем управляющие файлы и журналы транзакций - если какой-то из журналов не найден - сбой - остаёмся в предыдущем режиме.
  4. OPEN - открываем файлы данных - если есть противоречия с журналами транзакций сначала откатываем все незавершённые транзакции -потом накатываем те, для которых выполнен COMMIT

NOMOUNT

  • /database
  • spfile.ora
  • spfile.ora
  • init.ora
  • выделям SGA
  • Запуск фоновых процессов
  • Открытие alert.log

MOUNT

  1. Ассоциация файлов с экземпляром
  2. Открытие управляющих файлов
  3. Чтение управляющих файлов и поиск журналов транзакций

SID - это уникальный номер базы.

OPEN
Открытие файлов данных
Открытие журналов транзакций
Проверка наличия и целостности файлов данных
Roll Back
Roll Forward

Остановка Экземпляра

Режимы остановки

  1. NORMAL - ждём пока пользователь отрубиться от базы
  2. TRANSACTIONAL - ждём пока все пользователи не выполнит COMMIT
  3. IMMEDIATE - компромиссный вариант между скоростью и сохранностью данных - прерываются все транзакции -корректно откатываются , насильно закрываются сесси - база вырубается
  4. ABORT - база вырубается просто и сразу - после запуска требуется восстановление.