Шпаргалка по типам данных

Обзор типов и их размерностей

DATATYPE
MIN
MAX
STORAGE
NOTES
Bit
0
1
1 to 8 bit columns in the same table requires a total of 1 byte, 9 to 16 bits = 2 bytes, etc...
Decimal
-10^38+1
10^38–1
Precision 1-9 = 5 bytes, precision 10-19 = 9 bytes, precision 20-28 = 13 bytes, precision 29-38 = 17 bytes
The Decimal and the Numeric data type is exactly the same. Precision is the total number of digits. Scale is the number of decimals. For both the minimum is 1 and the maximum is 38.
Numeric
same as Decimal
same as Decimal
same as Decimal
Money
От -922 337 203 685 477,5808 до 
922 337 203 685 477,5807
8 bytes
Smallmoney
От -214 748,3648 
214 748,3647
4 bytes
Float(n)
-1.79E + 308
1.79E + 308
4 bytes when precision is less than 25
8 bytes when precision is 25 through 53
Precision is specified from 1 to 53.
Real
-3.40E + 38
3.40E + 38
4 bytes
Precision is fixed to 7 digits.
Datetime
1753-01-01 00:00:00.000
9999-12-31 23:59:59.997
8 bytes
If you are running SQL Server 2008 or later and need milliseconds precision, use datetime2(3) instead to save 1 byte.
Smalldatetime
1900-01-01 00:00
2079-06-06 23:59
Date
0001-01-01
9999-12-31
3 bytes
Time(n)
00:00:00.0000000
23:59:59.9999999
Presicion 0-2 = 3 bytes
Presicion 3-4 = 4 bytes 
Presicion 5-7 = 5 bytes
Specifying the precision is possible. TIME(3) will have milliseconds precision. TIME(7) is the highest and the default precision. Casting values to a lower precision will round the value.
Datetime2(n)
0001-01-01 00:00:00.0000000
9999-12-31 23:59:59.9999999
Presicion 1-2 = 6 bytes precision 3-4 = 7 bytes precision 5-7 = 8 bytes
Combines the date datatype and the time datatype into one. The precision logic is the same as for the time datatype.
Datetimeoffset(n)
0001-01-01 00:00:00.0000000 -14:00
9999-12-31 23:59:59.9999999 +14:00
Presicion 1-2 = 8 bytes precision 3-4 = 9 bytes precision 5-7 = 10 bytes
Is a datetime2 datatype with the UTC offset appended

  

Собственные типы данных -- домены 
Allocation_Units

Datetime vs Datetime2

http://stackoverflow.com/questions/1334143/sql-server-datetime2-vs-datetime

Decimal vs Numeric

Money vs Decimal vs Float


Nvarchar(max) cautions
http://stackoverflow.com/questions/12639948/sql-nvarchar-and-varchar-limits

Nvarchar(max) vs Nvarchar(255)
http://stackoverflow.com/questions/148398/are-there-any-disadvantages-to-always-using-nvarcharmax
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/4d9c6504-496e-45ba-a7a3-ed5bed731fcc/varcharmax-vs-varchar255?forum=sqlgetstarted


Implicit convertions

Работа с данными

http://msdn.microsoft.com/en-us/library/ff848728.aspx



Функции по просмотру метаданных типов и колонок

SELECT DATALENGTH(@variable)

SELECT

    SQL_VARIANT_PROPERTY(@variable, 'BaseType'),

    SQL_VARIANT_PROPERTY(@variable, 'TotalBytes'),

    SQL_VARIANT_PROPERTY(@variable, 'MaxLength')
;with cte
(
select * from t
)
select * from cte

SQL Server HADR. Failover Clustering

SQL Server Failover Cluster

SQL Server в отказоустойчивом кластере, в своей минимальной конфигурации, представляет из себя 2 ноды с sql server-ом на борту и одно общее файловое хранилище (SAN - Storage Area Network), которое хранит все файлы баз данных. При этом только одна из нод постоянно является активной (active node). Вторая нода (passive node) находится в режиме ожидания и в случае какого-то сбоя на активной ноде берет всё управление на себя. Между нодами обычно настраивают внутреннюю сеть (heartbeat network), которая позволяет определить "жив" ли сосед и в случае чего подменить его на боевом дежурстве. Одним из главных преимуществ отказоустойчивого кластера является инкапсуляция его работы от пользователя, которая осуществляется при помощи наличия единого(виртуального) ip-адреса (единая точка доступа к базе для пользователя) для всего кластера (схема, представленная ниже, взята вот отсюда)
Описывать как настраивается отказоустойчивый SQL Server кластер я не буду - в сети достаточно подобного материала (в конце статьи приведены ссылки). Остановлюсь лишь на ключевых моментах.

Какие редакции SQL Server 2012 поддерживают?

SQL Server 2012 Enterprise - до 16 нод в кластере. Поддерживает multi-subnet кластер.
SQL Server 2012 BI, Standard - до 2 нод в кластере.

Какие редакции Windows поддерживают кластер?

WinServer 2008R2 Enterprise, Datacenter - поддерживают как обычный, так и multi-subnet кластер
WinServer 2008 Enterprise, Datacenter - поддерживают только обычные кластеры

Какие режимы работы поддерживает?

SQL Server Cluster поддерживает только отказоусточивый(failover) кластер, то есть работает в режиме Active-Passive.

Какие службы MS SQL Server можно развернуть в кластере?

Из коробки в кластере работают все сулжбы, кроме SSIS, а именно:

  • Database Engine + SQL Server Agent
  • SSAS
  • SSRS
Для SSIS также можно настроить кластер, но придется немного потрудиться.

Как добавить новую службу MS SQL Server к существующему кластеру?

Пишут, что никак ;)
SQL Server 2008 does not support adding features to an existing failover cluster instance, so Analysis Services cannot be added to an existing instance of SQL Server. To share a resource group with an instance of SQL Server, you must choose to install Analysis Services during the initial installation of SQL Server
Доверяй, но проверяй.
Попробуемсъ. Если выбрать обычный способ установки службы (Add feature to existing server), то на этапе проверки правил инсталяции (Installation rules), возникнет ошибка Rule "Existing clustered or cluster-prepared instance" failed. 
Но не стоит сразу отчаиваться. Попробуем воспользоваться следующей инструкцией.
Для обхода данного правила придётся воспользоваться грязным хаком, отключив это правило при запуске инсталятора:

Setup.exe /SkipRules=StandaloneInstall_HasClusteredOrPreparedInstanceCheck /Action=Install

Что происходит при падении активной ноды?

При падении активной ноды, все клиентские подключения также отваливаются. При этом все незакрытые транзакции откатываются. Кластер автоматически определяет, что активная нода отвалилась и переключает все сервисы(одним из них является сервис MS SQL Server-а) на резервную ноду. Восстановление работы MS SQL Server-а на резервной ноде происходит достаточно быстро (секунды-минуты, в зависимости от объема баз данных и параметров их настройки). То есть, получается, что кластер не обеспечивает 100% uptime.

Включение/исключение нод в/из кластер(а)

Производится при помощи инсталлера MS SQL Server операциями:

  • Installation -- Add node to SQL Server failover cluster
  • Maintenance -- Remive node from SQL Server failover cluster

Для чего нужен кворум?

Кворум - диск в shared storage, необходимый для работы windows-кластера. Называют также общий кворум.

MS SQL Server multi-subnet clustering

Специальный режим кластера, при котором его ноды находятся в разных сетях. Не использует shared storage. При реализации данного кластера необходимо использовать другое решение для репликации данных между серверами, находящимися в различных сетях.

Плюсы кластера

  1. При выходе из строя рабочего сервера с базой данных (могут быть как проблемы с железом, так и проблемы с программным обеспечением), переключение на резервный сервер осуществляется практически моментально. Время простоя минимально.
  2. Кластер оперирует всем sql-cервером, а не отдельными базами данных. Поэтому при переключении на резервную ноду не возникнет, например, проблем с логинами и паролями, а также другими настройками и параметрами, которые хранятся на уровне сервера.
  3. Единый connection string. При переключении базы данных на другую ноду, клиенту не нужно изменять строку подключения -- она едина для всего кластера.

Минусы кластера

  1. Нельзя использовать резервную ноду на чтение (аля реплика на чтение). Фактически вторая нода постоянно простаивает.
  2. Необходима дополнительная серверная лицензия.
  3. Необходим SAN.

Дополнительные материалы:

  1. Подробное описание процесса установки и настройки кластера http://www.sqlcmd.ru/sql_cluster_on_vmware_workstation-part01.html
  2. http://www.brentozar.com/archive/2012/02/introduction-sql-server-clusters/
  3. SQL Server 2012 Failover Cluster Installation
  4. Getting Started with SQL Server 2008 R2 Failover Clustering