【问题标题】:Public synonyms issue with two schemas on same instance同一实例上的两个模式的公共同义词问题
【发布时间】:2018-05-03 18:11:24
【问题描述】:

我使用的数据库是Oracle 11g Express Edition release 2。

我在同一个实例 xe 中创建了 2 个schemas。它们都具有相同的表名称和序列名称以及存储过程以及存储函数和视图名称。但是表structures 和视图texts不同的(它们之间有一些修改)。

之所以创建这两个schemas,是因为我们的项目有两个版本。所以第一个schema 用于第一个版本,第二个schema 用于第二个版本。我们的 Web 应用程序Spring 项目的机制是,每当通过 Web 应用程序登录页面建立连接时,相应的 Oracle 用户就会根据输入的登录信息建立连接;所以没有固定的凭证连接,每个web应用登录都有对应的Oracle用户。

因此,为了让每个用户都能使用每个数据库对象,我为每个对象创建了public synonyms,并为每个用户授予了它们的权限。但是数据库对象归我开头提到的schema 所有。现在我的问题是:我们的客户希望两个项目版本在同一个实例(同一台计算机服务器)上运行。因此其中一个项目版本无法运行,因为public synonyms 只能引用特定的schema 所有者。那么如何使public synonyms 为每个schema 工作?

【问题讨论】:

    标签: spring oracle spring-mvc oracle11g oracle-xe


    【解决方案1】:

    简而言之,你不能。但是,您始终可以使用不同的同义词名称来标识对象。

    类似于以下内容:

    create public synonym structures_v1 for schema1.structures;
    create public synonym structures_v2 for schema2.structures;
    

    【讨论】:

      【解决方案2】:

      Oracle 为这种情况提供了两种完全不同的技术(我想到了):

      • 版本(和基于版本的重新定义)
      • PDB

      使用版本,您可以在每个版本中创建一次相同的对象 - 但存在一些限制,例如表格不可编辑。 这不是您刚刚启用的功能,您需要理解这个概念并正确实施它。 PDB 可以在同一个 CDB 中整合具有冲突命名空间(例如您描述的同义词)的数据库,从而节省 SGA/内存。基本上它们是完全分开的——当理解对象和数据继承的概念时,可以实现有限的干扰。

      【讨论】:

      • PDB和CDB的定义是什么?
      • 数据库容器化是 12c 企业版的额外收费。提问者明确表示他们正在使用 XE,因此这部分讨论没有帮助。
      【解决方案3】:

      如何创建第 3 架构并拥有查询第 1 和第 2 架构的同义词和权限。有人测试过这个概念吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-22
        • 1970-01-01
        • 2014-08-21
        • 2023-02-02
        • 2011-10-26
        • 2014-01-03
        相关资源
        最近更新 更多