Oracle 中的同义词是schema 对象的一个别名。同义词分为公共(public)同义词和私有(private)同义词.公共同义词可以被所有数据库用户所访问,而私有同义词只能被owner和被授权用户访问。
同义词可以不依赖于引用的对象单独存在,所以我们可以修改同义词所应用的对象,而后只需要重新定义(删除重建,同义词不可以通过ALTER 语法来重新定义)同义词就可以,这样可以降低应用程序的复杂性。当同义词被删除后所有被同义词应用的对象(当然TABLE 之类就除外了)将变成INVALID。
当然如果你删除或修改了某个同义词所引用的对象,同义词也会变成INVALID,当然我们不需要去手动compile同义词,当程序下次访问的时候,同义词自动会变成VALID,只要同义词所引用的对象没有错误就可以。
当然,如果你愿意你也可以使用ALTER (PUBLIC) SYNONYM语句手工编译同义词,注意,这里你只能使用sys user或者owner来编译private同义词。而public同义词只能用sys user来编译了。对于非owner或者其他任何用户,都会收到ORA-01031: insufficient privilege错误。
下面来实验一下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | SQL> conn hr/hr 已连接。 SQL> create synonym syn_jobs for jobs; 同义词已创建。 SQL> alter synonym syn_jobs compile; 同义词已变更。 SQL> conn /as sysdba 已连接。 SQL> alter synonym syn_jobs compile; alter synonym syn_jobs compile * 第 1 行出现错误: ORA-00942: 表或视图不存在 SQL> alter synonym hr.syn_jobs compile; 同义词已变更。 SQL> create public synonym syn_p_jobs for hr.jobs; 同义词已创建。 SQL> alter synonym syn_p_jobs compile; alter synonym syn_p_jobs compile * 第 1 行出现错误: ORA-00942: 表或视图不存在 SQL> alter public synonym syn_p_jobs compile; 同义词已变更。 SQL> conn system/system; 已连接。 SQL> alter public synonym syn_p_jobs compile; alter public synonym syn_p_jobs compile * 第 1 行出现错误: ORA-01031: 权限不足 SQL> alter synonym hr.syn_jobs compile; alter synonym hr.syn_jobs compile * 第 1 行出现错误: ORA-01031: 权限不足 SQL> create user syn_user identified by synuser 2 default tablespace users 3 temporary tablespace temp; 用户已创建。 SQL> conn /as sysdba 已连接。 SQL> grant sysdba to syn_user; 授权成功。 SQL> grant dba to syn_user; 授权成功。 SQL> grant all on hr.jobs to syn_user; 授权成功。 SQL> conn syn_user/synuser; 已连接。 SQL> alter synonym hr.syn_jobs compile; alter synonym hr.syn_jobs compile * 第 1 行出现错误: ORA-01031: 权限不足 SQL> alter public synonym syn_p_jobs compile; alter public synonym syn_p_jobs compile * 第 1 行出现错误: ORA-01031: 权限不足 |
最新评论