SQL On Linux 初體驗

沈云,資深工程師,微軟解決方案專家

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



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

安裝 SQL Server Full-Text Search

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 ''

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

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

后序

從簡單的安裝到簡單的使用,可以發現由于 Linux 操作系統與 windows 的差別,很多功能會不一樣。比如群集、日志傳送、鏡像等等功能

本人最大的感受就是在線安裝非常方便,也非常快。與在 windows 下安裝體驗完全完全不一樣

在只用 SQL On Linux 的第一個問題是要理解文件結構,文件結構和 windows 的機構不同。文件路徑也就不一樣。Linux在系統配置都是以 config 的文件形式存在,也會有很多不一樣的地方,本文還未進行最為重要的內容:

數據庫運維管理

數據庫性能檢測

數據庫調優

這些內容涉及很廣,不可能在較短的時間內完成。后續有機會再慢慢的體會。

光看云社區未使用 Azure?

申請試用

標簽

公告 (159)

虛擬機 (70)

解決方案 (69)

云服務 (62)

存儲 (57)

網站 (53)

常見問題 (50)

SQL 數據庫 (45)

Windows Azure 開源解決方案 (25)

服務總線 (24)

Active Directory (24)

媒體服務 (18)

虛擬網絡 (12)

移動服務 (12)

HDInsight (11)

備份 (9)

Azure (7)

網絡服務 (7)

站點恢復 (7)

CDN (6)

流量管理器 (6)

MySQL Database on Azure (4)

VPN (2)

blob (2)

DocumentDB (2)

Azure VMSS (2)

Microsoft R Server (2)

SQL (2)

ARM (2)

Azure SQL (2)

數據庫 (2)

物聯網 (2)

FreeBSD (2)

計費 (2)

Azure 分析服務 (1)

Azure SQL DataBase (1)

SQL Server (1)

數據科學虛擬機鏡像 (1)

Visual Studio 2017 虛擬機鏡像 (1)

SQL 2017,Azure SQL (1)

共享目錄 (1)

SQL On Linux (1)

SQL2016,security (1)

數據庫權限,分配 (1)

NSC (1)

Ubuntu Docker,SQL Server (1)

BGP (1)

Azure Linux Disk (1)

Powershell (1)

cache (1)

Json Template (1)

Cisco CSR (1)

Azure ARM (1)

VNet (1)

Storm (1)

HBASE (1)

事件中心 (1)

流處理 (1)

Storm,HBASE,事件中心,流處理 (1)

Azure Python SDK (1)

Azure IoT 中心服務,根證書 (1)

Azure Cosmos DB (1)

VMSS (1)

Microsoft R Server (1)

事件中心捕獲 (1)

performance optimization (1)

自定義鏡像 (1)

private disk (1)

Vnet (1)

OnPrem (1)

logic server (1)

Infrastructure (1)

auto deployment (1)

站點,訪問,實踐 (1)

Azure Portal (1)

Azure Resource Template (1)

private storage (1)

AAD (1)

ACS (1)

遷移 (1)

兼容性 (1)

SQL數據庫 (1)

AzureSQL (1)

初級 (1)

Visual Studio (1)

SQL Server (1)

PaaS (1)

HTTPS自有證書 (1)

域名管理 (1)

證書部署 (1)

云計算 (1)

AzureStorage (1)

azure-availability (1)

azure-networking1 (1)

IoT 中心 (1)

IoT Suite (1)

VM (1)

CDN Smart Routing (1)

BSD (1)

AppleTV (1)

Apple FairPlay (1)

Azure Stack (1)

Azure云助手 (1)

Cloud Foundry (1)

虛擬機 (1)

PowerShell (1)

移動終端 (1)

服務儀表盤 (1)

立即訪問http://market.azure.cn

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容