SQL Server 2008R2 資料庫移轉至 SQL Server 2005

  • 2407
  • 0
  • SQL
  • 2013-12-03

摘要:SQL Server 2008R2 資料庫移轉至 SQL Server 2005

日前公司有測試需求,需將線上的SQL Server 2008R2的資料庫備份回來,並還原到SQL Server 2005與SQL Server 2008R2二台測試機上,在拜見估狗大神與測試之後,把步驟整理起來。

大致上有四大步驟:

  1. 2008R2 → 來源DB產生指令碼
  2. 2005 → 建立空的目的DB並執行指令碼
  3. 2008R2 → 匯出資料至 2005
  4. 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:

SQL Server 2008(R2) 資料庫移轉至SQL Server 2005

產生和發佈指令碼精靈 (進階編寫指令碼選項頁面)

列出目前資料庫裡,欄位定序與資料庫定序不同的所有欄位