SQL On Linux 初体验

SQL On Linux初体验

备注:Blog具有时效性, 内容随着更新会发现变化,时间是2017年5月22日

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

这里写图片描述

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

systemctl status mssql-server

这里写图片描述

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

03

3、确定下载 y

4、接受license terms y
这里写图片描述
这里写图片描述
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

这里写图片描述
这里写图片描述
2、重启SQL 服务

 sudo systemctl restart mssql-server

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

sudo yum install -y mssql-server-fts

这里写图片描述

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

使用SSMS连接SQL Server On Linux

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

2、连接后
这里写图片描述
这里写图片描述
3、使用SQL 语句进行操作和平常一样

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

这里写图片描述

创建表和插入数据

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

这里写图片描述

创建内存表

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命令相关内容

这里写图片描述

2、连接sql

sqlcmd -S localhost -U SA -P '<YourPassword>'

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

select * from sys.sysfiles

这里写图片描述

创建数据库和插入数据

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

这里写图片描述

创建内存表

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实用工具

后序

从简单的安装到简单的使用,可以发现由于Linux操作系统与windows的差别,很多功能会不一样。

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

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

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

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

End

作者简介: Max Shen(阿特),为了成为数据专家而努力,万一实现了呢!有多年的系统运维,数据库运维经验。近20年的IT从业经验,在微软有超过10年的工作经验。对数据库运维调优,排错,有独到能力。

发布了139 篇原创文章 · 获赞 60 · 访问量 37万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章