На физическом уровне база данных в субд oracle представляет совокупность таких объектов как

Обновлено: 03.07.2024

База данных (database) -это совокупность служебных файлов, файлов данных и внутренних структур, с помощью которых обеспечивается функционирование логической базы данных. Пользователь (user).В СУБД Oracle существуют предопределённые пользователи, которые создаются при создании базы данных. Основные из них: SYS – пользователь, которому принадлежат объекты словаря данных.

SYSTEM – администратор базы данных (АБД). Другие пользователи создаются командой CREATE USER. Пользователю необходимо предоставить права доступа к базе данных, и после этого пользователь с указанным именем может подключаться и работать с БД. Роль (role) – это совокупность прав доступа (привилегий), предоставляемых пользователю и/или другим ролям. Роли предназначены для упрощения процесса предоставления привилегий. Роль позволяет предоставить конкретному пользователю определённую роль (набор прав) или соотнести его определённой группе пользователей, обладающей набором прав в соответствии с задачами, которые на неё возложены. Таблица (отношение, table).Таблицы являются основным объектом БД, в котором хранятся данные предметной области. Каждая таблица принадлежит определённому пользователю Oracle (расположена в его схеме), и внутри схемы пользователя имена таблиц уникальны. Индекс (index)-Это структура, внешняя по отношению к таблице. Индекс предназначен для быстрого поиска данных по известному значению индексируемого поля. Индекс включает значение одного или нескольких полей таблицы и адреса соответствующих записей. Последовательность (sequences) – это объект базы данных, с помощью которого можно получать уникальные целые числа. Представления (views)– это логическое "окно" в одну или более таблиц. Представления обладают следующими свойствами: Представление не хранит данных.Представление можно использовать в SQL-операторах везде, где можно использовать таблицы.

Процедурные объекты Oracle

Для программирования алгоритмов обработки данных, реализации механизмов поддержки целостности базы данных Oracle использует такие объекты как процедура, функция, пакет и триггер. Для написания этих программных единиц используется встроенный в Oracle процедурный язык программирования PL/SQL (ProgramLanguage/SQL).

Функция (FUNCTION) – это поименованный, структурированный набор переменных и операторов SQL и PL/SQL, предназначенный для решения конкретной задачи и возвращающий значение (результат работы) в вызывающую программу (среду).

Процедура (PROCEDURE) – это поименованный, структурированный набор переменных и операторов SQL и PL/SQL, предназначенный для решения конкретной задачи. Процедура не возвращает значений в вызывающую программу (среду).

Пакет (PACKAGE) – это поименованный, структурированный набор переменных, процедур и функций, связанных единым функциональным замыслом. Например, Oracle поставляет пакет DBMS_OUTPUT, в котором собраны процедуры и функции, предназначенные для организации ввода-вывода.

Триггер (TRIGGER)– это хранимая процедура, которая автоматически запускается тогда, когда происходит связанное с триггером событие. Обычно события связаны с выполнением операторов INSERT, UPDATE или DELETE в некоторой таблице.

Типы данных.

В СУБД Oracle используются следующие основные типы данных:

Примечание: параметры, заключённые в квадратные скобки, можно не указывать. Тогда будет использоваться значение по умолчанию.

Символьные:

CHAR [(длина)] – используется для хранения символьных строк фиксированной длины. Длина строки по умолчанию – 1 байт, максимальная длина – 2000б.

VARCHAR2 (длина) – используется для хранения символьных строк переменной длины. Параметр длина определяет максимальную длину строки, значение этого параметра не может превышать 4000.

Числовые:

NUMBER [(точность[, масштаб])] – используется для представления чисел с заданной точностью.

Если значение параметра точность не указано явно, оно полагается равным 38. Значение параметра масштаб по умолчанию предполагается равным 0. Значение параметра точность может изменяться от 1 до 38; значение параметра масштаб может изменяться от -84 до 128. Использование отрицательных значений масштаба означает сдвиг десятичной точки в сторону старших разрядов. Например, определение NUMBER (7, -3) означает округление до тысяч.

Примечание: в СУБД Oracle существуют и другие типы числовых данных, но тип NUMBER является базовым, поэтому лучше пользоваться именно этим типом данных.

Стас Белков

Система управления базами данных (СУБД) Oracle предназначена для одновременного доступа к большим объемам хранимой информации и манипуляции с ними. В СУБД есть два основных понятия, которые необходимо усвоить для понимания некоторых последующих моментов с точки зрения безопасности и защиты СУБД, – это база данных и экземпляр. Если в двух словах, то база данных – это набор файлов в ОС, а экземпляр – процессы и память, причем одна база данных может быть доступна в нескольких экземплярах, а экземпляр единовременно обеспечивает доступ только к одной базе данных. Теперь рассмотрим эти понятия подробнее.

База данных Oracle

В базе данных Oracle есть два уровня представления данных: физический и логический. Физический уровень включает файлы баз данных, которые хранятся на диске, а логический уровень включает в себя табличное пространство, схемы пользователей. Рассмотрим эти уровни более подробно.

Физический уровень базы данных

База данных и экземпляр на физическом уровне представлены шестью типами файлов. К экземпляру относятся файлы параметров, в которых прописываются его характеристики. Основной файл – это файл init.ora, отвечающий за параметры инициализации экземпляра, такие как имя базы данных, ссылку на управляющие файлы и пр. Пример файла инициализации представлен на рис. 1

файла инициализации Oracle init.ora

Файлы базы данных

База данных как таковая представлена набором файлов разных типов, в которых собственно хранятся различные данные. Ниже кратко рассказано о том, что представляют собой эти типы файлов и чем файлы каждого типа могут быть нам полезны:

  • Файлы данных. В этих файлах хранятся собственно сами данные в виде таблиц, индексов, триггеров и прочих объектов. Файлы данных являются наиболее важными во всей базе данных. В стандартной базе должно присутствовать минимум два файла данных: для системных данных (табличное пространство SYSTEM) и для пользовательских данных (табличное пространство USER). В табличном пространстве SYSTEM хранятся пароли всех пользователей в зашифрованном виде.
  • Файлы журнала повторного выполнения (redo logs). Файлы журнала повторного выполнения очень важны для базы данных Oracle. В них записываются все транзакции базы данных. Они используются только для восстановления данных в самой базе при сбое экземпляра. В журналах повторного выполнения можно обнаружить множество критичной информации, о существовании которой рядовой администратор мог и не задуматься, в том числе и пароли пользователей.
  • Управляющие файлы. В этих файлах определено местонахождение файлов данных и другая информация о состоянии базы данных. Управляющие файлы должны быть хорошо защищены. Наиболее важным является файл параметров инициализации экземпляра, потому что без него не удастся запустить экземпляр. Остальные файлы, такие как LISTENER.ORA, SQLNET.ORA, PROTOCOL.ORA, NAMES.ORA и пр., связаны с поддержкой сети и так же очень важны. В этих файлах можно обнаружить множество полезной информации для проникновения в СУБД.
  • Временные файлы. Временные файлы используются для хранения промежуточных результатов действий над большим объемом данных в случае, если в оперативной памяти для этого не хватает места. Во временных файлах можно обнаружить содержимое временных таблиц и построенных по ним индексов. Временные файлы могут оказаться полезными в процессе расследования инцидентов или при восстановлении важной информации, удаленной из базы данных.
  • Файлы паролей. Используются для аутентификации пользователей, выполняющих удаленное администрирование СУБД по сети. Более детально о них мы будем говорить позже.

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

Логический уровень базы данных

На логическом уровне находятся табличные пространства и схема БД, состоящая из таблиц, индексов, представлений, хранимых процедур и пр.

База данных разделяется на несколько логических частей, называемых табличными пространствами. Табличные пространства используются для логической группировки данных между собой для упрощения администрирования.

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

В табличных пространствах, в свою очередь, находятся схемы – это своеобразные контейнеры хранимых в БД объектов. Каждая схема однозначно ассоциируется с определенным пользователем – владельцем этой схемы. В этих схемах уже находятся такие логические единицы, как таблицы, индексы, представления и хранимые процедуры.

Oracle Database — это объектно-реляционная СУБД (система управления базами данных), созданная компанией Oracle. В настоящее время она имеет множество разных версий и типов. Однако в этой статье мы поговорим не о видах баз данных Oracle, а о структуре и основных концепциях, которые относятся к СУБД Oracle Database. Поняв архитектуру СУБД Oracle, вы заложите фундамент, необходимый для понимания прочих средств (а они весьма обширны), предоставляемых базой данных Oracle.

Базы данных Oracle: экземпляры и сущности

СУБД Oracle Database включает в себя физические и логические компоненты. Особого упоминания заслуживает понятие экземпляра. Замечено, что некоторые используют термины «база данных» и «экземпляр» в качестве синонимов. Да, это взаимосвязанные, но всё же разные вещи. База данных в терминологии Oracle — это физическое хранилище информации, а экземпляр — это программное обеспечение, которое работает на сервере и предоставляет доступ к информации, содержащейся в базе данных Oracle. Экземпляр исполняется на конкретном сервере либо компьютере, в то самое время как база данных хранится на дисках, подключённых к этому серверу:

instans_and_Oracle_Database_1-20219-067a61.jpg

При этом база данных Oracle является физической сущностью, состоящей из файлов, которые хранятся на дисках. В то же самое время, экземпляр – это сущность логическая, состоящая из структур в оперативной памяти и процессов, которые работают на сервере. Экземпляр может являться частью только одной базы данных. При этом с одной базой данных бывает ассоциировано несколько экземпляров. Экземпляр ограничен по времени жизни, тогда как БД, условно говоря, может существовать вечно.

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

Если упрощённо, то экземпляр — это мост к базе данных, а сама БД – это остров. Когда экземпляр запущен, мост работает, а данные способны попадать в базу данных Oracle и покидать её. Если мост перекрыт (экземпляр остановлен), пользователи не могут обращаться к базе данных, несмотря на то, что физически она никуда не исчезла.

Структура базы данных Oracle

База данных Oracle включает в себя: — табличные пространства; — управляющие файлы; — журналы; — архивные журналы; — файлы трассировки изменения блоков; — ретроспективные журналы; — файлы резервных копий (RMAN).

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

Любые данные, которые хранятся в базе данных Oracle, просто обязаны существовать в каком-либо табличном пространстве. Под табличным пространством (tablespace) понимают логическую структуру, то есть вы не сможете попросить ОС показать вам табличное пространство Oracle.

При этом каждое табличное пространство включает в себя физические структуры, называемые файлами данных (data files). Одно табличное пространство Oracle способно содержать один либо несколько файлов данных, в то время как каждый файл данных может принадлежать лишь одному tablespace. Создавая таблицу, мы можем указать, в какое именно табличное пространство мы её поместим — Oracle находит для неё место в каком-нибудь из файлов данных, которые составляют указанное табличное пространство.

На рисунке ниже вы можете посмотреть на соотношение между файлами данных и табличными пространствами в базе данных Oracle.

tablespaces_data_files_Oracle_1-20219-802832.jpg

Создавая новую таблицу, мы можем поместить её в табличное пространство DATA1 либо DATA2. Таким образом, физически наша таблица окажется в одном из файлов данных, которые составляют указанное табличное пространство.

Файлы базы данных Oracle

База данных Oracle может включать в себя физические файлы 3-х основных типов: • control files — управляющие файлы; • data files — файлы данных; • redo log files — журнальные файлы либо журналы.

Посмотрим на отношения между ними:

oracle_database_files_1-20219-34b3e2.jpg

В управляющих файлах содержится информация о местонахождении других физических файлов, которые составляют базу данных Oracle, — речь идёт о файлах данных и журналов. Также там хранится важная информация о содержимом и состоянии БД Oracle. Что это за информация: • имя базы данных Oracle; • время создания БД; • имена и местонахождение журнальных файлов и файлов данных; • информация о табличных пространствах; • информация об архивных журналах; • история журналов, порядковый номер текущего журнала; • информация о файлах данных в автономном режиме; • информация о резервных копиях, контрольных точках, копиях файлов данных.

При этом функция управляющих файлов не ограничивается хранением важной информации, нужной при запуске экземпляра, — полезны они и в процессе удалении БД Oracle. К примеру, уже с версии Oracle Database 10g можно посредством команды DROP DATABASE удалить все файлы, которые перечислены в управляющем файле БД, включая сам управляющий файл.

Инициализация СУБД Oracle

Когда вы запускаете экземпляр Oracle, происходит считывание параметров инициализации. Параметры определяют, каким образом базе данных Oracle следует использовать физическую инфраструктуру и прочую конфигурационную информацию об экземпляре.

Как правило, инициализационные параметры хранятся в файле параметров инициализации экземпляра (обычно это INIT.ORA) либо, начиная с Oracle9i, в репозитории, называемом файлом параметров сервера (SPFILE). С выходом каждой новой версии Oracle число обязательных параметров инициализации уменьшается.

Кстати, в дистрибутиве Oracle можно найти пример файла инициализации, который пригоден для запуска базы данных. Также можно воспользоваться специальной программой Database Configuration Assistant (DCA) — она подскажет обязательные значения.

Более подробную информацию смотрите в официальной документации для СУБД Oracle Database.

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

SYSTEM =

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

      Основные элементы архитектуры Oracle. БД и экземпляр Oracle.

      Архитектура Oracle состоит из:

      • Файлы БД
      • Процессы
      • Области оперативной памяти

      Файлы журналов повтора (журналы транзакций)

      • содержат сведения о выполнении транзакций;
      • используются для восстановления транзакций базы данных в надлежащем порядке в случае сбоя БД;
      • сохранение информации журналов повтора является внешним по отношению к файлам данным;
      • предоставляют Oracle способ записи данных на диск.

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

      • содержат управляющую информацию обо всех файлах базы данных;
      • поддерживают внутреннюю целостность базы данных;
      • руководят операциями восстановления;
      • обычно сохраняются на разных дисках, чтобы свести к минимуму их возможное повреждение при сбое диска.

      База данных будет создавать и поддерживать управляющие файлы, заданные при ее создании.

      Трассировочные файлы

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

      Управляющие файлы и журнальные файлы поддерживают функционирование сервера. Должны присутствовать в БД, быть открытым и доступными серверу.

      • Кэш-буфер данных
      • Разделяемый пул SQL
      • Большой пул
      • Пул Java

      Эти части в сумме могут составлять до 95% ГСО.

      • содержит данные и управляющую информацию одного процесса;
      • между процессами не разделяется.
      • файл параметров инициализации (init.ora)
      • файл параметров сервера (spfile.ora)

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

      Читайте также: