發表文章

目前顯示的是有「SQL Server」標籤的文章

MSSQL 2008/2012 Management Studio安裝後無法設定及使用「已註冊伺服器群組」

最近正好更新電腦,重新安裝了MSSQL Server 2008/2012的Management Studio。安裝後開啟程式就先將原本在舊電腦中的伺服器註冊資訊匯出並匯入到新的電腦中。匯入時發生了錯誤,造成無法正常匯入。 後來重新開啟MSSQL Server Management Studio後就無法正常使用「已註冊伺服器群組」了。有試過移除後再重新安裝,可是只要一開啟程式時,就會出現錯誤。雖然可以忽略這個錯誤訊息,但一進入主程式,就無法使用「已註冊伺服器群組」。 花了點時間查了一下,發現可能是原本匯入失敗的設定資料造成無法使用「已註冊伺服器群組」。 有人建議就先去刪除這些註冊資訊 ,註冊的資訊位於: %APPDATA%\Microsoft\Microsoft SQL Server\100\Tools\Shell\ 只要將RegSvr.xml這個檔案刪除後,再重啟SSMS就可以正常使用了。

建立遠端伺服器時出現「沒有對應到本機使用者」的錯誤

圖片
最近在幫兩台SQL Server間建立遠端伺服器時出現了一個奇怪的錯誤訊息。主要是: 解密期間發生錯誤。在遠端伺服器xxxx沒有對應到本機使用者'(null)'的遠端使用者xxxx。錯誤代碼為15466 。 已經確認所使用的帳號/密碼都是正確的,但就是突然無法建立兩端的連結。一開始用這段中文的錯誤訊息去查詢相關資訊時,都無法查到可用的解決方案。後來就試著改成英文的方式來查詢:linked server local user null之類的,總算是查到一些可能的解法,主要就是要重新產生解密所用的key,需使用到以下的T-SQL指令: ALTER SERVICE MASTER KEY FORCE REGENERATE 果然執行之後再去建立遠端伺服器連結就正常了。

加速開啟SQL Management Studio的速度

在網路上看到有人說可以 加快開啟SQL Management Studio速度 的方式。試了一下還真的可以很快地開啟SQL Managment Studio。它的方式是在hosts檔案中加入一行: 127.0.0.1  crl.microsoft.com 看來就是讓有需要查詢crl.microsoft.com的程式,直接就連回本機了。 只是 查詢crl.microsoft.com的用意為何 呢? One issue that can cause this problem is that if the server does not have access to the internet, then the .NET framework can't access the crl.microsoft.com website to verify that the digital signatures used to sign the binaries for managed applications are valid.  看來是為了要驗証數位簽章的正確性。如果你確定是正確的,那就不用去檢查了吧。或是你根本就無法查詢crl.microsoft.com的話,那也不用查了。可省下開啟的時間。

使用T4範本產生器讀取資料庫時指定所要使用的SMO版本

圖片
在使用T4範本產生器讀取資料庫的資訊時,一般可能都會用如下的引用方式: <#@ template language="C#" debug="True" hostspecific="True" encoding="0"#> <#@ output extension=".cs" #> <#@ assembly name="System.Data" #> <#@ assembly name="Microsoft.SqlServer.ConnectionInfo" #> <#@ assembly name="Microsoft.SqlServer.Smo" #> <#@ assembly name="Microsoft.SqlServer.Management.Sdk.Sfc" #> <#@ assembly name="System.Xml" #> <#@ import namespace="System.IO" #> <#@ import namespace="System.Text" #> <#@ import namespace="System.Data.SqlClient" #> <#@ import namespace="Microsoft.SqlServer.Management.Smo" #> <#@ import namespace="Microsoft.SqlServer.Management.Common" #> 其中在引用有關 M icrosoft® SQL Server® 2008 R2 共用管理物件 時,大部份都直接寫Assembly的名稱。但是如果您的開發環境中安裝了兩種以上的SQL Server版本時,這時會取用註冊在GAC中的哪一種版本,可能就會取決於您目前所使用的Visu...

實作資料表分割

圖片
當某個資料表中的資料快速累積到一定程度時,對這樣龐大的資料表進行查詢或新增、刪除等動作都會相當地費時。如果能將這個資料表分割成數個區塊來進行查詢及維護,對效能應該會有所幫助。 在SQL Server 2008以前要實作出資料表分割的概念的話,可能就是真的要建立數個不同名稱,但具有相同的資料表表網的資料表。並利用某個預先定義好的分割函式來將資料表中的內容加以分割,放置到個別的資料表中。 要查詢時,再利用View的方式JOIN成一個資料表檢視來進行查詢。或是在查詢前利用相同的資料分割函式決定出要查詢的區塊,再到那個區塊所對應的資料表中進行查詢。不過,這種方式都是需要使用者能明確地事先依資料分割函式來計算所要取用的資料區塊才行。 在SQL Server 2008版中,它真接內建了 資料表分割的功能 。只要您提供所需的 資料表分割函式 ,以及 資料表分割表綱(SCHEMA) ,就可以將資料表進行分割了。 要實作資料表分割的話,如果您一開始還沒有建好資料表,那當然可以先建好資料表分割函式、資料表分割表綱後再來建立資料表。不過,如果要針對既有的資料表進行資料表分割的話,應該也是有相對應的SQL指令可以來完成,但在SQL Server 2008的管理工具中已經有提供介面化的方式來讓您為即有的資料表進行資料表分割的設定。 以下說明如何利用SQL Server管理工具的介面來進行資料表分割。 首先找到您要進行分割的資料表,在這個資料表上按下右鍵,會出現一個選單,其中有一項是:儲存體。在儲存體中有個「建立資料分割」的功能,這個功能就是用來製作分割資料表的工具。 一開始會出現說明的畫面: 接著會出現這個資料表的所有欄位資訊,主要就是要選定一個欄位來作為資料表分割的依據。 選好欄位後,接下來就是要提供用來分割資料用的函式。這個函式可以新增,或是利用原本來已經產生好的函式也可以。 接著就是要指定所要使用的資料表分割表綱: 選好資料表分割表網後,會出現一個設定檔案群組的介面。在這個介面中是指定用所選的資料表分割表綱中每個分割區塊所要放置的檔案群組。檔案群組可以都放在同一個,或是都各自給一個不同的檔案群組。在此我採用的方式是將舊資料表放到一個新增的檔案群組中。而將目前會使用到的資料則維持在預設的PRIMARY檔案群組中。 一切都設定好後...

用DataBaseMail寄件時使用Global Temporary Table

圖片
有時候我們會需要建立一個資料庫排程來檢查資料庫中的某些資料是否存在,當有問題時,可以利用DataBaseMail的方式來寄送警告信件。 不過,在寄件時有時又需要將查詢到的資訊附件信件中。雖然在用DataBaseMail寄信時可以指定要使用一段SQL指令查詢資料並作為信件內容。但在這段查詢指令中,並無法使用暫存表。正確來說是無法使用Local Temporary Table。 例如以下的方式是在將查詢的結果儲存到Local Temporary Table (#tmp)中,並試著在寄送mail時將這個暫存表的內容附加到mail中。結果就出現錯誤訊息:無效的物件名稱#tmp。這是因為在寄送mail時,它執行的是另一段session,在其它的session中是無法看到目前session中的暫存表的。 為了要在寄送mail時可使用到原本session中的查詢結果,我們改用Global Temporary Table(##tmp),這樣就可以正常寄送mail了。
在一台Window Server 2008 x64上安裝的 SQL 2008 R2 x64資料庫中,要利用遠端連接的方式去查詢一台較古老的SQL 2000的資料庫時,雖然有設定好遠端連接伺服器,但還是出現了以下的錯誤訊息: 連結伺服器 "xxx" 的 OLE DB 提供者 "SQLNCLI10" 傳回訊息 "無法指出的錯誤"。 連結伺服器 "xxx" 的 OLE DB 提供者 "SQLNCLI10" 傳回訊息 "無法在伺服器中找到完成此操作所須的預存程序。請連絡您的系統管理員。"。 訊息 7311,層級 16,狀態 2,行 1 無法為連結伺服器 "xxxx" 的 OLE DB 提供者 "SQLNCLI10" 取得結構描述資料列集 "DBSCHEMA_TABLES_INFO"。提供者支援介面,但在使用時傳回失敗碼。 查了一下,有人說要在SQL 2000上昇級到SP3或SP4。但我看昇級的部份已經有了。後來才知道原來昇級完後,還要 自行執行預存程序的昇級動作 才行。 我使用的方式是在SQL 2000的本機上執行以下的指令: osql -E -S 10.6.xx.xx -i "C:\Program Files\Microsoft SQL Server\MSSQL\Install\instcat.sql" 其中要指定的就是原本SQL 2000的IP位址。這樣就可以正常查詢了。