2014-04-03 33 views
3

SQL Server和Oracle术语 -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

+1

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

回答

-1

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

+2

“模式”和“实例”是非常不同的东西,所以“新实例(模式)”是不正确的。创建一个新的模式是有道理的。创建一个新的数据库很有意义。创建新实例意味着将节点添加到RAC集群(或将非RAC数据库转换为双节点RAC数据库),并且与添加新应用程序无关。 –

+0

感谢您的澄清 – user2302449

3

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

创建数据库

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

创建模式

如果创建一个独立的模式,你仍然有一个单一的数据库,因此这两个模式都共享相同的存储结构(与对方在SGA中的缓冲区缓存空间的竞争,为例如),初始化参数等等。你必须做一点小小的规划,以确保两者不会互相干扰 - 你可能想要确保下面的应用程序创建公共同义词,或者至少他们将不会创建与其他应用程序相同的公共同义词 - 但这通常很简单。

创建一个可插拔数据库

在12.1和只有当你拥有多租户选项这只作品。这与为每个应用程序创建新数据库的SQL Server概念最相似。

+0

do schema是否包含表空间?什么是表空间? – 001

+0

@ 001 - 模式和表空间是正交的概念。表空间是数据文件的集合。作为惯例,您可以为每个应用程序创建单独的表空间。或者,您可以为所有应用程序使用单个表空间(或一组表空间)。如果希望能够将某个应用程序恢复到某个时间点而不会影响另一个应用程序,或者如果在表空间的数据文件丢失/损坏并需要恢复时允许数据库继续运行,单独的表空间可能会有所帮助。 –

4

过去和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。任一选项都有效,每个选项都有优点和缺点。