遷移須知
- 使用SQLSERVER 2012的特性在SQL 2008 R2不支持,比如新的分頁方式
- 此遷移操作手冊適用於MSSQL2012到MSSQL2008R2的遷移
- 遷移使用微軟提供的腳本生成和導入導出工具
- 需要在本地將MSSQL2012遷移完成,並且應用改造完成測試通過方可上RDS
- 遷移到MSSQL2008R2 RDS通過備份還原的方式進行
遷移步驟
- 安裝2008 R2的數據庫實例
這個很簡單,安裝數據庫實例應該很橫輕松 - 在新建的2008 R2上創建數據庫
CREATE DATABASE [AdventureWorks] ON PRIMARY ( NAME = N'AdventureWorks2012_Data', FILENAME = N'D:\SQL_DATA\SQL2K8_04\AdventureWorks2012_Data.mdf' ) LOG ON ( NAME = N'AdventureWorks2012_Log', FILENAME = N'D:\SQL_DATA\SQL2K8_04\AdventureWorks2012_log.ldf' ) GO
為數據庫創建用戶並分配角色等權限信息
主要是將原來的LOGIN和用戶創建到新的實例,例如:需要注意的是2012的HASH密碼和2008 R2的HASH密碼已經不太一樣了。需要原先的密碼或者重置密碼
CREATE LOGIN [TestUser] WITH PASSWORD = '*******' ,CHECK_POLICY=OFF ,CHECK_EXPIRATION = OFF
2012 上查看數據庫用戶的及角色:
USE AdventureWorks GO CREATE USER [TestUser] EXEC sp_addrolemember 'db_datareader','TestUser' EXEC sp_addrolemember 'db_datawriter','TestUser'
將這些角色和權限復制到2008 R2上,可以通過SSMS UI或者腳本執行
-
在2012上禁止更新任何對象的結構
不能在表,視圖,用戶函數,存儲過程上進行任何修改動作 -
在2012上生成架構,表,視圖,用戶函數,存儲過程,作業等腳本
-
選擇數據庫
右鍵點擊“任務”,再點擊“生成腳本”
設置腳本編寫選項
高級屬性選擇腳本的屬性
方框內的需要特別注意,這里外鍵一定不要選TRUE
選擇對象
根據自己的數據庫情況選擇哪些需要導入過去
生成腳本到文件或者到查詢窗口
- 在2008 R2執行生成的腳本
將剛才生成的腳本在2008 R2上執行並且保證完全成功。如果有錯誤,需要查明原因並且手動創建上去,可能出現的錯誤有: - 表依賴某些對象不存在
- 函數,存儲過程引用對象不存在,找出不存在的對象創建上
-
如果對象不全需要查明原因
-
比較對象是否一致
SELECT * FROM sys.objects WITH (NOLOCK) WHERE is_ms_shipped=0 AND type IN ('FN','IF','TF','P','V','U')
主要檢查表、視圖、用戶自定義函數、存儲過程,如果有其他類型,請調整TYPE參數
-
用戶停止業務,包括由JOB產生的業務
讓用戶停止所有業務,同時停止SQL AGENT -
DISABLE用戶的登錄,進一步保證業務不再使用
DISABLE登錄,禁止用戶登錄數據庫
ALTER LOGIN TestUser DISABLE
-
通過數據庫導入導出工具將2012所有數據導入到2008 R2中
-
開始 ->所有程序 ->Microsoft SQL Server 2012 ->導入和導出數據
-
操作請按照下列圖所示:
這里請不要選擇視圖,只選擇表就好
-
驗證數據庫正確性
請COUNT一下數據量的大小,並進行對比。同時可以驗證數據的准確性 -
為數據庫的表創建外鍵關系
生成外鍵的方法: 設置腳本編寫選項高級:紅色框內為TRUE,其他都為FALSE
生成腳本,去掉表結構,只剩下外鍵關系的腳本,然后在MSSQL 2008 R2上運行就好了。
- 用戶更改連接字符串后進行業務測試
回滾方案
- 開啟原來的實例的LOGIN
- 啟動原來的實例的SQL Agent
- 用戶連接字符串修改到原來的訪問地址
注意事項
- 如果遷移失敗將進行回滾
- 如果表有主外鍵關系需要先解除外鍵關系,最后再創建,按照上述步驟就好了
- 數據庫的排序規則要保持一致
- 如果有表有時間戳列,表需要單獨拿出來處理,時間戳列是不需要導入的