2013年11月5日 星期二

[SQL SERVER] 在SQL Server 2008 R2 64 位元主機上 Create DBLink 到 SQL Server 2000 出現的錯誤訊息(一)

需求:在SQL Server 2008 R2 64 位元主機(在此稱SQLServer01)的MYDB下的MYTABLE有個觸發程序,當MYTABLE異動時觸發程序會將異動透過DBLINK到SQL Server 2000(在此稱SQLServer02)上的TABLE

依據此篇做法在SQLServer01建立DBLINK後,當Create Trigger時會出現如下的錯誤訊息
訊息 7399,層級 16,狀態 1,程序 CBUpt,行 93
連結伺服器 "MYASSET" 的 OLE DB 提供者 "SQLNCLI10" 報告了錯誤。提供者並未給予任何關於錯誤的資訊。
訊息 7312,層級 16,狀態 1,程序 CBUpt,行 93
不能使用連結伺服器 "MYASSET" 的 OLE DB 提供者 "SQLNCLI10" 的結構描述或目錄。提供了四部分的名稱,但提供者並未公開必要的介面,以使用目錄或結構描述。

看了一下錯誤訊息,應該是DBLINK的提供者有某些設定造成,所以到SSMS->伺服器物件->連結的伺服器->提供者->SQLNCLI10上右鍵“屬性”,在“提供者選項 - SQL Server Native Client 10.0”視窗中將“提供者選項”中的“限層級零”的勾勾取消後按下“確定”


再Create Trigger結果又出現如下的錯誤,不過好在錯誤訊息換了
連結伺服器 "MYASSET" 的 OLE DB 提供者 "SQLNCLI10" 傳回訊息 "無法指出的錯誤"。
連結伺服器 "MYASSET" 的 OLE DB 提供者 "SQLNCLI10" 傳回訊息 "無法在伺服器中找到完成此操作所須的預存程序。請連絡您的系統管理員。"。
訊息 7311,層級 16,狀態 2,程序 CBUpt,行 93
無法為連結伺服器 "MYASSET" 的 OLE DB 提供者 "SQLNCLI10" 取得結構描述資料列集 "DBSCHEMA_TABLES_INFO"。提供者支援介面,但在使用時傳回失敗碼。

這段錯誤訊息看不出來問題在哪,所以透過GOOGLE找到微軟的一篇KB906954,簡單來說就是因為SQL Server 2000安裝SP4後系統預存程序沒有升級所以必須手動升級系統預存程序,在SQLServer02主機的C:\Program Files\Microsoft SQL Server\MSSQL\Install\的路徑下可以找到instcat.sql,可以透過osql或是管理工具去執行就完成了

好吧,再來一次Create Trigger,哇勒~又有錯誤訊息了,錯誤訊息如下
連結伺服器 "MYASSET" 的 OLE DB 提供者 "SQLNCLI10" 傳回訊息 "Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done."。
訊息 7306,層級 16,狀態 2,行 1
無法從連結伺服器 "MYASSET" 的 OLE DB 提供者 "SQLNCLI10" 開啟資料表 ""MY_DB"."dbo"."MY_YABLE""。提供者不支援在這個資料來源上的索引掃描。

咦~之前在DBLINK的提供者的屬性視窗中好像有出現“索引”的關鍵字,所以又再次進入“提供者選項 - SQL Server Native Client 10.0”視窗中將“提供者選項”中,這次為了確保不要再被提供者的屬性搞破壞,索性就把所有勾勾都取消只留下

好吧,再來一次Create Trigger,耶~終於Create成功了

雖然Trigger建成功了,但程式一執行將資料寫入MYDB下的MYTABLE時前端程式還是會出現供者不支援在這個資料來源上的索引掃描“,所以還是有問題,當然~我不會這麼容易放棄,在下一篇中會有最終解法~待續~






沒有留言:

張貼留言