Содержание
MSSQL
https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions?view=sql-server-ver15 - Настройка учетных записей службы
Для томов с файлами данных и логов SQL Server рекомендуется размер кластера NTFS 64 КБ, а не 8 КБ (размер страницы SQL Server). SQL Server хранит данные страницами по 8 КБ, но реальный ввод-вывод он выполняет экстентами — группами из 8 страниц, то есть блоками по 64 КБ.
Подключиться в режиме чтения:
applicationIntent=Readonly
Показать всех пользователей сервера:
SELECT * FROM sys.sql_logins
Показать все базы сервера:
SELECT * FROM sys.databases
Firewall
Powershell:
New-NetFirewallRule -DisplayName "SQLServer default instance" -Direction Inbound -LocalPort 1433 -Protocol TCP -Action Allow New-NetFirewallRule -DisplayName "SQLServer Browser service" -Direction Inbound -LocalPort 1434 -Protocol UDP -Action Allow
MSSQL instance MSSQL14.MSSQLSERVER:
New-NetFirewallRule -DisplayName "SQLServer Program" -Direction Inbound -Program "C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Binn\sqlservr.exe" -Action Allow
Always On
Доменная учётная запись от которой работает MSSQLSERVER должна иметь разрешения регистрировать SPN для работы Kerberos
Пользовать от кого запущен MS SQL Server должен иметь права (на Endpoint):
GRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO [<service account OR user>];
ODBC
https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server - Install the Microsoft ODBC driver for SQL Server (Linux)
https://learn.microsoft.com/eN-us/sql/connect/odbc/dsn-connection-string-attribute - DSN and Connection String Keywords and Attributes
https://xakinfo.ru/os/monitor-mssql-zabbix/
Zabbix ODBC
CLR
Показать конфигурацию CLR:
EXEC sp_configure 'clr enabled';
Включить CLR:
EXEC sp_configure 'clr enabled' , '1';
sys.assemblies
Показать загруженные assembly_files (clr) для текущей базы:
SELECT af.name, af.content FROM sys.assemblies a INNER JOIN sys.assembly_files af ON a.assembly_id = af.assembly_id --WHERE a.name = 'VsOnline.SQLCLR'
https://www.mssqltips.com/sqlservertip/3126/exporting-clr-assemblies-from-sql-server-back-to-dll-files/
https://docs.microsoft.com/ru-ru/sql/t-sql/statements/create-assembly-transact-sql?view=sql-server-ver15
sys.trusted_assemblies
Показать доверенные сборки:
SELECT * FROM sys.trusted_assemblies
Добавить/удалить в доверенные (пример для 'VsOnline.SQLCLR'):
https://nielsberglund.com/2017/07/23/sql-server-2017-sqlclr---whitelisting-assemblies/
http://ianpicknell.blogspot.com/2009/12/adding-strong-name-to-third-party.html
TRUSTWORTHY
Показать значения для баз:
SELECT name,is_trustworthy_on FROM sys.databases;
Изменить значение для базы (пример для базы VSOnlineTest):
ALTER DATABASE VSOnlineTest SET TRUSTWORTHY ON;
Optimize for ad hoc workloads
Показать текущее значение:
USE master SELECT * FROM sys.configurations WHERE NAME = 'optimize for ad hoc workloads'
Включить:
USE master EXEC sp_configure 'show advanced options', 1 RECONFIGURE EXEC sp_configure 'optimize for ad hoc workloads', 1 RECONFIGURE WITH OVERRIDE GO
https://docs.microsoft.com/ru-ru/sql/database-engine/configure-windows/optimize-for-ad-hoc-workloads-server-configuration-option
https://wiki.it-kb.ru/1c/setting-up-microsoft-sql-server-for-1c-enterprise-8-3/optimize-for-ad-hoc-workloads
Безопасность
Показать SID пользователя:
SELECT SUSER_SID('login');
Поменять пользователю SID:
DROP LOGIN [USER]; CREATE LOGIN [USER] WITH PASSWORD = 'password', SID = 0x2542795EDA11A2468F5D9CCDEA47C665;
https://docs.microsoft.com/ru-ru/sql/t-sql/functions/suser-sid-transact-sql
Сформировать SQL запрос для переноса учётных записей:
Owner БД
Сформировать T-SQL скрипт для изменения owner:
https://www.sqlshack.com/different-ways-to-change-database-owners-in-sql-server/
Сменить пароль
Роли
Показать разрешения роли текущей базы данных:
EXEC sp_helprotect @username = '${ROLENAME}'
Показать пользователей роли текущей базы данных:
EXEC sys.sp_helprolemember @rolename = '${ROLENAME}'
Показать роли пользователя текущей базы данных:
EXEC sp_helpuser '${LOGIN}'
Роль для SYSTEM
Добавить роль dbcreator:
EXEC master..sp_a @loginame = N'NT AUTHORITY\SYSTEM', @roleddsrvrolemembername = N'dbcreator'
Предоставить разрешения на сервер (ALTER ANY CONNECTION):
GRANT ALTER ANY CONNECTION TO [NT AUTHORITY\SYSTEM]
Роль для резервного копирования
Для каждой базы:
USE DBforBACKUP; GO CREATE LOGIN [<HOSTNAMEorDOMAIN>\sqlBackup] FROM WINDOWS; GO ALTER ROLE [db_backupoperator] ADD MEMBER [<HOSTNAMEorDOMAIN>\sqlBackup];
Для DBCC SHRINKFILE или DBCC SHRINKDATABASE требуется членство в фиксированной роли сервера sysadmin или фиксированной роли базы данных db_owner.
Роль выполнения процедур
Привилегии / Permission
Шифрование (TDE)
Создать мастер ключ и сертификат:
Для кластера или восстановления на другом сервере, сделать резервное копирование сертификата и ключа к нему:
Создать на другом сервере мастер ключ и сертификат из бэкапа:
Зашифровать базу:
Показать, зашифрована ли база:
Показать все зашифрованные базы и их состояние:
https://www.interface.ru/home.asp?artId=29621
Удалить шифрование и ключ шифрования базы данных:
https://docs.microsoft.com/en-us/sql/t-sql/statements/drop-database-encryption-key-transact-sql
Показать все сертификаты на сервере:
Показать каким сертифкатом зашифрована база:
https://www.mssqltips.com/sqlservertip/5009/updating-an-expired-sql-server-tde-certificate/
https://dba.stackexchange.com/questions/92080/query-to-list-encryption-certificate-for-databases
Добавить базу в группу Always On:
1. Always On группа должна быть настроена
2. Сертификат шифрования с ключём должен быть создан на вторичном сервере
3. Отключить резервное копирование БД, включая логи транзакций
4. Сделать резервную копию БД (Full и Transaction Log)
5. Восстановить БД на вторичном сервере (Full и Transaction Log):
Обновить сертифкат:
https://www.mssqltips.com/sqlservertip/5009/updating-an-expired-sql-server-tde-certificate/
Docker
https://github.com/mrlioncub/mssql-tools
Изменить директорию для резервных копий по умолчанию:
docker exec --user root mssql /opt/mssql/bin/mssql-conf set filelocation.defaultbackupdir /var/opt/mssql/backups
Аутентификация AD (keytab)
https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-containers-ad-auth-adutil-tutorial?view=sql-server-ver15
https://github.com/vicrem/mssql
Always On
tmpfs
Примеры
Активные соединения
Список медленных запросов
Активный сервер
Пример для Failover серверов.
https://learn.microsoft.com/ru-ru/sql/t-sql/functions/databasepropertyex-transact-sql
Backup & Restore
Резервное копирование и восстановление для mssql в контейнере на удалённом хосте по ssh:
Резервное копирование на локальной системе:
Дифференцированный бэкап определённых БД:
https://www.mssqltips.com/sqlservertip/1070/simple-script-to-backup-all-sql-server-databases/
Показать информацию о запросе:
Показать подробную информацию о запросе:
Резервное копирование определённых баз c проверкой на состояние и на исключение одновременного повтороного резервирования (при запуске из другого процесса):
Размер таблиц
Rebuild
Показать состояние индексов на текущей базе:
Перестроить индексы (@fillfactor - коэффициент заполнения в индексе):
https://stackoverflow.com/questions/32505775/rebuild-all-indexes-in-a-database
Список индексов базы с запросом в поле для фрагментации:
Attach / Detach
xp_cmdshell
Пример монтирования сетевого диска:
после необходимо вернуть значения 'xp_cmdshell' и 'show advanced options'
Удалить файл из файловой группы
файл не должен быть primary
Проверить является ли файл primary:
SELECT FILEPROPERTY('LogicalFileName', 'IsPrimaryFile')
Перенос базы tempdb
Database Mail
Экспорт настроек Database Mail
Пароли не экспортируются
После переноса настроек необходимо вернуть «Configuration option» в исходное значение
https://www.sqlservercentral.com/forums/topic/database-mail-export
SQL Agent
Экспорт настроек SQL Agent Operators
Database Mail
Для доступа к отправке почты, добавить права:
https://learn.microsoft.com/en-us/sql/relational-databases/database-mail/database-mail-common-errors
Проверить отправку почты (профиль должен быть настроен):
Auto Growth
Показать текущие настройки Growth всех баз кроме системных
Изменить Growth для всех баз кроме системных (для данных 1024MB, лога 512MB):
Alter databases / Temporary Table
Примеры для изменения баз данных и использования временной таблицы
Query Store
Включить на всех базах, кроме системных, мониторинг производительности с использованием хранилища запросов (https://learn.microsoft.com/ru-ru/sql/relational-databases/performance/monitoring-performance-by-using-the-query-store):
QS сбрасывает статистику интервалами, по умолчанию до 15 минут, плюс пересылка на primary.
Показать состояние query store для всех баз (https://learn.microsoft.com/en-gb/sql/relational-databases/system-catalog-views/sys-database-query-store-options-transact-sql):
или
Проблемы
База в состоянии Restoring
Выполнить:
RESTORE DATABASE dbname WITH RECOVERY
База в состоянии In Recovery
Проверить процент выполнения:
Удалить базу:
- Остановить сервер
- Удалить ldf и mdf файлы базы
- Запустить сервер
- Удалить базу
База в состоянии Recovery Pending
Переименование базы Msg 5030
Решение:
- Установить базу в режим SINGLE_USER
- Переименовать базу
- Вернуть режим базы MULTI_USER
ALTER DATABASE OLD_DBName SET SINGLE_USER WITH ROLLBACK IMMEDIATE; ALTER DATABASE OLD_DBName MODIFY NAME = NEW_DBNAME; ALTER DATABASE NEW_DBNAME SET MULTI_USER;
https://sqlconjuror.com/sql-server-resolve-error-5030-to-rename-database/
https://docs.microsoft.com/ru-ru/sql/relational-databases/databases/set-a-database-to-single-user-mode
Удаление LogFile Msg 5009
Файл физически удалён, но логически отображается.
Установка на контроллер домена 0x851A001A
Решение:
Во время установки назначить пользователя для запуска:
- NT AUTHORITY\NETWORK SERVICE
- NT AUTHORITY\LOCAL SERVICE
Удаление пользователя
Ошибка:
Error 15138, Level 16, State 1, Line 1
The database principal owns a fulltext catalog in the database, and cannot be dropped.
Решение: Изменить хозяина sys.fulltext_catalogs для этой базы
Посмотреть в базе:
SELECT * FROM sys.fulltext_catalogs
Поменять:
ALTER AUTHORIZATION ON Fulltext Catalog::[CatalogName] TO [dbo];
Ошибка:
Msg 15173, Level 16, State 1, Line 3
Server principal 'DOMAIN\user' has granted one or more permission(s). Revoke the permission(s) before dropping the server principal.
Решение: Проверить для кого является хозяином (grantor) этот пользователь и
изменить хозяина, пример для ENDPOINT::Hadr_endpoint в AG
Поменять:
ALTER AUTHORIZATION ON ENDPOINT::Hadr_endpoint TO sa;
Изменение owner БД
Ошибка:
Msg 15110, Level 16, State 1, Line 1 The proposed new database owner is already a user or aliased in the database.
Решение:
ALTER AUTHORIZATION ON DATABASE::[dbname] TO [username]
или
USE [dbname]; EXEC sp_dropuser [username]; USE [dbname]; EXEC sp_changedbowner [username];
https://vmblog.ru/izmenit-vladelca-mssql-server/
https://subhrosaha.wordpress.com/2012/04/26/sql-server-error-the-proposed-new-database-owner-is-already-a-user-or-aliased-in-the-database/
Отправка почты
Ошибка:
Msg 229, Level 14, State 5, Procedure msdb.dbo.sp_send_dbmail, Line 1 [Batch Start Line 0] The EXECUTE permission was denied on the object 'sp_send_dbmail', database 'msdb', schema 'dbo'.
Решение: Database Mail
Ссылки
https://learn.microsoft.com/RU-RU/sql/linux/sql-server-linux-configure-environment-variables - Настройка параметров SQL Server с помощью переменных среды в Linux
https://www.microsoft.com/en-us/download/details.aspx?id=39046 - Microsoft Kerberos Configuration Manager for SQL Server (Checking SPN)
https://its.1c.ru/db/metod8dev/content/5861/hdoc@2239bf5c - Проблемы и решения / Высокая загрузка CPU на сервере СУБД MS SQL Server
