公共同义词与schema.object模式

时间:2012-04-06 07:28:00

标签: oracle oracle10g synonym

在我的应用程序中,将有大量用户,超过500个。他们只处理一个模式对象。我已经授予了必要的特权。当我说:

SELECT * FROM EMP;

我得到“表或视图不存在”错误,因此意味着:

  1. 我需要在对象之前指定所有者名称。比如SCOTT.EMP
  2. 我可以为我将要引用的所有对象创建公共同义词。
  3. 我担心的是,如果公共同义词可以对这个拥有大约300个同时连接的用户的性能产生影响。我应该选择第一种还是第二种方法?

1 个答案:

答案 0 :(得分:4)

公共同义词有一个非常特定的目的;它们允许每个用户引用一个对象 - 假设它们具有适当的权限。如果在将来的任何时候您可能想要更改特定用户查看对象的方式,那么公共同义词就不可能了。

它们还会使用整个数据库的特定对象名称。但是,存在公共同义词这一事实并不妨碍您创建具有相同名称的对象。这可能令人难以置信地令人困惑。

例如,假设您有一个过程test和一个模式emp。尝试执行emp.test将无效,因为您已在上使用公共同义词emp

Tom Kyteseems to have written a number of articles about this.

在性能方面,他们似乎建议私人同义词的公共同义词将导致slight decrease in performance。但是,使用同义词而不是同义词也会导致性能略有下降。这表明,如果每一个computron都很珍贵,那么你就不应该使用同义词。

放在一起我认为这意味着你应该尽可能避免使用公共同义词。如果你需要一个然后当然使用一个,它们毕竟是存在的原因,但如果你不存在那么有一个是什么意义? scott.emp构造是清楚的,显示您正在引用的模式和对象,没有任何误解的可能性,无论是您自己还是其他新来的数据库和代码。

快点。你没有明确说出来,但你问题的措辞似乎表明你正在为每个用户创建一个模式。这似乎会让人感到非常困惑......