- Установка MS SQL Server на Linux
- Выбор выпуска
- Запуск MS SQL Server через Docker
- Установка MS SQL Server на Ubuntu 20.04.6 LTS (Debian, Astra Linux)
- Установка MS SQL Server на Oracle Linux Server 8.7 (RedHat (RHEL), CentOS)
- Служебная программа sqlcmd
- Microsoft SQL Server Management Studio (SSMS)
- Работа со службой Database Engine
- SQL команды для подробной информации о сервере
- Full-Text Search on Linux
- Простой пример развертывания БД для Linux
- Развертывание тестовой БД Microsoft для Linux
Установка MS SQL Server на Linux
В этой статье я научу вас устанавливать 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 через Docker
- Установка MS SQL Server на Ubuntu 20.04.6 LTS (Debian, Astra Linux)
- Установка MS SQL Server на Oracle Linux Server 8.7 (RedHat (RHEL), CentOS)
- Служебная программа sqlcmd
- Microsoft SQL Server Management Studio (SSMS)
- Работа со службой Database Engine
- SQL команды для подробной информации о сервере
- Full-Text Search
- Простой пример развертывания БД для Linux
- Развертывание тестовой БД Microsoft для Linux
Выбор выпуска
Выпуски 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)
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
Установка 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)
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
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.
Работа со службой 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 файлов в БД.
sudo yum install -y mssql-server-fts sudo yum check-update sudo yum update mssql-server-fts
sudo apt-get update sudo apt-get install -y mssql-server-fts
Простой пример развертывания БД для Linux
Это упрощенный пример создания тестовой базы данных от Microsoft.
Этот пример нужен для самостоятельной корректировки SQL-скриптов создания тестовой БД Microsoft на Linux.
Воспроизвести работу примера:
- Установить Full-Text Search
- Создать 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 2008-04-30 00:00:00 2 Home 2008-04-30 00:00:00 3 Main Office 2008-04-30 00:00:00 4 Primary 2008-04-30 00:00:00 5 Shipping 2008-04-30 00:00:00 6 Archive 2008-04-30 00:00:00
Удаляет БД, если ранее она была создана
Вставляет в таблицу данные
Делает выборку данных из таблицы
Удаляет все записи из таблицы
: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
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
USE [TestMe]; GO SELECT * FROM [PERSON].[AddressType]; GO
USE [TestMe]; GO DELETE FROM [Person].[AddressType]; GO SELECT * FROM [Person].[AddressType]; GO
Развертывание тестовой БД Microsoft для Linux
Создадим на сервере Linux директорию /var/sqlbackup/AdventureWorks
Из него скачиваем zip архив с данными и sql скриптом для расскатки БД.
Отредактируем файл 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
sqlcmd -S localhost -U SA -P strongPassword123 -i /var/sqlbackup/AdventureWorks/instawdb.sql
Теперь у вас есть тестовая база данных =)