Oracle相当于SQL Server SCHEMA

时间:2015-12-03 15:22:06

标签: sql sql-server oracle

我有一项将SQL Server数据库迁移到Oracle的任务。

我们的SQL Server数据库中有几个不同的SCHEMA,我必须在Oracle中创建类似的东西。 在SQL Server中,SCHEMA就像是C#中的命名空间。但是从Oracle文档中可以理解,Oracle中的Schema与SQL Server中的Schema有着截然不同的含义。

更具体地说,我在SQL Server中有以下SQL语句:

CREATE SCHEMA Accounting

CREATE TABLE [Accounting].[Payments]
(
    ID BIGINT,
    Amount MONEY
)

那么Oracle中这个脚本的等价物是什么?

3 个答案:

答案 0 :(得分:4)

Oracle等效的SQL Server架构就是架构。 Oracle服务器与单个数据库进行通信,这就是"真正的"两者之间的区别:SQL Server实例可以连接到多个数据库,而Oracle实例只能连接到一个。因此,SQL Server在服务器中使用三部分命名约定,而Oracle只有两部分命名约定。

在两者中,模式对象通常都是安全单元 - 它们便于为对象组分配权限。两个数据库在一些非常重要的问题上有所不同在Oracle中,模式本质上是用户的同义词。 SQL Server曾经以这种方式组织,但现在一个模式与用户分开(例如,允许在模式之间移动对象)。

在SQL Server中,权限不必位于架构级别,尽管这通常可以方便用于组织目的。例如,您可能拥有用户在一个架构中无法直接访问的基础表。您可以拥有另一个包含视图的模式,模式具有访问表的权限。然后,添加到架构的新视图会自动具有" right"权限。

答案 1 :(得分:4)

虽然@Gordon Linoff的答案非常完美地解释了两个数据库中的模式背后的想法,以回答你的实际问题:

您以用户身份创建架构:

CREATE USER Accounting IDENTIFIED BY some_password;

然后使用以下命令在该模式中创建对象:

CREATE TABLE Accounting.Payments
(
  ID NUMBER(19),
  Amount NUMBER(19,4)
)

答案 2 :(得分:0)

一个历史注释可以帮助解释一些困惑:在MS SQL Server 2000之前,Schema的含义几乎与Oracle中的相同。 MS SQL Server是基于Sybase SQL Server的,它也许也更类似于Oracle。 然后到2005年,MS取消了用户和架构之间的绑定,尽管默认架构名称(如dbo)是基于用户名的。

好的答案在DBA堆栈论坛中:What is the difference between an Oracle and Microsoft schema?