Oracle oid что это
Идентификатор объекта (Object Identifier, OID) используется внутри Postgres Pro в качестве первичного ключа различных системных таблиц. В пользовательские таблицы столбец OID добавляется, только если при создании таблицы указывается WITH OIDS или включён параметр конфигурации default_with_oids. Идентификатор объекта представляется в типе oid . Также для типа oid определены следующие псевдонимы: regproc , regprocedure , regoper , regoperator , regclass , regtype , regrole , regnamespace , regconfig и regdictionary . Обзор этих типов приведён в Таблице 8.24.
В настоящее время тип oid реализован как четырёхбайтное целое. Таким образом, значение этого типа может быть недостаточно большим для обеспечения уникальности в базе данных или даже в отдельных больших таблицах. Поэтому в пользовательских таблицах использовать столбец типа OID в качестве первичного ключа не рекомендуется. Лучше всего ограничить применение этого типа обращениями к системным таблицам.
Для самого типа oid помимо сравнения определены всего несколько операторов. Однако его можно привести к целому и затем задействовать в обычных целочисленных вычислениях. (При этом следует опасаться путаницы со знаковыми/беззнаковыми значениями.)
Типы-псевдонимы OID сами по себе не вводят новых операций и отличаются только специализированными функциями ввода/вывода. Эти функции могут принимать и выводить не просто числовые значения, как тип oid , а символические имена системных объектов. Эти типы позволяют упростить поиск объектов по значениям OID. Например, чтобы выбрать из pg_attribute строки, относящиеся к таблице mytable , можно написать:
Хотя второй вариант выглядит не таким уж плохим, но это лишь очень простой запрос. Если же потребуется выбрать правильный OID, когда таблица mytable есть в нескольких схемах, вложенный подзапрос будет гораздо сложнее. Преобразователь вводимого значения типа regclass находит таблицу согласно заданному пути поиска схем, так что он делает « всё правильно » автоматически. Аналогично, приведя идентификатор таблицы к типу regclass , можно получить символическое представление числового кода.
Таблица 8.24. Идентификаторы объектов
Имя | Ссылки | Описание | Пример значения |
---|---|---|---|
oid | any | числовой идентификатор объекта | 564182 |
regproc | pg_proc | имя функции | sum |
regprocedure | pg_proc | функция с типами аргументов | sum(int4) |
regoper | pg_operator | имя оператора | + |
regoperator | pg_operator | оператор с типами аргументов | *(integer,integer) или -(NONE,integer) |
regclass | pg_class | имя отношения | pg_type |
regtype | pg_type | имя типа данных | integer |
regrole | pg_authid | имя роли | smithee |
regnamespace | pg_namespace | пространство имён | pg_catalog |
regconfig | pg_ts_config | конфигурация текстового поиска | english |
regdictionary | pg_ts_dict | словарь текстового поиска | simple |
Все типы псевдонимов OID для объектов, сгруппированных в пространство имён, принимают имена, дополненные именем схемы, и выводят имена со схемой, если данный объект нельзя будет найти в текущем пути поиска без имени схемы. Типы regproc и regoper принимают только уникальные вводимые имена (не перегруженные), что ограничивает их применимость; в большинстве случаев лучше использовать regprocedure или regoperator . Для типа regoperator в записи унарного оператора неиспользуемый операнд заменяется словом NONE .
Дополнительным свойством большинства типов псевдонимов OID является образование зависимостей. Когда в сохранённом выражении фигурирует константа одного из этих типов (например, в представлении или в значении столбца по умолчанию), это создаёт зависимость от целевого объекта. Например, если значение по умолчанию определяется выражением nextval('my_seq'::regclass) , Postgres Pro понимает, что это выражение зависит от последовательности my_seq , и не позволит удалить последовательность раньше, чем будет удалено это выражение. Единственным ограничением является тип regrole . Константы этого типа в таких выражениях не допускаются.
Примечание
Типы псевдонимов OID не полностью следуют правилам изоляции транзакций. Планировщик тоже воспринимает их как простые константы, что может привести к неоптимальному планированию запросов.
Есть ещё один тип системных идентификаторов, xid , представляющий идентификатор транзакции (сокращённо xact ). Этот тип имеют системные столбцы xmin и xmax . Идентификаторы транзакций определяются 32-битными числами.
Третий тип идентификаторов, используемых в системе, — cid , идентификатор команды (command identifier). Этот тип данных имеют системные столбцы cmin и cmax . Идентификаторы команд — это тоже 32-битные числа.
И наконец, последний тип системных идентификаторов — tid , идентификатор строки/кортежа (tuple identifier). Этот тип данных имеет системный столбец ctid . Идентификатор кортежа представляет собой пару (из номера блока и индекса кортежа в блоке), идентифицирующую физическое расположение строки в таблице.
Oracle Internet Directory ( OID ) - это служба каталогов, созданная Oracle Corporation , которая по своим функциям совместима с LDAP версии 3.
Содержание
Функциональность
OID делает следующие функции доступными из среды базы данных Oracle :
- интеграция с Oracle 8i и последующими базами данных для простоты использования и администрирования
- масштабируемая мультиплатформенная структура листинга для надежной и безопасной интеграции в интрасеть
- синхронизация листингов на основе OID (также с распределенными приложениями )
- интеграция существующих сертификатов открытых ключей , цифровых кошельков (электронных кошельков) и прав доступа
- сосуществование с другими реализациями LDAP через Oracle Directory Integration Platform (DIP)
- инструменты администрирования, в том числе:
- объекты управления системой, такие как Oracle Directory Manager (также известный как "oidadmin" или "ODM")
- техническая поддержка по качеству услуг
- делегированная административная служба
Реализация
OID использует стандартные структуры базы данных Oracle для хранения своих внутренних таблиц.
В базах данных Oracle версии 9 по умолчанию многие хранилища таблиц Oracle LDAP используют табличные пространства, имена которых начинаются с префиксов OLTS_ (а иногда и P1TS_ ). Соответствующие используемые схемы по умолчанию могут включать ODS (для «Oracle Directory Server») и ODSCOMMON .
Операция
Утилита управления OID (OIDCTL) служит инструментом командной строки для запуска и остановки сервера OID. Процесс OID Monitor интерпретирует и выполняет команды OIDCTL.
Маркетинг
Сравнивая Oracle Internet Directory с конкурентами, корпорация Oracle подчеркивает, что в качестве основы использует базу данных Oracle ; тогда как многие конкурирующие продукты (такие как Oracle Directory Server Enterprise Edition и Novell eDirectory ) полагаются не на реляционную базу данных корпоративного уровня, а на встроенные механизмы баз данных, подобные Berkeley DB . Интеграция с базой данных Oracle делает многие технологии, доступные для базы данных Oracle, доступными для Oracle Internet Directory, а улучшения, которые Oracle вносит в пространство базы данных, могут мгновенно перейти к его реализации LDAP.
В маркетинговых целях OID является частью пакета Oracle Identity Management для Oracle Application Server .
Распределение
Версия 9 базы данных Oracle включала OID в комплекте как дополнительное средство. По состоянию на 2006 год OID поставлялся с Oracle Application Server версии 10.
С 2007 года корпорация Oracle делает самую последнюю версию OID доступной только как часть пакета Identity Management-Suite Oracle Application Server (10.1.4.0.1).
Oracle Internet Directory 11g является частью службы каталогов Oracle (ODS).
14 rows selected.
Это существенно отличается от того, что выдает команда describe. Оказывается, в этой таблице 14 столбцов, а не 4. Они описаны ниже.
SYS NC OID$. Это сгенерированный системой идентификатор объекта для таблицы. Это уникальный столбец типа RAW(16). Для него установлено ограничение уникальности - по нему создан соответствующий уникальный индекс.
SYS NC ROWINFO. Это та же магическая функция, что и в случае вложенной таблицы. Если выбрать ее значение из таблицы, возвращается вся строка в виде одного столбца:
tkyte@TKYTE816> select sys nc rowinfo$ from people;
SYS NC RONFO$(HAME, DOB, HOME ADSS (CITY, STREET, STATE, ZIP).
PERSON TYPE(Tom, 45-MAR-65, ADDRESSJTYPE(Leesburg , 4234 Main Street, Va, 20175), ADDRESS TYPE(Reston, 4910 Oracle Way, Va, 20190))
NAME, DOB. Это скалярные атрибуты нашей объектной таблицы. Они, как и можно было предположить, хранятся как обычные столбцы.
HOME ADDRESS, WORK ADDRESS. Это тоже магические функции - они
возвращают набор столбцов в виде единого объекта. Места они не занимают, за исключением признака NULL или NOT NULL для столбца.
SYS NCnnnnn$. Это скалярные реализации встроенных объектных типов. Поскольку тип PERSONJTYPE содержит встроенный тип ADDRESS TYPE, серверу Oracle необходимо место для хранения его атрибутов в виде столбцов соответствующего типа. Сгенерированные системой имена необходимы, поскольку имена столбцов должны быть уникальными, а ничто не мешает использовать один и тот же объектный тип несколько раз, как в нашем примере. Если бы имена не генерировались, столбец ZIP, например, был бы повторен дважды.
Итак, как и в случае вложенных таблиц, за кулисами происходит много чего. Добавлен фиктивный первичный ключ длиной 16 байт, автоматически созданы виртуальные столбцы и индекс. Можно изменить стандартный идентификатор объекта, как будет показано ниже. Сначала давайте рассмотри полный текст подробного оператора SQL, генерирующего нашу таблицу. И в этот раз он сгенерирован с помощью пары утилит ЕХР/IMP:
CREATE TABLE TKYTE . PEOPLE
OF PERSON TYPE OID 36101E4C6B7E4F7E96A8A6662518965C
OIDINDEX (PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 131072 NEXT 131072
MINEXTENTS 1 MAXEXTENTS 4096
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER POOL DEFAULT)
PCTFREE 10 PCTUSED 40
INITRANS 1 MAXTRANS 255
LOGGING STORAGE(INITIAL 131072 NEXT 131072
MINEXTENTS 1 MAXEXTENTS 4096
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER POOL DEFAULT) TABLESPACE USERS
ALTER TABLE TKYTE . PEOPLE MODIFY
( SYS NC OID$ DEFAULT SYS OP GUID () ) /
Это дает чуть больше информации о том, что происходит на самом деле. Теперь мы четко видим конструкцию OIDINDEX и то, что она сс1лается на столбец SYS NC OID$. Это скрытый первичный ключ таблицы. Функция SYS OP GUID совпадает с функцией SYS GUID. Обе они возвращают глобально уникальный идентификатор, представленный в поле типа RAW(16).
Синтаксис OID <большое шестнадцатиричное число> не описан в документации СУБД Oracle. Он просто гарантирует, что в ходе экспорта и последующего импорта базовый тип PERSONTYPE фактически - один и тот же. Это предотвращает возникновение ошибок если:
создать таблицу PEOPLE;
удалить базовый тип PERSON TYPE;
создать новый тип PERSON TYPE с другими атрибутами;
импортировать старые данные таблицы PEOPLE.
Очевидно, экспортированные данные не могут быть импортированы в новую структуру, поскольку они ей не соответствуют. Эта проверка предотвращает возникновение подобной ситуации. Об особенностях экспорта и импорта объектных таблиц см. в главе 8.
Если помните, я упоминал, что можно изменить объектный идентификатор, присваиваемый экземпляру объекта. Вместо автоматически сгенерированного системой фиктивного первичного ключа можно использовать естественный первичный ключ объекта. Сначала это может показаться бесполезным - столбец SYS NC OID$ все равно входит в определение объекта в таблице словаря SYS.COL$ и, казалось бы, для него требуется больше пространства, чем для сгенерированного системой столбца. Но и в этом
случае происходит чудо . Столбец SYS NC OID$ для объектной таблицы, основанный на первичном ключе, а не сгенерированный системой, является виртуальным и места на диске не занимает. Вот пример, демонстрирующий, что происходит в словаре данных, и то, что физического пространства столбец SYS NC OID$ не занимает. Начнем с анализа таблицы с идентификатором объекта, сгенерированным системой:
TABLE TKYTE . PEOPLE
2 OF PERSON TYPE
tkyte@TKYTE816> select name, typef, segcollength
from user objects where object name = and name like SYS\ NC\ % escape \
SYS NC OID$ SYS NC ROWINFO$
tkyte@TKYTE816> insert into people(name) 2 select rownum from all objects;
21765 rows created.
tkyte@TKYTE816> analyze table people compute statistics; Table analyzed.
tkyte@TKYTE816> select table name, avg row len from user object tables; TABLE NAME AVG ROW LEN
Итак, как видите, средняя длина строки составляет 25 байт, 16 байт занимает столбец SYS NC OID$ и 9 байт - столбец NAME. Теперь давайте создадим такую же таблицу, но используем первичный ключ, столбец NAME, в качестве идентификатора объек-
значит с начала -
поставил IOD на выделенный сервер, отдельно создал базу sid=testldp, с помощью netca ввел ее в OID, создал схему - create
user globaluser identified globally as '';
(dn=cn=testldp,cn=OracleContext,dc=domain,dc=ua), подложил wallet на OID и DB, в OID создал Configuration Set2 -
SSL Settings:
SSL Authentication = SSL Client And Server Authentication
SSL Enable: Both SSL And Non-SSL
SSL Wallet URL=file:/etc/ORACLE/WALLETS/oracle
SSL Port=1636
в ldap.ora -
DIRECTORY_SERVERS= (10.17.250.50:1389:1636)
DEFAULT_ADMIN_CONTEXT = "cn=testldp,cn=OracleContext,dc=domain,dc=ua"
DIRECTORY_SERVER_TYPE = OID
в sqlnet.ora
WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/etc/ORACLE/WALLETS/oracle)))
NAMES.DIRECTORY_PATH= (LDAP, TNSNAMES)
Проверяю LDAP с DB сервера -
ldapbind -U 3 -h 10.17.250.50 -p 1636 -W "file:/etc/ORACLE/WALLETS/oracle" -P "secret"
bind successful
Вот первый трабл -
ldapsearch -x -s sub -b 'dc=domain,dc=ua' '(uid=user001)' -h 10.17.250.50:1636 -W "file:/etc/ORACLE/WALLETS/oracle"
Enter LDAP Password: *****
ldap_result: Can't contact LDAP server (-1)
на OID в /home/oracle/HomeOra1/ldap/log -
tail -2 oidldapd02s11527.log
SSLthread:23 * gslfblsrSockread: Other end not responding, max retry reached
SSLthread:23 * ERROR * gslsflnNegotiateSSL * SSL Hand Shake failed Source address: 10.17.250.104(ods.domain.ua) * (NZerr 28862)
А вот основная трабла -
admin> sqlplus user001/user001
ERROR:
ORA-28030: Server encountered problems accessing LDAP directory service
делал это - получал -
oracle@ods:/etc/ORACLE/WALLETS/oracle> ldapbind -U 3 -h 10.17.250.50 -p 1636 -W "file:/etc/ORACLE/WALLETS/oracle" -P "secret"
ldap_bind: Operations error
ldap_bind: additional info: Error Reading SSL credentials
listener и tnsnames на ssl не настраивал, так как задача стоит только аутентифицировать пользователей в LDAP.
когда netca вводит бд в OID он не добавляет обджект класс - objectclass: orclNetService (Note:120723.1).
добавил его руками - не помогло,
ERROR:
ORA-28030: Server encountered problems accessing LDAP directory service
в sqlnet.ora закоментил параметры WALLET, в ldap.ora вторым портом параметра DIRECTORY_SERVERS= (10.17.250.50:389:389) прописал 1389-й порт второго инстанса OID. tcpdump-ом вижу запрос на порт и ответы от OID -
ERROR:
ORA-28030: Server encountered problems accessing LDAP directory service
ldapbind и ldapsearch проходят по 389 порту без проблем. База вязаться не хочет, Менял параметры DEFAULT_ADMIN_CONTEXT, alter system set rdbms_server_dn, - всеравно та же ошибка.
да, по ним делал, создал wallet как описано на Note:189260.1, только подписывал его сертификатом который сгенерил как описано тут
подложил cwallet.sso к OID, к базе - ewallet.p12. ldapbind на порт SSL говорит bind successful а вот ldapsearch - ldap_result: Can't contact LDAP server (-1). Ну и отсюда ошибка ORA-28030. Пробывал подписывать рутовым сертификатом с металинка (Note:189260.1) - получилась полная фигня -
ldap_bind: Operations error
ldap_bind: additional info: Error Reading SSL credentials
Оракл и оид работают от oracle, сертификаты генерил под этим же пользователем.
да, по ним делал, создал wallet как описано на Note:189260.1, только подписывал его сертификатом который сгенерил как описано тут
подложил cwallet.sso к OID, к базе - ewallet.p12. ldapbind на порт SSL говорит bind successful а вот ldapsearch - ldap_result: Can't contact LDAP server (-1). Ну и отсюда ошибка ORA-28030. Пробывал подписывать рутовым сертификатом с металинка (Note:189260.1) - получилась полная фигня -
ldap_bind: Operations error
ldap_bind: additional info: Error Reading SSL credentials
Оракл и оид работают от oracle, сертификаты генерил под этим же пользователем.
такая ботва была. 389 - порт по умолчанию для MS AD, ldapbind проходит, а остальное - нет. Может на этом адресе затаился ?
цитата не от perlik, ув. Biz© :))
создаю wallet через GUI, экспортю реквест, создаю CA openssl-лем, подписываю и все это импорчу назад в wallet. Выкладываю cwallet.sso на OID ну и на базюке тоже оставляю.
Эта связка у меня не работает.
Второй вариант -
создаю wallet через orapki делаю как сказано - и тоже ничего. точнее ошибка соединения базы с OID.
При подключении базы в OID создается wallet который содержит ORACLE.SECURITY.DN и ORACLE.SECURITY.PASSWORD. здесь пишут что достаточно импортить в этот wallet сертификат моей database и все пойдет. - не помогло.
А вот тут пишут - Bug 5743928 - PATCH 4764518 (INCLUDED WITH IDM 10.1.4.0.1) BREAKS EUS | ERROR: ORA-28030. правда под соляркой - но все равно интересный момент.
создаю wallet через GUI, экспортю реквест, создаю CA openssl-лем, подписываю и все это импорчу назад в wallet. Выкладываю cwallet.sso на OID ну и на базюке тоже оставляю.
нельзя использовать один и тот же wallet для сервер БД и OID'е
создаю wallet через GUI, экспортю реквест, создаю CA openssl-лем, подписываю и все это импорчу назад в wallet. Выкладываю cwallet.sso на OID ну и на базюке тоже оставляю.
нельзя использовать один и тот же wallet для сервер БД и OID'е
у меня все работает и по SSL и без. Базы 9.2.0.8 и 10gR2 разные, AS 10.1.0.4.2
Я тогда не пойму, wallet для сервера, который прописан в OID в параметре
SSL Wallet URL file:/etc/ORACLE/WALLETS/oracle
Создется отдельно, ему нужно подливать сертификат с базы? я имею ввиду пользовательский сертификат который сгенерился при создании walleta для БД. Или же когда я базу ввожу в OID она сама подливает свои сертификаты.
А без SSL, в пораметре ldap.ora я указываю root dn= dc=domain,dc=ua.
DIRECTORY_SERVERS= (ldap:1389:1636)
при том что 1636-это порт SSL.
Просто еще раз перечитал и перепробывал все с начала.
именно о том самом и речь. в 10g безопасность связи бд с oid обеспечивается помимо ssl с помощью безопасного пароля ( типа сасл и есть). Логин базы и пароль сидит в wallet, который создается по умолчанию в момент регистрации базы в oid'е. Сам пароль никому не известен, известен только пароль к wallet. Впрочем, SSL тоже не отменялся, можно и по нему. Но парольный метод используется по умолчанию.
Читайте также: