15 мая 2011 г.

oracle: Synonym (Синонимы)

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

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

Различают два типа синонимов:

    Частный (PRIVATE)- синонимы содержаться в схеме конкретного пользователя и доступны только самому пользователю, и тем, кому он предоставил соответствующие права доступа.
    Общий (PUBLIC)- этими синонимами владеет специальная группа пользователей – PUBLIC, в результате чего эти синонимы доступны всем пользователям базы данных.



Создание синонимов

Чтобы создать частный синоним необходима привилегия CREATE SYNONYM, для того чтобы иметь права на создание синонима в схеме другого пользователя, необходима привилегия CREATE ANY SYNONYM. Для создания общих синонимов, необходима привилегия CREATE PUBLIC SYNONYM.

Для создания синонимов используется конструкция CREATE SYNONYM или CREATE PUBLIC SYNONYM, в зависимости от типа создаваемого синонима. При создании наличие реального объекта и привилегий доступа к нему не требуется.

CREATE SYNONYM [имя_синонима] FOR[имя_объекта]

CREATE PUBLIC SYNONYM [имя_синонима] FOR[имя_объекта]


Например, у нас есть таблица ALL_ORACLE_USERS, в схеме ALL_ORACLE , и создадим для нее частный и общий синонимы:

CREATE SYNONYM SYN_ALL_ORACLE_USERS FOR ALL_ORACLE.ALL_ORACLE_USERS;

CREATE PUBLIC SYNONYM SYNP_ALL_ORACLE_USERS FOR ALL_ORACLE.ALL_ORACLE_USERS;


Удаление синонимов

В своей схеме пользователь может удалять любые частные синонимы. Для удаления частных синонимов в схеме другого пользователя, необходима привилегия DROP ANY SYNONYM, для удаления общих – DROP PUBLIC SYNONYM.

Для удаления используется оператор – DROP SYNONYM. Для удаления общего синонима - DROP PUBLIC SYNONYM. Например, удалим ранее созданные синонимы:

DROP SYNONYM SYN_ALL_ORACLE_USERS;

DROP PUBLIC SYNONYM SYNP_ALL_ORACLE_USERS;

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

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

ALTER SYNONYM [имя_синонима] COMPILE;