Работа с Web-службами через CLR

by Alexey Knyazev 14. января 2010 00:32

Веб-служба, веб-сервис (англ. web service) — программная система, идентифицируемая строкой URI, чьи общедоступные интерфейсы определены на языке XML. Описание этой программной системы может быть найдено другими программными системами, которые могут взаимодействовать с ней согласно этому описанию посредством сообщений, основанных на XML, и передаваемых с помощью интернет-протоколов. Веб-служба является единицей модульности при использовании сервисно-ориентированной архитектуры приложения.


Для демонстрации работы с Web-службами из SQL Server`a, я воспользовался открытым Web-сервисом Центрального банка Российской Федерации, этот сервис привлекателен тем, что информация всегда актуальна, т.к. обновляется с завидной регулярностью и может быть полезна в реальных проектах.


Адрес Веб-сервиса: http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL.

[Ещё]

Tags: , , , , ,

SQL Server

Join Hints

by Alexey Knyazev 4. декабря 2009 23:36

Join Hints (LOOP | HASH | MERGE | REMOTE) - Подсказки оптимизатору запросов на выбор определенной стратегии соединения двух таблиц (используется в SELECT, UPDATE и DELETE).


Оптимизатор запросов SQL Server обычно автоматически выбирает наилучший план выполнения запроса. Поэтому подсказки, в том числе <подсказки_по_соединению>, рекомендуется использовать только опытным пользователям и администраторам базы данных в случае крайней необходимости.


Без явного указания аргумента (LOOP | HASH | MERGE | REMOTE) оптимизатор выбирает, на его взгляд, самый оптимальный план. Но мы всегда можем повлиять на него, если явно укажем подсказку.


Ниже разберем каждый из аргументов подробнее.

[Ещё]

Tags: ,

SQL Server

Job Activity Monitor (PоSh)

by Alexey Knyazev 12. ноября 2009 22:59

Продолжая тему скриптов на PowerShell в помощь администраторам БД, предлагаю вариант Job Activity Monitor(Журнал выполнения заданий) на PowerShell.


Так как задания SQL Server Agent чаще всего выполняются по расписанию, то, скорее всего, вам потребуется просматривать историю их выполнения, например для того, чтобы убедиться, что они выполняются успешно и каких-либо проблем не возникает.


Год назад я публиковал вариант в виде Windows-приложения (http://www.itcommunity.ru/blogs/mssql/archive/2008/12/04/40235.aspx), теперь более лёгкий и гибкий скрипт.

[Ещё]

Tags: , , ,

PowerShell | SQL Server

Мониторинг блокировок на PowerShell

by Alexey Knyazev 10. ноября 2009 22:54

Блокирование (LOCK) Каждая транзакция запрашивает блокировку разных типов ресурсов, например строк, страниц или таблиц, от которых эта транзакция зависит.


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


Блокировки (особенно взаимоблокировки) - головная боль любого администратора, для их отслеживания написано не мало инструментов, в качестве примера работы с PowerShell предлагаю свой вариант утилиты для мониторинга блокировок.

[Ещё]

Tags: , , ,

PowerShell | SQL Server

Брутфорсим УЗ в SQL Server

by Alexey Knyazev 21. октября 2009 22:00

Полный перебор (или метод «грубой силы» от англ. brute force) — метод решения задачи путем перебора всех возможных вариантов. Сложность полного перебора зависит от количества всех возможных решений задачи.


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


Допустим у вас на сервере БД есть учётная запись (записи) с SQL-авторизацией и вам необходимо востановить её пароль, например вы забыли пароль SA, а другой УЗ с правами sysadmin-НЕТ. Либо нельзя, по каким либо причинам, менять пароль у УЗ, а доступ к данным под этим логином необходим. На этот случай предлагаю способ "грубой силы".

[Ещё]

Tags: ,

SQL Server

Перекрестные запросы в Т-SQL

by Alexey Knyazev 20. октября 2009 22:15

Перекрестные запросы (Crosstab Query) являются еще одной специфической разновидностью запросов на выборку. Предназначены они для более глубокого анализа информации, хранящейся в таблицах.


Ключевым словом SQL-оператора перекрестного запроса, задающим его тип, является слово TRANSFORM (преобразовать). Это подразумевает, что значения одного из столбцов (полей) выборки, будут преобразованы в названия столбцов итоговой выборки.


Результаты перекрестного запроса группируются по двум наборам данных, один из которых расположен в левом столбце (столбцах) таблицы, а второй — в верхней строке. В остальном пространстве таблицы отображаются результаты статистических расчетов (Sum, Count и т.д.), выполненных над данными трансформированного поля.

[Ещё]

Tags: ,

SQL Server

Снимок УЗ в SQL Server

by Alexey Knyazev 18. октября 2009 21:47

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


Для этого случая я навоял небольшой скрипт, думаю он будет многим полезен, так как ещё одно его применение-это перенос УЗ между серверами БД.


За основу взял скрипт от microsoft (http://support.microsoft.com/kb/918992/ru), добавил помимо переноса логинов ещё и перенос серверных ролей+создание юзеров со всеми правами на базы.

[Ещё]

Tags: , , , ,

SQL Server

Чистим сервер БД от учёток отключенных в AD (ADSI)

by Alexey Knyazev 24. сентября 2009 21:11


Совсем недавно я описывал способ, как удалить отлюченные учётки с сервера БД с помощью PowerShell.


Теперь покажу способ, как получить доступ к АД средствами самого SQL Server`a через ADSI (Active Directory Service Interfaces), протокол LDAP (Lightweight Directory Access Protocol).

[Ещё]

Tags: ,

SQL Server

Обнулить время

by Alexey Knyazev 20. июля 2009 20:57

«Как получить текущую дату, без учёта времени?»


Вариантов много, но хотелось бы их собрать все вместе:


1) Самый известный и документированный способ – это конвертация даты в строку в нужном формате и обратно в дату:


SELECT CONVERT(DATETIME, CONVERT(VARCHAR, GETDATE(), 112))

2) Второй способ – это использование функций даты и времени (dateadd, datediff):


SELECT DATEADD(d, DATEDIFF(d, 0, GETDATE()), 0)

3) Третий способ – это конвертация даты в тип float и использование математической функции floor, которая возвращает наибольшее целое число, меньшее или равное указанному числовому выражению или математическую функцию round:


SELECT CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, GETDATE())))

SELECT CONVERT(DATETIME, ROUND(CONVERT(FLOAT, GETDATE()), 0, 1))

4) Четвёртый способ отталкивается от особенностей типа datetime.


Выдержка из русскоязычного BOL:


Значения типа datetime хранятся в виде 4-байтовых целых чисел. Первые четыре байта содержат количество дней до или после даты отсчета: 1 января 1900 года. Дата отсчета является системной датой. Вторые четыре байта содержат текущее значение времени, представленного в виде трехсотых долей секунды, прошедших после полуночи.


SELECT CAST(CAST(CAST(CAST(GETDATE() as BINARY(8)) as BINARY(4)) as BINARY(8)) as DATETIME)

5) Пятый способ – это синтаксис OLE DB/ODBC, который SQL Server отлично понимает:


SELECT CONVERT(DATETIME, {fn CURDATE()})

SELECT CONVERT(DATETIME, {fn CURRENT_DATE()})

6) Тип данных date, новый тип данных, который появится в MS SQL Server 2008, сохраняет дату без компонента времени. Диапазон – от 1 января 0001 года до 31 декабря 9999 года (от 0001-01-01 до 9999-12-31). Каждая переменная даты требует трех байтов для хранения и имеет точность в 10 цифр. Точность типа данных ограничена отдельным днем.

[Ещё]

Tags: ,

SQL Server

Разбиваем строки нa слoва

by Alexey Knyazev 25. июня 2009 20:41
Из строк с набором слов вырезаем все слова и сохраняем их в отдельном поле таблицы, длина строк не имеет значения [Ещё]

Tags: ,

SQL Server