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

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 初体验

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

systemctl status mssql-server

SQL On Linux 初体验

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、确定下载 y

4、接受 license terms y

SQL On Linux 初体验SQL On Linux 初体验

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 初体验SQL On Linux 初体验

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 初体验

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

使用 SSMS 连接 SQL Server On Linux

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

SQL On Linux 初体验

2、连接后

SQL On Linux 初体验SQL On Linux 初体验

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

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

SQL On Linux 初体验SQL On Linux 初体验

创建表和插入数据

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 初体验

创建内存表

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 初体验

2、连接 sql

sqlcmd -S localhost -U SA -P ''

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

select * from sys.sysfiles

SQL On Linux 初体验

创建数据库和插入数据

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 初体验

创建内存表

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