1

在我的应用程序中,会有很多用户,超过 500 个。他们只处理一个模式对象。我已授予必要的权限。当我说:

SELECT * FROM EMP;

我收到“表或视图不存在”错误,这意味着:

  1. 我要么需要在对象之前指定所有者名称。像SCOTT.EMP,或
  2. 我可以为我将要引用的所有对象创建公共同义词。

我担心的是,公共同义词是否会对具有大约 300 个同时连接的这么多用户的性能产生影响。我应该选择第一种还是第二种方法?

4

1 回答 1

4

公共同义词服务于一个非常特定的目的;它们使每个用户都可以引用一个对象-假设他们具有适当的权限。如果在未来的任何时候您可能想要更改特定用户查看对象的方式,那么公共同义词不是可行的方法。

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

例如,假设您有一个过程test和一个模式emp。尝试执行emp.test将不起作用,因为您已经emp桌子上拥有公共同义词。

Tom Kyte似乎已经写了 很多关于这个的文章。

在性能方面,他们似乎认为公共同义词优于私有同义词会导致性能略有下降。但是,使用同义词而不是不使用同义词也会导致性能略有下降。这表明,如果每一个最后的计算机都是宝贵的,那么您根本不应该使用同义词。

综上所述,我认为这意味着您应该尽可能避免使用公共同义词。如果您需要一个,那么当然要使用一个,毕竟它们的存在是有原因的,但是如果您不需要,那么拥有一个有什么意义呢?scott.emp结构很清晰,可以准确地向您显示您正在引用的模式和对象,而不会被您自己或其他新接触数据库和代码的人误解。

快点。您没有明确地说出来,但您问题的措辞似乎表明您正在为每个用户创建一个模式。这似乎会造成很大的混乱......

于 2012-04-06T10:15:57.540 回答