过去和SQL Server一起工作过很多,我很同情想弄清楚Oracle在组织事情时是如何处理这些事情的。我下面的评论来自SQL Server 2000和2003,所以如果事情发生了变化,请原谅我。
以前的响应者有帮助。我认为这里存在一个有问题的假设,即SQL Server和Oracle之间存在确切的“级别”对等关系。我所说的“层次”是指在上面所描绘的层次结构中占据相同的空间(其中,顺便提一下,我认为这是一个很好的开始,但可能需要在几个地方进行一些编辑,例如你如何在Oracle层次结构中绘制“用户”和“架构”图表,我可以并排放置它们。)我不认为这些概念“层次”在数据库平台之间完全匹配。
Oracle中的模式与SQL Server中的单独数据库有些相同,但并不完全相同。
我会说在SQL服务器中的数据库之间的“墙壁” - 不是一个确切的技术术语,但哦 - 比甲骨文模式之间的“墙壁”高一点。其他人可能会不同意,但这是我的推理:
a。 Oracle中的模式是纯逻辑构造。它表示谁拥有对象的所有权。它与物体的物理位置或布局无关。表格空间(正如前一张海报所指出的那种概念)表示物体的位置物理。表空间可以容纳多个模式中的对象,反之亦然。在SQL Server中,这两个概念被合并为一个 - 一个数据库既可以是表空间也可以是模式,虽然在某些方面SQL Server中的数据库中有多个拥有各种对象所有权的所有者。这可能会让人有些困惑,因为据我记忆(如果不使用NT身份验证,已有几年),用户在服务器级别定义,然后必须“链接”到单个数据库中的用户。
b。我记得发现它比较容易,或者至少比较简单一些,以确保用户在SQL Server中的两个单独的数据库无法访问相对于其他用户的数据库,而不是我在Oracle中发现的数据库。
c。由于SQL服务器中的数据库表示物理存储和逻辑所有权,因此可以分离数据库并将其移至另一个SQL Server实例并附加。你不能用Oracle中的模式来做到这一点。我的意思是,您可以将数据输出或备份到其他服务器和另一个模式,但这些都至少需要一些脚本,并至少在企业管理器中进行相当数量的点击。它不会为您提供SQL Server中的一键式“分离数据库”选项,这让您更容易理解SQL Server数据库是可以或多或少地在数据库之间来回移动的单位数据库。
总结一下,我认为这两种选择都可行。即1)在每个应用程序的每个实例中为每个实例创建两个独立的Oracle实例,或者2)在一个Oracle实例中创建两个独立的模式。
每个选项都有优点和缺点。选项1可能需要更多的工作来设置和配置,但也会为每个数据库提供更多的分离,独立性和独立硬件的能力等。选项2会比较简单一些,但是可以减少数据之间的分隔,以及配置混乱或允许一个模式的用户访问另一个模式的其他事物的更大风险。这也意味着你必须更加小心,有人在一个模式中编写查询访问数据的查询不会使用所有的CPU和IO资源,并在另一个模式中使用户挨饿。
另外,是的,你可以在12c中使用可插入的数据库。然而,考虑到你需要提出这些问题(不要羞愧,只是指出你的位置),这让我对推荐什么可能很容易成为更复杂的设置犹豫不决。
TL; DR - SQL Server不是Oracle,Oracle不是SQL Server。任一选项都有效,每个选项都有优点和缺点。
在oracle中,您可以在同一个数据库中创建两个模式,每个应用程序使用一个模式。 –