为了方便管理,LocalDB提供了一个基于命令行的数据库管理工具SqlLocalDB.exe。下面是SqlLocalDB.exe的路径:
- %ProgramFiles%Microsoft SQL Server110ToolsBinn
我们可以在Windows操作系统的CMD命令行中运行SqlLocalDB.exe:
- Cd %ProgramFiles%Microsoft SQL Server110ToolsBinn
- SqlLocalDB
SqlLocalDB以空格作为分隔符,因此,如果实例名中包含空格或其它特殊字符,我们引用的时候需要加引号。例如:
- SqlLocalDB create "My LocalDB Instance"
管理员或开发人员可以使用create选项创建LocalDB实例,使用-s选项,将会在实例创建之后启动实例。例如:
- SqlLocalDB create "MyLocalDB" 11.0 -s
可以使用如下命令查看MyLocalDB实例的状态信息:
- SqlLocalDB info "MyLocalDB"
启动、停止LocalDB实例:
- SqlLocalDB start "MyLocalDB"
- SqlLocalDB stop "MyLocalDB"
删除LocalDB实例:
- SqlLocalDB delete "MyLocalDB"
以上使用SqlLocalDB.exe命令行实用工具管理LocalDB的一点简要总结,更多功能还有待于读者自己去挖掘,记得用SqlLocalDB.exe /?命令寻求帮助。
最后,可以在以下路径中,找到创建的DB。
C:Users<登陆用户名>AppDataLocalMicrosoftMicrosoft SQL Server Local DBInstances
SqlLocalDB.exe unshare "Projects"
以下是建立共用與取消共用的指令執行圖示:
當你安裝 LocalDB 後,如果要透過 Management Studio 管理該執行個體,建議使用 SQL Server 2012 Management Studio 進行連接,因為用新版的 Management Studio 可以使用新的連接字串來連接 LocalDB 執行個體,其伺服器名稱的格式變成:(localdb)執行個體名稱,如下圖示:
這時你可能會納悶問說:「我好像還沒啟動資料庫耶?怎麼就直接連線了?連得上嗎?」
SQL Server 2012 Express LocalDB 執行個體比較特殊,當你透過 SQL 用戶端嘗試連接 LocalDB 執行個體時,該執行個體就會自動啟動,無須事先手動啟動你想連接的 LocalDB 執行個體。
當你用 Management Studio 連接 (localdb)v11.0 之後,可以開啟【工作管理員】起來看看,這時你將會發現有個用目前登入者身分執行的 sqlservr.exe 執行個體程序已被啟動,由於這是一個獨立的 SQL 執行個體,因此吃記憶體的能耐也是跟以前差不多的,你只要把 LocalDB 執行個體想像成一台獨立的 SQL Server Express 執行個體就對了!
連接後的畫面與所有功能將會與 SQL Server Express 完全一樣:
如果你想用舊版的 Management Studio ( SQL 2008 之前的版本 ) 連接 LocalDB 執行個體,那就稍微麻煩一些,你必須先利用 SqlLocalDB.exe 的 start 命令手動啟動 LocalDB 具名執行個體,再用 info 命令取得這個執行個體的管道名稱(pipe name):
SqlLocalDB.exe start v11.0
SqlLocalDB.exe info v11.0
請注意:唯有已啟動的 LocalDB 執行個體才會有管道名稱,而且每次重新啟動執行個體都會有不同的管道名稱,這也是麻煩的地方。所以還是建議各位改裝 SQL Server 2012 Management Studio 比較方便些。
以下是我用 SQL Server 2008 Management Studio 連接 LocalDB 執行個體的連線畫面:
如果要透過 .NET 程式連接 LocalDB 執行個體的話,最簡單的方式就是連接到目前使用者所擁有的自動執行個體,在不指定資料庫的情況下其連接字串如下:
Server=(localdb)v11.0;Integrated Security=true
請注意:每個執行個體都是以不同使用者身分執行的不同處理序,所以以上這段連線字串在同一台主機裡使用時,其 UserA 與 UserB 所連接的將會是完全不同的執行個體。
如果你想要指定資料庫連接的話,可以參考以下連線字串:
Server=(LocalDB)v11.0; Integrated Security=true; AttachDbFileName=D:DataMyDB1.mdf
如果要連接共用的具名執行個體,其連線字串中的 Server 參數 的格式必須有所不同,範例如下:
(localdb).ProjectsShare
停止 SQL Server 2012 Express LocalDB 執行個體
我們已經知道 SQL Server 2012 Express LocalDB 執行個體會在用戶端嘗試連接時自動啟動,但何時才會停止執行呢?其實停止執行個體有兩種方法:
- 只要該執行個體沒有任何 Active 的連線,過幾分鐘該執行個體就會自動停止 ( 該程序會自動消失 )
- 可以透過 SqlLocalDB.exe 工具程式強迫停止特定執行個體,如下指令:
SqlLocalDB.exe stop v11.0
SQL Server 2012 Express LocalDB 與其他 SQL Server 版本的比較
在 SQL Server 2012 問世之前,SQL Server 依據不同的執行環境各有推出不同的版本,在執行上也有不同的限制,例如:
- SQL Server Enterprise ( 企業版,適合大量資料或高可用性環境 )
- SQL Server Standard ( 標準版,適合用在一般資料庫處理環境 )
- SQL Server Express ( 輕量版,適合用在單機或小量資料庫的環境 )
- SQL Server Compact ( 精簡版,又稱 SQL CE,適用於行動化或嵌入式系統環境 )
而 SQL Server 2012 Express LocalDB 又是甚麼樣的一個定位呢?我將依據其資料庫系統複雜度加以重新排序過如下:
- SQL Server Enterprise > Standard > Express > LocalDB > Compact
由於 SQL Server 2012 Express LocalDB 跟前版的 SQL Server 2008 R2 Express 很像,其中的限制有:
- LocalDB 的執行個體定序設定為 SQL_Latin1_General_CP1_CI_AS,無法變更。
- 但支援資料庫層級、資料行層級和運算式層級定序。
- 也就是說,你只要在建立資料庫時指定其定序即可,或是掛載其他資料庫系統移過來的資料庫檔案,或還原自其他資料庫的備份檔也都不會有問題。
- 自主資料庫遵循自主資料庫定序所定義的中繼資料和 tempdb 定序規則。
- LocalDB 不得為合併式複寫訂閱者。
- LocalDB 不支援 FILESTREAM。
- LocalDB 針對 Service Broker 只允許本機佇列。
心得分享
這一版 SQL Server 2012 Express LocalDB 真的很棒,隨時隨地都可以建立不同的資料庫執行個體,讓開發人員能夠盡情的測試各種 SQL Server 2012 的新功能,也不用怕搞壞現有的開發資料庫環境。
除了開發環境外,對於同一台主機有許多網站的虛擬主機來說,也可以說非常方便,因為不同的應用程式集區或本機應用程式都可以非常便利的建立起獨立的執行個體,完全不會跟其他網站或應用程式發生衝突,徹底的降低 SQL Server 2012 Express 的管理複雜度,也大幅提升資料庫佈署的方便性!
除此之外,若開發人員採用 Code First 資料庫開發模式的話,在開發與佈署方面來說也確實更加便利,因為資料庫執行個體可以完全執行在自己的身分識別下執行,不用再開啟 Management Studio 事先設定安全性或預先建立資料庫等工作,透過獨立的執行個體也不用擔心使用 Code First 開發的程式執行時牽動到多人共用的開發資料庫,很輕易的就能在本機電腦自動建立起測試資料庫。
相關連結
- Download Microsoft SQL Server 2012 Express
- SQL Server 2012 Express LocalDB (MSDN)
- SqlClient Support for LocalDB (MSDN)
- SqlLocalDB Utility
- Introducing LocalDB, an improved SQL Express
- SQL Server 2012 LocalDB 管理之旅
影片教學
以下錄影是多奇數位創意有限公司於 2012/11/07 在公司內部的技術分享錄影,這 50 分鐘的分享內容包括 SQL Server 2012 Express LocalDB 的運作方式、管理 LocalDB 執行個體的方法與陷阱、認識 Visual Studio 2012 的資料庫管理工具以及日常開發使用 LocalDB 時的注意事項等等。