Teamcity и Mssql dbproject без установки Visual Studio

Возникла необходимость на build сервере с Teamcity собирать DBProject. Если у вас нет желания устанавливать Visual Studio и SSDT Tools для сборки, то ниже будет решение. Данное решение позволит установить все необходимое для сборки на все агенты.

Итак, сначала просто скачайте через nuget последнюю версию тулзов. Сделать это можно даже не локальном компьютере, не обязательно это делать на build сервере.

Следущим шагом запакуем скачанный каталог Microsoft.data.tools.msbuild в zip архив и раскидаем по агентам Teamcity. Для этого в панели управления Teamcity переходим в Administration -> Tools и под Zip Archive жмем Install. Выбираем наш архив и дождемся заливки на все нужные агенты.


Теперь подключаемся к серверу по RDP (ну или через консоль) и добавим 2 параметра в переменные System Variables:

  • SQLDBExtensionsRefPath
  • SSDTPath

Оба значения выставить в C:\BuildAgent\tools\Microsoft.Data.Tools.Msbuild\Microsoft.Data.Tools.Msbuild\lib\net46. Естественно, если у вас агенты установлены по другому пути, то нужно выставить правильный путь.

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

 

 

Пишем логи IIS в MSSQL

Цель: организовать хранилище логов IIS под управлением MSSQL.

Условия:

  • Для удобного поиска (SELECT’а) по времени значение date и time должны храниться в одном поле
  • Каждая запись должна иметь уникальный ключ
  • При переносе логов в MSSQL должен использоваться BULK insert.
  • Вставка логов производится за предыдущий день.

Сразу оговорюсь, что напрямую писать логи в MSSQL не используя сторонний софт не получится. Поэтому я написал небольшую консольную программу IIS2SQL, которая удаляет из файла лога закомментированные строки и форматирует поля date и time в одно поле для дальнейшей bulk-вставки. У Microsoft есть аналогичная программа preplog, но она только удаляет закомментированные строки.

Итак, давайте для начала включим логирование в формате W3C. Я включу логирование для всех своих сайтов. В настройках вы можете указать необходимые поля для логирования.

Теперь необходимо создать необходимую базу и таблицу. Если вы уже гуглили данный вопрос, то обратили внимание, что в сети есть куча руководств и структура таблиц в них может отличаться. Поэтому мы будем делать свою таблицу на основании логов которые нам отдает IIS. Открываем любым текстовым редактором (лучше блокнот не использовать,т.к. велика вероятность что он зависнет) файл логов и смотрим на 3 строку. В ней мы и найдем заголовки полей, которые нам необходимо будет создать.

В моем случае это #Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken. Не забывайте, что одно из условий было объединение полей date и time, поэтому создадим соотвествующую табличку. Обратите внимание на то, что я в таблицу добавил автоинкрементное поле Id.

Проблема в том, что если формат лога не соответствует вашей таблице, то BULK-insert из файла не получится. Поэтому вставку в таблицу мы будем делать во View. Создадим новый View для этой БД, исключив поле Id.

Теперь вернемся к программе, которую я написал. Скачайте IIS2SQL и распакуйте в любой удобный каталог на сервере MSSQL. Если один сервер для MSSQL и IIS, то можно сразу запустить программу и поместить в планировщик заданий. А если нет, то вам надо будет каким то образом логи передать на сервер MSSQL. Напрямую с сервера IIS BULK сделать не получится. На сервере IIS создайте пользователя и расшарьте каталог с логами. А на сервере MSSQL напишем скрипт и поместим его выполнение в планировщик. Чтобы сервер сильно не нагружать, лучше настроить выполнение ночью.

Параметры для запуска IIS2SQL:

Вот сам скрипт:

Вот в принципе и все! Удачи!

Шпаргалка по deadlock в MSSQL

Включить трассировку

-1 = сбор информации изо всех сессий.

Проверить трассировку

или

логи о дедлоках будут писаться в errorlog сервера

Рекомендации:

1.Перед включением трассировки настроить сохранение логов сервера, скажем, не 6, а 24 и более. Это делается в EM, Management / SQL Server logs / Right mouse click / Configure / [X] Limit… Maximem number of поставить, скажем, в 30.

2.Настроить на планировщике ежедневный вызов sp_cycle_errorlog — эта процедура вызывает сброс текущего лога.

После того, как будут пойманы 1 — 2 — 3 дедлока выключить трассировку:

Вот краткий перечень флагов, которые могут пригодиться при отлове взаимоблокировок:

  • 1204 – сбор расширенной информации о взаимоблокировке.
  • 3605 – выдача информации в EventLog.
  • 3406 – выдача информации в файл errorlog.
  • 1206 – сбор информации не только о блокировках, участвующих во тупиковой ситуации (что делает флаг 1204), но и об остальных блокировках, наложенных заблокированными транзакциями.
  • 1200 – сбор информации о порядке наложения блокировок (недокументированный).

Сейчас нас интересует флаг под номером 1204 – выдача расширенной информации о взаимоблокировке, получить же информацию при выставленном флаге можно двумя способами.

1. Запустить SQL Profiler, специальную программу для отслеживания работы сервера, и настроить в ней перехват ошибок (event class Errors and Warnings: Exception and Error Log), а затем выставить флаг трассировки 3605. В этом случае вся дополнительная информация о работе SQL-сервера будет сбрасываться в Event Log и перехватываться профайлером, где ее в последствии можно будет посмотреть.
2. Выставить флаг отладки 3406. В этом случае вся дополнительная информация будет сбрасываться в файл errorlog, который по умолчанию находится в каталоге LOG директории SQL сервера.

PAG: 7:1:845557
DBCC PAGE ({dbid | dbname}, filenum, pagenum[, printopt]) в результатах вывода которой можно увидеть object_id (а по нему уже и мя объекта получить)

Полезные ссылки

http://www.sql.ru/articles/mssql/2007/011005DeadlockTroubleshootingPart1.shtml
http://rsdn.ru/article/db/deadlocks.xml

Сборки Microsoft SQL Server

Понадобилось мне недавно обновить SQL Server до определенной версии для того, чтобы бэкапы подошли. В противном случае если файл bak сделан в одной, например, как в моем случае 10.00.2573, а файл надо восстановить на другой — 10.00.1600, то при восстановлении вы получите ошибку в которой сообщается об этом.

Встает вопрос как же найти нужную версию? Погуглив немного на эту тему я нашел замечательный ресурс http://sqlserverbuilds.blogspot.ru/, где можно найти нужную версию и посмотреть через какой SP или патч можно получить необходимый результат.

Мне нужно было поставить SP1 на MS SQL 2008 и накатить обновление KB2494096