過去都是透過資料庫備分,將客戶端資料庫主機的資料打包回開發端使用。但是從去年開始,客戶新採購的機器都已經是 SQL server 2008,但我手邊部分機器上頭執行的還是 SQL server 2005,若將 SQL server 2008 備分的檔案直接還原到 SQL server 2005,會發生新版中匯出的資料無法匯入至舊版的錯誤。

參考保哥的《如何利用「資料庫發行精靈」將新版 SQL 資料庫降級成舊版》,發現可以利用 SQL server 內建的工具「資料庫發行精靈」,將資料轉換成 SQL 語法(包括產生資料表、將既有資料串接為 INSERT INTO 語句以供還原匯入)。

 

 

以我手邊的 SQL server 2005 Express 版來說,要獨立開啟這個「資料庫發行精靈」,可以直接執行下列路徑的檔案:
  C:\Program Files\Microsoft SQL Server\90\Tools\Publishing\1.2\SqlPubWiz.exe

我有一個資料庫,內容總量大約是 15 萬筆,資料庫發行精靈產生出的 SQL 腳本大約有 176 MB。不知道是不是因為我現在使用的是配備太陽春的筆記型電腦?我在 SSMS (Microsoft SQL Server Management Studio) 想要一口氣執行這個腳本,竟然宣告記憶體不足;若是一段一段執行,執行的行數一超過五千筆也會當機。

平常滿依賴 SSMS 的,遇到這種情況也只能研究看看怎麼執行腳本。MSDN 有《使用 sqlcmd 公用程式》。我沒有特別比較實際上的記憶體使用量,不過就作業系統本身運行的感覺,直接執行腳本自然是流暢很多,可能是視窗程式要繪製 SSMS 裡的結果太花時間吧。

我在命令提示字元執行的語法如下:
  sqlcmd -S PcName\SQLEXPRESS -U sa -P password -d DataBaseName -i C:\Script.sql -o C:\log.txt

-S: 此處為在 SSMS 裡寫在「伺服器名稱」的值
-U: 此處為在 SSMS 裡寫在「登入」的值
-P: 此處為在 SSMS 裡寫在「密碼」的值
-i: 匯入的腳本檔,也就是剛才使用資料庫發行精靈 (SqlPubWiz.exe) 產生出來的檔案
-o: 匯出的檔案,內容大致是平常在 SSMS 裡執行 SQL 語法時會出現在「訊息」窗格裡的內容(我是覺得這批匯入所產生的 log,和我在 SSMS 執行時看到的訊息量不太一樣)


以我的硬體設備與資料量,大約 25 分鐘執行完畢。期間我還是可以正常做我自己的事。(如果用 SSMS 就整個系統都卡住了,泣)



 

創作者介紹
創作者 fannys23 的頭像
fannys23

小攻城師的戰場筆記

fannys23 發表在 痞客邦 留言(0) 人氣()