MS SQL Server- по простому.


Что нам скажет SQL Server ERRORLOG?!


Что такое ERRORLOG?! Некоторые специалисты, которые сопровождают MS SQL Server первый раз слышат о нем или не подозревают, что он есть.
ERRORLOG – это журнал MS SQL Server, физически это текстовый файл. По умолчанию он находится в каталоге установке SQL Server в папке Log, к примеру, в «C:\Program Files\Microsoft SQL Server\ MSSQL13.SQL2016\ MSSQL\Log». В нем регистрируются как информационные сообщения, ошибки различной серьезности, пользовательские ошибки информация по dump-ам sql server и другая полезная инфомарция, хотя бывает и не очень полезная.


Журнал создается каждый раз при запуске службы SQL Server, количество их регулируется настройками в SQL Server, желательно указывать 10 или более на важных системах, т.к при установке обновлений, проблемах при нескольких попытках старта SQL Server, они перезаписываются и в итоге вы можете потерять важную информацию при диагностике сервера.
Даже при установке обновлений SQL Server, происходит несколько рестартов служб, что так же создает новый журнал.
В данный журнал записывается информация как об ошибках работы сервера, информация о sql дампах, безопасности, так и информация информационного характера.
Журналы можно просмотреть несколькими способами:
1.    
   Через SQL Server Management Studio, вкладка Management -> SQL Server Logs, дважды щелкнув на нужный файл.
2.       Открыть текстовым любым текстовым редактором из каталог Log.

Текущий всегда будет без ...
читать дальше...
добавлено: 30 июн 17 просмотры: 1846, комментарии: 0



In-Memory tables. Таблицы в памяти - просто.


Начиная с MS SQL Server 2014 Microsoft предоставила к использованию технологию таблиц In-Memory, в 2016 данная технология получила продолжения и улучшения. Технология подразумевает, что определяется таблица, которая оптимизирована для нахождения в памяти сервера, что позволяет повысить производительность обработки данных в данной таблице, за счет быстроты работы данных в памяти и исключения задержек, связанные с вводом\выводом (хотя здесь есть свои нюансы). Постараюсь описать все нюансы и возможности в одной статье, чтобы не искать по разным страницам msdn, немного много, но зато все в одном.


Итак, требования
Чтобы вы могли в MS SQL Server использовать In-Memory таблицы, то должны проверить следующие требования:
-  64 – разрядный MS SQL Server 2014и выше редакции Enterprise, Developer или Evaluation
- достаточное объем самой оперативной памяти для данных и версионности строк, так же это зависит о нагрузки на использования таблиц в памяти
- Необходимо включить быструю инициализацию файлов, т.е предоставить учетной записи MS SQL Server право на «Perform volume maintenance tasks» в локальных политиках сервера. Это требования желательное, в противном случае может сыграть отрицательно на производительность.

Немного теории.

Основным хранилищем для таблиц In-Memory является основная память, т.е вся память находится в памяти. Строки записываются и считываются только из памяти. Для отказоустойчивости данный таблиц дублируются на диск, но можно настроить, чтобы таблица была только в пам...
читать дальше...
добавлено: 05 дек 16 просмотры: 2472, комментарии: 0



Настройка репликации из MS SQL Server в DB2

Недавно была задача настроить MS SQL Server репликацию на сервер IBM DB2 AS/400, задача получилась непростая и интересная. В процессе настройки репликации было много проблем, описание которых в Интернете было довольно мало. Ниже постараюсь описать проблемы и шаги настройки данной репликации:

Настройку репликации можно разделить на несколько шагов:
1)  Установка драйвера провайдера Microsoft OLE DB Provider for DB2
2)  Настройки на стороне DB2  
3) Получить строку подключения к DB2 AS/400
4) Настройка самой репликации и ее проверка


Имеем:
1) Сервер MS SQL Server 2014 12.0.5000.0 Enterprise Edition
2) Таблицу для репликации с первичным ключом

3) Подписчик в виде сервера IBM DB2 AS/400

Начинаем:

1)      Скачиваем и устанавливаем драйвера DB2OLEDB

К сожалению, найти их в Интернет была проблем, ссылка в поиске вела на сайт Microsoft https://www.microsoft.com/en-us/download/details.aspx?id=29100но там была документации по ним, да и многие ссылки в msdn-е были битые и вели на несуществующие страницы. Драйвера я нашел у себя на сервере, когда –то давно скаченные. Если найдете где они сейчас, сообщите, укажу адрес.
У меня они были версии V3.0
Установка простая, ничего сложного.
После установки имеем кроме провайдера в MS SQL Server, еще и приложение Data Access Tool, которое нам очень пригодится.

2)      Настройки на стороне DB2  

Тут работы администраторы DB2 AS/400, что он ...
читать дальше...
добавлено: 29 ноя 16 просмотры: 1469, комментарии: 0



Есть AlwaysOn. Есть причина перейти на MS SQL Server 2016

AlwaysОn,  пришедшая в MS  SQL Server с версии 2012, очень хорошая технология,  которая позволяет реализовать высокую доступность баз данных, а так же позволяет частично реализовать балансировку запросов к СУБД, правда только запросов на чтение, но и это уже хорошо.
По сравнению с кластеризацией MS SQL Server технология AlwaysOn имеет плюсы, но и имеет минусы. Не будем описывать их, часть описана в прошлой статье., а рассмотрим один из недостатков AlwaysOn.


Пойдем далее, администраторы настроили AlwaysOn и думают, что все будет хорошо при проблемах. Но нужно понимать, при каких проблемах будет все хорошо, а при некоторых проблемах – вы не узнаете, что у вас есть проблемы с доступностью ваших данных и необходимо вмешательство администратора.

Итак, простой, пример:
Имеем Microsoft SQL Server 2014 (SP2) 12.0.5000 в конфигурации AlwaysOn с двумя узлами. Настроен автоматический Failover.

selectreplica_server_name ,failover_mode_desc 
from sys.availability_replicas
where group_id=(select group_id from sys.availability_groups wherename='Group_3')

select t2.replica_server_name,role_desc,synchronization_health_desc  from
sys.dm_hadr_availability_replica_states t1
inner join sys.availability_replicas t2 ont1.replica_id =t2.replica_id
where t1.group_id =(select group_id from sys.availability_groups where name='Group_3')


Есть база данных, файлы которой расположены на диске E:\, к примеру, статус в рабочем состоянии должен быть ONLINE

select name,state_desc from sys.datab...
читать дальше...
добавлено: 29 сен 16 просмотры: 2385, комментарии: 2



DBCC CLONEDATABASE


В MS SQL Server2014 после выхода SP2 появилась новая команда DBCC, команда

DBCC CLONEDATABASE

Данная команда создает новую базу данных с содержанием схему всех объектов и статистики исходной базы данных.
Более подробно это описано в kb 3177838.
Там же описано более подробное назначение данной команды:
«Команда поддержки Майкрософт может вас попросить создать клон вашей базы данных данной команды для исследования проблемы производительности связанная с оптимизатором запросов.»
И там же примечание: что созданную данной командой базу данных не использовать как продукционную базу данных, а использовать для диагностических целей.

Что делает данная команда по шагам:


- создает новую базу данных согласно базе данных model(размер файлов и их приращение)
- создает внутренний моментальный снимок исходной базы данных
- копируется системные и пользовательские объекты из исходной базы данных в новую базу данных
- Копирует данные статистики из исходной базы данных без самих данных в базе (в документации указана статистика индексов, но на самом деле всю статистику в базе).

Для последнего пункта скорее всего и создавалась данная команда, скопировать статистику в базе без самих данных в базе данных и уже по этой статистике анализировать поведение проблемных запросов.

Вообще, я думаю, причиной создания данной команды, наверно, стало много обращений в поддержку Майкрософт, почему запрос выполнялся хорошо, а потом плохо, а для объяснения и проверки поведения оптимизатора запросов не хватало информации по с...
читать дальше...
добавлено: 26 июл 16 просмотры: 1967, комментарии: 0



Обновление MS SQL Server в режиме AlwaysOn до новой версии MSSQL.


   Пришлось обновлять MS SQL Server 2012 до версии 2014, при этом MS SQL Server работало в режиме AlwaysOn. Сложного ничего нет, но есть несколько моментов, которые нужно учитывать при работе и обновлении. Главное, это конечно предварительное тщательное тестирование.


Итак, имеем двух узловой кластер с установленным MS SQL Server 2012 Enterprise Edition Sp2, необходимо обновить до MS SQL Server 2014 Sp1 Cu1.

Подготовительные работы:
  1.        Тестирование
  2.        Еще раз тестирование
  3.        Создание резервных копий системных баз данных (master, msdb)
  4.        Еще раз проверяем наличие всех копий баз данных.

Далее на переводим AlwaysOn в режим асинхронный.

Обновляем вторичную реплику AlwaysOn до 2014 версии, ставим SP и последние CU.

После этого переводим AlwaysOn в синхронный режим, в этом момент синхронизация проходит, но вторичная реплика(так которую мы обновили не доступна для чтения),

Создаем копии бд и делаем Failover.

Активный узел AlwaysOn у нас стал на MS SQL Server2014 и уже в этот момент синхронизация данных на вторичный узел не происходит (режим Suspend у баз данных), т.к там еще младшая версия ms sql server.

После этого проводим тестирование вашего приложения на узле MS SQL Server2014, проверяем журналы SQL Server на отсутствие ошибок.
Надо понимать, что на этот момент мы можем либо откатиться на данные до начала работ(восстановление из копий), либо на момент Failover на SQL2014. Необходимо буд...
читать дальше...
добавлено: 01 апр 16 просмотры: 1711, комментарии: 0



Еще одна ошибка сборщика данных (Data Collector-а).

Эта ошибка применима для MS SQL Server 2012, и тянется с SP2 CU6, после установки CU6 на CU5 SP2, перестает работать сбор данных Query Statistics. Помнится, мы даже кейс в Майкрософте открывали, но решения они не предоставили, сообщив, что это текущий баг, предложив вариант решения, который мы уже на тот момент сделали. Я бы забыл про него, так как уже вышел SP3 для MS SQL Server, но тут снова эта ошибка повторилась после установки SP3 на MS SQL Server2012.


Итак, после установки SP3 на MS SQL Server 2012 перестает работать сбор данных Query Statistics, при этом в журнале ошибки:
«SSIS Error Code DTS_E_PRIMEOUTPUTFAILED.  The PrimeOutput method on ODS - Get snapshot of dm_exec_requests returned error code 0xC020902A.  The component returned a failure code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing.  There may be error messages posted before this with more information about the failure.»«"RFS - Read current cache with dm_exec_requests" failed validation and returned validation status "VS_NEEDSNEWMETADATA".»
Решение, как и в прошлый раз, скопировать пакеты с другого сервера с версией до обновления.

Для начала, я скопировал пакет с MS SQL Server 2012 SP2 CU5, но ошибка осталась, затем проверил работу на тестовом сервере, где версия была SP3 CU1, там сборщик данных работал, поэтому решил скопировать пакеты с данного сервера. Так что возможно вам дос...
читать дальше...
добавлено: 26 фев 16 просмотры: 1666, комментарии: 1



Приятные «плюшки» при установке MS SQL 2016

В новой версии, кроме новых возможностей в части Database Engine, есть приятные графические плюшки, одни из них получаем при установке MS SQL Server.

Итак, при установке MS SQL Server 2016 редакции (в предыдущей редакции они были не так представлены)
Microsoft SQL Server 2016 (CTP3.1) - 13.0.801.12 (X64 )

Мы получаем:
1    1)      Во вкладке указания учетных записей служб MS SQL Server, есть возможность сразу предоставить права «Perform Volume Maintenance» для учетных записей.

Мелочь, а приятная штука. Что это за права и на что она влияет, можно почитать по данной теме либо здесьлибо погуглив по теме «perform volume maintenance tasks sql server».
А так же стоит проверить, что у вас стоит на ваших серверах, только нужно понимать для чего это и если на ваши сервера настроена политика полной безопасности, то включать наверно вам это не надо.

2)      И очень приятная плюшка по настройке MS SQL Server, это связанная с настройкой базы данных Tempdb.  


MS SQL Server сам определяет сколько ядер на сервере и ставит соответствующее количество файлов. У меня на виртуальной машине было 2 ядра, поэтому выставилось два файла. В этой же вкладке можно сразу выставить расположение файлов баз данных TempDB, их размер и приращения.

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

Больше плюшек при установке не заметил, если есть еще что-то, то ... это хорошо.

Так же хотелось, чтобы была во...
читать дальше...
добавлено: 18 дек 15 просмотры: 2683, комментарии: 1



Скрипт обновления статистики в базе данных с условием

В отличие от стандартного блока Maintance Plan-а, где статистика обновляется не смотря на дату последнего обновления, ниже приводится скрипт обновления статистики в базе данных с условием последней даты обновления статистики.

Сам скрипт:
 
-- запрос обновления статистики таблицы по дате последнего обновления
---1 получаем список имен статистики для обновления и записываем во временную таблицу

declare @dtas datetime
set @dt= getdate()-01 -- дата, меньше которой будем обновлять


begin try

      select o.name as [objname],s.name as [shname],o.object_id,st.name as     [stname]

      into #t_stat

    from sys.stats st

        inner join  sys.objects o  on st.object_id=o.object_id

        inner join   sys.schemas  s on o.schema_id=s.schema_id

      where o.type='U'

      --and STATS_DATE(st.object_id, st.stats_id)  <@dt    --фильтр по дате

      --and o.name='dbservers'                             --фильтра по обеъкту

end try

begin catch
      print (cast(error_number() as nchar(5))+'_'+ ERROR_MESSAGE())
      drop tab...
читать дальше...
добавлено: 24 ноя 15 просмотры: 1670, комментарии: 0



Скриптование всех пользователей, ролей БД и их прав

Часто необходимо заскриптовать пользователей базы данных, а затем их снова накатить либо на новой базе данных , либо на старой, к примеру такое часто необходимо при восстанвление тестовой среды.
Ниже приводится скрипт скриптует пользователей и их права:



--1 создание таблицы для логинов
print 'Создание таблиц для хранения учетных записей и их прав'
IF NOT EXISTS (SELECT * FROM tempdb.sys.objects
              WHERE object_id = OBJECT_ID(N'tempdb.[dbo].[logins]') AND type in (N'U'))
begin
      create table tempdb.dbo.logins
      ( a varchar(2048),
       l int)
end
else
begin 
 truncate table tempdb.dbo.Logins
end

IF NOT EXISTS (SELECT * FROM tempdb.sys.objects
              WHERE object_id = OBJECT_ID(N'tempdb.[dbo].[loginsscripts]') AND type in (N'U'))
begin
      create table tempdb.dbo.loginsscripts
      ( a varchar(2048))
end
else
begin 
 truncate table tempdb.dbo.[loginsscripts]
end
print 'Конец Создание таблиц для хранения учетных записей и их прав'

--2 создание процедур скриптования 
print 'Создание процедур для скриптования логинов '
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[USERGRANT]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE P...
читать дальше...
добавлено: 22 ноя 15 просмотры: 1965, комментарии: 0