2009-10-15 100 views
2

我們是在從Windows Server 2003切換到Windows Server 2008的過程中,我們遇到了一個令人沮喪的問題:SQL Server 2008中解決本地主機的計算機名

舊環境中,使用一些開發商SQL Server 2005和其他人使用SQL Server 2008.沒有問題。我們的連接字符串都指向:localhost/sqlserver。現在,在新的Server 2008環境中,Sql Server 2008偶爾會解析「localhost」,這會立即導致事件拋出異常。

在sys.servers我們已經改變了條目指向使用到localhost/SQLSERVER:

exec sp_dropserver 'buckaroo-banzai\sqlserver' 
exec sp_addserver 'localhost\sqlserver', local 
exec sp_serveroption 'localhost\sqlserver', 'data access', TRUE 

和最常見的違規SQL語句看起來像這樣(我知道這是過時的形式)(注:他們是不是唯一的罪犯,只是最常見的):

[localhost\sqlserver].[database].[table].exec sp_executesql blahblah; exec sp_another_sp 

我從這些得到的錯誤是:

Server buckaroo-bonzai\sqlserver not found in sys.servers 

切換我sys.servers進入回牧童,bonzai \ SQLSERVER得到這個錯誤:

Server localhost-bonzai\sqlserver not found in sys.servers 

如果一切指SQL Server作爲牧童,bonzai \ SQLSERVER一切正常,但對於發展,這只是不是一種選擇。對於這種記錄,在我們的Windows Server 2003環境中,這只是新的服務器2008環境;有任何想法嗎?

我想過的

可能的解決方法:

  1. 刪除版本控制(yech)
  2. 費力地在app.config和web.config文件中保持不同的連接字符串中的版本控制文件(雙yech)
  3. 版本控制文件,但不知何故有一些統一的方式來引用本地主機上的sql服務器(localhost也許?)=)
  4. 實際上找出爲什麼sql server 2008解決localhost並阻止它死了。 (耶!)
+0

這些是真的嗎?: - 連接字符串是指localhost。聯繫到DB工作。 - 運行引用localhost的SQL語句不起作用。 如果這是正確的,你可以刪除「[localhost \ sqlserver]」。從SQL腳本(即讓服務器名稱隱含)?我知道這不會找到問題的根源。 – apollodude217

回答

2

檢查hosts文件重定向

0

嗯,聽起來像一個DNS問題。不知道爲什麼它會有本身作爲「本地主機」的問題,但你可能想檢查你的系統HOSTS文件,以確保沒有被改變。

分辨率的DNS查詢的順序如下:

  1. 主機首先確定有關名稱是否是自己的名字。它應該以它的實際名稱以及localhost爲有效的。如果這沒有發生,它可能不會認爲這是你認爲的。
  2. 查詢位於每個主機上的主機文件。該文件將覆蓋任何外部DNS。
  3. DNS服務器被查詢。如果它在本地找不到任何信息,它會詢問某人,並且該答案可能不正確,具體取決於您的DNS配置方式。
  4. 作爲最後的結果,主機可以使用NetBIOS來嘗試查找主機。這勢必會在某個地方引發問題。不是一件好事,因爲通常事情似乎只是工作,但然後意想不到的行爲出現,並且很難診斷。
+0

如果這是一個DNS問題,爲什麼它有時只解析localhost? 如果它通過DNS它應該解決它所有的時間,對吧? 備案;主機文件不變。 –

+0

我不明白它怎麼可能是其他的東西;如果它認爲這是一回事,而另一回事,那聽起來就像是兩臺服務器假裝是同一件事,或者一臺服務器有衝突的DNS條目或其他東西。 – Satanicpuppy

2

如果您使用「。」,它會更好嗎?而不是「localhost」,如「。\ sqlserver」中那樣?單個週期是指本地機器,但顯然沒有辦法對其進行DNS查找,所以我懷疑SQL Server會嘗試。

+0

它仍然會失敗,因爲「。\ sqlserver」不在sys.servers中 – gbn

2

它不是DNS或HOST文件:由於沒有sys.servers條目,4部分對象名稱無法解析。

你也許可以用的sp_addlinkedserver

EXEC sp_addlinkedserver 
     'buckaroo-banzai\sqlserver', 
      N'SQL Server', 
      @datasrc = 'localhost\sqlserver' 

要解決現在,這可能會失敗(我不能測試),因爲在sys.servers的「DATA_SOURCE」將與「本地主機\ SQLSERVER」被複制。但是,您可以將其更改爲「127.0.0.1 \ sqlserver」或「actualservername \ sqlserver」之類的內容以刪除重複項。

我敢肯定,我這樣做是前一段時間...

編輯,註釋後:該錯誤可能與Behaviour change in SQL 2008 for loopback linked servers。對不起,我不知道這件事。

sp_addserver僅用於更改本地服務器名稱(即@@ servername)。

+0

試圖導致「由另一個會話使用的事務上下文」錯誤:\ –

相關問題