Синонимы (synonyms) Oracle Database — это псевдонимы объектов базы данных, которые служат в основном для облегчения пользователям доступа к объектам, принадлежащим другим пользователям, а также в целях безопасности. Синонимы скрывают идентичность лежащих в их основе объектов и могут быть как приватными (private), так и общедоступными (public). Общедоступные синонимы доступны всем пользователям базы данных,а приватные синонимы являются составной частью схемы отдельного пользователя, и другим пользователям базы следует выдавать права доступа для использования приватных синонимов. Синонимы Oracle могут быть созданы для таблиц, представлений, материализованных представлений и хранимого кода — пакетов и процедур.
Синонимы Oracle — очень мощное средство с точки зрения обеспечения пользователям доступа к объектам, которые не принадлежат к их схемам. Все синонимы должны создаваться явно командой CREATE SYNONYM, а лежащие в основе объекты могут находиться в той же базе данных или в других базах, подключенных по связям баз данных.
Сфера применения синонимов Oracle
Есть два основных применения синонимов.
- Для обеспечения прозрачности объектов. Синонимы могут быть созданы для обеспечения прозрачности исходных объектов для пользователя.
- Для прозрачности расположения. Синонимы могут быть созданы как псевдонимы таблиц и прочих объектов, относящихся к нелокальной базе данных.
На заметку! Имейте в виду, что даже если вы знаете синоним таблицы схемы, то не обязательно имеете доступ к ней. Для доступа к такой таблице нужно иметь необходимые привилегии.
Когда вы создаете таблицу или процедуру, база данных создает их в вашей схеме, а другие пользователи могут обращаться к ним, используя имя вашей схемы в качестве префикса имени объекта. В листинге ниже показано несколько примеров, иллюстрирующих это положение.
SQL> SHOW USER USER is "SYSTEM" SQL> DESC employees ERROR: ORA-04043: object employees does not exist ORA-04043: объект employees не существует SQL> DESC hr.employees Name Null? Type --------------- -------- -------------- EMPLOYEE_ID NOT NULL NUMBER(6) FIRST_NAME VARCHAR2(20) LAST_NAME NOT NULL VARCHAR2(25) EMAIL NOT NULL VARCHAR2(25) PHONE_NUMBER VARCHAR2(20) HIRE_DATE NOT NULL DATE JOB_ID NOT NULL VARCHAR2(10) SALARY NUMBER(8,2) COMMISSION_PCT NUMBER(2,2) MANAGER_ID NUMBER(6) DEPARTMENT_ID NUMBER(4) SQL>
Как видите, когда пользователь SYSTEM пытается получить структуру таблицы без префикса — имени схемы, Oracle выдает ошибку, сообщающую об отсутствии таблицы. Чтобы обойти это, владелец схемы должен создать синоним с тем же именем, что и у таблицы. Как только пользователь SYSTEM применит нотацию схема.таблица, он сможет увидеть содержимое таблицы.
Создание общедоступного синонима
Общедоступные (public) синонимы относятся к специальной схеме базы данных Oracle, именуемой PUBLIC. Как упоминалось ранее, общедоступные синонимы видны всем пользователям базы данных. Общедоступные синонимы обычно создаются владельцем приложения для таблиц и прочих объектов, таких как процедуры и пакеты,чтобы пользователи приложения могли видеть эти объекты.
В следующем коде показано, как создается общедоступный синоним для таблицы employees:
SQL> CREATE PUBLIC SYNONYM employees FOR hr.employees; Synonym created. SQL>
Теперь любой пользователь сможет видеть таблицу, просто набрав ее исходное имя. При желании с помощью оператора CREATE SYNONYM таблице можно дать другое имя. Помните, что администратор базы данных должен явно выдать привилегию CREATE PUBLIC SYNONYM пользователю hr, чтобы тот мог создавать общедоступные синонимы.
Возможность видеть таблицу через общедоступный (или приватный) синоним, еще не означает возможность выполнения над ней операций SELECT, INSERT, UPDATE или DELETE. Для выполнения таких операций пользователю нужны специальные привилегии для доступа к исходному объекту, выданные владельцем приложения непосредственно или через роли.
Создание приватного синонима
Приватные синонимы, в отличие от общедоступных, видны только в схеме, владеющей таблицей или объектом. Приватные синонимы можно создать, когда нужно обращаться к одной и той же таблице в разных контекстах под разными именами. Они создаются точно так же, как и общедоступные, но без ключевого слова PUBLIC в операторе CREATE.
В следующем примере показано, как создать приватный синоним по имени addresses для таблицы locations. Обратите внимание, что после создания к приватному синониму можно обращаться как к первоначальному имени таблицы.
SQL> CREATE SYNONYM addresses FOR hr.locations; Synonym created. SQL> SELECT * FROM addresses;
Уничтожение синонима
И приватный, и общедоступный синонимы уничтожаются командой DROP SYNONYM,но есть одно отличие. При уничтожении общедоступного синонима после ключевого слова DROP должно находиться ключевое слово PUBLIC.
Ниже показан пример уничтожения приватного синонима:
SQL> DROP SYNONYM addresses; Synonym dropped. SQL>
Управление синонимами
Представление DBA_SYNONYMS содержит информацию обо всех синонимах в вашей базе данных. Синонимы основаны на лежащих в основе базовых таблицах, и узнать имена базовых объектов можно, запустив запрос, подобный следующему:
SQL> SELECT TABLE_NAME, SYNONYM_NAME FROM dba_synonyms WHERE OWNER = 'SALAPATI'; TABLE_NAME SYNONYM_NAME ---------- ------------ DEPT DEPT EMP EMP SQL>
Используйте представление DBA_SYNONYMS для выяснения имен базовых таблиц,скрывающихся за синонимами.
Переключение к другой схеме
Если вы постоянно используете таблицы, принадлежащие другой схеме, и в этой схеме нет никаких синонимов, придется перед каждым именем таблицы указывать квалификатор схемы. Например, для обращения к таблице emp, принадлежащей пользователю scott, понадобится указывать emp.scott. Чтобы избежать этого, можно применить следующий оператор ALTER SESSION SET SCHEMA:
SQL> CONNECT samalapati/sammyy1 SQL> ALTER SESSION SET CURRENT_SCHEMA = scott; SQL> SELECT * FROM emp;
Использование оператора ALTER SESSION не приводит к автоматической выдаче каких-либо привилегий. Для того чтобы запросить таблицу emp без квалификатора схемы, как показано в предыдущем примере, пользователь должен иметь привилегию SELECT на таблице emp.
Вас заинтересует / Intresting for you:
В этом учебном материале вы узнаете, как создавать и удалять синонимы (create and drop synonyms) в Oracle/PLSQL с синтаксисом и примерами.
Описание
В Oracle/PLSQL Synonym это альтернативное имя для таких объектов, как таблицы, представления, последовательности, хранимые процедуры и другие объекты базы данных.
Как правило, вы используете синонимы, когда предоставляете доступ к объекту из другой схемы, и вы не хотите, чтобы пользователи беспокоились о том, к какой схеме относится объект.
Create (or Replace) Synonym
Вы можете создать синоним, так чтобы пользователи не использовали префикс имени таблицы с именем схемы, при использовании таблицы в запросе.
Синтаксис
Синтаксис для создания синонимов Oracle/PLSQL:
CREATE [OR REPLACE] [PUBLIC] SYNONYM [schema .] synonym_name
FOR [schema .] object_name [@ dblink];
OR REPLACE
Позволяет пересоздать синоним (если он уже существует), без необходимости выдавать команду DROP synonym.
PUBLIC
Это означает, что синоним является публичным и доступен для всех пользователей. Помните, что пользователь сначала должен иметь соответствующие привилегии для объекта использования синонима.
schema
Соответствующая схема. Если эта фраза опущена, Oracle предполагает, что вы имеете в виду вашу собственную схему.
object_name
Имя объекта, для которого вы создаете синоним. Это может быть один из следующих объектов:
- table
- view
- sequence
- stored procedure
- function
- package
- materialized view
- java class schema object
- user-defined object
- synonym
Пример
Рассмотрим пример того, как создать синоним в Oracle/PLSQL.
Например:
CREATE PUBLIC SYNONYM suppliers FOR app.suppliers; |
Этот первый пример CREATE SYNONYM демонстрирует, как создать синоним с названием suppliers. Теперь, пользователи других схем могут ссылаться на таблицу с suppliers без префикса с именем схемы и именем таблицы.
Например:
Если это синоним уже существует, и вы хотите его пересоздать, то можете использовать OR REPLACE следующим образом:
CREATE OR REPLACE PUBLIC SYNONYM suppliers FOR app.suppliers; |
Drop synonym
После того, как синоним был создан в Oracle, вам в какой-то момент понадобится его удалить.
Синтаксис
Синтаксис drop synonym в Oracle/PLSQL:
DROP [PUBLIC] SYNONYM [schema .] synonym_name [force];
PUBLIC
Позволяет удалить public synonym. Если вы указали PUBLIC, то можете не указывать схему.
force
Это принудит Oracle удалить synonym, даже если он имеет зависимости. Это, вероятно, не очень хорошая идея, чтобы использовать force, поскольку это может привести к недействительности объектов Oracle.
Пример
Рассмотрим пример того, как удалить synonym в Oracle/PLSQL.
Например:
DROP PUBLIC SYNONYM suppliers; |
Оператор DROP удалит синоним с названием suppliers, который мы определяли ранее.
Синоним – это альтернативное имя объекта. Если создан синоним для объекта, то все SQL команды к объекту могут выполняться используя настоящее имя или синоним. Это может показаться очень простым, но это не так. Использование синонимов позволяет приложениям работать для любого пользователя, вне зависимости от схемы в которой лежат таблицы и представления и даже БД. Рассмотрим запрос
select * from hr.employees@prod;
Пользователь выполняющий такой запрос должен знать что таблица employees принадлежит схеме HR в БД определяемой сслыкой PROD. Если общий синоним был созда таким запросом
create public synonym emp for hr.employees@prod;
то все пользователи (все!) могут использовать запрос вида
select * from emp;
Это предоставляет независимость данных и абстракцию местонахождения. Таблицы и представления могут быть переименованы или перемещены без необходимости изменения кода; необходимо только поправить синоним.
Так же как и команды SELECT, DML команды могут обращаться к синонимам так же как к объектам на которые они ссылаются.
Приватные синонимы (private synonyms) – это объекты схемы. Они могут быть или в текущей схеме, или использоваться вместе с именем схемы. Общие (public) синонимы существуют независимо от схемы. Общие синонимы могут использоваться любым пользователем кому назначены соответсвующие права без использования имени схемы. Приватные синонимы должны иметь уникальное имя в схеме. Общие синонимы могут иметь такое же имя как и иям объекта схемы. Когда выполняется запрос без указания схемы, Oracle вначале проверяет есть ли объект с таким именем в текущей схеме, и только если он не найдет Oracle попробует найти общий синоним с таким именем. То есть если в предыдущем примере у пользователя есть таблица EMP – это будет то что отобразится пользователю – не таблица назначенная общему синониму.
Синтаксис создания синонима
CREATE [PUBLIC] SYNONYM synonym FOR object ;
Пользователю должны быть назначены права для создания синонимов (приватных) и дополнительные права для создания общих синонимов. Обычно только администратор БД может создавать и удалять общие синонимы. Это правильно потому что их создание (или удаление) влияет на всех пользователей.
EXAM TIP The “public” in “public synonym” means that it is not a schema object and cannot therefore be prefixed with a schema name. It does not mean that everyone has permissions against it.
Для удаления синонима используется команда
DROP [PUBLIC] SYNONYM synonym ;
Если объект на который ссылается синоним (таблица или представление) удалён, синоним не удаляется. Любое обращение к синониму вернёт ошибку. В этом отношении синоинмы работают как представления. Если объекты были вновь созданы, синонимы должны быть перекомпилированы перед использованием. Как и для представлений, это случится автоматически при обращении к синониму или вручную использовав команду
ALTER SYNONYM synonym COMPILE;
Синонимы
Синоним
(synonym) позволяет ссылаться на объект
Oracle по имени, которое отличается от его
настоящего имени. Синонимы можно
определять для таблиц, представлений,
последовательностей, а также других
объектов. В этом разделе рассиатриваются
синонимы таблиц, но все сказанное ниже
применимо и к синонимам других объектов.
Синоним создается
главным образом для удобства: если
часто приходится ссылаться на таблицу
с длинным именем, то можно по достоинству
оценить возможность использования
короткого имени без переименования
таблицы и изменения кода, который на
нее ссылается.
Удобство синонимов
проявляется и в том, что они могут
облегчить доступ к вашим данным для
других людей. Таблицы организуются по
идентификатору пользователя Oracle, который
их создает, поэтому если другой
пользователь захочет обращаться к
таблице, созданной другим пользователем,
то в общем случае ему придется помещать
перед именем таблицы имя другого
пользователя, как показано ниже:
SELECT * FRОМ
имя_пользователя
.
имя_таблщы;
Это может оказаться
утомительным занятием, а если вы
передадите свою таблицу кому-то другому,
то вдобавок потребуется менять весь
код, который на нее ссылается. Синонимы
позволяют сделать таблицу «видимой»
для всех, даже если не указано имя ее
владельца. Благодаря этому можно писать
SQL-операторы, которые будут продолжать
работать даже при передаче таблицы
другому пользователю.
Создание синонима
Команда создания
синонима имеет следующий синтаксис:
CREATE [PUBLIC] SYNONYM имя_синонима
FOR
имя объекта
;
Чтобы увидеть, как
используются синонимы, можно воспользоваться
приведенными ниже команды:
SELECT * FROM product;
CREATE SYNONYM prod FOR product;
SELECT * FROM prod;
Если нужно сделать
таблицу доступной другим пользователям,
достаточно создать синоним с тем же
именем, что и у таблицы:
CREATE PUBLIC SYNONYM
product
FOR
product;
Модификация
существующего синонима
Ввиду чрезвычайной
простоты синонимов Oracle не предоставляет
никаких средств для их изменения. При
необходимости просто удаляется
старый синоним и создается новый. Команда
удаления синонима имеет следующий
синтаксис:
DROP [PUBLIC] SYNONYM имя_синонима;
Первый из созданных
выше синонимов (PROD) удаляется следующей
командой:
DROP SYNONYM prod;
Для удаления общего
синонима используется команда
DROP PUBLIC SYNONYM product;
Словарь данных Oracle
База данных Oracle
состоит из множества различных объектов:
таблиц, столбцов, представлений, связей,
ограничений, последовательностей и
т.д. Чтобы следить за всеми этими
объектами, Oracle сохраняет информацию о
них в словаре
данных (data
dictionary). Словарь данных представляет
собой набор таблиц и представлений,
содержащих самую последнюю информацию
о каждом объекте и пользователе базы
данных. Он содержит каждую характеристику,
указанную вами создании объекта, а также
служебную информацию — в частности,
размер пространства, выделенного
объекту, размер используемого пространства
и права пользователей, относящиеся к
этому объекту.
Опрос словаря
данных для получения информации
о
пользователях и базе данных
Полный список
объектов словаря данных можно получить
из представления с именем DICT. Приведенная
ниже команда показывает этот список
вместе с полезной дополнительной
информацией.
SELECT table_name, SUBSTR(comments, 1,
45)
FROM dict
WHERE SUBSTR(comments, 1, 7) <>
‘Synonym’ ;
В команде использована
конструкция WHERE, исключающая сведения
о синонимах.
Использование
различных представлений словаря данных
В Oracle существует
так много различных представлений
словаря данных, что об их использовании
можно написать отдельное
пособие. Наиболее полезны два представления,
которые показывают списки собственных
таблиц и представлений пользователя.
Следующая команда покажет список всех
таблиц пользователя:
SELECT table_name FROM user_tables;
Список всех
созданных пользователем представлений
выводит команда
SELECT view_name FROM user_views;
Эти команды приносят
пользу в тех случаях, когда точно не
известны имена таблиц или представлений,
или необходимо проверить их существование.
Соседние файлы в папке лекции оракл
- #
- #
- #
- #
- #
- #
- #
- #
- #
Summary: in this tutorial, you will learn how to use the Oracle CREATE SYNONYM
statement to create an alternative name for a database object such as a table, view, sequence, procedure, stored function, and materialized view.
Introduction to Oracle CREATE SYNONYM
statement
The CREATE SYNONYM
statement allows you to create a synonym which is an alternative name for a database object such as a table, view, sequence, procedure, stored function, and materialized view.
Here is the basic syntax of creating a new synonym:
Code language: SQL (Structured Query Language) (sql)
CREATE [OR REPLACE] [PUBLIC] SYNONYM schema.synonym_name FOR schema.object;
In this syntax:
- First, specify the name of the synonym and its schema. If you skip the schema, Oracle will create the synonym in your own schema.
- Second, specify the object for which you want to create the synonym after the
FOR
keyword. Note that the schema object (schema.object
) cannot be contained in a package. - Third, use the
OR REPLACE
option if you want to re-create the synonym if it already exists. In case the synonym does not exist, theOR REPLACE
has no effect. - Fourth, use the
PUBLIC
keyword to create a public synonym which is a synonym that will be accessible to all users. Note that users must have sufficient privileges on the underlying objects to use the public synonyms.
Once you define a synonym for an object, you can reference it in the SQL statements such as the SELECT
, INSERT
, UPDATE
, and DELETE
statement.
Note that you can create a synonym for a table or a view that doesn’t exist. However, the target table or view must be available at the time you use the synonym. In addition, synonyms share the same namespace as tables or views, therefore, you cannot create a synonym which has the same name as a table or a view that already exists in the same schema.
This example uses the CREATE SYNONYM
statement to create a synonym for the inventories
table from the sample database:
Code language: SQL (Structured Query Language) (sql)
CREATE SYNONYM stocks FOR inventories;
If you use SQL Developer, you can view the newly created synonym in under the Synonym nodes as shown in the following picture:
Now, you can use the stocks
synonym instead of the inventories
table in the query like the following:
Code language: SQL (Structured Query Language) (sql)
SELECT * FROM stocks;
Advantages of Oracle synonyms
First, synonyms allow you to change complicated and lengthy names by simplified aliases. It is very helpful if you work with the legacy systems. So instead of referring a table like human_resources.employee_locations
, you can use offices
.
Second, synonyms can help backward compatibility for the legacy applications. For example, you rename a table but do not want to affect the current applications that currently use the table. To keep the applications working properly, you can create a synonym that has the name the same as the old name of the table.
Third, synonyms help moving objects between schemas, even databases, without breaking the existing code.
In this tutorial, you have learned how to use the Oracle CREATE SYNONYM
statement to create an alternative name for a database object.
Was this tutorial helpful?