SQL> create public Synonym tt for hr.t;
create public Synonym tt for hr.t
*
第 1 行出现错误:
ORA-01031: 权限不足
SQL> grant create public synonym to hr;
授权成功。
SQL> create public Synonym tt for hr.t;
同义词已创建。
共有同义词可以被所有用户所使用
直接授予creat any synonym会怎么样呢?
SQL> grant create any synonym to hr;
授权成功。
SQL> create synonym hrt for hr.t;
同义词已创建。
SQL> create synonym hrtt for sys.t;
同义词已创建。
用户可以为sys用户创建私有同义词了
当然也可以直接:
SQL> grant create synonym to hr with admin option;
授权成功。
SQL> create synonym hrtt for sys.t;
同义词已创建。
with admin option让我们想起了权限那部分知识,oracle中很多知识是连贯的。
假如我们对同义词元对象进行ddl操作时,那又会怎么样呢?
SQL> SELECT * FROM T;
ID NAME BI
---------- ------ ----------
5
3 chao 3
SQL> select * from hrt;
ID NAME BI
---------- ------ ----------
5
3 chao 3
SQL> SELECT OBJECT_NAME, STATUS FROM ALL_OBJECTS WHERE OBJECT_NAME='HRT';
OBJECT_NAME STATUS
------------------------------ -------
HRT VALID
SQL> SELECT * FROM DBA_SYNONYMS WHERE SYNONYM_NAME='HRT';
OWNER SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK
------------------------------ ------------------------------ ------------------------------ ------------------------------ --------------------------------------------------------------------------------------------------------------------------------
HR HRT HR T
SQL> select * from t;
ID NAME BI NUM
---------- ------ ---------- ----------
5
3 chao 3
SQL> SELECT * FROM HRT;
ID NAME BI NUM
---------- ------ ---------- ----------
5
3 chao 3
SQL> commit;
提交完成。
SQL> SELECT * FROM HRT;
ID NAME BI NUM
---------- ------ ---------- ----------
5
3 chao 3
SQL> SELECT OBJECT_NAME, STATUS FROM ALL_OBJECTS WHERE OBJECT_NAME='HRT';
OBJECT_NAME STATUS
------------------------------ -------
HRT VALID
此时同义词自动完成了编译:
SQL> ALTER SYNONYM HRT COMPILE;
同义词已变更。
oracle中很多我们查找的视图都是同义词,下面我们研究下v$version:
你可以用sql_trace的方法研究: SQL> alter session set sql_trace=true;
会话已更改。
SQL> select * from v$versioN;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
SQL> ALTER SESSION SET SQL_TRACE=FALSE;
会话已更改。
SQL> select value from v$diag_info where name='Default Trace File';
VALUE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/orcl3939/orcl3939/trace/orcl3939_ora_5705.trc
下面我们用10046事件来研究:
SQL> alter session set events '10046 trace name context forever ,level 1';
会话已更改。
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 1 |