沈云,资深工程师,微软解决方案专家

SQL On Linux 版本很快就会正式发布,本文进行了安装和常用的操作。

安装篇:安装 SQL 服务和相关组件

安装 SQL 服务 On Linux

首先安装操作系统,本文使用了CentOS 7.2 进行安装,安装过程不表,安装完成后,访问互联网,使用网络安装,使用了 root 用户登录,如果不是 root 用户,需要 sudo 运行。下面我们先来安装 SQL 最重要的引擎 SQL 服务,按照以下步骤:

1、下载 SQL 的配置文件,如果离线安装可以访问 https://packages.microsoft.com. 去下载相应文件。

sudo su

curl https://packages.microsoft.com/config/rhel/7/mssql-server.repo > /etc/yum.repos.d/mssql-server.repo

2、安装 SQL,虽然是下载,发现很快就能安装完成。这个和在 windows 下安装的体验完全不一样。太快了快的不敢相信!!!

sudo yum install -y mssql-server

3、安装完成后,运行 mssql-conf setup, 设置 SA 的密码,最好超过 8 位,有大小写和特殊字符

sudo /opt/mssql/bin/mssql-conf setup

SQL On Linux 初体验_第1张图片

4、安装完成后运行命令,可以看到 SQL 运行的情况。

systemctl status mssql-server

SQL On Linux 初体验_第2张图片

5、需要外部应用连接到此服务,需要开放1433端口,可以如下命令:

sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent

sudo firewall-cmd --reload

6、完成安装,以后若要升级 SQL

sudo yum update mssql-server

SQL On Linux 工具安装

1、一样要用超级管理员,下载相应的配置文件

sudo su

curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/msprod.repo

2、安装 mssql-tools 使用 unixODBC 开发包,先check update下。

sudo yum update

sudo yum install mssql-tools unixODBC-devel

SQL On Linux 初体验_第3张图片

3、确定下载 y

4、接受 license terms y

SQL On Linux 初体验_第4张图片 SQL On Linux 初体验_第5张图片

5、添加 PATH 路径 /opt/mssql-tools/bin/

echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile

echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc

source ~/.bashrc

安装 SQL 代理 mssql-server-agent

1、安装 SQL 代理

sudo yum install mssql-server-agent

SQL On Linux 初体验_第6张图片 SQL On Linux 初体验_第7张图片

2、重启SQL 服务

sudo systemctl restart mssql-server

安装 SQL Server Full-Text Search

1、安装全文检索,名称是 mssql-server-fts

sudo yum install -y mssql-server-fts

SQL On Linux 初体验_第8张图片

使用篇:连接 SQL Server on Linux 和运行 Transact-SQL 查询

使用 SSMS 连接 SQL Server On Linux

1、使用 SSMS 连接 SQL Server on Linux 和 windows 的 SQL 并无差距。打开 SSMS,点连接数据库引擎,输入服务器名或者 IP,用户名和密码,连接

SQL On Linux 初体验_第9张图片

2、连接后

SQL On Linux 初体验_第10张图片 SQL On Linux 初体验_第11张图片

3、使用 SQL 语句进行操作和平常一样

4、 创建数据库 test,并创建文件组和内存表优化组

SQL On Linux 初体验_第12张图片 SQL On Linux 初体验_第13张图片

创建表和插入数据

use test

CREATE TABLE inventory (id INT, name NVARCHAR(50), quantity INT);

go

INSERT INTO inventory VALUES (1, 'banana', 150);

INSERT INTO inventory VALUES (2, 'orange', 154);

GO

SELECT * FROM inventory WHERE quantity > 152;

GO

SQL On Linux 初体验_第14张图片

创建内存表

1、下面代码创建内存表

--提升为快照

ALTER DATABASE CURRENT

SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON;

---创建优化文件组

ALTER DATABASE test ADD FILE (name='test_mod1', filename='/var/opt/mssql/data/testmod') TO FILEGROUP memogroup

---创建内存优化表

CREATE TABLE dbo.SalesOrder

(

SalesOrderId integer not null IDENTITY

PRIMARY KEY NONCLUSTERED,

CustomerId integer not null,

OrderDate datetime not null

)

WITH

(MEMORY_OPTIMIZED = ON,

DURABILITY = SCHEMA_AND_DATA);

2、创建本机编译过程

---创建本机编译的存储过程(本机过程)

------------------------------------------------------------------------------

---重要的关键字为 NATIVE_COMPILATION

CREATE PROCEDURE ncspRetrieveLatestSalesOrderIdForCustomerId

@_CustomerId INT

WITH

NATIVE_COMPILATION,

SCHEMABINDING

AS

BEGIN ATOMIC

WITH

(TRANSACTION ISOLATION LEVEL = SNAPSHOT,

LANGUAGE = N'us_english')

DECLARE @SalesOrderId int, @OrderDate datetime;

SELECT TOP 1

@SalesOrderId = s.SalesOrderId,

@OrderDate = s.OrderDate

FROM dbo.SalesOrder AS s

WHERE s.CustomerId = @_CustomerId

ORDER BY s.OrderDate DESC;

RETURN @SalesOrderId;

END;

3、插入数据和执行过程

---执行本机过程

INSERT into dbo.SalesOrder

( CustomerId, OrderDate )

VALUES

( 42, '2013-01-13 03:35:59' ),

( 42, '2015-01-15 15:35:59' );

---对本机编译的存储过程调用 EXECUTE。

DECLARE @LatestSalesOrderId int, @mesg nvarchar(128);

EXECUTE @LatestSalesOrderId =

ncspRetrieveLatestSalesOrderIdForCustomerId 42;

SET @mesg = CONCAT(@LatestSalesOrderId,

' = Latest SalesOrderId, for CustomerId = ', 42);

PRINT @mesg;

4、全部成功完成,证明了不仅普通表支持,内存表也支持。也就是说 SQL On Linux 会提供和 windows Linux 几乎一致性的功能。

使用 SQLCMD On Linux 连接 SQL

连接和使用sqlcmd

1、之前已经安装了sqlcmd工具, 在linux的 terminal窗口输入sqlcmd可以看到sqlcmd命令相关内容

SQL On Linux 初体验_第15张图片

2、连接 sql

sqlcmd -S localhost -U SA -P ''

3、连接后,执行 select * from sys.sysfiles 的结果,查看到 master 数据库的文件地址等信息。已经成功连接到数据库,sqlcmd 命令和在 windows 下的 sqlcmd 一样。

select * from sys.sysfiles

SQL On Linux 初体验_第16张图片

创建数据库和插入数据

1、创建数据库

CREATE DATABASE testdb;

go

2、创建表和插入数据

CREATE TABLE inventory (id INT, name NVARCHAR(50), quantity INT);

go

INSERT INTO inventory VALUES (1, 'banana', 150);

INSERT INTO inventory VALUES (2, 'orange', 154);

GO

SELECT * FROM inventory WHERE quantity > 152;

GO

SQL On Linux 初体验_第17张图片

创建内存表

1、使用以下脚本进行创建内存表

use testdb

ALTER DATABASE CURRENT SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON;

---创建优化文件组

ALTER DATABASE testdb ADD FILEGROUP testdb_mod CONTAINS MEMORY_OPTIMIZED_DATA

ALTER DATABASE testdb ADD FILE (name='test_mod1', filename='/var/opt/mssql/data/testmod') TO FILEGROUP testdb_mod

----

---创建内存优化表

CREATE TABLE dbo.SalesOrder

(

SalesOrderId integer not null IDENTITY

PRIMARY KEY NONCLUSTERED,

CustomerId integer not null,

OrderDate datetime not null

)

WITH

(MEMORY_OPTIMIZED = ON,

DURABILITY = SCHEMA_AND_DATA);

2、具体使用 sqlcmd 可参考如下介绍,作为很多操作还是使用 SSMS 方便一些。

sqlcmd 实用工具

https://msdn.microsoft.com/library/ms162773.aspxsqlcmd 实用工具

后序

从简单的安装到简单的使用,可以发现由于 Linux 操作系统与 windows 的差别,很多功能会不一样。比如群集、日志传送、镜像等等功能

本人最大的感受就是在线安装非常方便,也非常快。与在 windows 下安装体验完全完全不一样

在只用 SQL On Linux 的第一个问题是要理解文件结构,文件结构和 windows 的机构不同。文件路径也就不一样。Linux在系统配置都是以 config 的文件形式存在,也会有很多不一样的地方,本文还未进行最为重要的内容:

  • 数据库运维管理
  • 数据库性能检测
  • 数据库调优

这些内容涉及很广,不可能在较短的时间内完成。后续有机会再慢慢的体会。

立即访问http://market.azure.cn