В этой статье я научу вас устанавливать Microsoft SQL Server 2022 на Linux и мы развернем тестовую базу данных от Microsoft в операционной системе Linux.
Мы будем использовать пакетным менеджером Yum для Linux дистрибутивов: RedHat (RHEL), CentOS, Scientific Linux и DPKG (Debian Package) – система управления пакетами в Debian и дистрибутивах на его основе, например Ubuntu и набирающем популярность Astra Linux, в связи с импортозамещением. Поэтому команды я приведу для обоих пакетных менеджеров. Так же рассмотрим универсальный способ запуска через Docker.
Microsoft SQL Server — система управления реляционными базами данных (СУБД), разработанная корпорацией Microsoft. Основной используемый язык запросов (диалект SQL) — Transact-SQL (T-SQL).
Для взаимодействия с СУБД MS SQL Server используются 2 основных способа:
1. Служебная программа sqlcmd
2. Microsoft SQL Server Management Studio (SSMS)
Конечно вы можете использовать привычный для вас DBeaver или DataGrip или любой другой инструмент администрирования базы данных.
Оглавление:
-
Установка MS SQL Server на Ubuntu 20.04.6 LTS (Debian, Astra Linux)
-
Установка MS SQL Server на Oracle Linux Server 8.7 (RedHat (RHEL), CentOS)
Выбор выпуска
Выпуски SQL Server имеют бесплатные лицензии: Evaluation, Developer и Express.
-
Express является бесплатной для использования редакцией. Функционал довольно ограничен, самое ощутимое ограничение экспресс версии — максимальный размер базы 10 ГБ. Эта редакция подойдет для небольших проектов, например, студенческих работ или для обучения SQL/T-SQL.
-
Developer редакция так же как и Enterprise не имеет никаких ограничений и её можно использовать бесплатно, но она может использоваться только для разработки и тестирования приложений.
-
Web редакция почти ничем не отличается от standard, кроме как более сильными ограничениями в функционале и соответственно более низкой стоимости лицензирования;
-
Standard это полноценная платная редакция, но многих функций всё еще нет. Максимальный объём оперативной памяти, который сможет использовать SQL Server – 128 ГБ, также отсутствуют группы доступности AlwaysOn и другие компоненты. Standard предназначен для приложений в небольших организациях.
-
Evaluation — ознакомительная редакция SQL Server, которая предоставляет полный функционал Enterprise и работает в течении 180 дней (может быть обновлена до полноценной версии).
-
Enterprise включает в себя все возможные функции и компоненты, никаких ограничений нет. Корпоративная редакция обычно используется крупными корпорациями или компаниями, которым необходим функционал этой версии.
SQL Server Developer — идеальный выбор для людей, которые создают и тестируют приложения.
Запуск MS SQL Server через Docker
# Извлечь образ, при необходимости, и запустить контейнер c MS SQL Server на порту 1433 и именем контейнера mssql1 docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=strongPassword123" -p 1433:1433 --name mssql1 -d mcr.microsoft.com/mssql/server:2022-latest # Вывести список всех контейнеров docker ps -a # Служебная программа sqlcmd позволяет вводить инструкции Transact-SQL docker exec -it mssql1 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P strongPassword123 # Удалить созданный вами контейнер docker rm mssql1 -f
Подробнее:
Установка MS SQL Server на Ubuntu 20.04.6 LTS (Debian, Astra Linux)
Подробнее: https://learn.microsoft.com/ru-ru/sql/linux/quickstart-install-connect-ubuntu?view=sql-server-ver16
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-2022.list)" sudo apt-get update sudo apt-get install -y mssql-server sudo /opt/mssql/bin/mssql-conf setup systemctl status mssql-server
Открыть порты
# Восстановление настроек по умолчанию sudo ufw default deny incoming sudo ufw default allow outgoing # Разрешаем подключение sudo ufw allow 1433 # активировать UFW sudo ufw enable # Дополнительно: # диапазоны портов и протокол sudo ufw allow 6000:6007/tcp sudo ufw allow 6000:6007/udp
Подробнее:
-
https://learn.microsoft.com/ru-ru/sql/linux/quickstart-install-connect-red-hat?view=sql-server-ver16
Установка MS SQL Server на Oracle Linux Server 8.7 (RedHat (RHEL), CentOS)
sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/8/mssql-server-2022.repo sudo yum install -y mssql-server sudo /opt/mssql/bin/mssql-conf setup systemctl status mssql-server
Открыть порты
sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent sudo firewall-cmd --reload
Служебная программа sqlcmd
Для работы программы sqlcmd требуется установка ODBC Driver for SQL Server, подводным камнем тут является то, что нам нужна именно 17 версия для работы с Microsoft SQL Server 2022 (RTM-CU4) (KB5026717).
1) Для работы из-под Windows 10 из Windows Terminal (PowerShell)
Download ODBC Driver for SQL Server
2) RHEL 8
sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/8/prod.repo sudo yum remove unixODBC-utf16 unixODBC-utf16-devel sudo yum install -y mssql-tools unixODBC-devel echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc source ~/.bashrc
3) Ubuntu 20.04
sudo apt-get update sudo apt install curl curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list sudo apt-get update sudo apt-get install mssql-tools unixodbc-dev sudo apt-get update sudo apt-get install mssql-tools echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc source ~/.bashrc
Локальное подключение
sqlcmd -S localhost -U sa -P strongPassword123 # Выход из приглашения команды sqlcmd QUIT
Подробнее:
Microsoft SQL Server Management Studio (SSMS)
SQL Server Management Studio (SSMS) — это интегрированная среда для управления любой инфраструктурой SQL.
Скачивание SQL Server Management Studio (SSMS)

Работа со службой Database Engine
#Проверьте состояние службы Database Engine sudo systemctl status mssql-server #Остановить, запустить или перезапустить службу Database Engine sudo systemctl stop mssql-server sudo systemctl start mssql-server sudo systemctl restart mssql-server
SQL команды для подробной информации о сервере
SELECT Name from sys.databases; SELECT @@VERSION as Version SELECT SERVERPROPERTY('ServerName') as 'Container ID' SELECT SERVERPROPERTY('Edition') as Edition SELECT CURRENT_USER; GO
Full-Text Search on Linux
Полнотекстовый поиск позволяет выполнять полнотекстовые запросы к символьным данным в таблицах SQL Server. Это позволит нам выполнить загрузку данных из .csv файлов в БД.
RHEL
sudo yum install -y mssql-server-fts sudo yum check-update sudo yum update mssql-server-fts
Ubuntu
sudo apt-get update sudo apt-get install -y mssql-server-fts
Подробнее: Install SQL Server Full-Text Search on Linux
Простой пример развертывания БД для Linux
Это упрощенный пример создания тестовой базы данных от Microsoft.
Этот пример нужен для самостоятельной корректировки SQL-скриптов создания тестовой БД Microsoft на Linux.
Воспроизвести работу примера:
-
Создать sql-скрипты описанные ниже
-
Перенести SQL файлы на сервер (например через MobaXTerm)
-
Настроить права доступа для пользователя и группы
-
Выполнить скрипты в порядке их следования
Команды Linux (для новичков):
# Создаем папку TestMe в директории вашего пользователя - мой пользователь: admin # /home/admin/ mkdir TestMe # Загружаем файлы на сервер через ftp встроенный в MobaXTerm # просто выделив их и перенеся в директорию вашего пользователя # Переключаемся на root (суперпользователя) sudo su cd /var mkdir sqlbackup cd sqlbackup mkdir TestMe # переносим файлы в директорию TestMe - cp /home/admin/TestMe/* /var/sqlbackup/TestMe chown mssql -R sqlbackup/ chgrp mssql -R sqlbackup/
Запуск sql скриптов через sqlcmd при подключении к удаленному серверу по SSH через MobaXTerm
sqlcmd -S localhost -U SA -P strongPassword123 -i /var/sqlbackup/TestMe/ddl.sql
Сами тестовые данные — AddressType.csv
1 Billing {B84F78B1-4EFE-4A0E-8CB7-70E9F112F886} 2008-04-30 00:00:00 2 Home {41BC2FF6-F0FC-475F-8EB9-CEC0805AA0F2} 2008-04-30 00:00:00 3 Main Office {8EEEC28C-07A2-4FB9-AD0A-42D4A0BBC575} 2008-04-30 00:00:00 4 Primary {24CB3088-4345-47C4-86C5-17B535133D1E} 2008-04-30 00:00:00 5 Shipping {B29DA3F8-19A3-47DA-9DAA-15C84F4A83A5} 2008-04-30 00:00:00 6 Archive {A67F238A-5BA2-444B-966C-0467ED9C427F} 2008-04-30 00:00:00
|
Файл |
Описание |
|
ddl.sql |
Удаляет БД, если ранее она была создана Создает БД Создает таблицу |
|
insert.sql |
Вставляет в таблицу данные |
|
select.sql |
Делает выборку данных из таблицы |
|
delete.sql |
Удаляет все записи из таблицы |
ddl.sql
:setvar SqlSamplesSourceDataPath "/var/sqlbackup/TestMe/data/" :setvar DatabaseName "TestMe" IF '$(SqlSamplesSourceDataPath)' IS NULL OR '$(SqlSamplesSourceDataPath)' = '' BEGIN RAISERROR(N'The variable SqlSamplesSourceDataPath must be defined.', 16, 127) WITH NOWAIT RETURN END; SET NOCOUNT OFF; GO PRINT CONVERT(varchar(1000), @@VERSION); GO PRINT ''; PRINT 'Started - ' + CONVERT(varchar, GETDATE(), 121); GO USE [master]; GO -- **************************************** -- Drop Database -- **************************************** PRINT ''; PRINT '*** Dropping Database'; GO IF EXISTS (SELECT [name] FROM [master].[sys].[databases] WHERE [name] = N'$(DatabaseName)') DROP DATABASE $(DatabaseName); -- If the database has any other open connections close the network connection. IF @@ERROR = 3702 RAISERROR('$(DatabaseName) database cannot be dropped because there are still other open connections', 127, 127) WITH NOWAIT, LOG; GO -- **************************************** -- Create Database -- **************************************** PRINT ''; PRINT '*** Creating Database'; GO CREATE DATABASE $(DatabaseName); GO PRINT ''; PRINT '*** Checking for $(DatabaseName) Database'; /* CHECK FOR DATABASE IF IT DOESN'T EXISTS, DO NOT RUN THE REST OF THE SCRIPT */ IF NOT EXISTS (SELECT TOP 1 1 FROM sys.databases WHERE name = N'$(DatabaseName)') BEGIN PRINT '*******************************************************************************************************************************************************************' +char(10)+'********$(DatabaseName) Database does not exist. Make sure that the script is being run in SQLCMD mode and that the variables have been correctly set.*********' +char(10)+'*******************************************************************************************************************************************************************'; SET NOEXEC ON; END GO ALTER DATABASE $(DatabaseName) SET RECOVERY SIMPLE, ANSI_NULLS ON, ANSI_PADDING ON, ANSI_WARNINGS ON, ARITHABORT ON, CONCAT_NULL_YIELDS_NULL ON, QUOTED_IDENTIFIER ON, NUMERIC_ROUNDABORT OFF, PAGE_VERIFY CHECKSUM, ALLOW_SNAPSHOT_ISOLATION OFF; GO USE $(DatabaseName); GO CREATE TYPE [Name] FROM nvarchar(50) NULL; GO CREATE TABLE [Person].[AddressType]( [AddressTypeID] [int] IDENTITY (1, 1) NOT NULL, [Name] [Name] NOT NULL, [rowguid] uniqueidentifier ROWGUIDCOL NOT NULL CONSTRAINT [DF_AddressType_rowguid] DEFAULT (NEWID()), [ModifiedDate] [datetime] NOT NULL CONSTRAINT [DF_AddressType_ModifiedDate] DEFAULT (GETDATE()) ) ON [PRIMARY]; GO
insert.sql
USE [TestMe]; GO BULK INSERT [Person].[AddressType] FROM '/var/sqlbackup/AdventureWorks/AddressType.csv' WITH ( CHECK_CONSTRAINTS, DATAFILETYPE = 'char', FIELDTERMINATOR= '\t', ROWTERMINATOR = '\n', KEEPIDENTITY, TABLOCK ); GO SELECT * FROM [PERSON].[AddressType]; GO
select.sql
USE [TestMe]; GO SELECT * FROM [PERSON].[AddressType]; GO
delete.sql
USE [TestMe]; GO DELETE FROM [Person].[AddressType]; GO SELECT * FROM [Person].[AddressType]; GO
Развертывание тестовой БД Microsoft для Linux
Создадим на сервере Linux директорию /var/sqlbackup/AdventureWorks
SQL samples -> GitHub Repository -> adventure-works -> oltp-install-script
Нам нужен пункт: To install AdventureWorks
Из него скачиваем zip архив с данными и sql скриптом для расскатки БД.
Разархивируем zip
Отредактируем файл instawdb.sql
... :setvar SqlSamplesSourceDataPath "/var/sqlbackup/AdventureWorks/" ... :setvar DatabaseName "AdventureWorks"
Удаляем все строчки с: CODEPAGE='ACP', в instawdb.sql
ACP это ANSI, а Linux использует UTF-8, а UTF-8 это расширенный ANSI, а кодовые страницы в Linux не используются, поэтому убрав строки всё будет работать
После переносим .csv данные и единственный sql-скрипт в /var/sqlbackup/AdventureWorks на нашем сервере Linux
Выполняем sql-скрипт
sqlcmd -S localhost -U SA -P strongPassword123 -i /var/sqlbackup/AdventureWorks/instawdb.sql
Теперь у вас есть тестовая база данных =)
ссылка на оригинал статьи https://habr.com/ru/articles/819839/
Добавить комментарий