Доступ к отчетам открывается через доменные группы, и админам
DBA постоянно приходится работать и в Active Directory – создавать\удалять группы,
добавлять\удалять пользователей из этих групп и тд. Для работы в AD есть специальные командлеты Quest AD CMDlets, http://wiki.powergui.org/index.php/QAD_cmdlets_reference,
дополнения к PowerShell, которые находятся в свободном доступе http://www.quest.com/powershell/activeroles-server.aspx.
Прикольные настройки SSMS
Ни разу не знал, что тут есть «Registered servers»… может оно и к
лучшему было J
Перенос логинов SQLServer с одного сервера на другой
Перенос
инстансов SQLServer с одного сервера на другой – иногда
это ежедневная работа админов DBA И многое
в этом процессе хочется упростить и автоматизировать,
например перенос логинов.
Настройка Performance Data Collector для мониторинга тяжелых запросов (MS SQL Server 2008)
Для
мониторинга производительности SQL Server одним из полезных
инструментов является Data Collector , который был
введен начиная с 2008
версии. Data Collector позволяет собирать разного рода
информацию о производительности системы из разных источников в единое хранилище
данных. Такими источниками могут быть SQLTrace, счетчики Performance Monitor и т.д. Например, можно ловить долго
выполнявшиеся запросы при помощи SQLTrace и сохранять
эту информацию в БД. Далее для
анализа и наглядного
представления можно строить различные отчеты, например в Reporting Serviсes:
Could not load package "" because of error 0xC0014062. The LoadFromSQLServer method has encountered OLE DB error code 0x80004005 (Login timeout expired).
Несколько раз встречалась ошибка - валилось задание AGENT SQL Server с ошибкой ,
при попытке запустить пакет SSIS package из шага задания-
Could not load package "" because of error 0xC0014062. The LoadFromSQLServer method has encountered OLE DB error code 0x80004005 (Login timeout expired).
На форуме Microsoft в таких случаях советуют запускать пакет несколько раз, ну чтож... будем знать :)
при попытке запустить пакет SSIS package из шага задания-
Could not load package "" because of error 0xC0014062. The LoadFromSQLServer method has encountered OLE DB error code 0x80004005 (Login timeout expired).
На форуме Microsoft в таких случаях советуют запускать пакет несколько раз, ну чтож... будем знать :)
In my case the solution is to configure
a Retry when the job fails :
-Job\Properties\Steps\select Step\Edit\Advanced
-Retry Attempt = 4 (for example)
-Retry Interval (minutes) = 11 (for example)
-Job\Properties\Steps\select Step\Edit\Advanced
-Retry Attempt = 4 (for example)
-Retry Interval (minutes) = 11 (for example)
Как тип данных NCLOB на Oracle корректно преобразовать в VARCHAR
Сегодня при выгрузке таблицы AX_RCONTRACTTABLE из Oracle в MSSQL Server столкнулась со следующей проблемой: не получалось корректно выгрузить поле RCONTRACTSUBJECT с типом данных NCLOB в поле с типом данных VARCHAR(200) .
Решение:
Необходимо преобразовать в тип данных VARCHAR и обрезать до 200 символов
Т.е добавить в запрос к Oracle преобразование следующего вида:
select
CAST(DBMS_LOB.SUBSTR (RCONTRACTSUBJECT, 200, 1) as VARCHAR2(200)) RCONTRACTSUBJECT
from AX9WORK.RContractTable
Тип данных float и MS SQL
Все мы знаем, что тип float является приблизительным числовым типом в SQL, но что бы настолько... Запустите
select cast(1.01 as float)+2.02-3.03и удивитесь: 4,44089209850063E-16. А вот Oracle, напротив, очень точен в своих вычислениях и показывает единственно правильный 0! Осторожнее с вычислениями...
SSAS: как может повлиять MeasureExpression на содержимое группы мер
Ситуация такая. В группе мер ГМ1 есть мера M1 для которой указан MeasureExpression M1=M2*100, где M2 - мера из другой группы мер, назовем её ГM2. То есть мера одной группы мер зависит от меры из другой группы мер. Так вот, если группа мер ГМ2 будет пустой, то и группа мер ГМ1 в кубе окажется пустой. При расчете куба происходит inner join между ГМ1 и ГМ2 по ключам общих измерений.
Решение1:
Предусмотреть наличие в ГМ2 всех ключевых записей из ГМ1 по ключам общих измерений
Решение2:
Выделить меру М1 из группы мер ГM1 в отдельную группу мер. Тогда другие меры из ГМ1 не пострадают
Подсветка синтаксиса кода в блоге
При написании предыдущего поста понадобилось подсветить синтаксис вставленных кусков кода T-SQL. Погуглив, быстро нашел подходящий онлайн-сервис http://highlight.hohli.com/. Возможностей настройки не много, зато он делает свою работу качественно и знает кучу языков:
UPD! Нашел способ лучше - подключил к блогу js-библиотеку. Теперь, что бы блог автоматом подсветил кусок кода, нужно его поместить в тег <pre class="brush: sql"> Код на SQL </pre>.
Пример:
select "Здорова, дивный новый мир!"
Помимо Sql библиотека поддерживает кучу других языков и тем. О том какие и как их подключить здесь: http://alexgorbatchev.com/SyntaxHighlighter/
Учим SQL Server забирать данные с веб-сервисов (REST и SOAP)
Появилась у нас задача забирать данные через SOAP из 1C, а потом и через простой REST из Яндекс-Метрики и Google-Analitycs. Путей решения наметилось три:
- Написать .NET-приложение или скрипт PowerShell/JS/VBS, который бы забирал XML с сервиса, парсил и сохранял в таблицу SQL, либо просто в файл
- Написать CLR-процедуру, которая бы возвращала XML с сервиса
- Обойтись средствами SQL, используя готовую COM-библиотеку MSXML2.ServerXMLHTTP через процедуры sys.sp_OA*
Победил третий вариант, как наиболее гибкий.
В итоге получение данных с REST-вебсервиса через HTTP-GET выглядит так (голый код, без мишуры вроде обработки ошибок и логирования, на примере Яндекс-Метрики http://api.yandex.ru/metrika/):
-- Начальные данные: URL
declare
@OLE int,
@URL nvarchar(max)='http://api-metrika.yandex.ru/counters?oauth_token=05dd3dd84ff948fdae2bc4fb91f13e22'
-- Выполняем запрос с помощью MSXML2.ServerXMLHTTP
exec sys.sp_OACreate 'MSXML2.ServerXMLHTTP',@OLE out
exec sys.sp_OAMethod @OLE,'open',NULL,'GET',@URL,'false'
exec sys.sp_OAMethod @OLE,'send'
-- Получаем данные которые вернул сервер
declare @r table (r nvarchar(max))
insert @r exec sys.sp_OAGetProperty @OLE,'responsetext'
-- Удаляем объект
exec sys.sp_OADestroy @OLE
-- Начальные данные: namespace, URL, заголовок и тело метода
declare @URL nvarchar(max),@Header XML,@Body XML
;with xmlnamespaces (default 'http://www.guru4.net')
select
@URL='http://www.guru4.net/articoli/javascript-soap-client/demo/webservicedemo.asmx',
@Body=(select '' for xml path('HelloWorld'),type)
-- Строим запрос
declare @SOAPAction nvarchar(max),@OLE Int,@Request xml
;with xmlnamespaces ('http://www.w3.org/2001/XMLSchema-instance' as [xsi],'http://www.w3.org/2001/XMLSchema' as [xsd],'http://schemas.xmlsoap.org/soap/envelope/' as [soap])
select
@SOAPAction=@Body.value('namespace-uri(/*[1])','SysName')+'/'+@Body.value('local-name(/*[1])','SysName'),
@Request=(select @Header as [soap:Header],@Body as [soap:Body] for xml path('soap:Envelope'),type)
-- Выполняем запрос с помощью MSXML2.ServerXMLHTTP
exec sys.sp_OACreate 'MSXML2.ServerXMLHTTP',@OLE OUT
exec sys.sp_OAMethod @OLE,'open',NULL,'POST',@URL,'false'
exec sys.sp_OAMethod @OLE,'setRequestHeader',NULL,'Content-Type','text/xml; charset=utf-8'
exec sys.sp_OAMethod @OLE,'setRequestHeader',NULL,'SOAPAction',@SOAPAction
exec sys.sp_OAMethod @OLE,'send',NULL,@Request
-- Результат запроса
declare @r table (r nvarchar(max))
insert @r exec sys.sp_OAGetProperty @OLE,'responsetext'
-- Удаляем объект
exec sys.sp_OADestroy @OLE
Вариант хорош тем, что понятен любому SQL-разработчику и не требует дополнительных знаний .NET
UPD 13/05/2014
Если SOAP-метод веб-сервиса требует параметры, они передаются в запросе:
UPD 16/04/2015
Если на веб-сервисе включена аутентификация (Basic или Integrated Windows), то в методе Open можно передать логин и пароль:
UPD 13/05/2014
Если SOAP-метод веб-сервиса требует параметры, они передаются в запросе:
@Body=(select 'Значение1' as Param1,'Значение2' as Param2 for xml path('HelloWorld'),type)
Важно! Имена параметров чувствительны к региструUPD 16/04/2015
Если на веб-сервисе включена аутентификация (Basic или Integrated Windows), то в методе Open можно передать логин и пароль:
exec sys.sp_OAMethod @OLE,'open',NULL,'POST',@URL,'false','LOGIN','PASSWORD'
