Что такое схема в оракуле

Обновлено: 02.07.2024

В этом руководстве по Oracle объясняется, как создать схему в Oracle с синтаксисом и примерами.

Описание

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

Чтобы создать схему в Oracle, необходимо выполнить следующие действия:

Шаг 1. Создайте нового пользователя в Oracle

По сути, схема создается в Oracle при создании пользователя. (Изучите синтаксис оператора CREATE USER).

Мы можем создать нового пользователя с помощью инструкции CREATE USER следующим образом:

Эта инструкция CREATE USER создаст нового пользователя с именем smithj в базе данных Oracle с паролем pwd4smithj, табличное пространство по умолчанию будет tbs_perm_01. с квотой 20 МБ и временным табличным пространством будет tbs_temp_01.

Шаг 2. Назначьте привилегии SYSTEM новому пользователю в Oracle

Следующим шагом в настройке схемы является назначение «системных привилегий» новому пользователю smithj.

Эти «системные привилегии» позволят нашему новому пользователю создавать сеанс в Oracle, а также создавать таблицы, представления, триггеры, процедуры, последовательности и синонимы в новой схеме. Вот пример того, как мы можем предоставить эти системные привилегии:

Эти новые привилегии теперь предоставляются пользователю с именем smithj.

Шаг 3. Создание объектов в схеме

Теперь, когда схема (называемая smithj) создана с необходимыми привилегиями, вы можете создавать объекты в схеме. Это можно сделать одним из двух способов:

  1. Выполнение отдельных операторов SQL для создания каждого объекта. Это можно сделать с помощью инструкций CREATE TABLE и CREATE VIEW.
  2. Выполнение инструкции CREATE SCHEMA для создания нескольких объектов в одной инструкции SQL.

Шаг 4. Предоставление прав доступа к объекту

После того, как вы создали свои объекты в схеме, вам нужно будет предоставить привилегии, чтобы другие схемы/пользователи могли получить доступ к вашим объектам базы данных (например, к таблицам).

Шаг 5. Создание синонимов для объектов

В качестве последнего шага вы можете создать синонимы, чтобы другие схемы могли получить доступ к новым объектам базы данных (например, к таблицам) без необходимости префикса имен объектов с именем схемы.

Например, если бы вы были другим пользователем с именем smithj и хотели выбрать из таблицы suppliers в new_schema, вам нужно было бы запустить следующий оператор SELECT (до создания каких-либо синонимов):

Если вы затем создали синоним для таблицы suppliers следующим образом:

Вопрос: я хочу понять определение схемы Oracle и его связь с базой данных Oracle. Что такое определение схемы Oracle?

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

Определение схемы Oracle хранится как «метаданные» в словаре данных Oracle, представляющем собой схему, которая собирает язык определения данных схемы (DDL) для схемы. После определения определение схемы можно извлечь (также известное как как "пробивание" схемы) в простой текстовый файл.

Нетрудно запомнить взаимосвязи между компонентами определения схемы Oracle, когда вы можете визуализировать архитектуру. Вот несколько простых понятий:

Компонент "база данных" может рассматриваться как набор файлов xxx.dbf

Компонент "Экземпляр" — это запущенный набор программ, которые считывают файлы .dbf (Oracle RAC позволяет множеству экземпляров подключаться к базе данных).

Компоненты "объект" – это таблица, индекс, кластерная таблица и т. д.

Компонент "пользователь" создает объекты как "владелец схемы" этих объектов.

Компонент "synonym" позволяет вам "псевдоним" объекта, чтобы скрыть владельца схемы:

создать синоним еды для cat.food;

С компонентами "общедоступного синонима" имя владельца таблицы ("идентификатор пользователя") хранится внутри определения синонима и добавляется к имени таблицы во время выполнения для удаления дубликатов:

создать публичный синоним еды для cat.food;

В базе данных есть схемы, каждая из которых принадлежит определенному user_id. Следовательно, мы можем думать о ПОЛЬЗОВАТЕЛЕ и ВЛАДЕЛЬЦЕ как об одном и том же в том смысле, что владелец схемы — это один и тот же идентификатор пользователя:

Кроме того, мы можем ссылаться на таблицы с их "полными" именами, в которые мы включаем владельца схемы. Здесь мы видим две таблицы с именем «еда», одну из которых создал пользователь «кошка», а другую — владелец схемы «собака»:

выбрать материал из cat.food;
союз
выбрать материал из dog.food;

Получите полную
информацию о настройке Oracle SQL

Знаменитая книга "Расширенная настройка Oracle SQL. Полное руководство" содержит ценную информацию о настройке Oracle SQL. Эта книга включает сценарии и инструменты для повышения производительности Oracle 11g, и вы можете купить ее со скидкой 30 % непосредственно у издателя.


Бурлесон — американская команда


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

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

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


и укажите URL-адрес страницы.


Burleson Consulting

Оракул поддержки баз данных

Меня совсем не устраивают термины "база данных", "пользователь" и "схема". Кто-нибудь может объяснить, чем они отличаются друг от друга (если отличаются)?

Если они одинаковы, то в чем между ними сходство? Как мы их используем? И как мы их создаем?

8 ответов 8

В Oracle пользователи и схемы — это, по сути, одно и то же. Можно считать, что пользователь — это учетная запись, которую вы используете для подключения к базе данных, а схема — это набор объектов (таблиц, представлений и т. д.), принадлежащих этой учетной записи.

См. этот пост о переполнении стека: разница между пользователем и схемой в Oracle? для получения более подробной информации и дополнительных ссылок.

Вы создаете пользователей с помощью оператора create user. Это тоже "создает" схему (изначально пустую) - схему как таковую создать нельзя, она привязана к пользователю. После создания пользователя администратор может предоставить ему привилегии, которые позволят ему создавать таблицы, выполнять запросы на выборку, вставлять и делать все остальное.

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

Вы можете создать базу данных с помощью оператора create database после установки стека программного обеспечения Oracle. Но начать работу с dbca (помощником по созданию базы данных) проще.

«пользователи и схемы — это, по сути, одно и то же». Если это правда, то это самое глупое название, о котором я когда-либо слышал.

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

@Priyank: вы создаете столько пользователей, сколько хотите, и даете им любые привилегии, которые им нужны. Нет ничего необычного в том, чтобы дать многим пользователям какие-либо таблицы/представления/что-то еще — вопрос о том, «существует ли» их схема, в этом случае является в основном философским спором.

@Priyank Нет. В Oracle пользователь и схема — это одно и то же. Вот как работает архитектура базы данных Oracle. Вы можете создать пользователя, который может просто войти в базу данных и не может создавать в ней объекты, или вы можете создать схему как контейнер для объектов, не имея возможности войти в базу данных, установив соответствующие привилегии для пользователя; но в любом случае схема/пользователь существует в базе данных.

@Dojo : (вероятно, вы уже поняли это, но для справки в будущем) Чтобы добавить другого пользователя с доступом к таблице другого пользователя, это будет что-то вроде: предоставить создать сеанс для new_user, указанного newpassword, а затем: предоставить выбор, вставку, обновление, удаление на other_user.other_table для new_user . Подробнее в этом блоге от oracle

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

Я предполагаю, что если у вас есть ERP-система под названием TRITON, вы хотите, чтобы ваша база данных называлась TRITON, или если моя компания называется JENNY EXPORT, я могу решить, что моя база данных будет называться JENNYEXP или что-то в этом роде, нет необходимости в каком-либо пользователе с одно и то же имя.

В Oracle перед созданием таблиц необходимо создать ПОЛЬЗОВАТЕЛЯ, и, как ни странно, этот набор ТАБЛИЦ называется SCHEMA.

Затем вы можете создать реальных пользователей и предоставить соответствующие разрешения для работы с такой базой данных, как TRITON, как в этом примере, кстати, если вы подключаетесь через SQL DEVELOPER, вы должны НАЗВАТЬ СОЕДИНЕНИЕ.

Я знаю, что звучу немного разочарованно, но мне больше подходит соглашение об именах MS SQL SERVER, и я мог бы добавить, что я работал с Oracle раньше, чем с SQL SERVER.

Судя по тому, как иногда используется терминология, ПОЛЬЗОВАТЕЛЬ и СХЕМА несколько похожи. Но есть и большая разница. ПОЛЬЗОВАТЕЛЯ можно назвать СХЕМОЙ, если «ПОЛЬЗОВАТЕЛЬ» владеет каким-либо объектом, в противном случае он останется только «ПОЛЬЗОВАТЕЛЕМ». Как только ПОЛЬЗОВАТЕЛЬ владеет хотя бы одним объектом, то в силу всех ваших определений выше. ПОЛЬЗОВАТЕЛЯ теперь можно назвать СХЕМОЙ .

Я думаю, что здесь вы указываете на многогранность термина "СХЕМА". С одной стороны, это пространство имен для объектов базы данных. Кроме того, в Oracle (и других?), но не в PostgreSQL, это пространство имен объектов базы данных, содержащее в точности объекты, созданные пользователем, разделяющим имя схемы. С другой стороны, это отношения и структура объектов в базе данных, часто игнорирующие как право собственности, так и пространство имен.

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

ПОЛЬЗОВАТЕЛЬ и СХЕМА

Оба слова, user и schema, взаимозаменяемы, поэтому большинство людей путаются в этих словах.

Пользователь — это учетная запись для подключения к базе данных (серверу). мы можем создать пользователя, используя CREATE USER IDENTIFIED BY .

Схема

На самом деле база данных Oracle содержит логическую и физическую структуру для обработки данных. Схема также является логической структурой для обработки данных в базе данных (компонент памяти). Он создается автоматически Oracle при создании пользователя. Он содержит все объекты, созданные пользователем, связанные с этой схемой. Например, если я создал пользователя с именем santhosh, то оракул создает схему с именем santhosh, Oracle сохраняет все объекты, созданные пользователем santhosh, в схеме santhosh.

Мы можем создать схему с помощью инструкции CREATE SCHEMA, но Oracle автоматически создает пользователя для этой схемы.

Мы можем удалить схему с помощью инструкции DROP SCHEMA RESTRICT, но она не может удалить объекты, содержащиеся в схеме, поэтому для удаления схемы она должна быть пустой. здесь ограничивающее слово заставляет вас указать эту схему без объектов.

Если мы попытаемся удалить пользователя, содержащего объекты в его схеме, мы должны указать слово CASCADE, поскольку Oracle не позволяет вам удалять пользователя, содержащего объекты.

УДАЛИТЬ КАСКАД ПОЛЬЗОВАТЕЛЯ

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

В чем разница между пользователем и схемой в Oracle?

Схемы Oracle аналогичны папкам "Мои документы" в ОС Windows. Пользователь может предоставлять другим пользователям разрешения на просмотр вещей в их схеме. Схема Oracle — это, по сути, рабочая область пользователя.

15 ответов 15

Схему следует рассматривать как учетную запись пользователя и набор всех объектов в ней как схему для всех целей и намерений.

SCOTT — это схема, включающая таблицы EMP, DEPT и BONUS с различными грантами и прочим.

SYS – это схема, включающая множество таблиц, представлений, грантов и т. д. и т. п.

SYSTEM — это схема.

Технически -- схема – это набор метаданных (словарей данных), используемых базой данных, обычно генерируемых с помощью DDL. Схема определяет атрибуты базы данных, такие как таблицы, столбцы и свойства. Схема базы данных — это описание данных в базе данных.

С той же страницы: во всех смыслах просто считайте, что user = schema = user = schema = одно и то же.

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

Я думаю, проблема в том, что Oracle использует термин схема несколько иначе, чем обычно.

  1. Схема Oracle (как объяснено в ответе Небаканезера): в основном набор всех таблиц и других объектов, принадлежащих учетной записи пользователя, что примерно эквивалентно учетной записи пользователя.
  2. Схема в целом: набор всех таблиц, sproc и т. д., которые составляют базу данных для данной системы/приложения (например, "Разработчики должны обсудить с администраторами баз данных схему для нашего нового приложения").

Схема в смысле 2. похожа, но не совпадает со схемой в смысле 1. Например. для приложения, которое использует несколько учетных записей БД, схема в смысле 2 может состоять из нескольких схем Oracle :-).

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

Oracle должен был просто использовать такие термины, как "userarea" или "accountobjects", вместо перегрузки в "schema".

  • Схема – это набор объектов базы данных, включая логические структуры, такие как таблицы, представления, последовательности, хранимые процедуры, синонимы, индексы, кластеры и ссылки на базы данных.
  • Пользователь владеет схемой.
  • Пользователь и схема имеют одно и то же имя.
  • Команда CREATE USER создает пользователя. Он также автоматически создает схему для этого пользователя.
  • Команда CREATE SCHEMA не создает "схему", как это подразумевается, она просто позволяет вам создать несколько таблиц и представлений и выполнить несколько разрешений в вашей собственной схеме за одну транзакцию.
  • Во всех смыслах и целях вы можете считать пользователя схемой, а схему — пользователем.

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

"Команда CREATE SCHEMA не создает "схему", как это подразумевается". Я думаю, что 99% путаницы происходит из-за этого. И этот фрагмент предложения очень хорошо это проясняет. Спасибо.

Подумайте о пользователе, как вы обычно это делаете (имя пользователя/пароль с доступом для входа и доступа к некоторым объектам в системе), а схема - как о версии базы данных домашнего каталога пользователя. Пользователь "foo" обычно создает что-то в схеме "foo", например, если пользователь "foo" создает или ссылается на таблицу "bar", то Oracle предполагает, что пользователь имеет в виду "foo.bar".

хорошее описание, но почему вы использовали "foo" и для пользователя, и для схемы?! Должны ли они быть одинаковыми?

В Oracle USER — это имя учетной записи, а SCHEMA — набор объектов, принадлежащих этому пользователю. Несмотря на то, что Oracle создает объект SCHEMA как часть оператора CREATE USER, и SCHEMA имеет то же имя, что и USER, но они имеют одно и то же значение. Конечно, путаница частично связана с тем фактом, что между ПОЛЬЗОВАТЕЛЕМ и СХЕМОЙ существует однозначное соответствие, а схема пользователя имеет такое же имя.

Этот ответ не определяет разницу между владельцем и схемой, но я думаю, что он дополняет обсуждение.

В моем маленьком мирке мыслей:

Я боролся с идеей, что я создаю N пользователей, где я хочу, чтобы каждый из этих пользователей "потреблял" (т.е. использовал) единую схему.

Тим из oracle-base.com показывает, как это сделать (есть N пользователей, и каждый из этих пользователей будет "перенаправлен" на одну схему).

Подход CURRENT_SCHEMA

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

Сначала мы создаем владельца схемы и пользователя приложения. .

Обратите внимание, что пользователь приложения может подключаться, но у него нет квот табличного пространства или привилегий для создания объектов.

Затем мы создаем несколько ролей, чтобы разрешить чтение-запись и чтение-запись. только доступ.

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

Нам нужно убедиться, что пользователь приложения имеет свою схема по умолчанию, указывающая на владельца схемы, поэтому мы создаем триггер AFTER LOGON, чтобы сделать это за нас.

Теперь мы готовы создать объект в схеме владельца.

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

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

цитата>

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