微軟最新推出的 SQL Server 2012 Express LocalDB 是一種 SQL Server Express 的執(zhí)行模式,,特別適合用在開發(fā)環(huán)境使用,也內(nèi)建在 Visual Studio 2012 之中,。由於這種 SQL Server 的執(zhí)行模式跟以往非常不同,,我發(fā)現(xiàn)許多人不太清楚 LocalDB 的使用與管理方式,有必要專文介紹 SqlLocalDB 的相關(guān)知識,。 關(guān)於 SQL Server 2012 Express LocalDB 的運作方式 在安裝 LocalDB 時會複製一個 SQL Server Express 執(zhí)行個體所需的最少檔案,,基本上 LocalDB 幾乎等同於完整的 SQL Server Express 資料庫引擎,且 LocalDB 方式啟動的 SQL Server Database Engine 執(zhí)行個體與 SQL Server Express 具有相同的限制 (因為跟 SQL Server Express 共用相同的檔案),,但 LocalDB 由於簡化了管理,,所以比 SQL Server Express 還多了一些限制,不過這些限制通常不影響開發(fā),。相較於舊版的 SQL Server 2008 Express 來說,,兩者有些差異性,比較如下:
SQL Server 2012 Express LocalDB 區(qū)分兩種執(zhí)行個體類型,,分別為:
了解 SQL Server 2012 Express LocalDB 執(zhí)行個體的資料庫檔案所在路徑 在安裝好 SQL Server 2012 Express LocalDB 之後,,預設(shè)會有個執(zhí)行個體名為 v11.0,該執(zhí)行個體的相關(guān)檔案所在目錄通常位於以下目錄 ( 請將 <user> 替換成你的登入帳號 ) C:\Users\<user>\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances 或用 %LOCALAPPDATA% 環(huán)境變數(shù)進入該目錄比較方便: %LOCALAPPDATA%\Microsoft\Microsoft SQL Server Local DB\Instances 以下是顯示該目錄的圖示,,這裡會列出所有 LocalDB 的執(zhí)行個體: 在此目錄 ( v11.0 ) 下所看到的檔案都是執(zhí)行個體的相關(guān)檔案,,系統(tǒng)資料庫檔案、錯誤紀錄,、紀錄追蹤,、加密金鑰、…等等,,不過若你在 LocalDB 執(zhí)行個體中建立使用者資料庫時,,必須要明確指定其資料檔與記錄檔的路徑,否則預設(shè)所有建立的資料庫都會位於 %USERPROFILE% 目錄下 ( C:\Users\<username> )
建立 SQL Server 2012 Express LocalDB 具名執(zhí)行個體 你可以想像一下,,一個 SQL 資料庫執(zhí)行個體就如同一臺完整的 SQL Server 資料庫伺服器,,在一個執(zhí)行個體裡面會有自己的系統(tǒng)資料庫 (master, msdb, model, temp),就跟我們一般在使用 SQL Server 沒有什麼兩樣,當你建立額外的 LocalDB 執(zhí)行個體的話,,這些系統(tǒng)資料庫就會跟另一個具名執(zhí)行個體完全獨立開來,,彼此完全互不影響。 就開發(fā)的角度來說,,你甚至可以在開發(fā)測試的環(huán)境裡建立一套跟客戶端正式主機完全相同的資料庫環(huán)境,,光是這一點就與以往的 SQL Server Express 差別甚大,也是新版 LocalDB 真正厲害的地方! 在建立新的 LocalDB 執(zhí)行個體之前,,必須先了解 SqlLocalDB.exe 工具程式的路徑,請參考以下路徑: C:\Program Files\Microsoft SQL Server\110\Tools\Binn\SqlLocalDB.exe 以下是建立 LocalDB 執(zhí)行個體的指令,,其中 “Projects” 是你可以自行命名的執(zhí)行個體名稱: SqlLocalDB.exe create Projects
接著我們透過指令列出所有 LocalDB 已經(jīng)建立的所有執(zhí)行個體,,並查看特定執(zhí)行個體的相關(guān)資訊: SqlLocalDB.exe info
接著我們在看看文章稍早介紹過的實體檔案路徑,你將會發(fā)現(xiàn)多了一個目錄,,我們用 %LOCALAPPDATA% 環(huán)境變數(shù)進入該目錄看看: %LOCALAPPDATA%\Microsoft\Microsoft SQL Server Local DB\Instances
進入該目錄就會看到如同 SQL Server 完整版一樣有這些系統(tǒng)資料庫檔案,、錯誤紀錄、紀錄追蹤,、加密金鑰,、…等等,如下圖示:
共用 SQL Server 2012 Express LocalDB 具名執(zhí)行個體 由於同一臺主機裡,,每個使用者都可以建立自己的 LocalDB 具名執(zhí)行個體,,且不同使用者之間彼此都是獨立分開的處理序(Process)在執(zhí)行這個執(zhí)行個體,所以預設(shè)的情況下不同使用者之間無法連接不同使用者建立的具名執(zhí)行個體,,這也是一個基本的安全防護機制,。 若今天你需要必須讓同一臺電腦多個不同的使用者連接特定使用者的具名執(zhí)行個體的話,就必須以 系統(tǒng)管理員 權(quán)限建立共用名稱,,如此一來才能讓其他使用者連接,。 我們先來看看執(zhí)行 SqlLocalDB.exe 時所顯示的說明頁面: 其建立共用與取消共用的步驟如下: 1. 設(shè)定共用具名執(zhí)行個體 你可列出有哪些具名執(zhí)行個體,然後在指定特定執(zhí)行個體一個分享名稱: SqlLocalDB.exe info SqlLocalDB.exe share "will" "Projects" "ProjectsShare"
2. 取消共用具名執(zhí)行個體 我們再看一次 SqlLocalDB.exe 顯示的說明頁面 這裡 unshare 的中文翻譯其實是有問題的,!因為執(zhí)行 unshare 的時候,,輸入的參數(shù)應(yīng)該是 “私用名稱” 才對,但文件卻寫 ”共用名稱”,! 以下是執(zhí)行取消共用的指令範例: SqlLocalDB.exe unshare "Projects" 以下是建立共用與取消共用的指令執(zhí)行圖示:
連接 SQL Server 2012 Express LocalDB 執(zhí)行個體 由於 SQL Server 2012 Express LocalDB 透過特殊的連接字串自動啟動該執(zhí)行個體,,以前我們連接本機 SQL Server 都會用 (local) 當成伺服器名稱,或用 (local)\執(zhí)行個體名稱 這種格式也蠻常見的,。 當你安裝 LocalDB 後,,如果要透過 Management Studio 管理該執(zhí)行個體,建議使用 SQL Server 2012 Management Studio 進行連接,,因為用新版的 Management Studio 可以使用新的連接字串來連接 LocalDB 執(zhí)行個體,,其伺服器名稱的格式變成:(localdb)\執(zhí)行個體名稱,如下圖示: 這時你可能會納悶問說:「我好像還沒啟動資料庫耶?怎麼就直接連線了,?連得上嗎,?」 SQL Server 2012 Express LocalDB 執(zhí)行個體比較特殊,當你透過 SQL 用戶端嘗試連接 LocalDB 執(zhí)行個體時,,該執(zhí)行個體就會自動啟動,,無須事先手動啟動你想連接的 LocalDB 執(zhí)行個體。 當你用 Management Studio 連接 (localdb)\v11.0 之後,,可以開啟【工作管理員】起來看看,,這時你將會發(fā)現(xiàn)有個用目前登入者身分執(zhí)行的 sqlservr.exe 執(zhí)行個體程序已被啟動,由於這是一個獨立的 SQL 執(zhí)行個體,,因此吃記憶體的能耐也是跟以前差不多的,,你只要把 LocalDB 執(zhí)行個體想像成一臺獨立的 SQL Server Express 執(zhí)行個體就對了! 連接後的畫面與所有功能將會與 SQL Server Express 完全一樣: 如果你想用舊版的 Management Studio ( SQL 2008 之前的版本 ) 連接 LocalDB 執(zhí)行個體,,那就稍微麻煩一些,,你必須先利用 SqlLocalDB.exe 的 start 命令手動啟動 LocalDB 具名執(zhí)行個體,再用 info 命令取得這個執(zhí)行個體的管道名稱(pipe name): SqlLocalDB.exe start v11.0 SqlLocalDB.exe info v11.0 請注意:唯有已啟動的 LocalDB 執(zhí)行個體才會有管道名稱,,而且每次重新啟動執(zhí)行個體都會有不同的管道名稱,,這也是麻煩的地方。所以還是建議各位改裝 SQL Server 2012 Management Studio 比較方便些,。 以下是我用 SQL Server 2008 Management Studio 連接 LocalDB 執(zhí)行個體的連線畫面: 如果要透過 .NET 程式連接 LocalDB 執(zhí)行個體的話,,最簡單的方式就是連接到目前使用者所擁有的自動執(zhí)行個體,在不指定資料庫的情況下其連接字串如下: Server=(localdb)\v11.0;Integrated Security=true 請注意:每個執(zhí)行個體都是以不同使用者身分執(zhí)行的不同處理序,,所以以上這段連線字串在同一臺主機裡使用時,,其 UserA 與 UserB 所連接的將會是完全不同的執(zhí)行個體。 如果你想要指定資料庫連接的話,,可以參考以下連線字串: Server=(LocalDB)\v11.0; Integrated Security=true; AttachDbFileName=D:\Data\MyDB1.mdf 如果要連接共用的具名執(zhí)行個體,,其連線字串中的 Server 參數(shù) 的格式必須有所不同,範例如下: (localdb)\.\ProjectsShare
停止 SQL Server 2012 Express LocalDB 執(zhí)行個體 我們已經(jīng)知道 SQL Server 2012 Express LocalDB 執(zhí)行個體會在用戶端嘗試連接時自動啟動,,但何時才會停止執(zhí)行呢,?其實停止執(zhí)行個體有兩種方法:
SQL Server 2012 Express LocalDB 與其他 SQL Server 版本的比較 在 SQL Server 2012 問世之前,,SQL Server 依據(jù)不同的執(zhí)行環(huán)境各有推出不同的版本,在執(zhí)行上也有不同的限制,,例如:
而 SQL Server 2012 Express LocalDB 又是甚麼樣的一個定位呢?我將依據(jù)其資料庫系統(tǒng)複雜度加以重新排序過如下:
由於 SQL Server 2012 Express LocalDB 跟前版的 SQL Server 2008 R2 Express 很像,,其中的限制有:
心得分享 這一版 SQL Server 2012 Express LocalDB 真的很棒,,隨時隨地都可以建立不同的資料庫執(zhí)行個體,,讓開發(fā)人員能夠盡情的測試各種 SQL Server 2012 的新功能,,也不用怕搞壞現(xiàn)有的開發(fā)資料庫環(huán)境。 除了開發(fā)環(huán)境外,,對於同一臺主機有許多網(wǎng)站的虛擬主機來說,,也可以說非常方便,因為不同的應(yīng)用程式集區(qū)或本機應(yīng)用程式都可以非常便利的建立起獨立的執(zhí)行個體,,完全不會跟其他網(wǎng)站或應(yīng)用程式發(fā)生衝突,,徹底的降低 SQL Server 2012 Express 的管理複雜度,也大幅提升資料庫佈署的方便性,! 除此之外,,若開發(fā)人員採用 Code First 資料庫開發(fā)模式的話,在開發(fā)與佈署方面來說也確實更加便利,,因為資料庫執(zhí)行個體可以完全執(zhí)行在自己的身分識別下執(zhí)行,,不用再開啟 Management Studio 事先設(shè)定安全性或預先建立資料庫等工作,透過獨立的執(zhí)行個體也不用擔心使用 Code First 開發(fā)的程式執(zhí)行時牽動到多人共用的開發(fā)資料庫,,很輕易的就能在本機電腦自動建立起測試資料庫,。
相關(guān)連結(jié)
影片教學 以下錄影是多奇數(shù)位創(chuàng)意有限公司於 2012/11/07 在公司內(nèi)部的技術(shù)分享錄影,這 50 分鐘的分享內(nèi)容包括 SQL Server 2012 Express LocalDB 的運作方式,、管理 LocalDB 執(zhí)行個體的方法與陷阱,、認識 Visual Studio 2012 的資料庫管理工具以及日常開發(fā)使用 LocalDB 時的注意事項等等。 2012/11/07 多奇技術(shù)分享會 - SQL Server 2012 Express LocalDB 深入剖析 |
|
來自: 蝸牛之窩 > 《SQLServer》