开发者学堂课程【SQL Server on Linux入门教程:SQL on Linux Docker 迁移】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/386/detail/4848
SQL on Linux Docker 迁移
一、在 Windows SQL Server 上创建数据测试
二、给 Docker Volume 复制文档
三、给 SQL on Linux for Docker 储存数据
四、 给 SQL on Linux for Docker 调用数据
五、二次检查
如何把数据库迁移到 Docker 版的 SQL server 里面,比如 windows 系统里SQL server 的数据库需要迁移到 SQL on Linux base on Docker Migration,这里涉及到两种方法,第一种方法是传统的 Backup restore 方式,第二种Attach Database 的方式,为了测试这两种方法首先去创建两个数据库在 windows版的 SQL server 里,接下来要把备份的文件以及 Mdf & ldf 文件 copy 到 Docker里面,把数据库还原到 SQL on Linux Docker 版,进行 attach Database 的动作,最后一步做 Double Check,看测试有没有成功。这就是整体的一个步骤。
一、在Windows SQL Server 上创建数据测试
1、Create Testing objects
2、Backup
3、Stop SQL Service
分别创建了 tb 加 test,并且插入了两条数据,最后 TestAttach
做 TestBackRestore 的一个动作,并且把 TestAttach 数据库设置为 offline,因为要拷贝 Mdf 和 ldf 文件。
代码如下:IF DB_ ID('TestAttacb')IS NULL CREATE DATABASE TestAttach;GO
USE TestAttach
GO
IF OBJECT_ID('dbo.th Test','U')IS NOT NULL
DROP TABLE dbo.tb, Test
GO
CREATE TABLE dbo.tb_Test(
RowID INT IDENTITY(1,1) NOT NULL PRIMARY KEY
Name VARCHAR(36) NOT NULL
);
INSERT INTO dbo.th, Test(
SELECT NEWID() UNION ALL SELECT 'NEWID();
SELECT * FROM dbo tb. Test;
IF DB_ ID('TestBackRestose') IS NULL
CREATE DATABASE TestBackRestore;
GO
USE IestBackBestore
GO
IF OBJECT_ID('dbo,tb..Test', 'U')IS NOT NULL
DROP TABLE dbo.th.Test
GO
CREATE TABLE dbo.th.Test(
RowID INT IDENTITY(1,1) NOT NULL PRIMARY KEY
执行结果如下,backupBestore 数据库的两条数据,最下面是这个数据所在的目录。
二、给 Docker Volume 复制文档
Backup file
Mdf & ldf
把 Mdf & ldf copy 到 docker 里面,还有一个 bak 文件也 copy 到这个目录下面,把以下三个文件传到 docker 容器里面,docker cp ~/Downloads/TestBackRestore.mdf linuxsql41433:/xar/opt/mssg/data/estBackRestoremd
docker çp ~/Downloads/TestBackRestore, Jog.ldf linuxsql41433:/xar/opt/mssaJ/data/TestBackRestore Jog.ldf
docker çp ~/Downloads/TestBackRestore_ full, _201702 10.bak linuxsql41433:/var/opt/mssa/data/TestBackRestore_ full_ 20170210.bak
copy
成功之后去容器里面看一下。
三、给 SQL on Linux for Docker 储存数据
首先测试的是还原的动作,还原之前检查一下备份文件,是不是一致性有问题,接着做还原的测试。
USE master
Go
--Verify backup file
RESTORE FILELISTONLY
FROM DISK . N'C:Lxar'optmssqldataTestBackRestore_ _full_ 20170210.bak';
RESTORE VERIFYONLY
FROM DISK . N'C:' xar'optmssaldatalTestBackRestore _full_ 20170210.bak';
-- Restore Database
USE master
GO
RESTORE DATABASE [TestBackRestare]
FROM DISK = N'C:xarlopt'mssaldataTestBackRestore _full_ _201 70210.bak'
WITH MOVE NTestBackBestore TO N'C; watloptoossaldataTestBackBestremndf' ,MOVE N'TestBackRestore, log' TO N'C:luarloptmssaldataTestBackRestoe Jog.Jdf ,STATS= 2
GO
四、给SQL on Linux for Docker 调用数据
做一个 attach 动作,还原动作结束。
-- Create database via attach
CREATE DATABASE
[
TestAttach
]
ON ( FILENAME = N'C:xar'optmssaldataTestAttacb.md'),
( FILENAME = N'C:xar'opt'massadataTestAttach.log.d');
For
attach
;
GO
五、二次检查
检查这两条数据,在数据库里面对比一下,先查看第一条数据。
SELECT * FROM TestBackRestore dbo.tbTest;
SELECT * FROM TestAttach, dba tb Test;
这两种方法都是可行的,非常的平滑,它是完全可以通用的,windows 的文件放到SQL server 是完全可用的。