摘要:SQL Server 2008R2 資料庫移轉至 SQL Server 2005
日前公司有測試需求,需將線上的SQL Server 2008R2的資料庫備份回來,並還原到SQL Server 2005與SQL Server 2008R2二台測試機上,在拜見估狗大神與測試之後,把步驟整理起來。
大致上有四大步驟:
- 2008R2 → 來源DB產生指令碼
- 2005 → 建立空的目的DB並執行指令碼
- 2008R2 → 匯出資料至 2005
- 2005 → 建立user與權限
1. 2008R2 → 來源DB產生指令碼
1.1 在2008R2上面資料庫右鍵→工作→產生指令碼
1.2 精靈畫面,按下一步
1.3 選取資料庫物件,除了使用者之外都勾,使用者待資料匯入之後再建立
1.4 選擇指令碼存放位置,按一下進階
1.5 進階編寫指令碼選項,視需求修改。
我的需求有定序、索引、觸發程序,整理如下:
| 指令碼定序 (註1) | True |
| 要編寫指令碼的資料類型 (註2) | 僅限結構描述 |
| 針對伺服器版本編寫指令碼 | SQL Server 2005 |
| 編寫索引的指令碼 | True |
| 編寫觸發程序的指令碼 | True |
註1:若是有資料表中的欄位定序不一樣,則需編寫指令碼定序,否則稍後匯資料的時候會顯示定序衝突,可參考adalf 大大的列出目前資料庫裡,欄位定序與資料庫定序不同的所有欄位,檢查是否有定序不一致的欄位
SELECT t.name [資料表名稱] ,c.name [欄位名稱],c.collation_name [定序],DATABASEPROPERTYEX(DB_NAME(),'collation') [目前資料庫定序]
FROM sys.tables t INNER JOIN sys.columns c
ON t.object_id = c.object_id AND c.collation_name <> CONVERT(NVARCHAR(128),DATABASEPROPERTYEX(DB_NAME(),'collation'))
註2:因為有些資料表有識別欄位,編寫指令碼的資料類型選結構描述,資料稍後用匯出精靈
1.6 檢視剛剛選取的項目,下一步
1.7 指令碼產生中,完畢後按下完成
2. 2005 → 建立空的目的DB並執行指令碼
2.1 建立一個空的資料庫,資料庫名稱來源資料庫名稱相同,並修改定序與來源資料庫相同,按下確定
2.2 執行剛剛在2008R2上產生的指令碼
3. 2008R2 → 匯出資料至 2005
3.1 回到2008R2上面資料庫右鍵→工作→匯出資料
3.2 精靈畫面,按下一步
3.3 選擇要匯出的資料庫
3.4 選擇要匯入的伺服器與資料庫
3.5 預設,下一步
3.6 勾選全部的資料表,在資料表全選的狀態下按編輯對應,勾選啟用識別插入,確定,下一步
3.7 如果有檢視表的話,請取消勾選,因為資料表已經在指令碼中建好了
3.8 預設,下一步
3.9 按下完成後開始匯出資料
3.10成功匯出
4. 2005 → 建立user與權限
最後以下列語法建立login與user,並賦予權限
USE [master]
GO
CREATE LOGIN [login] FROM WINDOWS WITH DEFAULT_DATABASE=[master];
GO
USE [Database]
GO
CREATE USER [user] FOR LOGIN [login]
GO
GRANT DELETE,EXECUTE,INSERT,SELECT,UPDATE TO [user]
GO
Reference:


















