1. 程式人生 > >如絲般順滑地從Windows遷移SQLServer資料庫到Linux

如絲般順滑地從Windows遷移SQLServer資料庫到Linux

老鳥看過菜鳥的上一篇《MSSQL On Linux備份與還原》文章後,很滿意,但是還是忍不住發問:“這篇文章講的是MSSQL在Linux系統上的備份與還原,如果我之前是Windows系統的使用者,怎麼把我的資料庫如絲般順滑地遷移到MSSQL On Linux呢?”。

“嗯,老鳥,這個問題問的非常好,畢竟Windows的License費用不低,如果能夠使用免費的Linux系統,的確會節約一大筆開銷啊。”,於是菜鳥開始馬不停蹄的研究如何將Windows上的資料庫遷移到Linux系統中。

隨著菜鳥的深入研究,決定選擇使用備份還原的方式來試試從Windows遷移SQL Server資料庫到Linux。

Windows上備份資料庫

使用SSMS在源頭Windows上的資料庫執行下面語句,做一個AdventureWorks2008R2資料庫的全備。

--execute on source database

USE master

GO

EXEC sys.xp_create_subdir 'C:\Temp\'

GO

--Generate at Dec 10 2016 10:34AM on server CHERISH-PC

RAISERROR ('%d/%d database backup %s to %s ',10,1 ,1,1,'CHERISH-PC.AdventureWorks2008R2','C:\Temp\') WITH NOWAIT

BACKUP DATABASE [AdventureWorks2008R2] 

TO DISK = 'C:\Temp\AdventureWorks2008R2_full_20161210.bak' 

WITH STATS = 2 , compression;

檢查Windows上全備檔案


上傳備份檔案到Linux

在Windows上完成全備以後,接下來我們需要將備份檔案上傳到Linux系統,菜鳥用的是MobaXterm這個工具自帶的上傳功能。


Linux上檢查上傳的檔案

# ls -l /var/opt/mssql/data/ | grep AdventureWorks2008R2_full_20161210.bak

-rw-r--r--. 1 root  root  46030848 Dec 10 00:17 AdventureWorks2008R2_full_20161210.bak

Linux上還原資料庫

檔案已經上傳到Linux系統並檢查沒有問題以後,接下來就是在Linux上還原資料庫了。

使用SSMS連線到Linux版本的SQLServer,執行下面的語句還原資料庫到MSSQL ON Linux

--execute on destination database

USE master

GO

EXEC sys.xp_create_subdir 'C:\var\opt\mssql\data\AdventureWorks2008R2\SQL'

EXEC sys.xp_create_subdir 'C:\var\opt\mssql\data\AdventureWorks2008R2\LOG'

GO

USE master

GO

RESTORE DATABASE [AdventureWorks2008R2]

FROM DISK = N'C:\var\opt\mssql\data\AdventureWorks2008R2_full_20161210.bak'

WITH MOVE N'AdventureWorks2008R2_Data' 

        TO N'C:\var\opt\mssql\data\AdventureWorks2008R2\SQL\AdventureWorks2008R2_Data.mdf'

    ,MOVE N'AdventureWorks2008R2_Log' 

        TO N'C:\var\opt\mssql\data\AdventureWorks2008R2\LOG\AdventureWorks2008R2_log.LDF'

    ,STATS=2

GO

檢查Linux中資料庫檔案結構


Linux中執行簡單的查詢


SSMS中GUI檢視


寫在最後

從測試結果來看,MSSQL ON Linux完全相容從Windows資料庫的備份的檔案,並且版本還做到了向下相容,這點非常好,完全做到了如絲般順滑過度到MSSQL On Linux。細心的你一定注意到了,菜鳥是從MSSQL 2008R2的資料庫備份還原到Linux上的。