訓練
學習路徑
Implement finance and operations apps - Training
Plan and design your project methodology to successfully implement finance and operations apps with FastTrack services, data management and more.
適用於:SQL Server
本主題列出設定和使用「Oracle 發行者」時可能發生的一些問題。
Microsoft SQL Server 在「散發者」上執行的帳戶,必須對 Oracle 用戶端網路軟體的安裝目錄 (以及所有子目錄) 具有讀取與執行權限。 如果沒有被授與權限或者 Oracle 用戶端元件沒有正確安裝,您將收到下列錯誤訊息:
「由於 [Microsoft OLE DB Provider for Oracle],連接到伺服器失敗。 找不到 Oracle 用戶端和網路元件。 這些元件由 Oracle 公司提供,是 Oracle 7.3.3 或更新版本用戶端軟體安裝的一部分。 在這些元件安裝前,Provider 無法運作」。
如果在「散發者」端已安裝適當的 Oracle 用戶端,請確定在用戶端完成安裝後,停止並重新啟動 SQL Server。 為了讓 SQL Server 辨識用戶端元件,這是必要的動作。
如果您確認已被授與權限並且元件已安裝正確,但仍產生此錯誤,請確認 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI 的登錄設定正確:
對於 Oracle 10g,正確的設定為
OracleOciLib = oci.dll
OracleSqlLib = orasql10.dll
OracleXaLib = oraclient10.dll
對於 Oracle 9i,正確的設定為
OracleOciLib = oci.dll
OracleSqlLib = orasql9.dll
OracleXaLib = oraclient9.dll
如果「SQL Server 散發者」無法連接到「Oracle 發行者」,請確定:
「散發者」上安裝了必要的 Oracle 軟體。
Oracle 資料庫在線上,並且您可以使用 SQL*Plus 之類的工具與其連接。
複寫用於連接到「Oracle 發行者」的登入擁有足夠權限。 如需詳細資訊,請參閱設定 Oracle 發行者。
在「Oracle 發行者」設定期間定義的 TNS 名稱列在 tnsnames.ora 檔案中。
使用正確的 Oracle 首頁和路徑。 即使「SQL Server 散發者」上只安裝一組 Oracle 二進位編碼檔案,也請確定正確設定了與 Oracle 首頁相關的環境變數。 如果變更環境變數值,必須停止並重新啟動 SQL Server,才能使變更生效。
如需設定及測試連線能力的詳細資訊,請參閱設定 Oracle 發行者中的 <在 SQL Server 散發者上安裝與設定 Oracle 用戶端網路軟體>。
一個「Oracle 發行者」只能與一個「SQL Server 散發者」相關聯。 如果有另一個「散發者」與該「Oracle 發行者」相關聯,則必須在卸除它之後方可使用另一個「散發者」。 如果沒有先卸除該「散發者」,您將收到下列錯誤訊息之一:
"Oracle server instance '<OraclePublisherName>' has been previously configured to use '<SQLServerDistributorName>' as its Distributor. To begin using '<NewSQLServerDistributorName>' as its Distributor, you must remove the current replication configuration on the Oracle server instance, which will delete all publications on that server instance."
"Oracle server '<OracleServerName>' is already defined as publisher '<OraclePublisherName>' on distributor '<SQLServerDistributorName>.<DistributionDatabaseName>'. Drop the publisher or drop the public synonym '<SynonymName>' to recreate."
在卸除某個「Oracle 散發者」時,Oracle 資料庫中的複寫物件也會自動清除。 但是在某些情況下必須手動清除 Oracle 複寫物件。 若要手動清除複寫建立的 Oracle 複寫物件:
連接到具有 DBA 權限的 Oracle 發行者。
發出 SQL 命令 DROP PUBLIC SYNONYM MSSQLSERVERDISTRIBUTOR;
。
發出 SQL 命令 DROP USER <replication_administrative_user_schema>``CASCADE;
。
交易式發行集中的發行項必須擁有有效的主索引鍵。 如果它們沒有有效的主索引鍵,您將在嘗試新增發行項時收到下列錯誤訊息:
"No valid primary key found for source table [<TableOwner>].[<TableName>]"
如需主索引鍵需求的詳細資訊,請參閱< Design Considerations and Limitations for Oracle Publishers>主題中的<唯一索引和條件約束>一節。
在最初設定「Oracle 發行者」時,會為「發行者」與「散發者」之間的連接建立一個連結伺服器項目。 連結伺服器的名稱與 Oracle TNS 服務名稱相同。 如果您嘗試建立相同名稱的連結伺服器,將顯示下列錯誤訊息:
「異質性發行者需要已連結伺服器。 A linked server named '<LinkedServerName>' already exists. 請移除已連結伺服器或選擇不同的發行者名稱」。
如果您嘗試直接建立連結伺服器,或者您之前已卸除「Oracle 發行者」與「SQL Server 散發者」之間的關聯性,現在又嘗試重新設定,則可能發生此錯誤。 若在嘗試重新設定「發行者」時收到此錯誤,請使用 sp_dropserver (Transact-SQL) 卸除連結伺服器。
若您必須透過連結伺服器連線來連接到「Oracle 發行者」,請建立另一個 TNS 服務名稱,然後在呼叫 sp_addlinkedserver (Transact-SQL) 時使用這個名稱。 如需建立 TNS 服務名稱的詳細資訊,請參閱 Oracle 文件集。
Oracle 發行使用 Oracle 應用程式 SQL*PLUS 將「發行者」支援程式碼的封裝下載到 Oracle 資料庫。 嘗試設定「Oracle 發行者」之前,SQL Server 會確認是否可透過「散發者」上的系統路徑存取 SQL*PLUS。 如果無法載入 SQL*PLUS,會顯示下列錯誤訊息:
「無法執行 SQL*PLUS。 請確認散發者端已安裝目前版本的 Oracle 用戶端程式碼」。
嘗試在「散發者」上尋找 SQL*PLUS。 對於 Oracle 10g 用戶端安裝,此可執行檔的名稱為 sqlplus.exe, 通常安裝於 %ORACLE_HOME%/bin。 若要確認 SQL*PLUS 的路徑是否顯示在系統路徑中,請檢查系統變數 Path 的值:
以滑鼠右鍵按一下 [我的電腦] ,然後再按 [內容] 。
按一下 [進階] 索引標籤,然後再按 [環境變數] 。
在 [環境變數] 對話方塊的 [系統變數] 清單中,選取 [Path] 變數,然後按一下 [編輯] 。
在 [編輯系統變數] 對話方塊中:如果 [變數值] 文字方塊中不存在包含 sqlplus.exe 的資料夾路徑,則編輯字串以包含它。
按一下每個開啟對話方塊上的 [確定] ,以結束並儲存變更。
如果您在「散發者」上找不到 sqlplus.exe,請於「散發者」端安裝目前版本的 Oracle 用戶端軟體。 如需詳細資訊,請參閱設定 Oracle 發行者。
如果連接到 8.1 版之前的 Oracle 資料庫,Oracle 發行需要在散發者上安裝 9 版以上的 Oracle 用戶端軟體。 如果連接到 8.1 版或更新版本的 Oracle 資料庫,則建議採用 10 版或更新版本的 Oracle 用戶端軟體。
嘗試設定「Oracle 發行者」之前,Oracle 發行會確認可透過「散發者」上系統路徑存取的 SQL*PLUS 版本是不是 9 版或更新版本。 如果不是,會顯示下列錯誤訊息:
「可透過系統 Path 變數存取的 SQL*PLUS 版本,目前不足以支援 Oracle 發行。 請確認散發者端已安裝目前版本的 Oracle 用戶端程式碼」。
如果在「散發者」上安裝了多個版本的 Oracle 用戶端軟體,請確定最新版本至少是 9 版,並且系統 path 變數會首先參考此版本 (只要最新的版本最先出現,就會發生對其他版本的參考)。 如需有關編輯系統 path 變數的詳細資訊,請參閱本主題前面的<發生 SQL Server 錯誤 21617>一節。
對於 64 位元的「散發者」,Oracle 發行會使用 Oracle OLEDB Provider for Oracle (OraOLEDB.Oracle)。 請確定已安裝 Oracle OLEDB 提供者,並在「散發者」上註冊。 如果未安裝和註冊提供者,便會顯示以下一或兩則錯誤訊息:
在散發者 '%s' 端找不到已註冊的 Oracle OLEDB 提供者 (OraOLEDB.Oracle)。 請確認已安裝目前版本的 Oracle OLEDB 提供者,並在散發者端註冊」。
「CLSID 登錄機碼指出散發者端沒有已經註冊的 Oracle OLEDB Provider for Oracle (OraOLEDB.Oracle)。 請確認已安裝 Oracle OLEDB 提供者,並在散發者端註冊」。
如果使用的是 10g 版的 Oracle 用戶端軟體,提供者為 OraOLEDB10.dll;如果是 9i 版,則提供者為 OraOLEDB.dll。 提供者安裝於 %ORACLE_HOME%\BIN (例如,C:\oracle\product\10.1.0\Client_1\bin)。 如果判斷出「散發者」端未安裝 Oracle OLEDB 提供者,請從 Oracle 提供的 Oracle 用戶端軟體安裝光碟片安裝它。 如需詳細資訊,請參閱設定 Oracle 發行者。
如果安裝了 Oracle OLEDB 提供者,請確定其已註冊。 若要註冊提供者 DLL,請從安裝 DLL 的目錄執行下列命令,然後停止 SQL Server 執行個體並重新啟動它:
regsvr32 OraOLEDB10.dll
或 regsvr32 OraOLEDB.dll
。為了確認 Oracle 發行環境是否設定正確,SQL Server 會嘗試使用您在設定期間指定的登入認證連接「Oracle 發行者」。 如果「SQL Server 散發者」無法連接到「Oracle 發行者」,則會顯示下列錯誤訊息:
如果顯示此錯誤訊息,請透過使用「Oracle 發行者」設定期間指定的登入和密碼直接執行 SQL*PLUS,確認與 Oracle 資料庫的連接。 如需詳細資訊,請參閱本主題稍早的「SQL Server 散發者無法連接到 Oracle 資料庫執行個體」一節。
對於 64 位元的「散發者」,Oracle 發行會使用 Oracle OLEDB Provider for Oracle (OraOLEDB.Oracle)。 SQL Server 會建立登錄項目,以允許使用 SQL Server 在處理序中執行 Oracle 提供者。 如果讀取或寫入此登錄項目時發生問題,則會顯示下列錯誤訊息:
"Unable to update the registry of distributor '%s' to allow Oracle OLEDB provider OraOLEDB.Oracle to run in process with SQL Server. Make certain that current login is authorized to modify SQL Server owned registry keys."
Oracle 發行需要存在登錄項目,且對於 64 位元「散發者」該登錄項目應設定為 1 。 如果該項目不存在,SQL Server 會嘗試建立它。 如果該項目存在,但設定為 0,則設定不會變更;「Oracle 發行者」的設定將失敗。
若要檢視和修改登錄設定:
按一下 [開始] ,然後按一下 [執行] 。
在 [執行] 對話方塊中,輸入 regedit,然後按一下 [確定] 。
瀏覽至 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<InstanceName>\Providers。
[Providers] 下應包含一個名為 OraOLEDB.Oracle 的資料夾。 在此資料夾中應是 DWORD 值名稱 AllowInProcess,其值為 1。
如果判斷出 AllowInProcess 設定為 0,請將登錄項目更新為 1:
以滑鼠右鍵按一下項目,然後再按 [修改] 。
在 [編輯字串] 對話方塊的 [值資料] 欄位中輸入 [1] 。
如果管理的使用者帳戶沒有足夠權限,就會顯示下列錯誤訊息:
「與 Oracle 發行者 '%s' 管理者登入相關聯的權限不足。」
若要確認已授與使用者的權限,請執行下列查詢: SELECT * from session_privs
。 輸出應如下所示:
PRIVILEGE
------------------
CREATE SESSION
CREATE TABLE
CREATE PUBLIC SYNONYM
DROP PUBLIC SYNONYM
CREATE VIEW
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
複寫使用者結構描述必須擁有設定 Oracle 發行者的<手動建立使用者結構描述>中所述的權限。
將發行項新增至發行集的過程中,複寫使用「Oracle 發行者」的資料指標。 在此處理過程中,可能會超過「發行者」上可用資料指標的最大數目。 如果發生此種情形,則會產生下列錯誤:
「ORA-01000:超出開啟之資料指標的最大數目」
為避免此問題,請確定 Oracle 資料庫中的 max_open_cursors 設定已設成足夠大 (至少 1000)。 如需此設定的詳細資訊,請參閱 Oracle 文件集。
下列 Oracle 資料庫錯誤與快照式複寫無關;而與 Oracle 如何建構資料的讀取一致檢視相關:
「ORA-01555:快照集太舊」
Oracle 會在發出 SQL 陳述式時,使用稱為回復區段的物件建構資料的讀取一致檢視。 在回復資訊為其他並行的階段作業所覆寫時,可能會發生「快照集太舊」錯誤。 對於 Oracle 9i 之前的版本,建議使用以下方法來減少此錯誤的發生頻率:增加回復區段的大小和 (或) 數目,並將大型交易指派到特定的回復區段。
在 Oracle 9i 中,Oracle 提出了 UNDO 資料表空間概念來取代回復區段。 為防止在 Oracle 9i 中發生「快照集太舊」錯誤,建議您:
建立一個包含適當可用空間量的 UNDO 資料表空間。
在資料表空間上設定保留保證 (Oracle 10G 和更高版本)。
設定 Oracle 初始化參數 UNDO_MANAGEMENT 與 UNDO_RETENTION。
如需避免「快照集太舊」錯誤的詳細資料,請參閱 Oracle 文件集。
如果資料表包括 BFILE 資料行,則該資料行的資料儲存在檔案系統中。 複寫管理使用者帳戶必須被授與目錄存取權限。在該目錄中,資料使用下列語法儲存:
GRANT READ ON DIRECTORY <directory_name> TO <replication_administrative_user_schema>
如果未授與存取權,「記錄讀取器代理程式」將發生下列錯誤:
「ORA-22285:目錄或 FILEOPEN 作業的檔案不存在」
對複寫中繼資料資料表或程序的變更要求您卸除「發行者」,然後對其重新設定。 若要重新設定「發行者」,您必須先卸除「發行者」,然後再使用 SQL Server Management Studio、Transact-SQL 或 RMO 重新設定。 如需設定發行者的詳細資訊,請參閱設定 Oracle 發行者。
卸除 Oracle 發行者 ( SQL Server Management Studio )
連接到 SQL Server Management Studio 中「Oracle 發行者」的「散發者」,然後展開伺服器節點。
以滑鼠右鍵按一下 [複寫] ,然後按一下 [散發者屬性] 。
在 [散發者屬性] 對話方塊的 [發行者] 頁面上,清除「Oracle 發行者」的核取方塊。
按一下 [確定]。
若要卸除 Oracle 發行者 (Transact-SQL)
訓練
學習路徑
Implement finance and operations apps - Training
Plan and design your project methodology to successfully implement finance and operations apps with FastTrack services, data management and more.