====== MSSQL - TnT ======
==== Error: 15023 ====
Ошибка - User, group, or role already exists in the current database. (Microsoft SQL Server, Error: 15023)
При миграции сервера сбились права доступа к базам.
use [database_name]
exec sp_change_users_login 'AUTO_FIX', '[user_name]'
go
Подробнее в [[https://learn.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-change-users-login-transact-sql?view=sql-server-ver16|sp_change_users_login (Transact-SQL)]]
==== Could not create SSL/TLS secure channel ====
Ошибка **The request was aborted: Could not create SSL/TLS secure channel**
* [[https://docs.microsoft.com/en-us/officeonlineserver/enable-tls-1-1-and-tls-1-2-support-in-office-online-server#enable-strong-cryptography-in-net-framework-45-or-higher|Enable strong cryptography in .NET Framework 4.5 or higher]]
* [[https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls|Transport Layer Security (TLS) best practices with the .NET Framework]]
Исходящие запросы идут со старого tls 1.0, которые на удаленной стороне запрещены.
Правильнее конечно чинить на стороне .net приложения, но как всегда нужен быстрофикс. Можно через reg файл по ссылкам выше. Мне удобнее было через powershell.
Включаем tls 1.2
# 64 bit .net framework
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v2.0.50727' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v2.0.50727' -Name 'SystemDefaultTlsVersions' -Value '1' -Type DWord
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SystemDefaultTlsVersions' -Value '1' -Type DWord
# 32 bit .net framework
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v2.0.50727' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v2.0.50727' -Name 'SystemDefaultTlsVersions' -Value '1' -Type DWord
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SystemDefaultTlsVersions' -Value '1' -Type DWord
Вернуть обратно можно через **Remove-ItemProperty**
# 64 bit .net framework
Remove-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v2.0.50727' -Name 'SchUseStrongCrypto'
Remove-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto'
Remove-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v2.0.50727' -Name 'SystemDefaultTlsVersions'
Remove-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SystemDefaultTlsVersions'
# 32 bit .net framework
Remove-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v2.0.50727' -Name 'SchUseStrongCrypto'
Remove-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto'
Remove-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v2.0.50727' -Name 'SystemDefaultTlsVersions'
Remove-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SystemDefaultTlsVersions'
PS почитать для чего нужны следующие настройки FIXME заработало без этих настроек
# сlient side
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client' -Name 'DisabledByDefault' -Value '0' -PropertyType DWORD
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client' -Name 'Enabled" -Value '1' -PropertyType DWORD
# server side
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -Name 'DisabledByDefault' -Value '0' -PropertyType DWORD
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -Name 'Enabled' -Value '1' -PropertyType DWORD
==== Проверить версию ODBC драйвера ====
[[https://docs.microsoft.com/ru-ru/sql/database-engine/configure-windows/check-the-odbc-sql-server-driver-version-windows?view=sql-server-ver15|Check the ODBC SQL Server Driver Version (Windows)]]
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools\**ODBC Data Sources (64-bit)**
{{:microsoft:mssql:mssql_odbc_version.png?nolink&600|}}
==== Проверить версию MSSQL сервера ====
select @@VERSION
{{:microsoft:mssql:msssq_version.png?nolink&900|}}
==== Где скачать cumulative update ====
* https://sqlserverupdates.com/
* [[https://support.microsoft.com/ru-ru/help/4047329/sql-server-2017-build-versions|Сборки кумулятивного обновления (CU) SQL Server 2017]] / [[https://support.microsoft.com/ru-ru/help/321185/how-to-determine-the-version-edition-and-update-level-of-sql-server-an|Как определить версию, выпуск и уровень обновления системы SQL Server и ее компонентов]]
==== Размер БД ====
Размер/сумма всех баз ([[https://stackoverflow.com/a/7122249|Get overall sum of all databases size in a SQL Server]])
SELECT CONVERT(DECIMAL(10,2),(SUM(size * 8.00) / 1024.00 / 1024.00)) As UsedSpace
FROM master.sys.master_files
Размер по каждой базе #1 ([[https://stackoverflow.com/a/5946134|SQL Server 2008: How to query all databases sizes?]])
with fs
as
(
select database_id, type, size * 8.0 / 1024 size
from sys.master_files
)
select
name,
(select sum(size) from fs where type = 0 and fs.database_id = db.database_id) DataFileSizeMB,
(select sum(size) from fs where type = 1 and fs.database_id = db.database_id) LogFileSizeMB
from sys.databases db
Размер по каждой базе #2 ([[https://www.c-sharpcorner.com/blogs/check-database-size-in-sql-server1|Check Database Size in SQL SERVER]])
SELECT sys.databases.name,
CONVERT(VARCHAR,SUM(size)*8/1024)+' MB' AS [Total disk space]
FROM sys.databases
JOIN sys.master_files
ON sys.databases.database_id=sys.master_files.database_id
GROUP BY sys.databases.name
ORDER BY sys.databases.name
==== Различие CU, GDR и SP ====
* [[https://www.sqltattoo.com/blog/2021/01/sql-server-patching-gdr-vs-cu/|SQL Server patching: GDR vs CU]]
* [[https://www.sqlskills.com/blogs/glenn/modern-sql-server-servicing-model/|Modern SQL Server Servicing Model]]
* [[https://sqlserverupdates.com|SQLServerUpdates.com]]
* [[https://sqlserverbuilds.blogspot.com|Microsoft SQL Server Versions List]]
Для trueЪ - SP больше нет, GDR только security фиксы (ставится через Windows Update), CU ставится вручную и содержит новые функции, а не только security фиксы.
==== Error 5701 5703 ====
[06-Dec-2021 14:55:27 UTC] pdo_sqlsrv_db_handle_factory: error code = 5701
[06-Dec-2021 14:55:27 UTC] pdo_sqlsrv_db_handle_factory: message = [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Changed database context to 'foobar_dev'.
[06-Dec-2021 14:55:27 UTC] pdo_sqlsrv_db_handle_factory: SQLSTATE = 01000
[06-Dec-2021 14:55:27 UTC] pdo_sqlsrv_db_handle_factory: error code = 5703
[06-Dec-2021 14:55:27 UTC] pdo_sqlsrv_db_handle_factory: message = [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Changed language setting to us_english.
[[https://knowledgebase.progress.com/articles/Article/3509|Не ошибка]]. //These are expected warning messages which don't represent any errors, but they only provide information about the connected database and language that is being used.//
==== Как найти причину Login failed for user ====
https://sqlserver-help.com/2014/07/08/help-how-to-find-cause-of-login-failed-for-user-error/
==== tempDb перенести или изменить размер ====
Посмотреть текущее расположение файлов
SELECT
name
, physical_name AS CurrentLocation
, state_desc
FROM
sys.master_files
WHERE
database_id = DB_ID(N'tempdb');
Изменить расположение
USE master;
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = 'D:\tempDb\Data\tempdev.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = 'D:\tempDb\Log\templog.ldf');
GO
При успешном выполнении будет сообщение
The file "tempdev" has been modified in the system catalog. The new path will be used the next time the database is started.
The file "templog" has been modified in the system catalog. The new path will be used the next time the database is started.
После чего можно перезапустить SQL Server и удалить старые temp файлы.
Как изменить размер tempdb
USE master;
GO
ALTER DATABASE tempdb MODIFY FILE (NAME = 'tempdev', SIZE = NEW_SIZE_MB, FILEGROWTH = 512MB)
ALTER DATABASE tempdb MODIFY FILE (NAME = 'templog', SIZE = NEW_SIZE_MB, FILEGROWTH = 64MB)
GO
Несколько файлов
USE master;
GO
ALTER DATABASE tempdb ADD FILE (NAME = N'tempdev', FILENAME = N'D:\tempDb\tempdev.mdf' , SIZE = 1GB , FILEGROWTH = 0);
ALTER DATABASE tempdb ADD FILE (NAME = N'tempdev2', FILENAME = N'D:\tempDb\tempdev2.ndf' , SIZE = 1GB , FILEGROWTH = 0);
ALTER DATABASE tempdb ADD FILE (NAME = N'tempdev3', FILENAME = N'D:\tempDb\tempdev3.ndf' , SIZE = 1GB , FILEGROWTH = 0);
ALTER DATABASE tempdb ADD FILE (NAME = N'tempdev4', FILENAME = N'D:\tempDb\tempdev4.ndf' , SIZE = 1GB , FILEGROWTH = 0);
GO
* [[https://docs.microsoft.com/ru-ru/sql/relational-databases/databases/tempdb-database|tempdb, база данных]] (docs microsoft)
* [[https://docs.microsoft.com/en-US/troubleshoot/sql/performance/recommendations-reduce-allocation-contention|Recommendations to reduce allocation contention in SQL Server tempdb database]]
* [[https://www.mssqltips.com/sqlservertip/4829/tempdb-size-resets-after-a-sql-server-service-restart/|Tempdb size resets after a SQL Server service restart]]
* [[https://www.sqlshack.com/how-to-detect-and-prevent-unexpected-growth-of-the-tempdb-database/|How to detect and prevent unexpected growth of the TempDB database]]
* [[https://www.tune-it.ru/web/fender/blog/-/blogs/i-snova-tempdb-perenos-i-poleznye-skripty|и снова tempDB - перенос и полезные скрипты]]
* [[https://www.se.com/ww/en/faqs/FA238216/|How to change the location of database TempDB files Tempdb.mdf and TempLog.ldf in SQL 2008 and 2012 from default location ?]]
===== Ссылки =====
* [[http://dbamastery.com/performance-tuning/maxdop-calculator/|MAXDOP Calculator]]
* [[https://sql-ex.ru/blogs/?/Osnovy_Zhurnala_tranzakcij_v_SQL_Server.html|Основы журнала транзакций в SQL Server]]
* [[https://minyurov.com/2016/07/24/mssql-tempdb-opt/|Оптимизация временной БД (tempdb)]]
* [[https://www.tune-it.ru/web/fender/blog/-/blogs/otkazoustojcivost-ms-sql-failover-cluster-ili-alwayson-|Отказоустойчивость MS SQL: Failover Cluster или AlwaysOn?]]
* [[https://sql-ex.ru/blogs/?/Arhitektura_Zhurnala_tranzakcij_SQL_Server.html|Архитектура журнала транзакций SQL Server]]
* [[https://sql-ex.ru/blogs/?/Dannye_monitora_proizvoditelnosti_SQL_Server_vvedenie_i_ispolzovanie.html|Данные монитора производительности SQL Server: введение и использование]]
* [[https://sql-ex.ru/blogs/?/Prisoedinenie_bazy_dannyh_bez_fajla_Zhurnala_tranzakcij.html|Присоединение базы данных без файла журнала транзакций]]
* [[https://kuharbogdan.com/stati-po-1s/pochemu-rastet-log-v-ms-sql/|Почему растет LOG в MS SQL?]]
{{tag>microsoft mssql sql}}