ایجاد synonym برای کاربران در اوراکل 12c امکان پذیر است. این کار با کمک پارامتر مخفی enable_schema_synonyms_ قابل انجام می باشد:
SQL> alter system set “_enable_schema_synonyms” = true scope=spfile;
System altered.
برای مثال، بعد از تنظیم این پارامتر، می توانیم با کمک دستور زیر، برای کاربر usef، نام دیگری هم تعیین می کنیم:
SQL> create schema synonym new_name for usef;
Schema synonym created.
SQL> select p.user#,p.name,p.type#,p.password,p.ctime,p.exptime from sys.user$ p where p.name in(‘NEW_NAME’,’USEF’);
با ایجاد این synonym، می توان به ابجکتهای کاربر usef، از طریق new_name دسترسی داشت:
SQL>select count(*) from NEW_NAME.MYTBL;
389999
یا برای کاربر usef، شی جدیدی ایجاد کرد:
SQL>create view NEW_NAME.myview as select * from NEW_NAME.MYTBL;
اما امکان لاگین به کاربر usef از طریق synonym آن وجود ندارد:
SQL> conn new_name/a
ERROR:
ORA-01017: invalid username/password; logon denied
SQL> conn usef/a
Connected.
همچنین اجرای دستور alter user برای این synonym، کابردی نخواهد داشت:
SQL> alter user new_name identified by aa;
ORA-01918: user ‘NEW_NAME’ does not exist
استفاده از synonym برای کاربران، خالی از اشکال نمی باشد برای مثال، با سناریوی زیر، به خطا برخواهیم خورد:
SQL> drop table new_name.mytbl;
Table dropped.
SQL> create table usef.mytbl as select * from v$datafile;
Table created.
SQL> select count(*) from usef.mytbl;
COUNT(*)
———-
6
SQL> select count(*) from new_name.mytbl;
COUNT(*)
———-
0
البته با خالی شدن shared pool، این مشکل برطرف خواهد شد:
SQL> alter system flush shared_pool;
System altered.
SQL> select count(*) from new_name.mytbl;
COUNT(*)
———-
6