當我們在開發需要資料庫的應用程式的時候,通常都會在自己的環境裡面也安裝一套資料庫,以方便自己測試,並且避免去動到其他人的資料,或是正式主機上的資料,然後在要佈署的時候,再想辦法把資料庫備份到正式主機上。
以前可能比較常用的備份方式都是直接使用整個mdf檔備份的方式、Copy Database功能、或是使用SSIS封裝,來進行備份的動作,但是使用以上的方法,當資料庫中的Schema有改變,或是資料改變的時候,又得重新做一次的話,步驟還蠻麻煩的。這邊就跟大家介紹更方便的方法,可以透過產生SQL Script的方式,讓同一個開發團隊的成員快速的創建相同的資料庫格式和資料(當然也包含所有關聯的設定)。
當我們在開發需要資料庫的應用程式的時候,通常都會在自己的環境裡面也安裝一套資料庫,以方便自己測試,並且避免去動到其他人的資料,或是正式主機上的資料,然後在要佈署的時候,再想辦法把資料庫備份到正式主機上。
以前可能比較常用的備份方式都是直接使用整個mdf檔備份的方式、Copy Database功能、或是使用SSIS封裝,來進行備份的動作,但是使用以上的方法,當資料庫中的Schema有改變,或是資料改變的時候,又得重新做一次的話,步驟還蠻麻煩的。這邊就跟大家介紹更方便的方法,可以透過產生SQL Script的方式,讓同一個開發團隊的成員快速的創建相同的資料庫格式和資料(當然也包含所有關聯的設定)。
這邊就來為大家示範可以怎麼做吧:
首先打開我們的SQL Server Management Studio,在Object Explorer裡面找到要進行處理的資料庫,這邊我就拿大家熟悉的北風資料庫來示範,只要在資料庫上按下滑鼠右鍵,選取Tasks->Generate Scripts
(其實這個功能的前身是Microsoft SQL Server Database Publishing Wizard,在使用舊版的SQL Server時得獨立安裝這個工具,不過現在已經被整合進SQL Server Management Studio中了)
接著就會出現一個Wizard視窗,如果之後常常會使用到這個功能的話,可以把Do not show this starting page again勾選起來再按下下一步按鈕,如果不會常用的話就直接按下下一步吧!
再來就把要進行處理的資料庫選取起來,並按下下一步按鈕(如果希望備份資料庫中所有的物件,則可以勾選Script all objects in the selected database,在這邊我們就先不勾選,稍後以手動的方式選取要備份的物件)
接著會看到非常多的選項可以選,這邊跟大家介紹幾個比較重要,或是需要修改一下預設值的選項
Append to file:若改變該選項為True,則產生的Script預設會接在檔案的末端。
Include If NOT EXISTS:若改變該選項為True,則產生的Script中會針對物件的存在與否先做檢查,再進行重建或是略過的動作。
Script Collation:若改變該選項為True,則會將該資料設定的Collation也一併寫到Script中,否則會使用SQL Server預設的Collation。
Script Drop:若改變應選項為True,則一律會在建新物件之前,先行將舊的物件進行刪除。(不想手動刪除資料庫再重新建立的話記得這個選項要改成True喔!!)
Script for Server Version:預設為SQL Server 2008;這個選項可以選取目標SQL Server的版本,如果要Script給不同版本SQL Server的話記得要改這個選項。
Script Logins:若改變該選項為True,則會將與該資料庫相關的登入帳號一併寫到Script中。
Script Data:若改變該選項為True,除了Schema之外,也會一併將現有的資料一起寫進Script中(這個超實用的啦!!要佈署乾淨的資料庫的話就選False,要連資料一起備份的話就選True就對了!!)
Script Full-Text Indexes:若改變該選項為True,則會將全文檢索索引一併寫進Script中。
Script Triggers:若改變該選項為True,則會將資料庫中的Trigger一併寫進Script中。
依照不同的需求選取完各種設定值之後,給他按下下一步按鈕就會出現物件選擇的視窗(如果前面勾選了Script all objects in the selected database的話,就會跳過這個視窗)
在這邊就可以選取要寫進Script中的物件種類,可以選取的物件種類有Stored procedure、Table和View,在這邊我們就給他全選吧!!一樣給他按下下一步~
接著就可以針對Stored Procedure、Table和View分別選取要備份的物件喔!!(我這邊是全選啦,不過大家可以依照自己的需求,自己決定要備份出哪些東西)選好一樣按下下一步按鈕~
最後呢~這邊就可以選擇看看要把Script產生到什麼地方了,預設有檔案、剪貼簿和新的查詢視窗可以選擇,這邊大大大大大建議大家選擇以檔案的方式做輸出,因為之後就可以帶著輸出的.SQL檔到處跑到處裝啦~
有用Source Control的團隊也可以直接把該.SQL檔Checkin到Source Control的Repository中,這樣就整個團隊成員都可以快速的把資料庫建在自己的環境中喔!!
再按下下一步按鈕之後,會有一個Summary視窗,裡面以TreeView的呈現方式列出我們所選取的物件和設定,如果都沒問題就給他按下結束按鈕吧!!
看到一大堆Success跑出來,跑完資料庫就整個備份成一個.SQL檔啦!!
接下來,只要SQL Server中已經存在了和剛剛備份出來的資料庫同名的資料庫的話,直接拿剛剛產出的Script來跑,等他跑完,資料庫就還原成原來的樣子啦!!
如果目標SQL Server裡面沒有該資料庫的話,簡單,建一個新的(確定資料庫的名稱相同即可),再讓它跑Script,跑完就擁有一模一樣的資料庫啦!!