公共同义词与 schema.object 模式



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

SELECT * FROM EMP;

我收到"表或视图不存在"错误,因此这意味着:

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

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

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

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

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

汤姆·凯特(Tom Kyte)似乎为此写了很多文章。

在性能方面,他们似乎表明,公共同义词而不是私有同义词将导致性能略有下降。但是,使用同义词而不是没有同义词也会导致性能略有下降。这表明,如果每一个计算机都很珍贵,你根本不应该使用同义词。

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

快速点。您没有明确说明,但问题的措辞似乎表明您正在为每个用户创建一个架构。这似乎会让人非常困惑...

相关内容

最新更新