oracle — вопросы с ответами

В до-реляционных базах данных записи были связаны между собой указателями. Каждая цепочка имеет владельца и ноль или более участников. Например, все записи сотрудников в отделе могут быть связаны с соответствующей записью отдела в таблице отделов. В такой схеме каждая запись сотрудника указывает на следующую и предыдущую записи в цепочке, а также на запись отдела. Чтобы составить список всех сотрудников отдела, сначала нужно перейти к уникальной записи отдела (обычно с использованием метода прямого доступа, известного как хеширование), а затем следовать цепочке записей сотрудников.

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

В реляционных базах данных вся структура состоит из таблиц, каждая из которых владеет какой-то конкретной информацией. Строки в этих таблицах содержат информацию об объекте, а столбцы его характеристику.

Внутренняя архитектура

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

В качестве примера на рисунке ниже показана интересная схема внутренней работы механизма Oracle Database. Эта диаграмма была разработана программным инструментом Spotlight от Quest Software. Имя базы данных (pdb1) отображается в правом верхнем углу диаграммы.

На этом изображении различные компоненты архитектуры базы данных Oracle сгруппированы следующим образом:

  • Панель Service представляет пользователей, которые используют базу данных;
  • Панель Host представляет хост-компьютер базы данных;
  • Панель Server Processes представляет компьютерные процессы на главном компьютере, выполняющие всю работу, запрошенную пользователями;
  • Панель SGA представляет собой область памяти компьютера, используемую в качестве рабочей области базы данных. SGA расшифровывается как System Global Area;
  • Панель Background Processes (фоновые процессы) представляет основной набор компьютерных процессов, которые не зависят от пользовательских сессий и выполняют специальные задачи, такие как хранение информации о транзакциях в файлах журнала повторов;
  • Панель Disk Storage представляет файлы, в которых хранятся данные, и вспомогательные файлы, такие как файлы журнала повторов и архивные файлы журналов повторов.

База данных и экземпляр

В терминологии Oracle слово "база данных" используется для общего указания файлов данных и вспомогательных файлов на дисках хранения, подключенных к хост-компьютеру, а слово "экземпляр" используется для описания компьютерных процессов, находящихся в памяти компьютера и областях памяти, совместно используемых этими процессами. Отношения между экземплярами Oracle и базами данных могут быть: один к одному (один экземпляр на базу данных), много к одному (несколько экземпляров на базу данных) или один ко многим (только Oracle Database 12c и выше). Конфигурация «многие к одному» называется Real Application Clusters (RAC) – база данных находится на общих дисках, а экземпляры на нескольких компьютерах подключаются к базе данных. Конфигурация «один ко многим» называется опцией Oracle Multitenant и, как следует из названия, является дополнительной возможностью Oracle Database за дополнительную плату.

Программное обеспечение

Местоположение программного обеспечения базы данных называется Oracle home, а путь к этому местоположению обычно хранится в переменной среды ORACLE_HOME. Существует два вида программного обеспечения для баз данных: серверное программное обеспечение и клиентское программное обеспечение. Серверное программное обеспечение необходимо для создания и управления базой данных и требуется только на хосте базы данных. Клиентское программное обеспечение необходимо для использования базы данных и требуется на компьютере каждого пользователя – наиболее распространенным примером является средство командной строки SQL*Plus.

Файлы конфигурации

Самый важный файл конфигурации базы данных – это файл, содержащий настройки, используемые при запуске базы данных. Он поставляется в двух версиях: текстовая версия, называемая pfile, и двоичная версия, называемая spfile. В файлах pfile и spfile указываются такие данные, как объем памяти компьютера, который Oracle может использовать во время работы. Файл pfile традиционно называется файлом init.ora.

Другим важным файлом конфигурации на стороне сервера является файл listener.ora. Он контролирует работу listener – важный процесс, который вступает в игру, когда пользователи начинают сеанс базы данных.

Файлы данных

Самым большим компонентом базы данных обычно являются файлы, в которых хранятся данные. Файлы данных логически сгруппированы в табличные пространства и обычно имеют описательные имена, такие как DATA, INDEX, UNDO и TEMP, которые указывают их предполагаемое назначение. Используйте табличное пространство только для целей, указанных его именем – например, табличное пространство SYSTEM должно использоваться для хранения только словаря данных (таблиц, содержащих информацию об остальной части базы данных). За исключением табличных пространств SYSTEM и SYSAUX, которые создаются всегда и чьи имена являются обязательными для Oracle, число и имена других табличных пространств оставлены на ваше усмотрение.

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

Журналы событий

Oracle записывает все важные события в различные файлы журнала. Такие события, как запуск и завершение работы, важные операции языка определения данных (DDL), такие как ALTER TABLESPACE ADD DATAFILE, и нехватка места – все это лишь некоторые из событий, записываемых в журнале предупреждений. Запись вносится в listener log каждый раз, когда пользователь устанавливает соединение с базой данных. Подробный файл трассировки создается каждый раз, когда возникают серьезные ошибки; примером такой ошибки может стать ошибка ORA-600, которая обычно указывает на неисправность в Oracle.

Бэкапы базы данных

Вы должны защитить базу данных от сбоев хранилища, создав резервные копии файлов данных. Если на диске недостаточно места, резервные копии файлов данных можно хранить внешних носителях. Если на диске места достаточно, резервные копии можно хранить на системных дисках. Только не стоит этого делать на тех же дисках, где хранятся файлы данных. Местоположение резервных копий традиционно называется областью восстановления памяти (flashback recovery area). Резервные копии, хранящиеся на диске, обычно копируются на внешние носители для обеспечения дополнительной безопасности.

Важно: как и следовало ожидать, никто не может хранить данные в базе данных или извлекать данные из нее, если у них нет соответствующих прав. Существует пять команд, необходимых для управления пользователями: CREATE USER, ALTER USER, DROP USER, GRANT и REVOKE. Только пользователи с соответствующими правами могут выполнять эти команды. Например, только пользователь с привилегией Create User может выполнить команду CREATE USER (создать пользователя). Администраторы базы данных обычно выполняют задачи управления пользователями с использованием учетной записи SYSTEM.

Схемы

Каждый объект в базе данных явно принадлежит одному владельцу, и владелец этого объекта должен явно разрешить его использование кем-то другим. Коллекция объектов, принадлежащих пользователю, называется схемой. Чтобы проиллюстрировать это, в изображении ниже приведено краткое изложение содержимого схемы HR, одной из примеров схем, которые Oracle предоставляет в образовательных целях. Обратите внимание, что термины user, schema, schema owner и account используются взаимозаменяемо. Например, вы можете говорить о HR user или о HR schema.

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

Некоторые из объектов в схеме, такие как таблицы и индексы, представляют блоки хранения; остальные – просто определения, которые хранятся в виде строк в таблицах. Например, представление DBA_OBJECTS – это просто определение, хранящееся в виде строк в таблице VIEW$ в схеме SYS. Объект, представляющий блоки хранения, называется сегментом. В изображении ниже показано, что только 11 типов объектов, фактически представляют блоки хранения; остальные являются только определениями, хранящимися в виде строк в таблицах.

16 ответов
Похоже, что в Oracle нет понятия AUTO_INCREMENT, вплоть до версии 11g. Как создать столбец, который ведет себя как автоматическое увеличение в Oracle 11g?
auto-increment
02 июль 2012, в 14:37
12 ответов
Прошу пояснить две вещи для меня: Может ли внешний ключ быть NULL? Можно ли дублировать внешний ключ? Насколько я знаю, NULL не следует использовать в внешних ключах, но в некоторых приложениях я могу ввести NULL в Oracle и SQL Server, и я не знаю, почему....
sql-server
foreign-keys
27 сен. 2011, в 17:23
22 ответа
В SQL я (к сожалению) часто приходится использовать условия " LIKE " из-за баз данных, которые нарушают почти все нормы нормализации. Я не могу изменить это прямо сейчас. Но это не имеет отношения к вопросу. Кроме того, я часто использую такие условия, как WHERE something in (1,1,2,3,5,8,13,21) дл...
sql-server
tsql
plsql
10 июнь 2010, в 14:58
14 ответов
У меня есть запрос, который отлично работает в MySQL, но когда я запускаю его в Oracle, я получаю следующую ошибку: Ошибка SQL: ORA-00933: команда SQL не была закончена. 00933. 00000 -" Команда SQL не выполнена должным образом" Запрос: UPDATE table1 INNER JOIN table2 ON table1.value = table2.DESC ...
inner-join
ora-00933
15 март 2010, в 10:54
12 ответов
Я пишу несколько сценариев миграции для базы данных Oracle и надеялся, что Oracle имеет нечто похожее на конструкцию MySQL IF EXISTS. В частности, всякий раз, когда я хочу сбросить таблицу в MySQL, я делаю что-то вроде DROP TABLE IF EXISTS `table_name`; Таким образом, если таблица не существует, DR...
sql-drop
25 нояб. 2009, в 17:35
12 ответов
Для различных популярных систем баз данных, как вы перечисляете все столбцы в таблице?
database
sql-server
16 окт. 2009, в 23:06
27 ответов
Какие существуют хорошие ресурсы для понимания настройки базы данных для основных движков и продвижения ваших знаний в этой области? Идея этого вопроса состоит в том, чтобы собрать накладную нагрузку ресурсов, которые неизменно существуют, так что люди могут иметь "одну остановку" магазина знаний о ...
database
sql-server
17 апр. 2009, в 15:55
15 ответов
Есть ли способ заставить запрос Oracle вести себя так, как будто он содержит условие MySQL limit? В MySQL я могу это сделать: select * from sometable order by name limit 20,10 чтобы получить 21-е и 30-е ряды (пропустите первые 20, дайте следующие 10). Строки выбираются после order by, поэтому о...
pagination
limit
22 янв. 2009, в 18:42
12 ответов
Операция UPSERT либо обновляет, либо вставляет строку в таблицу, в зависимости от того, имеет ли таблица уже соответствующую строку: if table t has a row exists that has key X: update t set mystuff... where mykey=X else insert into t mystuff... Поскольку у Oracle нет конкретного оператора U...
upsert
merge
26 окт. 2008, в 01:50
15 ответов
Я знаю утверждение: create table xyz_new as select * from xyz; Который копирует структуру и данные, но что, если я просто хочу структуру?
copy
database-table
24 окт. 2008, в 15:29
18 ответов
Как я могу запросить базу данных Oracle для отображения имен всех таблиц в ней?
15 окт. 2008, в 17:21
33 ответа
Таблица: UserId, Value, Date. Я хочу получить UserId, Value для max (Date) для каждого UserId. То есть значение для каждого пользователя, имеющего последнюю дату. Есть ли способ сделать это просто в SQL? (Желательно Oracle) Обновление: Извинения за любую двусмысленность: мне нужно получить ВСЕ по...
greatest-n-per-group
23 сен. 2008, в 16:04
18 ответов
Есть ли разница в производительности (в оракуле) между Select * from Table1 T1 Inner Join Table2 T2 On T1.ID = T2.ID и Select * from Table1 T1, Table2 T2 Where T1.ID = T2.ID ?
performance
23 сен. 2008, в 15:33
11 ответов
Какой самый простой оператор SQL, который вернет повторяющиеся значения для данного столбца и количество их вхождений в таблице базы данных Oracle? Например: у меня есть таблица JOBS со столбцом JOB_NUMBER. Как я могу узнать, есть ли у меня дубликат JOB_NUMBER s и сколько раз они дублируются?...
12 сен. 2008, в 14:57
27 ответов
Я заинтересован в изучении некоторых (идеально) баз данных агностических способов выбора n-й строки из таблицы базы данных. Было бы также интересно узнать, как это можно достичь, используя встроенную функциональность следующих баз данных: SQL Server MySQL PostgreSQL SQLite Oracle В SQL Server 2...
19 авг. 2008, в 17:16
Наверх
Меню