Начиная с SQL 2005, анонимный доступ к SSRS перестал быть поддерживаемой опцией и предоставление его является задачей нетривиальной и небезопасной. Различные ресурсы (например, этот https://blogs.msdn.microsoft.com/jameswu/2008/07/15/anonymous-access-in-sql-rs-2008/ ) описывают модификацию SSRS инстанса с целью выключить любую аутентификацию, кроме анонимной (включая компиляцию собственного authentication extension), однако это, во первых, оверкилл, а во вторых - предоставит доступ ко всем вашим репортам, а не только, например, к определенной папке.
Однако, легкий способ сделать это - написать простой reverse proxy server, который бы принимал анонимные запросы и транслировал бы их в SSRS. Этот прокси вполне можно развернуть на том же сервере, что SSIS и гибко настроить его для предоставления доступа к строго определенной папке.
Как это сделать?
1. Скомпилировать прокси сервер и развернуть его на том же сервере, что и SSRS, например в папку Default Web Site/SSRSANON;
2. Поменять web.config под ваши нужды;
2. Настроить Application Pool для этого приложения: он должен быть не менее версии 4.0, classic и ApplicationPoolIdentity = аккаунт, который имеет доступ к папке с репортами;
3. Обратиться к репорту, используя URL типа http://YourReportServer/Report=MyReport,par1=val1,par2=val2..../
Прокси-сервер основан на коде, описанном в этой статье:
https://www.codeproject.com/Articles/7135/Simple-HTTP-Reverse-Proxy-with-ASP-NET-and-IIS#_comments
Показаны сообщения с ярлыком MS SQL. Показать все сообщения
Показаны сообщения с ярлыком MS SQL. Показать все сообщения
четверг, 7 июня 2018 г.
четверг, 8 июня 2017 г.
Danger of copying SSIS script components. Об опасности копирования SSIS script components.
Будьте внимательны каждый раз, когда вы копируете SSIS Script components из одного Data flow task в другой. Assembly names для таких компонентов остаются теми же самыми, что производит весьма интересные и неожиданные эффекты, подобные описанным тут:
https://kohera.be/blog/sql-server/the-dangers-of-copying-script-components-in-ssis/
В этой же статье предлагается способ решения: скопировать этот компонент в совершенно новый SSIS package, а затем скопировать его обратно, однако, начиная с SSDT 2008 этот способ не работает, оба компонента всё равно будут иметь те же самые Assembly names.
Решение: если неохота создавать компонент с нуля, заново прописывая inputs, outputs и код, можно поредактировать напрямую XML, однако, конечно, не оригинальный package. Создайте новый пустой package, внутри пустой Data flow task, туда скопируйте компонент, у которого надо поменять имя и откройте весь файл в XML. Дальше - find+replace - и счастье, можно копировать компонент обратно в основной package.
понедельник, 1 июля 2013 г.
SQL 2012 Always on step-by-step (пошаговая инструкция по конфигурированию Always on)
SQL 2012 Always on - удобное решение, обеспечивающее отказоустойчивость и распределение нагрузки (для приложений, которые это поддерживают) без необходимости иметь shared storage (хотя, для еще большей отказоустойчивости, можно объединить несколько SQL Failover clusters в Always on реплики). Конфигурировать это решение достаточно просто и удобно (я делал это на Windows Server 2008 R2 + SQL 2012 в домене Active Directory).
вторник, 25 июня 2013 г.
OPTION (OPTIMIZE FOR ( @xColumns = NULL )) значительно повышает производительность XML query
Случайно наткнулся на
http://stackoverflow.com/
select ColumnNames.value('.', 'nvarchar(300)') name
from @xColumns.nodes('/columns/name') T1(ColumnNames)
OPTION (OPTIMIZE FOR ( @xColumns = NULL ))
добавление последней строчки уменьшило время выполнения аналогичного запроса в моем случае аж на 25% (10мс). Нашел тут:http://stackoverflow.com/
среда, 26 сентября 2012 г.
CRL in SQL - Data access. Доступ к данным из CRL объектов в SQL
Для доступа к данным в контексте текущего соединения, можно делаеть так:
Imports Microsoft.SqlServer.Server
Imports System.Data.SqlClient.SqlConnection
Public Class CRLFunctions
Public Shared Function Whatever(...)....
Using connection As New System.Data.SqlClient.SqlConnection("context connection=true")
connection.Open
'используем соединение тут
End Using
End Function
End Class
Источник: http://msdn.microsoft.com/en-us/library/ms131043.aspx
Imports Microsoft.SqlServer.Server
Imports System.Data.SqlClient.SqlConnection
Public Class CRLFunctions
Public Shared Function Whatever(...)....
Using connection As New System.Data.SqlClient.SqlConnection("context connection=true")
connection.Open
'используем соединение тут
End Using
End Function
End Class
Источник: http://msdn.microsoft.com/en-us/library/ms131043.aspx
понедельник, 27 августа 2012 г.
VB.NET and Novell eDirectory: read, modify. Читаем и пишем в Novell eDirectory с VB.NET
Использую следующие скрипты в SSIS в качестве Script Source и Destination components:
пятница, 25 мая 2012 г.
SSIS script component as a data source: используем скрипт для получения данных из нестандартных источников (например Active Directory)
1. Создаем Data Flow Task, Script Component как data source
вторник, 21 февраля 2012 г.
SQL Agent - Send a notification email with the error message. Как послать из SQL Agent письмо с текстом ошибки
Написал Powershell-скриптик для этого:
$JobName="название задачи из SQL Agent"
$SQL="SELECT top 1 message FROM [msdb].[dbo].[sysjobs] j join [msdb].[dbo].[sysjobhistory] h on j.job_id = h.job_id where run_status=0 and name='"+$JobName+"' order by run_time desc"
$Body=Invoke-Sqlcmd -Query $SQL
$emailFrom = "адрес отправителя"
$emailTo = "адрес получателя"
$subject = $JobName+" has failed"
$smtpServer = "адрес смтп-сервера"
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
$smtp.Send($emailFrom, $emailTo, $subject, $body[0])
$JobName="название задачи из SQL Agent"
$SQL="SELECT top 1 message FROM [msdb].[dbo].[sysjobs] j join [msdb].[dbo].[sysjobhistory] h on j.job_id = h.job_id where run_status=0 and name='"+$JobName+"' order by run_time desc"
$Body=Invoke-Sqlcmd -Query $SQL
$emailFrom = "адрес отправителя"
$emailTo = "адрес получателя"
$subject = $JobName+" has failed"
$smtpServer = "адрес смтп-сервера"
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
$smtp.Send($emailFrom, $emailTo, $subject, $body[0])
пятница, 16 сентября 2011 г.
SQL 2008 R2 Cluster installation step-by-step: пошаговая инструкция по инсталляции кластера SQL 2008 R2
Инсталляция кластера SQL 2008 R2 достаточно проста, но пропустив некоторые шаги можно потом потратить много времени и усилий на исправление, так что неплохо иметь пошаговую инструкцию по инсталляции. Подразумевается, что уже имеется как минимум один узел (node) с установленным Windows 2008 R2 и подключенный к shared storage
пятница, 19 августа 2011 г.
SQL Server 2008 R2 Utility control point - enrollment прошел без ошибок, но информация не собирается
Как выяснилось, даже если у instance с UCP есть отдельный выделенный TCP порт, с точки зрения managed instance он все равно считается named instance и пытается подключиться к нему как к SERVERNAME\INSTANCENAME. Если в сети запрещен соответствующий трафик или SQL Browser выключен, информация собираться не будет. Выход - использовать SQL Alias на managed instance.
Проверить, что все работает нормально можно, поглядев историю SQL Agent Job на managed instance для задач sysutility_mi_collect_and_upload и sysutility_mi_collect_performance.
Другие полезные советы для траблшутинга UCP connectivity доступны тут:
http://msdn.microsoft.com/en-us/library/ee210592.aspx
Проверить, что все работает нормально можно, поглядев историю SQL Agent Job на managed instance для задач sysutility_mi_collect_and_upload и sysutility_mi_collect_performance.
Другие полезные советы для траблшутинга UCP connectivity доступны тут:
http://msdn.microsoft.com/en-us/library/ee210592.aspx
четверг, 4 августа 2011 г.
Миграция отчетов в SSRS (Migrate SSRS reports)
Совершенно замечательное приложение, чтобы мигрировать репорты с одного сервера на другой, выгрузить/загрузить их кучей и т.д. - RSScripter:
http://www.sqldbatips.com/showarticle.asp?ID=62
Jasper Smith, thank you!
http://www.sqldbatips.com/showarticle.asp?ID=62
Jasper Smith, thank you!
четверг, 23 июня 2011 г.
SQL Server Integration Services (SSIS) запускает SQLDUMPER.EXE и виснет во время выполнения пакета.
Эта проблема возникла у меня почему-то только на Windows7 (на XP все работало нормально). Во время отладки SSIS package на мгновение появлялось DOS-окошко с SQLDUMPER, после чего задачи в Business Intelligence Development Studio оставались желтенькими, но никогда не завершались. Решение этой проблемы такое же странное, как и она сама - надо выключить службу SQL Server VSS Writer.
Источник: http://discussions.virtualdr.com/showthread.php?t=220983
Источник: http://discussions.virtualdr.com/showthread.php?t=220983
пятница, 17 июня 2011 г.
ADODB.Recordset error '800a0e78' Operation is not allowed when the object is closed.
У меня это случилось при миграции старого веб-приложения (ASP) на новый веб и сиквел сервер. Были изменены параметры подключения (с ODBC на OLE DB). Приложение подключалось к базе данных, SQL Profiler показывал, что команды исполняются, однако часть кода
set objDBConnection = Server.CreateObject("ADODB.Connection")
Set objRs = Server.CreateObject( "ADODB.RecordSet")
objDbConnection.Open(ConnectionString)
objRs.Execute("EXEC someStoredProcedure")
возвращало закрытый объект objRs и ошибку ADODB.Recordset error '800a0e78' , чего не случалось до миграции.
Немножко поковырявшись и погуглив, нашел следующее: вызовы stored procedures, сделанные через ODBC не возвращают "(x) rows affected", а OLE DB - возвращают. Соответственно, встретив эту строчку в ответе, OLE DB неверно интерпретирует ее как отсутствие данных и закрывает объект. Починить это можно двумя способами - поставив SET NOCOUNT ON вначале кода stored procedure (более правильный способ) или включив no count глобально на уровне сервера (на уровне базы данных, к сожалению, этого не сделать).
В связи с этим приходит следующая мысль: обязательное использование SET NOCOUNT ON в начале кода stored procedure - это хороший тон.
Источник: http://tutorials.aspfaq.com/8000xxxxx-errors/why-do-i-get-800a0cc1-errors.html
set objDBConnection = Server.CreateObject("ADODB.Connection")
Set objRs = Server.CreateObject( "ADODB.RecordSet")
objDbConnection.Open(ConnectionString)
objRs.Execute("EXEC someStoredProcedure")
возвращало закрытый объект objRs и ошибку ADODB.Recordset error '800a0e78' , чего не случалось до миграции.
Немножко поковырявшись и погуглив, нашел следующее: вызовы stored procedures, сделанные через ODBC не возвращают "(x) rows affected", а OLE DB - возвращают. Соответственно, встретив эту строчку в ответе, OLE DB неверно интерпретирует ее как отсутствие данных и закрывает объект. Починить это можно двумя способами - поставив SET NOCOUNT ON вначале кода stored procedure (более правильный способ) или включив no count глобально на уровне сервера (на уровне базы данных, к сожалению, этого не сделать).
В связи с этим приходит следующая мысль: обязательное использование SET NOCOUNT ON в начале кода stored procedure - это хороший тон.
Источник: http://tutorials.aspfaq.com/8000xxxxx-errors/why-do-i-get-800a0cc1-errors.html
четверг, 31 марта 2011 г.
SQL Server Management Studio at x64 platform ('System.OutOfMemoryException', memory leaks, etc.)
Не успел я порадоваться на свой новый лэптоп (Elitebook 8540w, 8GB RAM), как заметил, что SSMS ведет там себя очень странно - зависает, работает ощутимо медленнее, чем на моем старом лэптопе и периодически отъедает 1-2GB RAM на очень простых запросах.
Дня два копал интернет, пока не нашел следующее:
"...You may experience slow performance when you run 32-bit SQL Server tools on 64-bit operating systems..."
"...To improve performance, run these 32-bit tools on a computer that is running a 32-bit operating system. Then, connect to a 64-bit server that is running SQL Server..."
В результате получается, что мой новый лэптоп несовместим с моим основным рабочим инструментом.
Не понимаю я Microsoft - почему, несмотря на то, что все новые версии ОС объявлены x64, инструменты разработчика даже для SQL 2008 R2 все еще x32?
Источник: http://support.microsoft.com/?id=906892
Дня два копал интернет, пока не нашел следующее:
"...You may experience slow performance when you run 32-bit SQL Server tools on 64-bit operating systems..."
"...To improve performance, run these 32-bit tools on a computer that is running a 32-bit operating system. Then, connect to a 64-bit server that is running SQL Server..."
В результате получается, что мой новый лэптоп несовместим с моим основным рабочим инструментом.
Не понимаю я Microsoft - почему, несмотря на то, что все новые версии ОС объявлены x64, инструменты разработчика даже для SQL 2008 R2 все еще x32?
Источник: http://support.microsoft.com/?id=906892
вторник, 28 сентября 2010 г.
OLE DB provider 'SQLOLEDB' was unable to start a distributed transaction.
В интернете полно решений по поводу этой задачи. 99.9% из них просто перепечатывают следующую статью:
http://support.microsoft.com/kb/873160
Но что делать, если мы все вышеперечисленное сделали, а оно не работает?
Нигде я не нашел упоминания о том, что для корректной работы MS DTC требуется, чтобы все хосты, участвующие в распределенной транзакции, могли разрешать имена друг друга в NetBios. Если у них разные DNS-серверы или они в разных доменах, это может стать проблемой. В таком случае достаточно прописать имена друг друга им в host файлах или использовать любое другое аналогичное решение.
http://support.microsoft.com/kb/873160
Но что делать, если мы все вышеперечисленное сделали, а оно не работает?
Нигде я не нашел упоминания о том, что для корректной работы MS DTC требуется, чтобы все хосты, участвующие в распределенной транзакции, могли разрешать имена друг друга в NetBios. Если у них разные DNS-серверы или они в разных доменах, это может стать проблемой. В таком случае достаточно прописать имена друг друга им в host файлах или использовать любое другое аналогичное решение.
четверг, 2 сентября 2010 г.
Token-based server access validation failed with an infrastructure error. Check for previous errors. [CLIENT: ]
Опять забавные симптомы: можно подключиться к SQL серверу удаленно, но если попробовать подключиться локально - доступа нет, в event log эта ошибка. Решается просто - выключением UAC либо right click - Run as Administrator.
пятница, 15 января 2010 г.
Change database collation (by force)
Злостно снасильничать над БД и поменять Collation можно следующей последовательностью команд:
ALTER DATABASE [DatabaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE [DatabaseName] COLLATE [new collation name]
ALTER DATABASE [DatabaseName] SET MULTI_USER
Изменить COLLATION всех колонок:
declare @toCollation sysname
SET @toCollation = 'SQL_Latin1_General_CP1_CI_AS' -- Database default collate
SELECT 'ALTER TABLE ' + INFORMATION_SCHEMA.COLUMNS.TABLE_NAME +
' ALTER COLUMN ' + COLUMN_NAME + ' ' + DATA_TYPE +
CASE WHEN CHARACTER_MAXIMUM_LENGTH = -1 then '(max)'
WHEN DATA_TYPE in ('text','ntext') then ''
WHEN CHARACTER_MAXIMUM_LENGTH IS NOT NULL
THEN '('+(CONVERT(VARCHAR,CHARACTER_MAXIMUM_LENGTH)+')' )
ELSE isnull(CONVERT(VARCHAR,CHARACTER_MAXIMUM_LENGTH),' ') END
+' COLLATE ' + @toCollation+ ' ' + CASE IS_NULLABLE
WHEN 'YES' THEN 'NULL'
WHEN 'No' THEN 'NOT NULL'
END
FROM INFORMATION_SCHEMA.COLUMNS INNER JOIN INFORMATION_SCHEMA.TABLES
ON INFORMATION_SCHEMA.COLUMNS.TABLE_NAME = INFORMATION_SCHEMA.TABLES.TABLE_NAME
AND INFORMATION_SCHEMA.COLUMNS.TABLE_SCHEMA = INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA
WHERE DATA_TYPE IN ('varchar' ,'char','nvarchar','nchar','text','ntext')
AND TABLE_TYPE = 'BASE TABLE'
and COLLATION_NAME <> @toCollation
Источник: http://sqlblogcasts.com/blogs/ssqanet/archive/2008/03/12/tsql-to-change-collation-of-database-whats-new-in-sql-2008-then.aspx
ALTER DATABASE [DatabaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE [DatabaseName] COLLATE [new collation name]
ALTER DATABASE [DatabaseName] SET MULTI_USER
Изменить COLLATION всех колонок:
declare @toCollation sysname
SET @toCollation = 'SQL_Latin1_General_CP1_CI_AS' -- Database default collate
SELECT 'ALTER TABLE ' + INFORMATION_SCHEMA.COLUMNS.TABLE_NAME +
' ALTER COLUMN ' + COLUMN_NAME + ' ' + DATA_TYPE +
CASE WHEN CHARACTER_MAXIMUM_LENGTH = -1 then '(max)'
WHEN DATA_TYPE in ('text','ntext') then ''
WHEN CHARACTER_MAXIMUM_LENGTH IS NOT NULL
THEN '('+(CONVERT(VARCHAR,CHARACTER_MAXIMUM_LENGTH)+')' )
ELSE isnull(CONVERT(VARCHAR,CHARACTER_MAXIMUM_LENGTH),' ') END
+' COLLATE ' + @toCollation+ ' ' + CASE IS_NULLABLE
WHEN 'YES' THEN 'NULL'
WHEN 'No' THEN 'NOT NULL'
END
FROM INFORMATION_SCHEMA.COLUMNS INNER JOIN INFORMATION_SCHEMA.TABLES
ON INFORMATION_SCHEMA.COLUMNS.TABLE_NAME = INFORMATION_SCHEMA.TABLES.TABLE_NAME
AND INFORMATION_SCHEMA.COLUMNS.TABLE_SCHEMA = INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA
WHERE DATA_TYPE IN ('varchar' ,'char','nvarchar','nchar','text','ntext')
AND TABLE_TYPE = 'BASE TABLE'
and COLLATION_NAME <> @toCollation
Источник: http://sqlblogcasts.com/blogs/ssqanet/archive/2008/03/12/tsql-to-change-collation-of-database-whats-new-in-sql-2008-then.aspx
среда, 11 ноября 2009 г.
Disabling or Enabling SQL Server Agent Jobs
Групповая работа с задачами SQL Server Agent:
Disable All SQL Server Agent Jobs
USE MSDB;
GO
UPDATE MSDB.dbo.sysjobs
SET Enabled = 0
WHERE Enabled = 1;
GO
Enable All SQL Server Agent Jobs
USE MSDB;
GO
UPDATE MSDB.dbo.sysjobs
SET Enabled = 1
WHERE Enabled = 0;
GO
Disable Jobs By Job Name
USE MSDB;
GO
UPDATE MSDB.dbo.sysjobs
SET Enabled = 0
WHERE [Name] LIKE 'Admin%';
GO
Источник: http://www.mssqltips.com/tip.asp?tip=1400
Disable All SQL Server Agent Jobs
USE MSDB;
GO
UPDATE MSDB.dbo.sysjobs
SET Enabled = 0
WHERE Enabled = 1;
GO
Enable All SQL Server Agent Jobs
USE MSDB;
GO
UPDATE MSDB.dbo.sysjobs
SET Enabled = 1
WHERE Enabled = 0;
GO
Disable Jobs By Job Name
USE MSDB;
GO
UPDATE MSDB.dbo.sysjobs
SET Enabled = 0
WHERE [Name] LIKE 'Admin%';
GO
Источник: http://www.mssqltips.com/tip.asp?tip=1400
суббота, 13 июня 2009 г.
SQL-функция AVG вызывает переполнение (Arithmetic overflow error)
Такая неприятная вещь бывает даже в случае, когда надо посчитать среднее от довольно маленькой величины (например tinyint), но в большом массиве. Компания Майкрософт по этой ссылке говорит примерно следующее:
"...Мы расследовали эту проблему и даже придумали, как решить ее, но из-за нехватки ресурсов и времени мы не успеваем вставить решение в SQL 2008, так что ждите следующей версии..." - Разгильдяи, одним словом. Workaround по данной ссылке не описан.
Однако, другие умные люди нашли этот воркэраунд: предположим, что инструкция типа
SELECT AVG(bytessent)
вызывает ошибку Arithmetic overflow error. Перепишем ее как
SELECT AVG(CAST(bytessent AS bigint))
и все получится.
Источники:
http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=241543
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=75175
"...Мы расследовали эту проблему и даже придумали, как решить ее, но из-за нехватки ресурсов и времени мы не успеваем вставить решение в SQL 2008, так что ждите следующей версии..." - Разгильдяи, одним словом. Workaround по данной ссылке не описан.
Однако, другие умные люди нашли этот воркэраунд: предположим, что инструкция типа
SELECT AVG(bytessent)
вызывает ошибку Arithmetic overflow error. Перепишем ее как
SELECT AVG(CAST(bytessent AS bigint))
и все получится.
Источники:
http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=241543
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=75175
понедельник, 20 апреля 2009 г.
OLE/DB provider returned Timeout expired with Linked Server
Для того, чтобы удаленный запрос через Linked Server выполнялся дольше 10 минут без появления ошибок, время ожидания можно переконфигурировать:
sp_configure 'remote login timeout', 30
go
reconfigure with override
go
sp_configure 'remote query timeout', 0
go
reconfigure with override
go
Источник: http://support.microsoft.com/kb/314530
sp_configure 'remote login timeout', 30
go
reconfigure with override
go
sp_configure 'remote query timeout', 0
go
reconfigure with override
go
Источник: http://support.microsoft.com/kb/314530
Подписаться на:
Сообщения (Atom)