1. 迁移前准备工作
ping命令测试);在CentOS上安装必要工具:mssql-tools(含sqlcmd命令行工具,用于数据导入导出)、unixODBC-devel(ODBC驱动支持),通过以下命令安装:sudo yum install -y mssql-tools unixODBC-devel
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile # 配置环境变量
source ~/.bash_profile
```。
USE [YourDatabaseName];
DBCC CHECKDB WITH NO_INFOMSGS; -- 检查数据库完整性
```。
2. 常见迁移方法
这是SQL Server跨平台迁移的最可靠方式,步骤如下:
C:\Backup\YourDB.bak),点击“确定”。BACKUP DATABASE [YourDatabaseName]
TO DISK = N'/mnt/backup/YourDB.bak' -- 源服务器上的备份路径(需提前创建/mnt/backup目录)
WITH NOFORMAT, NOINIT, NAME = N'YourDB-Full Backup', STATS = 10;
scp(安全复制)工具将.bak文件从源服务器复制到目标CentOS的指定目录(如/var/opt/mssql/backup):scp user@source_server_ip:/mnt/backup/YourDB.bak /var/opt/mssql/backup/
sqlcmd执行还原命令(需调整文件路径为Linux格式):RESTORE DATABASE [YourDatabaseName]
FROM DISK = N'/var/opt/mssql/backup/YourDB.bak'
WITH FILE = 1, -- 备份文件中的第一个备份集
MOVE N'YourDatabaseName_Data' TO N'/var/opt/mssql/data/YourDB.mdf', -- 指定数据文件新路径
MOVE N'YourDatabaseName_Log' TO N'/var/opt/mssql/data/YourDB.ldf', -- 指定日志文件新路径
NOUNLOAD, STATS = 10; -- 显示还原进度
USE [YourDatabaseName]; SELECT COUNT(*) FROM YourTableName;查询数据记录数,确认数据完整性。通过sqlcmd工具直接导出/导入表数据,适合少量数据或特定表的迁移:
\n):sqlcmd -S source_server_ip -U username -P password -d YourDatabaseName -Q "SELECT * FROM YourTableName" -s "," -W -o /tmp/export.csv
BULK INSERT命令将CSV数据导入目标表(需提前创建表结构):sqlcmd -S target_server_ip -U username -P password -d YourDatabaseName -Q "BULK INSERT YourTableName FROM '/tmp/export.csv' WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n')"
-s参数(如用|分隔)。通过sqlpackage工具生成BACPAC文件(包含数据库架构与数据),实现结构与数据的一体化迁移:
sudo yum install -y https://packages.microsoft.com/config/rhel/7/prod.repo
sudo yum install -y mssql-tools sqlpackage
YourDB.bacpac):sqlpackage export -ServerName source_server_ip -DatabaseName YourDatabaseName -Username username -Password password -OutputFile /tmp/YourDB.bacpac
sqlpackage import -ServerName target_server_ip -DatabaseName YourTargetDatabaseName -Username username -Password password -File /tmp/YourDB.bacpac
bcp(Bulk Copy Program)是SQL Server的高性能命令行工具,适合迁移大量数据(如百万级记录):
YourTable.dat):bcp YourDatabaseName.dbo.YourTableName out /tmp/YourTable.dat -c -t, -S source_server_ip -U username -P password
(-c表示使用字符数据类型,-t,表示字段分隔符为逗号)bcp YourTargetDatabaseName.dbo.YourTableName in /tmp/YourTable.dat -c -t, -S target_server_ip -U username -P password
-F(起始行)和-L(结束行)参数分批次迁移,减少内存占用。3. 迁移后验证
SELECT COUNT(*) FROM YourTableName),对比记录数是否一致;抽样检查关键字段(如ID、金额)的值是否正确。Server=source_ip;Database=YourDB;改为Server=target_ip;Database=YourTargetDB;),测试应用是否能正常访问目标数据库(如登录、查询、提交数据)。max server memory、并行度max degree of parallelism),提升数据库性能。