【问题标题】:SQL Server and Oracle terminologySQL Server 和 Oracle 术语
【发布时间】:2014-05-15 23:02:05
【问题描述】:

SQL Server 和 Oracle 术语 -

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

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

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

【问题讨论】:

  • 在 oracle 中,您可以在同一个数据库中创建两个模式,每个应用程序一个。

标签: sql sql-server oracle oracle11g oracle12c


【解决方案1】:

你应该在同一个数据库上创建一个新实例(schema),其中oracle中的schema与SQL server数据库相同

【讨论】:

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

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

创建数据库

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

创建架构

如果您创建一个单独的架构,您仍然有一个数据库,因此两个架构共享相同的内存结构(例如,在 SGA 的缓冲区缓存中相互竞争空间)、初始化参数等。您有进行一些计划以确保两者不会相互干扰-您可能希望确保下一个应用程序创建公共同义词,或者至少他们不会创建相同的公共同义词与其他应用程序一样——但这通常很简单。

创建可插拔数据库

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

【讨论】:

  • 模式是否包含表空间?表空间到底是什么?
  • @001 - 模式和表空间是正交概念。表空间是数据文件的集合。按照惯例,您可以为每个应用程序创建单独的表空间。或者,您可以为所有应用程序使用单个表空间(或一组表空间)。如果您希望能够在不影响另一个应用程序的情况下将一个应用程序恢复到某个时间点,或者如果表空间的数据文件丢失/损坏并需要恢复,则允许数据库继续运行,那么单独的表空间可能会有所帮助。
【解决方案3】:

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

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

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

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

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

b.我记得我发现它更容易,或者至少更简单一点,以向自己保证 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。任何一个选项都有效,并且各有利弊。

【讨论】:

    猜你喜欢
    • 2010-11-08
    • 2011-04-28
    • 2015-10-30
    • 1970-01-01
    • 2011-03-22
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    相关资源
    最近更新 更多