3

SQL Server 和 Oracle 术语 -

在此处输入图像描述

在此处输入图像描述

在 SQL Server 中如果我有两个应用程序并希望将数据库完全分开,我可以简单地为每个应用程序创建 1 个数据库,因此我最终得到 2 个数据库。

如果我想在 oracle 中做同样的事情,我需要创建什么?- 创建一个新的“数据库”?每个应用程序的“实例”、“架构”或“表空间”?(注意,这两个应用程序是两个不同公司使用的同一个应用程序,不共享数据!)

参考: http: //www.codeproject.com/Tips/492342/Concept-mapping-between-SQL-Server-and-Oracle

4

3 回答 3

4

过去与 SQL Server 合作过很多次,我很同情试图弄清楚 Oracle 是如何组织事物的,因为我正在为同样的事情而苦苦挣扎。我下面的评论来自 SQL Server 2000 和 2003,如果从那时起事情发生了变化,请原谅我。

以前的响应者很有帮助。我认为这里的一个有问题的假设是 SQL Server 和 Oracle 之间存在精确的“级别”等效性。我所说的“级别”是指在您上面图解的层次结构中占据相同空间的东西(顺便说一句,我认为这是一个很好的起点,但可能需要在几个地方进行一些编辑,因为例如,您如何在 Oracle 层次结构中绘制“用户”和“模式”,我可能会将它们并排放置。)我认为这些概念“级别”在数据库平台之间并不完全匹配。

Oracle 中的模式在某种程度上等同于 SQL Server 中的单独数据库,但并不完全等同。

我想说的是,SQL Server 中的数据库之间的“墙”——不是一个确切的技术术语,但很好——比 Oracle 中的模式之间的“墙”要高一些。其他人可能不同意,但这是我的理由:

一个。Oracle 中的模式是纯粹的逻辑构造。它表示谁拥有对象的所有权。它与对象的物理位置或布局无关。表空间(正交概念,如先前的海报所述)表示物理物体的位置。一个表空间可以保存多个模式中的对象,反之亦然。在 SQL Server 中,这两个概念在某种程度上合并为一个——数据库或多或少既是表空间又是模式,尽管在 SQL Server 的数据库中的某些方面,您拥有多个拥有不同对象所有权的所有者。这可能会有点令人困惑,因为我记得(已经有几年了)如果不使用 NT 身份验证,则用户是在服务器级别定义的,然后必须“链接”到各个数据库中的用户。

湾。我记得发现它更容易,或者至少更简单一点,以确保 SQL Server 中两个单独数据库的用户无法访问相对其他用户的数据库,而不是我在 Oracle 中找到的。

C。因为 SQL Server 中的 DB 代表物理存储和逻辑所有权,所以您可以分离 DB 并将其移动到另一个 SQL Server 实例并附加它。您不能使用 Oracle 中的模式来执行此操作。我的意思是,您可以将数据导出或备份到另一台服务器和另一个模式,但这一切都需要至少一些脚本等或至少在企业管理器中进行大量点击。它没有为您提供 SQL Server 中的一键式“分离 DB”选项,这使您更容易理解 SQL Server DB 是您可以或多或少来回移动的单元数据库。

总而言之,我认为任何一种选择都行得通。也就是说,1) 在每个应用程序的每个实例中创建两个单独的 Oracle 实例,或 2) 在一个 Oracle 实例中创建两个单独的架构。

每个选项都有优点和缺点。选项 1 可能需要更多的设置和配置工作,但也会为每个 DB 提供更多的分离、独立性、拥有单独硬件的能力等。选项 2 会更简单一些,但可以减少数据之间的分离,并增加配置错误或其他允许一个模式的用户访问另一个模式的风险。这也意味着您必须更加小心,以防止编写查询访问一个模式中的数据的人不会使用所有 CPU 和 IO 资源并使用户在另一个模式上挨饿。

另外,是的,您可以在 12c 中使用可插拔数据库。但是,考虑到您需要提出这些问题(不要羞耻,只是指出您所处的位置),这让我对推荐更容易变得更复杂的设置犹豫不决。

TL;DR -- SQL Server 不是 Oracle,Oracle 也不是 SQL Server。任何一个选项都有效,每个选项都有优点和缺点。

于 2014-04-03T22:09:22.960 回答
3

如果您使用 12.1 或更高版本的多租户选项,则可以在单个容器数据库中创建单独的可插拔数据库。另一个适用于任何版本的 Oracle 的选项是创建一个单独的模式。也可以创建一个单独的数据库,尽管这通常不是首选方法,除非您有特殊需要做一些事情,例如升级一个应用程序正在使用的数据库而不影响另一个应用程序。

创建数据库

如果您创建一个单独的数据库,您最终会得到完全独立的内存结构(即每个数据库的 SGA 和 PGA 将是独立的)以及一组完全独立的后台进程(每个数据库都有自己的日志写入进程) (es)例如)。这是一个非常重量级的选项——在您开始大量争用 RAM、调度所有后台进程等之前,您不能在单个服务器上拥有太多数据库。它确实提供了不同应用程序之间的最大分离-- 每个数据库可以运行具有不同初始化参数集的不同版本的 Oracle -- 但这也往往会增加管理环境的复杂性。

创建架构

如果您创建一个单独的模式,您仍然有一个数据库,因此两个模式共享相同的内存结构(例如,在 SGA 的缓冲区缓存中相互竞争空间)、初始化参数等。您必须练习进行少量计划以确保两者不会相互干扰——您可能希望确保下一个应用程序创建公共同义词,或者至少确保它们不会创建与另一个相同的公共同义词应用程序——但这通常是微不足道的。

创建可插拔数据库

这仅适用于 12.1 并且仅当您具有多租户选项时。这与为每个应用程序创建一个新数据库的 SQL Server 概念最为相似。

于 2014-04-03T21:34:50.520 回答
-1

您应该在同一个数据库上创建一个新实例(架构),其中 oracle 中的架构与 SQL 服务器数据库相同

于 2014-04-03T21:25:03.900 回答