Oracle中与SQL Server SCHEMA相当的概念是什么?

6

我有一个任务,需要将SQL Server数据库迁移到Oracle。

我们的SQL Server数据库中有几个不同的SCHEMA,我需要在Oracle中创建类似的内容。 在SQL Server中,SCHEMA类似于C#中的命名空间。但是据我理解,从Oracle文档中可以看出,Oracle中的Schema与SQL Server中的含义相差很大。

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

CREATE SCHEMA Accounting

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

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

3个回答

7
SQL Server架构的Oracle等效物是架构。 Oracle服务器连接单个数据库,这是它们之间的“真正”区别:SQL Server实例可以连接多个数据库,而Oracle实例直接连接一个。 由于这个原因,在服务器中,SQL Server使用三段式命名约定,而Oracle仅使用二段式命名约定。
在两种类型的数据库中,架构对象通常是安全性的单位 - 它们方便地分配给对象组的权限。 两个数据库在一些非常重要的点上不同。 在Oracle中,模式基本上与用户同义。 SQL Server曾经以这种方式组织,但现在模式与用户分开(例如允许在模式之间移动对象)。
在SQL Server中,权限不必在模式级别进行,尽管这通常是为了组织目的而方便。 例如,您可能有底层表格,在其中用户无法直接访问其中一个架构。 您可以拥有另一个具有视图的模式,并且该架构具有访问表格的权限。 然后,添加到架构的新视图自动具有“正确”的权限。

4

虽然@Gordon Linoff的答案已经对数据库中模式(schema)的概念做了很好的解释,但是针对你的实际问题:

你可以作为一个用户创建一个模式(schema):

CREATE USER Accounting IDENTIFIED BY some_password;

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

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

1
一个历史注释有助于解释一些混淆:直到 MS SQL Server 2000,Schema 的意思与 Oracle 几乎相同。而 MS SQL Server 是基于 Sybase SQL Server 的,后者也许更类似于 Oracle。然后到了 2005 年,MS 取消了用户和模式之间的绑定,尽管默认模式名称(如 dbo)是基于用户名称的。
DBA Stack 论坛上有一个好答案: Oracle 和 Microsoft 模式之间的区别是什么?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接