當前端程式執行時出現如下的錯誤訊息
因為連結伺服器 "MYASSET" 的 OLE DB 提供者 "MSDASQL" 無法開始分散式交易。
連結伺服器 "MYASSET" 的 OLE DB 提供者 傳回訊息"[Microsoft][ODBC SQL Server Driver]分散式異動錯誤"。
系統環境:
主機A:Windows Server 2003 with SP2 x32 及 SQL Server 2000
主機B:Windows Server 2008 R2 x64 及 SQL Server 2008 R2 x64
主機B上的資料庫中的TABLE異動時會觸發觸發程序將主機B上的資料庫中的TABLE異動
解決步驟:
(一)在主機A
1. 依序展開[開始]->[系統管理工具]->[元件服務]
2. 在[元件服務]視窗中依序展開[元件服務]->[電腦]->在[我的電腦]上右鍵[內容]
3. 在[我的電腦 內容]視窗中的[MSDTC]頁籤按下[安全性設定]
4. 在[安全性設定]視窗中請依據如下圖方式設定,設定完後按下[確定]
5. 將主機重開機
(二)在主機B
1. 依序展開[開始]->[所有程式]->[系統管理工具]->[元件服務]
2. 在[元件服務]視窗中依序展開[元件服務]->[電腦]->在[我的電腦]->[Distributed Transaction Coordinator]->[本機 DTC]上右鍵[內容]
3. 在[本機 DTC - 內容]視窗中請依據如下圖方式設定,設定完後按下[確定]
4. 在[MSDTC 服務]視窗中按下[是]
5. 在[MSDTC 服務]視窗中按下[確定]後無須重開機
註:若主機上若有防火牆需開"分散式交易協調器"的通訊Port
參考資料:http://technet.microsoft.com/zh-tw/library/cc771891.aspx
2013年11月6日 星期三
[SQL SERVER] 在SQL Server 2008 R2 64 位元主機上 Create DBLink 到 SQL Server 2000 出現的錯誤訊息(二)
在上一篇中嘗試過各種改法還是會有問題, 但是仔細看看每次出現的錯誤訊息都會出現一個關鍵字“OLE DB 提供者 "SQLNCLI10”,所以在想是不是還有其他的“提供者“可以用呢?
在TECHNET中有提到許多種OLE DB的提供者做法既然SQLNCLI10不行,那就來試試ODBC,GOOD~果然換成ODBC可以了,不過效能比之前在SQL Server 2008 R2 x32對SQL Server 2000效能要差一些,不過至少是OK的。
完成以下的設定程序後上一篇的錯誤訊息都不會產生,而且程式在執行時也不會有任何錯誤訊息了。
設定程序~
1. 若在SQL Server 2000 SP4主機上若沒執行過instcat.sql,請先執行在C:\Program Files\Microsoft SQL Server\MSSQL\Install\的路徑下的instcat.sql
2. 點選在[開始]->[系統管理工具]->[資料來源(ODBC)]
註:一定要是64位元的ODBC,不然會有錯誤訊息
3. 在[ODBC 資料來源管理員]視窗的[系統資料來源名稱]按下[新增]
4. 在[建立新資料來源]視窗中選[SQL Server]後按下[完成]
5. 在[建立新的資料來源至SQL Server]視窗中的[名稱]及[伺服器]欄位輸入相關資訊後按[下一步]
6. 在[建立新的資料來源至SQL Server]視窗選取[由使用者所輸入的登入識別碼及密碼進行SQL SERVER帳戶驗證],將[連線到SQL Server以獲得其他設定選項的預設設定]打勾,並輸入對應的帳號密碼後按[下一步]
7. 在[建立新的資料來源至SQL Server]視窗中勾選[變更預設資料庫]並選取資料庫後按[下一步]
8. 在[建立新的資料來源至SQL Server]視窗中按[完成]
9. 在[ODBC Microsoft SQl Server 設定]視窗中按下[確定]
10. 在[ODBC 資料來源管理員] 視窗中按下[確定]
11. 開啟[SQL Server Management Studio]管理工具
12. 在[物件總管]視窗中依序展開[伺服器物件]->在[連結的伺服器]上右鍵選[新增連結的伺服器]
13. 在[新增連結的伺服器]視窗中依序輸入以下欄位
a. 連結的伺服器:MYASSET (註:這名稱可自取)
b. 伺服器類型:選[其他資料來源]
b1. 提供者:Microsoft OLE DB Provider for ODBC Drivers
b2. 產品名稱:ASSET (註:這名稱可自取)
b3. 資料來源:ASSET
14. 在[新增連結的伺服器]視窗中的[安全性頁籤],點選[使用此安全性內容建立],並輸入[遠端登入]及[指定密碼]後按下[確定]
在TECHNET中有提到許多種OLE DB的提供者做法既然SQLNCLI10不行,那就來試試ODBC,GOOD~果然換成ODBC可以了,不過效能比之前在SQL Server 2008 R2 x32對SQL Server 2000效能要差一些,不過至少是OK的。
完成以下的設定程序後上一篇的錯誤訊息都不會產生,而且程式在執行時也不會有任何錯誤訊息了。
設定程序~
1. 若在SQL Server 2000 SP4主機上若沒執行過instcat.sql,請先執行在C:\Program Files\Microsoft SQL Server\MSSQL\Install\的路徑下的instcat.sql
2. 點選在[開始]->[系統管理工具]->[資料來源(ODBC)]
註:一定要是64位元的ODBC,不然會有錯誤訊息
3. 在[ODBC 資料來源管理員]視窗的[系統資料來源名稱]按下[新增]
4. 在[建立新資料來源]視窗中選[SQL Server]後按下[完成]
5. 在[建立新的資料來源至SQL Server]視窗中的[名稱]及[伺服器]欄位輸入相關資訊後按[下一步]
6. 在[建立新的資料來源至SQL Server]視窗選取[由使用者所輸入的登入識別碼及密碼進行SQL SERVER帳戶驗證],將[連線到SQL Server以獲得其他設定選項的預設設定]打勾,並輸入對應的帳號密碼後按[下一步]
7. 在[建立新的資料來源至SQL Server]視窗中勾選[變更預設資料庫]並選取資料庫後按[下一步]
8. 在[建立新的資料來源至SQL Server]視窗中按[完成]
9. 在[ODBC Microsoft SQl Server 設定]視窗中按下[確定]
10. 在[ODBC 資料來源管理員] 視窗中按下[確定]
11. 開啟[SQL Server Management Studio]管理工具
12. 在[物件總管]視窗中依序展開[伺服器物件]->在[連結的伺服器]上右鍵選[新增連結的伺服器]
13. 在[新增連結的伺服器]視窗中依序輸入以下欄位
a. 連結的伺服器:MYASSET (註:這名稱可自取)
b. 伺服器類型:選[其他資料來源]
b1. 提供者:Microsoft OLE DB Provider for ODBC Drivers
b2. 產品名稱:ASSET (註:這名稱可自取)
b3. 資料來源:ASSET
14. 在[新增連結的伺服器]視窗中的[安全性頁籤],點選[使用此安全性內容建立],並輸入[遠端登入]及[指定密碼]後按下[確定]
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時前端程式還是會出現”提供者不支援在這個資料來源上的索引掃描“,所以還是有問題,當然~我不會這麼容易放棄,在下一篇中會有最終解法~待續~
依據此篇做法在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時前端程式還是會出現”提供者不支援在這個資料來源上的索引掃描“,所以還是有問題,當然~我不會這麼容易放棄,在下一篇中會有最終解法~待續~
2013年10月31日 星期四
[享樂生活]IOI~隨意鳥地方義大利餐廳
隨意鳥101高空觀景餐廳
110台北市信義區信義路五段7號85F
02 8101 0016
相片集網址:http://www.flickr.com/photos/103855078@N03/sets/72157637147261506/
2013年10月24日 星期四
[SQL SERVER][T-SQL]字串轉日期出現"從字元字串轉換成日期及/或時間時,轉換失敗"的錯誤訊息
TABLE中欄位CounterDateTime屬性是char,且資料類型都是"2013-10-24
15:18:51.0000"的資料,但是在做CONVERT的時候卻出現"從字元字串轉換成日期及/或時間時,轉換失敗"的錯誤訊息
透過ISDATE函數查詢發現該欄位回應值都是0
去MSDN查了一下會回覆0有以下五種情形:
1. NULL
2. 在<資料類型>的任何資料類型類別目錄中所列的資料類型值,但字元字串、Unicode 字元字串或日期和時間除外。
3. text、ntext 或 image 資料類型的值。
4. 秒數有效位數超過 3 的任何值 (.0000 到 .0000000... n)。 如果 expression 是 datetime2 值,則 ISDATE 會傳回 0。如果 expression 是有效的 datetime 值,則會傳回 1。
5. 混合有效日期與無效值的任何值,例如 1995-10-1a。
所以我只要改寫一下就OK了
SELECT convert(datetime,substring (max([CounterDateTime]),1,19))
FROM [DBA-MarginProd-PerfLog].[dbo].[CounterData]
透過ISDATE函數查詢發現該欄位回應值都是0
去MSDN查了一下會回覆0有以下五種情形:
1. NULL
2. 在<資料類型>的任何資料類型類別目錄中所列的資料類型值,但字元字串、Unicode 字元字串或日期和時間除外。
3. text、ntext 或 image 資料類型的值。
4. 秒數有效位數超過 3 的任何值 (.0000 到 .0000000... n)。 如果 expression 是 datetime2 值,則 ISDATE 會傳回 0。如果 expression 是有效的 datetime 值,則會傳回 1。
5. 混合有效日期與無效值的任何值,例如 1995-10-1a。
所以我只要改寫一下就OK了
SELECT convert(datetime,substring (max([CounterDateTime]),1,19))
FROM [DBA-MarginProd-PerfLog].[dbo].[CounterData]
2013年10月22日 星期二
[SQL Server] [T-SQL] 出現"必須宣告純量變數"的警告訊息
AP給了一段T-SQL語法如下圖,在SSMS中出現一堆"蚯蚓"滑鼠移過去確認問題都是出現"必須宣告純量變數",但是在語法之前都有宣告且字都沒有打錯。
發生原因:
因T-SQL是逐行執行所以當執行到第十行的GO就將之前宣告的參數都從記憶體中取消,造成要執行第十一行時就出現"必須宣告純量變數"的錯誤訊息
解法一:將第十行的"GO"拿掉
解法二:將第九行及第十行一道最後執行
因T-SQL是逐行執行所以當執行到第十行的GO就將之前宣告的參數都從記憶體中取消,造成要執行第十一行時就出現"必須宣告純量變數"的錯誤訊息
解法一:將第十行的"GO"拿掉
解法二:將第九行及第十行一道最後執行
2013年10月12日 星期六
訂閱:
文章 (Atom)