假定您現在擁有一個以Microsoft .Net為架構的網絡訂購系統,但是品管維護系統卻仍然使用一套舊式的Oracle數據庫應用程序。當您的顧客在產品保固期間下了產品更換之類的訂單,則該筆訂單將不收取任何費用。此時您需要從Oracle數據庫得到實時的查詢結果。借著建立連結服務器的方式(linked server),您將可以從SQL Server實時查詢出位於Oracle數據庫的顧客資料,找出誰是您既有的客戶。
當您的資料分散在不同的SQL Server數據庫時,藉由連結服務器可讓您執行跨服務器之分布式查詢。當所有的數據庫服務器都是SQL Server,則連結服務器的設定十分容易,而且在SQL Server線上手冊中就涵蓋了您所需要了解的所有事項。然而,當部分資料是放在Oracle數據庫服務器的時候,這就可能帶給您許多挑戰。舉例來說,光是設定連結服務器就不是一件容易的事。您必須了解到:即是您要在SQL Server的Enterprise Manager設定一個Oracle連結服務器,這台SQL Server對Oracle來說就是一個客戶端。所以您必須在SQL Server所在的服務器成功地安裝並組態Oracle之客戶端軟件。因為Oracle提供的產品只支持Oracle 8以後的數據庫,所以我假設您正在使用的都是Oracle 8以後的數據庫。在Oracle Net8函式庫則提供了SQL Server所需要的客戶端軟件。
譯者注1:
設定連接服務器時是利用 Microsoft所提供的OLE DB Provider for Oracle,使用的Oracle網絡函式庫為SQL*Net 2.3.3.0.4或是以後的版本,不過這是Oracle 7.3數據庫所提供的。換句話說,要設定Oracle數據庫為SQL Server的連接服務器時,Oracle數據庫只要是7.3.3.4以後的版本,並搭配適當的SQL*Net或是Net 8 函式庫即可。
資料來源:
1. Oracle 7 Server Getting Started release 7.3.4
2. SQL Server Books Online: OLE DB Provider for Oracle
在 Oracle數據庫中,一個schema即代表著SQL Server專家們所熟知的單一數據庫(譯者注2)。連接至Oracle數據庫時,您必須提供schema名稱、密碼以及主機聯機字符串(host string)。每一個特定的Oracle帳戶都擁有一個Oracle schema,而且只能有一個schema。所以schema名稱其實就等於該schema擁有者的帳戶名稱。您可以查詢Oracle的資料字典 (Data dictionary)以得到更多有關schema的內容。
至於 Oracle聯機字符串又可稱為服務名稱(service name)或是系統識別資料(Systen IdentifIEr,SID)。我們所謂的SQL Server數據庫個體(instance)在Oracle則稱為數據庫(database)。所以安裝Oracle Server時,安裝程序Oracle Universal Installer(為一個圖形接口之安裝程序,與SQL Server的Setup程序類似)將會詢問您SID名稱為何,以作為Oracle數據庫之名稱。
譯者注2:
這個部分原作者所提到schema的解釋有點問題。Oracle schema可視為同一個使用者所擁有的所有數據庫對象(schema objects)之集合。舉例來說,使用者scott所建立的EMP table其完整名稱為SCOTT.EMP,而SCOTT就是EMP的schema名稱。所以schema name其實就是一個Oracle數據庫之使用者帳號。但是絕對不能拿來跟數據庫相提並論!因為SQL Server的數據庫架構包含了data files與log files,但是Oracle的schema objects只存在於tablespace中。為了避免部分讀者產生混淆,特此說明。
如果您在Windows操作系統上安裝Oracle Server時設定SID為Ora817(與本篇文章的范例相同),則在系統內將會有一個名稱為OracleServiceORA817的服務。