Oracle 訂閱者
Microsoft SQL Server 2005 透過由 Oracle 提供的 Oracle OLE DB 提供者支援 Oracle 的發送訂閱。
設定 Oracle 訂閱者
若要設定「Oracle 訂閱者」,請遵循下列步驟:
在「SQL Server 散發者」上安裝並設定 Oracle 用戶端網路軟體及 Oracle OLE DB 提供者,以便「散發者」可與「Oracle 訂閱者」建立連接。Oracle 用戶端網路軟體應為最新的可用版本。Oracle 建議使用者安裝最新版本的用戶端軟體。因此用戶端軟體的版本通常比資料庫軟體的版本還要新。安裝該軟體最直接的方法是使用 Oracle Client 磁碟上的 Oracle Universal Installer。在 Oracle Universal Installer 中,您將提供下列資訊:
資訊 描述 Oracle Home
這是到 Oracle 軟體之安裝目錄的路徑。接受預設路徑 (C:\oracle\ora90 或類似路徑) 或輸入其他路徑。如需有關 Oracle Home 的詳細資訊,請參閱本主題後面的「Oracle Home 的注意事項」。
Oracle Home 名稱
Oracle Home 路徑的別名。
安裝類型
在 Oracle 10g 中,選取 [執行階段] 或 [管理員] 安裝選項。
為「訂閱者」建立 TNS 名稱。TNS (Transparent Network Substrate) 是 Oracle 資料庫所使用的通訊層。TNS Service Name 是 Oracle 資料庫執行個體在網路上使用的名稱。您可以在為 Oracle 資料庫設定連接時,指派 TNS Service Name。複寫使用「TNS 服務」名稱來識別「訂閱者」並建立連接。
Oracle Universal Installer 完成之後,請使用 Net Configuration Assistant 設定網路連接性。您必須提供四項資訊來設定網路連接性。Oracle 資料庫管理員會在設定資料庫與接聽程式時設定網路組態,如果您沒有此一資訊,管理員應該能夠提供。您必須執行下列工作:動作 描述 識別資料庫
有兩種方法可以識別資料庫。第一種方法使用 Oracle 系統識別碼 (SID),每個 Oracle 版本都有。第二種方法使用服務名稱,從 Oracle 8.0 版開始提供。這兩種方法都使用在建立資料庫時設定的值,重要的是,用戶端網路組態必須使用相同於管理員在設定資料庫接聽程式時,所使用的命名方法。
識別資料庫的網路別名
您必須指定一個用來存取 Oracle 資料庫的網路別名。網路別名實質上是指向在建立資料庫時設定之遠端 SID 或服務名稱的指標;不同的 Oracle 版本與產品中所使用的稱呼各有不同,包括網路服務名稱 (Net Service Name) 和 TNS 別名 (TNS Alias)。您登入時,SQL*Plus 會提示以「Host String」參數輸入這個別名。
選取網路通訊協定
選取您要支援的適當通訊協定。大多數應用程式使用 TCP。
指定識別資料庫接聽程式的主機資訊
主機是 Oracle 接聽程式所執行之電腦 (通常與資料庫所在的電腦相同) 的名稱或 DNS 別名。針對某些通訊協定,您必須提供其他的資訊。例如,您若是選取 TCP,就必須提供接聽程式接聽對目標資料庫之連接要求的通訊埠。預設 TCP 組態使用通訊埠 1521。
建立快照集或交易式發行集,並為非 SQL Server 訂閱者啟用,然後再為訂閱者建立發送訂閱。如需詳細資訊,請參閱:
- SQL Server Management Studio: 如何:為非 SQL Server 訂閱者建立訂閱 (SQL Server Management Studio)
- 複寫 Transact-SQL 程式設計:<How to: Create a Subscription for a Non-SQL Server Subscriber (Replication Transact-SQL Programming)>
設定目錄權限
必須授與「散發者」端執行 SQL Server 服務所用之帳戶,對安裝 Oracle 用戶端網路軟體之目錄 (以及所有子目錄) 的讀取和執行權限。
測試 SQL Server 散發者與 Oracle 發行者之間的連接性
Net Configuration Assistant 執行即將結束時,可能會有一個用於測試到「Oracle 訂閱者」連接的選項。在您測試連接之前,請確定 Oracle 資料庫執行個體有上線,而且 Oracle 接聽程式正在執行。如果測試不成功,請連絡負責您想要連接之資料庫的 Oracle DBA (Oracle 資料庫管理員)。
成功連接到「Oracle 發行者」後,請嘗試使用與設定訂閱之「散發代理程式」時相同的帳戶與密碼登入資料庫。
- 按一下 [開始],然後按一下 [執行]。
- 鍵入
cmd
,然後按一下 [確定]。 - 在命令提示字元中,鍵入:
sqlplus <UserSchemaLogin>/<UserSchemaPassword>@<NetServiceName>
例如:sqlplus replication/$tr0ngPasswerd@Oracle90Server
- 如果網路組態成功,登入將會成功,您也會看到
SQL
提示字元。
Oracle Home 的注意事項
Oracle 支援應用程式二進位編碼檔案的並存安裝,但是複寫時,一次只能使用一組二進位編碼檔案。每一個二進位編碼檔案與一個 Oracle Home 相關聯;二進位編碼檔案是在 %ORACLE_HOME%\bin 目錄下。如果複寫連接到「Oracle 訂閱者」,則您必須確定使用正確的一組二進位編碼檔案 (特別對於最新版本的用戶端網路軟體)。
利用 SQL Server 服務與 SQL Server Agent 服務使用的帳戶登入散發者,並設定適當的環境變數。%ORACLE_HOME% 變數應設定為參考您安裝用戶端網路軟體時指定的安裝點。%PATH% 必須包含 %ORACLE_HOME% \bin 目錄,作為遇到的第一個 Oracle 項目。如需有關設定環境變數的資訊,請參閱 Windows 文件集。
附註: |
---|
如果您在「SQL Server 散發者」上有多個 Oracle 首頁,請確定「散發代理程式」使用的是最新版本的 Oracle OLE DB 提供者。在某些情況下,更新「SQL Server 散發者」上的用戶端元件時,依預設,Oracle 不會更新 OLE DB 提供者。請解除安裝舊的 OLE DB 提供者,並安裝最新版本的 OLE DB 提供者。如需安裝與解除安裝該提供者的詳細資訊,請參閱 Oracle 文件集。 |
Oracle 訂閱者之考量
複寫至「Oracle 訂閱者」時,除了要考慮主題<非 SQL Server 訂閱者>中涵蓋的內容外,還需考慮以下幾個問題:
- Oracle 將空白字串和 NULL 值均視為 NULL。您將 SQL Server 資料行定義為 NOT NULL,並要將此資料行複寫至「Oracle 訂閱者」時,這一點相當重要。若要避免將變更套用到「Oracle 訂閱者」時發生錯誤,您必須執行以下操作之一:
- 請確定空白字串尚未作為資料行值插入已發行的資料表中。
- 如果通知「散發代理程式」歷程記錄中的錯誤並繼續處理是可接受的,則請使用「散發代理程式」的 –SkipErrors 參數。請指定 Oracle 錯誤碼 1400 (-SkipErrors1400)。如需有關 PAL 的資訊,請參閱<略過交易式複寫中的錯誤>。
- 修改已產生的建立資料表指令碼,同時從可能包含了與空白字串相關聯的任何字元資料行中移除 NOT NULL 屬性,並且使用 sp_addarticle (Transact-SQL) 的 @creation_script 參數為發行項提供作為自訂建立指令碼的已修改指令碼。
- Oracle 訂閱者支援 0x4071 的結構描述選項。如需有關結構描述選項的資訊,請參閱<sp_addarticle (Transact-SQL)>。
從 SQL Server 到 Oracle 的資料類型對應
下表顯示了將資料複寫到執行 Oracle 的「訂閱者」時所使用之資料類型對應。
SQL Server 資料類型 | Oracle 資料類型 |
---|---|
BIGINT |
NUMBER(19,0) |
BINARY(1-2000) |
RAW(1-2000) |
BINARY(2001-8000) |
BLOB |
BIT |
NUMBER(1) |
CHAR(1-2000) |
CHAR(1-2000) |
CHAR(2001-4000) |
VARCHAR2(2001-4000) |
CHAR(4001-8000) |
CLOB |
DATETIME |
DATE |
DECIMAL(1-38,0-38) |
NUMBER(1-38,0-38) |
DOUBLE PRECISION |
FLOAT |
FLOAT |
FLOAT |
IMAGE |
BLOB |
INT |
NUMBER(10.0) |
MONEY |
NUMBER(19.4) |
NCHAR(1-1000) |
CHAR(1-1000) |
NCHAR(1001-4000) |
NCLOB |
NTEXT |
NCLOB |
NUMERIC(1-38,0-38) |
NUMBER(1-38,0-38) |
NVARCHAR(1-1000) |
VARCHAR2(1-2000) |
NVARCHAR(1001-4000) |
NCLOB |
NVARCHAR(MAX) |
NCLOB |
REAL |
REAL |
SMALLDATETIME |
DATE |
SMALLINT |
NUMBER(5.0) |
SMALLMONEY |
NUMBER(10.4) |
SQL_VARIANT |
N/A |
SYSNAME |
VARCHAR2(128) |
TEXT |
CLOB |
TIMESTAMP |
RAW (8) |
TINYINT |
NUMBER(3.0) |
UNIQUEIDENTIFIER |
CHAR(38) |
VARBINARY(1-2000) |
RAW(1-2000) |
VARBINARY(2001-8000) |
BLOB |
VARCHAR(1-4000) |
VARCHAR2(1-4000) |
VARCHAR(4001-8000) |
CLOB |
VARBINARY(MAX) |
BLOB |
VARCHAR(MAX) |
CLOB |
XML |
NCLOB |