在同一实例上使用两个模式的公共同义词问题

时间:2017-11-20 13:42:53

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

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

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

创建这两个schemas的原因是因为我们的项目有两个版本。因此,第一个schema用于第一个版本,第二个schema用于第二个版本。我们的Web应用程序Spring项目的机制是,无论何时通过Web应用程序登录页面建立连接,相应的Oracle用户都会根据输入的登录进行连接;因此没有固定的凭证连接,每个Web应用程序登录都有对应的Oracle用户。

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

3 个答案:

答案 0 :(得分:0)

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

类似于下面的内容:

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

如何创建第三个架构并具有同义词和查询第一个和第二个架构的权限。有人测试过这个概念吗?