[英]Oracle equivalent of SQL Server SCHEMA
我有一項任務是將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中這個腳本的等價物是什么?
Oracle等效的SQL Server架構就是一個架構。 Oracle服務器與單個數據庫進行通信,這是兩者之間的“真正”區別:SQL Server實例可以連接到多個數據庫,而Oracle實例只能連接到一個數據庫。 因此,SQL Server在服務器中使用三部分命名約定,而Oracle僅具有兩部分命名約定。
在兩者中,模式對象通常都是安全單元 - 它們便於為對象組分配權限。 兩個數據庫在一些非常重要的問題上有所不同 在Oracle中,模式本質上是用戶的同義詞。 SQL Server曾經以這種方式組織,但現在一個模式與用戶分開(例如,允許在模式之間移動對象)。
在SQL Server中,權限不必位於架構級別,盡管這通常可以方便用於組織目的。 例如,您可能擁有用戶在一個架構中無法直接訪問的基礎表。 您可以擁有另一個包含視圖的模式,並且模式具有訪問表的權限。 然后,添加到架構的新視圖會自動具有“正確”權限。
雖然@Gordon Linoff的答案非常完美地解釋了兩個數據庫中模式背后的想法,但是要回答你的實際問題:
您以用戶身份創建架構:
CREATE USER Accounting IDENTIFIED BY some_password;
然后使用以下命令在該模式中創建對象:
CREATE TABLE Accounting.Payments
(
ID NUMBER(19),
Amount NUMBER(19,4)
)
一個歷史記錄,有助於解釋一些混淆:直到MS SQL Server 2000,Schema意味着幾乎與Oracle相同。 MS SQL Server基於Sybase SQL Server,也可能與Oracle更相似。 然后到2005年,MS取消了用戶和架構之間的綁定,盡管像dbo這樣的默認架構名稱基於用戶名。
DBA堆棧論壇的答案很好: Oracle和Microsoft架構有什么區別?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.