Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > System scheme, Scheme scheme что это?


Автор: Berliner 23.5.2006, 15:57
здраствуйте подскажите пожалуста что такое System scheme, Object Scheme. А то читал в хелпе по Oracle и не понял что это, может роли? 

Автор: Sqlninja 23.5.2006, 16:04
Вообще, это набор логических структур данных.

Каждый обьектв Oracle хранится в определенной условной схеме. Схема может быть системной типа SYS или SYSTEM,  или пользовательской типа SCOTT. Каждый юзер имеет свою схему, которая имеет такое же имя как и он. В схему могут входить самые различные объекты - таблицы, индексы, кластеры, Java классы и.т.д. Манипуляции со схемами осуществляются с помощью SQL.

  

Автор: batigoal 23.5.2006, 16:06
Насколько я понимаю, это практически то же самое, что пользователь (под которым ты коннектишься). Т.е., грубо говоря, 1 юзер соответствует 1 схеме и наоборот.

Поправьте, если не так. 

Автор: Sqlninja 23.5.2006, 16:15
Один юзер - одна схема. Но строго говоря, это не тоже самое, если по определению. Обьекты схемы - это логические структуры хранимых данных. Однако, это чистая абстракция. Схема никак не привязана к физическим структурам данных, например, к табличным пространствам или файлам. 

Автор: LSD 23.5.2006, 20:24
Схема это что-то вроде пакетов в Java, просто способ логически сгруппировать данные.

В Oracle схема жестко привязанна к пользователю, но  например в SQL Server - нет, схема существует независимо от пользователя. 

Автор: Berliner 24.5.2006, 11:09
Интересно, когда ставил сервер у меня спросили пароль  system ввел пароль(я так понимаю это пароль админа),  есть тестовый юзер HR с базой про сотрудников. Пытаюсь сделать выборку из этой быза про сотрудников, при помощи пользователя system- пишет(что типа недоступная схема или что то такое), интересно пароль администратора и недоступная схема. Хотя насколько я понял из Help что в Oracle есть несколько типов администраторов. 

Автор: batigoal 24.5.2006, 11:36
Цитата(Berliner @  24.5.2006,  12:09 Найти цитируемый пост)
Пытаюсь сделать выборку из этой быза про сотрудников, при помощи пользователя system- пишет(что типа недоступная схема или что то такое), 

Потому что SYSTEM имеет доступ ко всем схемам, из-за этого нужно указать схему явно. Типа такого:
Код

SELECT * FROM hr.dual;

 

Автор: LSD 25.5.2006, 10:01
Цитата(Berliner @  24.5.2006,  12:09 Найти цитируемый пост)
Хотя насколько я понял из Help что в Oracle есть несколько типов администраторов.

Вероятнее всего там речь шла о DBA, а не учетных записях. Действительно в Oracle выделяют 12 разных типов DBA, по специализции, но это уже изыски.
Из учетных записей можно выделить SYS, это пользователь в схеме которого хранятся все словари, системные данные и т.п. Любой пользователь соединившийся как SYSDBA, автоматически начинает работать от имени SYS. 

Автор: BIZ0N 27.5.2006, 18:18
Вопрос: а обьекты тоже обязательно принадлежат какойнибудь схеме? а системные представления (например dba_users)?

Я просто читаю статью с www.firststeps.ru (он здесь упоминался как один из хороших источников), не могу проглотить вот эту фразу:
Цитата

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


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

Автор: batigoal 27.5.2006, 20:16
Видимо, тут идет речь об именованных и анонимных процедурах. Именованные сохранятся в БД для последующего использования, анонимные существуют только во время выполнения.

Цитата(BIZ0N @  27.5.2006,  19:18 Найти цитируемый пост)
а системные представления (например dba_users)?

Судя по коду, они принадлежат схеме SYS:
Код

REM SYS V_$OPEN_CURSOR

  CREATE OR REPLACE FORCE VIEW "SYS"."V_$OPEN_CURSOR" ("SADDR", "SID", "USER_NAME", "ADDRESS", "HASH_VALUE", "SQL_ID", "SQL_TEXT") AS 
  select "SADDR","SID","USER_NAME","ADDRESS","HASH_VALUE","SQL_ID","SQL_TEXT" from v$open_cursor;
 

Автор: Sqlninja 28.5.2006, 11:58
Цитата(BIZ0N @  27.5.2006,  18:18 Найти цитируемый пост)
Про что здесь разговор? О том, где может храниться код (на клиенте или на сервере), или про то что обьекты не принадлежат отдельной схеме, а принадлежат базе в целом?  


Здесь просто нужно  понять отличие хранимых обьектов от локальных. Хранимый объект, например, процедура, пакет или функция, хранится в базе в скомпилированном виде, в так называемом P-Code. При наличии соответствующих привилегий хранимые обьекты могут быть доступны из внешних программ и быть видимыми для всех пользователей.

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

Так вот, Вы не можете создавать локальные пакеты в программных блоках, ни в анонимных, ни в именованых, то есть подобное делать нельзя:

Код

declare
  package pkg_coca_cola_mstat is
  ...
  end pkg_coca_cola_mstat;
begin
...
end;
 

Автор: BIZ0N 28.5.2006, 18:15
to Sqlninja: Спасибо именно то, что хотел услышать! (очень хороший пример) 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)