Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Уплавления\Сбор данных\Использования места на диске  [new]
VicSO
Member

Откуда:
Сообщений: 189
Выпадает вот такая ошибка.
Искал в интернете , стоящего не чего не нашел.

+
Subcomponent: OLE DB Source [14], Description: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Description: "Не удалось определить метаданные, поскольку инструкция "EXEC (''CREATE SYNONYM [dbo].[''+@ObjName+''] FOR [''+@SchemaName+''].['' +@ObjName+'']'')" в процедуре "CreateSynonym" содержит динамический код SQL. Рекомендуется использовать предложение WITH RESULT SETS, чтобы явно описать результирующий набор.".


SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Description: "The metadata could not be determined because statement 'EXEC ('CREATE SYNONYM [dbo].['+@ObjName+'] FOR ['+@SchemaName+'].[' +@ObjName+']')' in procedure 'CreateSynonym' contains dynamic SQL. Consider using the WITH RESULT SETS clause to explicitly describe the result set.".


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

Microsoft SQL Server Enterprise 13.0.5426.0

Может кто сталкивался и как с этим бороться?
13 ноя 19, 10:58    [22015098]     Ответить | Цитировать Сообщить модератору
 Re: Уплавления\Сбор данных\Использования места на диске  [new]
iiyama
Member

Откуда:
Сообщений: 642
VicSO,
> на чем спотыкается?
The metadata could not be determined because statement .... in procedure 'CreateSynonym' contains dynamic SQL

>и как с этим бороться?
Consider using the WITH RESULT SETS clause to explicitly describe the result set

?
13 ноя 19, 11:13    [22015119]     Ответить | Цитировать Сообщить модератору
 Re: Уплавления\Сбор данных\Использования места на диске  [new]
VicSO
Member

Откуда:
Сообщений: 189
Данный функционал я не писал это МС и почему он глючит понять не могу.
13 ноя 19, 11:44    [22015163]     Ответить | Цитировать Сообщить модератору
 Re: Уплавления\Сбор данных\Использования места на диске  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7757
VicSO,

вроде бы MS рекомендует не использовать сбор данных в пользу хранилища запросов. У меня, по крайней мере, он глючил и падал с ошибками на SQL2012. Они его и из визарда настройки баз убрали.
13 ноя 19, 11:50    [22015173]     Ответить | Цитировать Сообщить модератору
 Re: Уплавления\Сбор данных\Использования места на диске  [new]
ShIgor
Member

Откуда: Нижний Новгород
Сообщений: 2344
VicSO,

не важно кто писал, если есть возможность внести исправления в процедуру CreateSynonym, то добавьте в конец формируемой строки

WITH RESULT SETS NONE

т.е. полностью строка должна выглядеть примерно

EXEC ('...') WITH RESULT SETS NONE
13 ноя 19, 12:01    [22015192]     Ответить | Цитировать Сообщить модератору
 Re: Уплавления\Сбор данных\Использования места на диске  [new]
VicSO
Member

Откуда:
Сообщений: 189
ShIgor,

Тогда банально, где искать данную процедуру? :)
Так как я искал и не нашел.
насколько понял
CreateSynonym это из этой строки склеенные CREATE SYNONYM
"EXEC (''CREATE SYNONYM [dbo].[''+@ObjName+''] FOR [''+@SchemaName+''].['' +@ObjName+'']'')" в процедуре "CreateSynonym"

Владислав Колосов,
А поподробнее модно?
Просто я с представителем общался на эту тему он такого не говорил что есть такие то вот рекомендации.
+
вроде бы MS рекомендует не использовать сбор данных в пользу хранилища запросов. У меня, по крайней мере, он глючил и падал с ошибками на SQL2012. Они его и из визарда настройки баз убрали.
14 ноя 19, 06:42    [22015809]     Ответить | Цитировать Сообщить модератору
 Re: Уплавления\Сбор данных\Использования места на диске  [new]
ShIgor
Member

Откуда: Нижний Новгород
Сообщений: 2344
VicSO,

Стандартной процедуры CreateSynonym не существует, и вряд-ли MS стал бы ее так называть. Если Вы сами ее не писали, и используете функционал SSIS, то и в нем, в стандартной поставке, тоже ничего похожего нет. Есть подозрение, что это какая-то сторонняя разработка или разработка Ваших коллег. Причем, ошибка возникает в момент вызова, значит процедура существует.
Ищите ее в той базе, к которой идет обращение.
Из своей практики могу добавить, что прямой вызов процедуры к ошибке скорее всего не приведет, а вот ее вызов через openrecordset как раз дает именно такой результат.

Сообщение было отредактировано: 14 ноя 19, 08:50
14 ноя 19, 08:49    [22015843]     Ответить | Цитировать Сообщить модератору
 Re: Уплавления\Сбор данных\Использования места на диске  [new]
ShIgor
Member

Откуда: Нижний Новгород
Сообщений: 2344
добавлю тест для понимания ситуации

+ test
use [tempdb]
go
if object_id('usp_dynamic_test', 'p') is not null drop procedure usp_dynamic_test
go
create procedure usp_dynamic_test (@result nvarchar(100) output)
as
begin
  declare @sql_str nvarchar(max) = 'set @var = ''test'''
  exec sp_executesql @stmt = @sql_str, @params = N'@var nvarchar(100) output', @var = @result output --with result sets none -- сюда тоже можно
end
go

  declare @tst nvarchar(100)
  exec usp_dynamic_test @tst output
  select 'прямой вызов' tpe, @tst tst

/* без "with result sets none" ошибка возникнет на этапе компиляции и отловить ее я не сумел
select *
from 
  openrowset(
    'SQLOLEDB', 'Server=.;Database=tempdb;Timeout=10;Trusted_Connection=yes;',
    'declare @tst nvarchar(100)
     exec usp_dynamic_test @tst output
     select ''openrowset'' tpe, @tst tst
    ')
*/
select *
from 
  openrowset(
    'SQLOLEDB', 'Server=.;Database=tempdb;Timeout=10;Trusted_Connection=yes;',
    'declare @tst nvarchar(100)
     exec usp_dynamic_test @tst output with result sets none
     select ''openrowset'' tpe, @tst tst
    ')

if object_id('usp_dynamic_test', 'p') is not null drop procedure usp_dynamic_test


Сообщение было отредактировано: 14 ноя 19, 10:21
14 ноя 19, 10:20    [22015913]     Ответить | Цитировать Сообщить модератору
 Re: Уплавления\Сбор данных\Использования места на диске  [new]
VicSO
Member

Откуда:
Сообщений: 189
ShIgor,
Вот что выдало :)
+

Сообщение 15281, уровень 16, состояние 1, строка 27
SQL Server заблокировал доступ к STATEMENT "OpenRowset/OpenDatasource" компонента "Ad Hoc Distributed Queries", поскольку он отключен в результате настройки конфигурации безопасности сервера. Использование "Ad Hoc Distributed Queries" может быть разрешено администратором при помощи хранимой процедуры sp_configure. Дополнительные сведения о включении "Ad Hoc Distributed Queries" см. в электронной документации по "Ad Hoc Distributed Queries".

Время выполнения: 2019-11-14T14:46:55.7672956+07:00
14 ноя 19, 10:48    [22015944]     Ответить | Цитировать Сообщить модератору
 Re: Уплавления\Сбор данных\Использования места на диске  [new]
ShIgor
Member

Откуда: Нижний Новгород
Сообщений: 2344
VicSO,

это просто Ad Hoc в настройках сервера не разрешено по-умолчанию
Параметр конфигурации сервера «ad hoc distributed queries»

там же в примере, как разрешить.
14 ноя 19, 10:58    [22015958]     Ответить | Цитировать Сообщить модератору
 Re: Уплавления\Сбор данных\Использования места на диске  [new]
VicSO
Member

Откуда:
Сообщений: 189
ShIgor,

ну это я сразу нашел и попробовал.

ток вот на других серверах такая манипуляция не нужны (стоит все по умолчанию и работает). (Ставились с нуля)
Ваш скрипт отработал на ура.

Но ошибка в не исчезла
+

Код ошибки служб SSIS: DTS_E_OLEDBERROR. Возникла ошибка OLE DB. Код ошибки: 0x80004005.
Доступна запись OLE DB. Источник: "Microsoft SQL Server Native Client 11.0" Результат: 0x80004005 Описание: "Не удалось определить метаданные, поскольку инструкция "EXEC ('CREATE SYNONYM [dbo].['+@ObjName+'] FOR ['+@SchemaName+'].[' +@ObjName+']')" в процедуре "CreateSynonym" содержит динамический код SQL. Рекомендуется использовать предложение WITH RESULT SETS, чтобы явно описать результирующий набор.".
14 ноя 19, 11:37    [22016016]     Ответить | Цитировать Сообщить модератору
 Re: Уплавления\Сбор данных\Использования места на диске  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
VicSO

ток вот на других серверах такая манипуляция не нужны (стоит все по умолчанию и работает). (Ставились с нуля)

блажен, кто верует
14 ноя 19, 12:22    [22016076]     Ответить | Цитировать Сообщить модератору
 Re: Уплавления\Сбор данных\Использования места на диске  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
VicSO

Но ошибка в не исчезла

вам товарищ показывает, как получить вашу ошибку.
а не как исправить.
---
а вы думали, не меняя проблемный код, сможете устранить ошибку?
14 ноя 19, 12:24    [22016081]     Ответить | Цитировать Сообщить модератору
 Re: Уплавления\Сбор данных\Использования места на диске  [new]
VicSO
Member

Откуда:
Сообщений: 189
Yasha123,

Вот на другом, и все работает.
при этом скрипт которые выше также ругается.
Msg 15281, Level 16, State 1, Line 16
SQL Server blocked access to STATEMENT 'OpenRowset/OpenDatasource' of component 'Ad Hoc Distributed Queries' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Ad Hoc Distributed Queries' by using sp_configure. For more information about enabling 'Ad Hoc Distributed Queries', search for 'Ad Hoc Distributed Queries' in SQL Server Books Online.


К сообщению приложен файл. Размер - 5Kb
14 ноя 19, 12:29    [22016085]     Ответить | Цитировать Сообщить модератору
 Re: Уплавления\Сбор данных\Использования места на диске  [new]
VicSO
Member

Откуда:
Сообщений: 189
Yasha123,

Хорошо, я готов код поправить если к нему доступ есть.
Вопрос где его искать?
14 ноя 19, 12:30    [22016091]     Ответить | Цитировать Сообщить модератору
 Re: Уплавления\Сбор данных\Использования места на диске  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
какой-то разговор немого с глухим...
вы что имеете в виду под "и все работает" на другом сервере?

работает Data Collector?
это нормально, потому что на нем нет никакой самодеятельности в виде CreateSynonym.

но какое это имеет отношение к скрипту от ShIgor?
я лично про то, что для запуска этого скрипта надо включить 'Ad Hoc Distributed Queries',
и что "по умолчанию" это отключено.
и если "Ваш скрипт отработал на ура", значит там это включено.
но это не есть умолчание
14 ноя 19, 12:45    [22016109]     Ответить | Цитировать Сообщить модератору
 Re: Уплавления\Сбор данных\Использования места на диске  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
VicSO

Хорошо, я готов код поправить если к нему доступ есть.
Вопрос где его искать?

наверное в базе для Data Collector
14 ноя 19, 12:47    [22016112]     Ответить | Цитировать Сообщить модератору
 Re: Уплавления\Сбор данных\Использования места на диске  [new]
VicSO
Member

Откуда:
Сообщений: 189
Yasha123,

Там скрипт не отрабатывает, но нету ошибок
Subcomponent: OLE DB Source [14], Description: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Description: "Не удалось определить метаданные, поскольку инструкция "EXEC (''CREATE SYNONYM [dbo].[''+@ObjName+''] FOR [''+@SchemaName+''].['' +@ObjName+'']'')" в процедуре "CreateSynonym" содержит динамический код SQL. Рекомендуется использовать предложение WITH RESULT SETS, чтобы явно описать результирующий набор.".


SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Description: "The metadata could not be determined because statement 'EXEC ('CREATE SYNONYM [dbo].['+@ObjName+'] FOR ['+@SchemaName+'].[' +@ObjName+']')' in procedure 'CreateSynonym' contains dynamic SQL. Consider using the WITH RESULT SETS clause to explicitly describe the result set.".

на другом сервер, все данные собирается.
CreateSynonym - я пробовал искать в база model,msdb,master,tempdb,Pref_DB->куда собирает данные "Уплавления\Сбор данных\Использования места на диске " и я не нашел. Своего я не чего не вносил.
Базу пересоздавал с нуля. результат не менялся.
И не могу понять по чему на другом сервер сделал те-же манипуляции все работает на ура, а на другом нету.
14 ноя 19, 12:54    [22016118]     Ответить | Цитировать Сообщить модератору
 Re: Уплавления\Сбор данных\Использования места на диске  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
VicSO

CreateSynonym - я пробовал искать в база model,msdb,master,tempdb,Pref_DB->куда собирает данные "Уплавления\Сбор данных\Использования места на диске " и я не нашел. Своего я не чего не вносил.

ну курсором пройдите по всем базам.
проще всего было бы открыть SSIS-пакет и там посмотреть,
в какую он базу лезет
---
когда ищите, имя скопируйте как есть из ошибки.
ну вдруг там кириллическое "о" или "у".
и передавайте его как юникод.
искали-то хоть не глазами, кодом?

Сообщение было отредактировано: 14 ноя 19, 13:01
14 ноя 19, 13:00    [22016130]     Ответить | Цитировать Сообщить модератору
 Re: Уплавления\Сбор данных\Использования места на диске  [new]
ShIgor
Member

Откуда: Нижний Новгород
Сообщений: 2344
Yasha123,

мысли..
У самого дата коллектора таких процедур нет и смысла искать CreateSynonym естественно тоже.
Т.к. ошибка возникает в SSIS пакете, а он (пакет, не SSIS) не является частью дата коллектора, то вопрос к тому кто его писал.
Т.к. "использование места на диске" входит вроде бы в системный набор сборщиков (пакетов), то искать надо там. там же прописан код процедуры, а сама процедура создается динамически во время выполнения SSIS пакета

у меня этой шняги нет, поэтому посмотреть не могу
должно быть что-то типа
+
Картинка с другого сайта.
14 ноя 19, 14:44    [22016318]     Ответить | Цитировать Сообщить модератору
 Re: Уплавления\Сбор данных\Использования места на диске  [new]
ShIgor
Member

Откуда: Нижний Новгород
Сообщений: 2344
не оно-ли?
+
Картинка с другого сайта.
14 ноя 19, 15:00    [22016341]     Ответить | Цитировать Сообщить модератору
 Re: Уплавления\Сбор данных\Использования места на диске  [new]
Ferdipux
Member

Откуда: Москва
Сообщений: 553
VicSO
Выпадает вот такая ошибка.
Искал в интернете , стоящего не чего не нашел.

+
Subcomponent: OLE DB Source [14], Description: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Description: "Не удалось определить метаданные, поскольку инструкция "EXEC (''CREATE SYNONYM [dbo].[''+@ObjName+''] FOR [''+@SchemaName+''].['' +@ObjName+'']'')" в процедуре "CreateSynonym" содержит динамический код SQL. Рекомендуется использовать предложение WITH RESULT SETS, чтобы явно описать результирующий набор.".


SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Description: "The metadata could not be determined because statement 'EXEC ('CREATE SYNONYM [dbo].['+@ObjName+'] FOR ['+@SchemaName+'].[' +@ObjName+']')' in procedure 'CreateSynonym' contains dynamic SQL. Consider using the WITH RESULT SETS clause to explicitly describe the result set.".


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

...?

Судя по ошибке, она прилетает при вызове некоей stored procedure из OLE DB Source. А этот самый OLE DB Source не может получить метаданные столбов результатов, так как в хранимку включен динамический код.
Чтобы решить - модифицируете хранимку, описываете в WITH RESULT SETS все возвращаемые столбцы и типы данных.
14 ноя 19, 16:42    [22016429]     Ответить | Цитировать Сообщить модератору
 Re: Уплавления\Сбор данных\Использования места на диске  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Ferdipux,
так не может найти хранимку,
пока что в этом проблема
14 ноя 19, 16:47    [22016433]     Ответить | Цитировать Сообщить модератору
 Re: Уплавления\Сбор данных\Использования места на диске  [new]
VicSO
Member

Откуда:
Сообщений: 189
В этом и проблема, на некоторые сервера на ура становится без проблем, на некоторые ошибка такая выскакивает.
Есть подозрения что спотыкается на какой-то база, и дальше просто вываливается с ошибкой, но вот почему проблема с этой базой, что ей мешает понять не могу.
15 ноя 19, 10:21    [22016847]     Ответить | Цитировать Сообщить модератору
 Re: Уплавления\Сбор данных\Использования места на диске  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
VicSO
Есть подозрения что спотыкается на какой-то база, и дальше просто вываливается с ошибкой, но вот почему проблема с этой базой, что ей мешает понять не могу.
Поищите для начала, где эта процедура
sp_MSforeachdb 'if exists(select * from sysobjects where name =''CreateSynonym'') print db_name()'
15 ноя 19, 11:48    [22016945]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить