利用 SqlPackage.exe 公用程式複製資料庫

本文將介紹如何利用 SqlPackage.exe 公用程式複製資料庫。

情境描述

論壇上有朋友討論到想要複製一個現有的資料庫 A 成為資料庫 B 做為系統開發用,如果資料庫 B 已經存在則不再複製,從網友們討論的各種方法有利用備份還原、複寫還有資料庫快照等作法,讓筆者想到也可以利用 SqlPackage.exe 公用程式達到類似的目的。

SqlPackage.exe 是一個幫助 DBA 或開發人員自動化匯入、匯出、部署及擷取資料庫結構甚至產生資料庫變更報表的公用程式,您可以用來把企業內部的 SQL Server 資料庫匯出到 Windows Azure SQL Database,當然也可以在 SQL Server 之間互相匯出匯入,以下筆者就介紹如何利用 SqlPackage.exe 進行簡易的資料庫複製作業。

實作步驟

SqlPackage.exe 包含七個主要可以對資料庫進行的動作,分別是 Extract、DeployReport、DriftReport、Publish、Script、Export、Import,本文針對網友的問題使用 Export 動作來匯出含有資料的 BACPAC 封裝(*.bacpac)。以下指令碼用來將 SQL Server Express LocalDB 執行個體的 DbA 資料庫匯出到 D 槽的 DbA.bacpac。

"C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe" 
 /a:Export 
 /scs:"Data Source="(localdb)\v11.0";Initial Catalog=DbA;Integrated Security=True" 
 /tf:D:\DbA.bacpac

其中第 2 列為指定 SqlPackage.exe 執行匯出動作,第 3 列為來源資料庫的連線字串,第 4 列則是匯出資料庫的封裝檔存放路徑,若您的匯出路徑中有相同的檔案,預設會將之覆蓋。執行結果如下:

image

接著您可以利用 Import 動作來將 DbA 資料庫所匯出的 BACPAC 封裝(D:\DbA.bacpac)匯入到一樣是本機的 LocalDB 執行個體中,指令碼如下:

"C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe" 
/a:Import 
/tcs:"Data Source="(localdb)\v11.0";Initial Catalog=DbB;Integrated Security=True" 
/sf:D:\DbA.bacpac

上述指令碼的第 2 列用來告訴 SqlPackage.exe 要進行匯入動作,匯入時您可以在第 3 列的連線字串中的 Initial Catelog 輸入您的新資料庫名稱,第 4 列則是用來定義 BACPAC 封裝的來源路徑。執行結果如下:

image

結論

SqlPackage.exe 公用程式是一個強大的資料庫自動化管理工具,您可以詳細閱讀 MSDN 上的說明文件,相信對您在部署開發或正式環境時會相當有助益。

參考資料

- 如何复制一个数据库?

- SqlPackage.exe 公用程式