首頁

2013年7月3日 星期三

**以網域帳號執行服務在Windows 2008R2自動啟動失敗!!*& !!~*SQL 2008/ Windows 2008 之 MSDTC Notices**&*關機時出現taskhost window~?!*******

**以網域帳號~*執行服務
Windows 2008R2自動啟動失敗!!* & *~*SQL 2008/ Windows 2008 之 MSDTC Notices*&**關機時---
---出現taskhost window~?!********

**SQL 2008 R2安裝於Windows 2008 R2上,當SQL服務設定使用網域--
--使用者帳號執行,啟動類型設為"自動",則在重開機時會出現以下錯誤,
導致無法自動啟動 : 
SQL Server (MSSQLSERVER) 服務無法啟動,因為下列錯誤:
這個帳戶名稱不正確或不存在,或指定的帳戶名稱密碼不正確。
若將服務設定為"自動 (延遲開始)"[英文為Automatic (Delayed Start)],
 或改用本機帳號,則可避開上述問題。但同樣的設定,
 在Windows 2003 R2上則不會有錯。 由於近幾年OS、DB玩得不多,
初步了解狀況後,當下立即決定"閃開!**!!

**環境實測,設定網域帳號 + 自動啟動並不會導致SQL Server啟動失敗,
所以此問題應另有隱情。原本懷疑硬體規格、網路環境等因素導致系統中--
--某些服務就緒時機不同,而SQL Server啟動時所依賴的某個服務
(猜與網域身份認證有關)尚未準備好,因此無法完成網域帳號身份認證,
導致啟動失敗****

**"自動 (延遲開始)"並不是【SQL組態管理員】---
---(Sql Server Configuration Manager)的選項,懷疑是直接由服務---
---管理介面設定的(犀利推論),並建議由組態管理員統一設定較好**~!

***設定網域帳號時,習慣用的是user @domain.com 格式,而SQL組態管理員--
--則將其轉成domain\user格式,如此自動啟動便可順利完成。
而若用服務管理員將其改回user @domain.com格式,就會再度引發自動--
--啟動時帳號身份認證失敗,由此推論網域帳號的表示法是關鍵。
綜合以上的結果,我推測解析user @domain.com資料時需要額外服務,
而此服務在"自動 (延遲開始)"啟動階段才會備妥,因而導致前述問題;
而延遲開始是Vista/Win7/Win2008起加入的新特性,將一些啟動耗時--
--且非立即必要的服務晚一點再啟動,以加快Windows開機速度,
這或許解釋了Win2003與Win2008的測試結果不同  ***^^

***SQL 2008啟動分散式交易的時機改變***^^
***只要不是用同一個SqlConnection物件執行查詢,即便連線字串完全相同,
SQL 2005也會啟用分散式交易,所以在Mini C# Lab MSDTC測試中,
就用了這點特性故意引發分散式交易進行測試。但今天被騙很慘,
使用Mini C#測試看來MSDTC正常,但Web程式卻一直傳回分散式交易失敗!~!
追了一陣子才赫然發現,原來SQL 2008的LTM容忍度變大了, 
即便使用不同的SqlConnection,只要連線字串相同,  
還是適用LTM! 所以我一直用歪尺在量東西,難怪世界是歪的。
因此,我決定修正Mini C# Lab MSDTC的程式碼,加入---
cnStr += "Application Name=" + Guid.NewGuid().ToString();  故意造成連線字串永遠不會相同來避開SQL 2008的LTM,並且在結果中顯示Transaction.Current.TransactionInformation.DistributedIdentifier以協助--
--確認有動用到MSDTC!*~!!**

****
  1. using System;
  2. using System.Data;
  3. using System.Data.SqlClient;
  4. using System.Transactions;
  5. //REFDLL System.Data;System.Xml;System.Transactions
  6.  
  7. public class CSharpLab 
  8. {
  9.     private static void querySqlServer() 
  10.     {
  11.         string cnStr =  "Data Source=MyServer;User 
  12. Id=MyUser;Password=MyPwd;"; 
  13.         cnStr += "Application Name=" + Guid.NewGuid().ToString();
  14.         using (SqlConnection cn = new SqlConnection(cnStr)) 
  15.         {
  16.             SqlCommand cmd = new SqlCommand
  17. ("SELECT getdate() as D", cn); 
  18.             cn.Open();
  19.             SqlDataReader dr = cmd.ExecuteReader(); 
  20.             dr.Read();
  21.             Console.WriteLine(dr["D"]); 
  22.             cn.Close();
  23.         } 
  24.     }
  25.     public static void Test() 
  26.     {
  27.         using (TransactionScope tx=new TransactionScope()) 
  28.         {  
  29.             querySqlServer();
  30.             querySqlServer();
  31.             Console.WriteLine(Transaction.Current.
  32. TransactionInformation.
  33. LocalIdentifier); 
  34.             Console.WriteLine(Transaction.Current.TransactionInformation.DistributedIdentifier);
  35.             tx.Complete(); 
  36.         }
  37.     } 
  38. 新的執行結果如下,如果發現最後一組GUID是00000000-0000-0000-
  39. 0000-000000000000代表分散式交易根本沒有啟動,
  40. 千萬不要被結果給騙了!! 
  41. Built successfully in 323ms!
    Prepare to run...
    ==================================================
    11/8/2010 12:57:00 PM
    11/8/2010 12:57:00 PM
    c59168c5-dc86-4ca5-be5e-316af2da7521:32
    00000000-0000-0000-0000-000000000000
    ==================================================
    Execution time: 8 ms
  42. 啟用MSDTC的狀況下,兩組GUID應該都要有值才合理 !
  43. Built successfully in 324ms!
    Prepare to run...
    ==================================================
    11/8/2010 12:59:35 PM
    11/8/2010 12:58:36 PM
    c59168c5-dc86-4ca5-be5e-316af2da7521:33
     df4f40aa-9d43-4b86-b64d-4afbabfd22c3
    ==================================================
    Execution time: 67 ms
  44. Windows 2008 防火牆Issue發現MSDTC不通後,又匆忙找原因。
  45. 最後發現問題出在防火牆設定,
  46. 預設MSDTC是被關閉的  ! 
  47. 啟用後,終於解除了Windows 2008 R2 MSDTC的封印,Wooh```~~~
&&&
**關機時出現taskhost window~?!**
***建議可以先做一次停用第三方軟體試試看。
步驟如下:
1.在傳統桌面模式,使用Windows 鍵+R鍵,
叫出「執行」,並輸入「msconfig」,點選確定。
2.在「系統設定」,選擇「服務」頁面,將下方--
--「隱藏所有Microsoft服務(H)」選項打勾。
3.將所有的第三方軟體前方的選項打勾,
點選「全部停用」,在選擇「確定」。
4.在系統設定中,將「不要再顯示這個訊息」--
--的選項打勾,點選「重新啟動」讓設定生效。
5.重新啟動後,確認電腦是否會發生相同問題。


如果還是一樣的話請開啟命令提示字元,
輸入 *   net stop wuauserv及net start wuauserv    *
將Windows Update重新啟動試試看***^^
&&&&


****
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

沒有留言:

張貼留言


if you like make fds, wellcome you here~~anytime***

my free place for everyones who want the good software,

come & download them~ wellcome!!