SQL Server和Oracle术语

3
SQL Server和Oracle术语 -
如果我有两个应用程序并想要完全分开数据库,在SQL Server中,我可以为每个应用程序创建一个数据库,因此最终会得到2个数据库。
如果我想在Oracle中做同样的事情,我需要创建什么? - 为每个应用程序创建一个新的“数据库”、“实例”、“模式”或“表空间”? (请注意,这两个应用程序是由两个不共享数据的不同公司使用的相同应用程序!)
参考资料:http://www.codeproject.com/Tips/492342/Concept-mapping-between-SQL-Server-and-Oracle

1
在Oracle中,可以在同一数据库中创建两个模式,一个用于每个应用程序。 - rs.
3个回答

4
过去我在很多情况下都使用SQL Server,所以我理解在尝试弄清楚Oracle的组织结构时的困难。我的评论基于SQL Server 2000和2003版本,如果有改变请谅解。
之前的回答很有帮助。我认为这里一个有问题的假设是SQL Server和Oracle之间存在确切的“层级”等价性。我所说的“层级”是指占据上述层次结构中相同空间的东西(顺便说一句,我认为这些层次结构是一个好的起点,但可能需要在某些地方进行一些编辑,例如你如何在Oracle层次结构中将“用户”和“模式”画出来,我可能会将它们并列放置)。我不认为这些概念“层级”在数据库平台之间完全匹配。
在Oracle中,模式在某种程度上等效于SQL Server中的单独数据库,但并非完全相同。
我认为,在SQL Server中,数据库之间的“墙壁”(不是确切的技术术语,但也无妨)比Oracle中模式之间的“墙壁”更高一些。其他人可能会持不同意见,但这是我的推理:
a. Oracle中的模式是纯逻辑结构。它表示对象的所有者。它与对象的物理位置或布局无关。表空间(由之前的一个回答者指出是一个正交的概念)表示对象的物理位置。表空间可以容纳在多个模式中的对象,反之亦然。在SQL Server中,这两个概念有点合并为一个——数据库在某种程度上既是表空间又是模式,但在某些方面,在SQL Server中的一个DB中,则具有多个拥有者及各自对象所有权。这可能会有点混淆,因为我记得(已经是几年前的事了),如果不使用NT身份验证,则用户是在服务器级别定义的,然后必须“链接”到单个DB中的用户。
b. 我记得在SQL Server中,相对于Oracle,我发现更容易或至少简单一些来确保两个用户无法访问另一个用户的数据库。
c. 因为SQL Server中的DB代表了物理存储和逻辑所有权,所以你可以拆卸DB并将其移动到另一个SQL Server实例中并附加它。而在Oracle中则做不到。我的意思是,你可以将数据导出或备份到另一台服务器和另一个模式,但这都需要至少一些脚本编写或相当数量的点击操作。它没有像SQL Server中一键“Detach DB”选项那样使得SQL Server DB成为你可以在数据库之间来回移动的单元,这使得它更容易理解。
总而言之,我认为两种选项都可以。即,1)为每个应用程序在Oracle中创建两个单独的实例,每个实例中有一个模式;2)在一个Oracle实例中创建两个单独的模式。
每个选项都有利弊。选项1可能需要更多的设置和配置工作,但也会给您更多的隔离、独立性和能够为每个DB提供单独的硬件等。选项2会简单得多,但数据之间的分离性更低,配置出错或其他问题可能导致一个schema的用户访问另一个schema的数据。这也意味着您必须更加小心,确保查询一个schema中的数据的人不会使用所有CPU和IO资源,从而使另一个schema的用户无法使用。

另外,是的,您可以在12c中使用可插拔数据库。然而,考虑到您需要问这些问题(没有羞耻之处,只是指出您所在的位置),我对推荐可能更复杂的设置感到犹豫。

总之,SQL Server不是Oracle,Oracle不是SQL Server。任何选项都可以起作用,各有利弊。


3
如果您正在使用12.1或更高版本的多租户选项,则可以在单个容器数据库中创建单独的可插入式数据库。另一个选项是,在任何Oracle版本中都可以创建单独的模式。也可以创建单独的数据库,但通常不建议这样做,除非您有特定的需要,例如升级一个应用程序使用的数据库而不影响其他应用程序。
创建数据库:
如果创建单独的数据库,则会得到完全分离的内存结构(即每个数据库的SGA和PGA将是分离的),以及完全分离的后台进程集合(例如,每个数据库都有自己的日志编写器进程)。这是一个非常重量级的选项,在单个服务器上放置太多数据库之前,您可能会有很多争用RAM,调度所有后台进程等。它确实提供了不同应用程序之间的最大分离 - 每个数据库可以运行具有不同初始化参数的Oracle版本 - 但这也倾向于增加管理环境的复杂性。这通常只有在需要第三方应用程序需要特定版本的数据库或特定设置的情况下才有意义。
创建模式:
如果创建单独的模式,则仍然有一个单独的数据库,因此两个模式共享相同的内存结构(例如在SGA的缓冲区缓存中互相竞争),初始化参数等。您必须行使一定的规划,以确保两者不会干扰彼此 - 您可能需要确保任何一个应用程序都不会创建公共同义词,或者至少他们不会想要创建与其他应用程序相同的公共同义词 - 但这通常非常简单。
创建可插入式数据库:
这仅适用于12.1版本,并且只有在使用多租户选项时才能使用。这最类似于SQL Server概念,为每个应用程序创建一个新数据库。

模式包含表空间吗?什么是表空间? - 001
@001 - 模式和表空间是正交的概念。表空间是数据文件的集合。您可以按照惯例为每个应用程序创建单独的表空间。或者,您可以为所有应用程序使用单个表空间(或一组表空间)。如果您想要能够在不影响其他应用程序的情况下将一个应用程序还原到某个时间点,或者允许数据库在一个表空间的数据文件丢失/损坏并需要恢复时继续运行,则单独的表空间可能会有益处。 - Justin Cave

-1

您应该在同一数据库上创建一个新的实例(模式),其中Oracle中的模式与SQL Server数据库相同。


2
“模式”和“实例”是非常不同的东西,因此“新实例(模式)”是不正确的。创建一个新的模式是有意义的。创建一个新的数据库也是有意义的。创建一个新的实例将意味着向RAC集群添加节点(或将非RAC数据库转换为双节点RAC数据库),与添加新应用程序无关。 - Justin Cave
感谢您的澄清。 - user2302449

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接