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


MS SQL Reporting Services. Статистика выполнения отчетов

В продолжении темы с Reporting Services.
Предыдущие были про обновление Reporting Services и про SSL и с ним связанной ошибки. Теперь, после того как обновили до последней версии наш сервер отчетов, настроили SSL, мы решили провести аудит своих более N -cотен отчетов:

Какие отчеты используются? Как часто и кем? Что вообще не используются?


Получение данной информации не составит труда и база данных Reporting Services уже содержит необходимую информацию для ответов наших вопросов в предоставлении [dbo].[ExecutionLog] которая берет информацию из таблицы [dbo].[ExecutionLogStorage]. Более подробно описано ниже ...
добавлено: 18 июн 18 просмотры: 491, комментарии: 0



Reporting Services. Делаем доверенным сайт отчетов.



После установки Reporting Services на сервер и привязки web ресурса к протоколу SSL, где по умолчанию прописывается сертификат сервера, сайт все еще считается не безопасным и не разрешенным.

Получается вроде сайт безопасный, а браузер говорит нет:


Если сервер отчетов работает только для сотрудников компании, ограниченному числу лиц, то это не проблема, но если сервисом пользуются внешние сотрудники или данные ресурс используется для официальных отчетов, то сервис должен быть оформлен в плане безопасности согласно современным средствам, в том числе и доверительным сертификатом. А иногда просто надоедает предупреждение браузера. Ниже описываю как это делается и решение небольшой проблемы с которой столкнулся ...
добавлено: 07 июн 18 просмотры: 698, комментарии: 0



Ошибка при создания SQL задания… Try again later.


После переноса SQL задания на новый SQL Server получил ошибку при создании и правки SQL задания:

Cannot perform this operation while SQLServerAgent is starting. Try again later.





При том, что сервер работает уже давно, а создать новое задание не дает.
Смотрим журналы SQl агента, видим ошибки:

[191] Warning [4]: Possible date calculation spin for Schedule 38
Date                      16.05.2018 13:22:08
Log                        SQL Server Agent (Archive #1 - 16.05.2018 13:22:00)
Message
[192] Date calculation spin detected for Schedule 38

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

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



Решения: меняем время активации данных заданий на текущую дату. 

Проблема в том, что SQL «просто не может рассчитать время запуска» с момента старта распиcания.
Как такое может быть - SQL расписание переносится в процессе миграций с SQL заданиями, при обновлениях SQL версий и т.к. Даже выше у меня есть расписание, созданное в 2008 году, т.е более 10 лет, и если бы оно еще запускалось каждые 10 секунд, то была бы выше указанная проблема.
Эти расписания можно получить  так же запросом:

use msdb

select name , active_start_date,date_created,* from dbo.sysschedules order by 2


После того как исправил дату , все рассчиталось и проблема исчезла.

добавлено: 27 май 18 просмотры: 804, комментарии: 0



BACKUP –да знаем, BUFFERCOUNT- нет, не знаем.


Операцию резервного копирования знает каждый администратор и разработчик.
Кто-то делает это через графический интерфейс, кто-то через команду BACKUP DATABASE.  Если база данных небольшая, то команда backup происходит довольно быстро и каких либо проблем не создает, но если база данных уже более 500 Гб, то создание резервной копии может создавать проблемы и создание резервной копии будет занимать уже достаточное время, еще хуже будет если размер базы данных будет 1Тб-ы, а то и 10-100- и терабайт, тогда уже необходимо думать над оптимизацией команды резервного копирования.


Мы не будем заострять внимание на схеме резервного копирования, а остановимся на некоторых дополнительных параметрах резервного копирования. Мало кто использует дополнительные параметры в команде. Полное описание параметров команды BACKUP DATABASE есть на сайте MS.

Среди этих параметров есть параметры:
  BUFFERCOUNT = { buffercount | @buffercount_variable }  
  MAXTRANSFERSIZE = { maxtransfersize | @maxtransfersize_variable } 

Их описание:

BUFFERCOUNT = { buffercount | @buffercount_variable }
Указывает общее число буферов ввода-вывода, которые будут использоваться для операции резервного копирования. Можно указать любое целое положительное значение, однако большое число буферов может вызвать ошибку нехватки памяти из-за чрезмерного виртуального адресного пространства в процессе Sqlservr.exe.

MAXTRANSFERSIZE = &#...
читать дальше...
добавлено: 12 май 18 просмотры: 1102, комментарии: 0



Обновление MS SQL Server Reporting Services 2014 до 2017



Имеем сервер отчетов на основе MS SQL Server2014, более 100 отчетов, столько же DataSet-ов, 10-к каталогов отчетов с разделенными правами, плюс два десятка строк подключений, где прописаны строки подключения с паролями. База данных Reporting Services так же хранится локально на MS SQL Server2014. Время идет и текущий сервер необходимо обновлять до версии 2017. В данной статье опишу шаги, которые позволяют обновить SQL Reporting Services.


Итак, первое самое главное при начале любых работ по изменению конфигураций, это наличие резервных копий, в нашем случае это баз данных Reporting Services, по умолчанию базы данных
[ReportServer]
[ReportServerTempDB]
и ключ шифрования. Создать резервную копию ключа шифрования можно в разделе «Encryption Keys» приложения «Reporting Services Configuration Manager»

При создании, укажите пароль, который понадобится при восстановлении.

После этого нам необходимо, обновить СУБД SQL Server и службу Reporting Services, либо мы можем все удалить и поставить чистый экземпляр SQL Server и Reporting Services. Для уменьшения простоя недоступности, мы обновим SQL Server поверх, выбрав в установщике MS SQL Server2017 обновлений MS SQL Server до версии 2017. Во время выбора параметров, установщик вам сообщит, что для обновления MS SQL Reporting Services текущий экземпляр нужно удалить, а для установки версии 2017 Reporting Services нужно отдельно скачать и установить данное приложение:



Так и делаем, обновляем SQL Server и удаляем службу MS SQL Reporting Services. ...
читать дальше...
добавлено: 01 май 18 просмотры: 1144, комментарии: 0



Что нам скажет 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 просмотры: 3552, комментарии: 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 просмотры: 4108, комментарии: 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 просмотры: 2048, комментарии: 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 просмотры: 3143, комментарии: 2



DBCC CLONEDATABASE


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

DBCC CLONEDATABASE

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

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


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

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

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