SQL Server 和 Oracle 术语

标签 sql sql-server oracle oracle11g oracle12c

SQL Server 和 Oracle 术语 -

enter image description here

enter image description here

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

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

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

最佳答案

过去经常使用 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。任一个选项都有效,每个选项都有利有弊。

关于SQL Server 和 Oracle 术语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22849121/

相关文章:

sql - 在数据库中存储时间温度数据

SQL Server CONTAINSTABLE 不适用于单个数字

sql - 如何生成日期系列以占用谷歌 BigQuery 中缺失的日期?

sql - 需要一些有关 SQL 查询的帮助

sql-server - 如何让 View 显示当前的列定义?

sql - Sybase 开发人员询问 : How To Create a Temporary Table in Oracle?

java - Java 中的准备语句连接

SqlServer 性能将列从非空更改为空

oracle - 在 oracle 中搞砸了表

sql - 查询并行度高的Oracle表导致全表扫描