Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 ssis error output - простой вопрос  [new]
vitema
Member

Откуда:
Сообщений: 89
Стоит задача сделать импорт данных с оракловой базы в базу mssql 2000, в качестве посредника между ними выступает ssis пакет 2005 mssql.
При этом, в случае возникновения каких-либо ошибок - они должны фиксироваться в текстовом файле, а операция импорта прерываться не должна.

Во вложении настройки и результат выполнения.

Суть проблемы: ошибка возникает, а в файл ничего не пишется и операция импорта прерывается.
В оракловой таблице 30 строк, есть поле DateTime. В 10 строке в этом поле записана дата 01.01.1000 - на этой строке происходит ошибка.
В результатае выполнения в таблицу 2000 сервера записывается 9 строк, в файл не пишется ничего.
По моему разумению в таблицу на 2000 сервере должно записаться 29 строк, в файл - 1 ошибочная строка.

Лог выполнения :
SSIS package "Package.dtsx" starting.
Information: 0x4004300A at Data Flow Task, DTS.Pipeline: Validation phase is beginning.
Information: 0x4004300A at Data Flow Task, DTS.Pipeline: Validation phase is beginning.
Information: 0x40043006 at Data Flow Task, DTS.Pipeline: Prepare for Execute phase is beginning.
Information: 0x40043007 at Data Flow Task, DTS.Pipeline: Pre-Execute phase is beginning.
Information: 0x402090DC at Data Flow Task, Flat File Destination [4900]: The processing of file "F:\error_sprut.TXT" has started.
Information: 0x4004300C at Data Flow Task, DTS.Pipeline: Execute phase is beginning.
Error: 0xC0202009 at Data Flow Task, OLE DB Destination [967]: SSIS Error Code DTS_E_OLEDBERROR.  An OLE DB error has occurred.
Error code: 0x80004005.
An OLE DB record is available.  Source: "Microsoft SQL Native Client"  Hresult: 0x80004005  Description: "Invalid character value for cast specification".
Error: 0xC020901C at Data Flow Task, OLE DB Destination [967]: There was an error with input column "ACTIVE_START" (4346) on input 
"OLE DB Destination Input" (980). The column status returned was: "Conversion failed because the data value overflowed the specified type.".
Error: 0xC0209029 at Data Flow Task, OLE DB Destination [967]: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR.
  The "input "OLE DB Destination Input" (980)" failed because error code 0xC020907A occurred, and the error row disposition on "input 
"OLE DB Destination Input" (980)" specifies failure on error. An error occurred on the specified object of the specified component.
 There may be error messages posted before this with more information about the failure.
Error: 0xC0047022 at Data Flow Task, DTS.Pipeline: SSIS Error Code DTS_E_PROCESSINPUTFAILED.
  The ProcessInput method on component "OLE DB Destination" (967) failed with error code 0xC0209029.
 The identified component returned an error from the ProcessInput method. The error is specific to the component,
but the error is fatal and will cause the Data Flow task to stop running.  There may be error messages posted before this with more information
 about the failure.
Error: 0xC0047021 at Data Flow Task, DTS.Pipeline: SSIS Error Code DTS_E_THREADFAILED. 
Thread "WorkThread0" has exited with error code 0xC0209029.  There may be error messages posted before this with more information on why 
the thread has exited.
Information: 0x40043008 at Data Flow Task, DTS.Pipeline: Post Execute phase is beginning.
Information: 0x402090DF at Data Flow Task, OLE DB Destination [967]: The final commit for the data insertion has started.
Information: 0x402090E0 at Data Flow Task, OLE DB Destination [967]: The final commit for the data insertion has ended.
Information: 0x402090DD at Data Flow Task, Flat File Destination [4900]: The processing of file "F:\error_sprut.TXT" has ended.
Information: 0x40043009 at Data Flow Task, DTS.Pipeline: Cleanup phase is beginning.
Information: 0x4004300B at Data Flow Task, DTS.Pipeline: "component "OLE DB Destination" (967)" wrote 9 rows.
Information: 0x4004300B at Data Flow Task, DTS.Pipeline: "component "Flat File Destination" (4900)" wrote 0 rows.
Task failed: Data Flow Task
Warning: 0x80019002 at Package: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED.  The Execution method succeeded, 
but the number of errors raised (5) reached the maximum allowed (1); resulting in failure. 
This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors.
SSIS package "Package.dtsx" finished: Failure.
The program '[71544] Package.dtsx: DTS' has exited with code 0 (0x0).

Видно, что он пытаестя что-то записать в файл, кроме того говорит, что свойство maximumerrorcount равно 1,хотя я выставил его = 1000. Я пробовал выставлять равным 0. Никакой реакции нет.

Вопрос : почему это не работает? Есть ли альтернативный вариант решения данной задачи?

К сообщению приложен файл. Размер - 0Kb
10 сен 09, 06:46    [7639848]     Ответить | Цитировать Сообщить модератору
 Re: ssis error output - простой вопрос  [new]
Alexes
Member

Откуда:
Сообщений: 1100
Сдаётся мне, что flatfile нужно подключать к Error Output для OLE DB Destination. Ошибка происходит при вставке записей, а не при выборе.
10 сен 09, 08:56    [7639995]     Ответить | Цитировать Сообщить модератору
 Re: ssis error output - простой вопрос  [new]
vitema
Member

Откуда:
Сообщений: 89
Alexes
Сдаётся мне, что flatfile нужно подключать к Error Output для OLE DB Destination. Ошибка происходит при вставке записей, а не при выборе.



Не дает подключить к Error Output для OLE DB Destination, так как это конечный элемент и с него уже ничего не выходит.
10 сен 09, 10:07    [7640272]     Ответить | Цитировать Сообщить модератору
 Re: ssis error output - простой вопрос  [new]
--__Александр__--
Member

Откуда:
Сообщений: 2631
Странно, а у меня получилось:

К сообщению приложен файл. Размер - 0Kb
10 сен 09, 10:15    [7640324]     Ответить | Цитировать Сообщить модератору
 Re: ssis error output - простой вопрос  [new]
vitema
Member

Откуда:
Сообщений: 89
--__Александр__--
Странно, а у меня получилось:


Да Александр вы правы, видимо на этапе валидации mssql не считал 1000 год в дате ошибкой,
и проблема возникала уже непосредственно при вставке.

У меня ваш вариант не сработал сразу, так как компоненту не нравилось,что включена опция fastload .
Посмотрев в advansed editor Ole DB destination, на вкалдке Column Mappings я увидел это предупреждение.

После того как убрал эту опцию (Component Propertyes -> Access Mode- поставил просто Openrowset, все отработало.
Ошибочная строка ушла в файл, 29 строк записалось в табличку 2000 сервера.

-------------------------------

В продолжение темы.
Сейчас меня озадачили еще одной проблемой, предполагается что на сервере Оракл, будет две вьюхи, одна как бы мастер, другая детайл.
Возможна ситуация, что если я буду последовательно выполнять импорт из этих двух вьюх, то данные окажутся несогласованными и возник вопрос : можно ли сделать такой импорт в одной транзакции?

Я ориентировался на статью msdn

И сделал следующее :
В control flow:
Transaction Option = Required
Isolation Level оставил без изменений = Serializable

Далее :
Поместил в него два Data Flow Task - первый из примера, второй - выполняет импорт из другой таблички базы Оракла по тому же принципу. По отдельности все отрабатывает без ошибок.
Для них Transaction Option = Supported
Isolation Level оставил без изменений = Serializable

Пытаюсь выполнить - получаю ошибку:

SSIS package "Package.dtsx" starting.
Information: 0x4004300A at Data Flow Task, DTS.Pipeline: Validation phase is beginning.
Information: 0x4004300A at Data Flow Task 1, DTS.Pipeline: Validation phase is beginning.
Information: 0x4001100A at Package: Starting distributed transaction for this container.
Information: 0x4004300A at Data Flow Task 1, DTS.Pipeline: Validation phase is beginning.
Information: 0x4004300A at Data Flow Task, DTS.Pipeline: Validation phase is beginning.
Information: 0x40043006 at Data Flow Task 1, DTS.Pipeline: Prepare for Execute phase is beginning.
Error: 0xC001402C at Package, Connection manager "10.2.30.2.MainData.sprut2": The SSIS Runtime has failed to enlist the OLE DB connection in a distributed transaction with error 0x8004D00A "Unable to enlist in the transaction.".
Error: 0xC0202009 at Package, Connection manager "10.2.30.2.MainData.sprut2": SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x8004D00A.
Error: 0xC020801C at Data Flow Task 1, OLE DB Destination 1 1 [1]: SSIS Error Code DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. The AcquireConnection method call to the connection manager "10.2.30.2.MainData.sprut2" failed with error code 0xC0202009. There may be error messages posted before this with more information on why the AcquireConnection method call failed.
Error: 0xC004701A at Data Flow Task 1, DTS.Pipeline: component "OLE DB Destination 1 1" (1) failed the pre-execute phase and returned error code 0xC020801C.
Information: 0x40043006 at Data Flow Task, DTS.Pipeline: Prepare for Execute phase is beginning.
Information: 0x40043009 at Data Flow Task 1, DTS.Pipeline: Cleanup phase is beginning.
Information: 0x4004300B at Data Flow Task 1, DTS.Pipeline: "component "OLE DB Destination 1 1" (1)" wrote 0 rows.
Task failed: Data Flow Task 1
Error: 0xC001402C at Package, Connection manager "10.2.30.2.MainData.sprut2": The SSIS Runtime has failed to enlist the OLE DB connection in a distributed transaction with error 0x8004D00A "Unable to enlist in the transaction.".
Information: 0x4001100C at Data Flow Task 1: Aborting the current distributed transaction.
Error: 0xC0202009 at Package, Connection manager "10.2.30.2.MainData.sprut2": SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x8004D00A.
Error: 0xC020801C at Data Flow Task, OLE DB Destination [967]: SSIS Error Code DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. The AcquireConnection method call to the connection manager "10.2.30.2.MainData.sprut2" failed with error code 0xC0202009. There may be error messages posted before this with more information on why the AcquireConnection method call failed.
Warning: 0x80019002 at Package: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED. The Execution method succeeded, but the number of errors raised (3) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors.
Error: 0xC004701A at Data Flow Task, DTS.Pipeline: component "OLE DB Destination" (967) failed the pre-execute phase and returned error code 0xC020801C.
Information: 0x40043009 at Data Flow Task, DTS.Pipeline: Cleanup phase is beginning.
Information: 0x4004300B at Data Flow Task, DTS.Pipeline: "component "Flat File Destination" (4900)" wrote 0 rows.
Information: 0x4004300B at Data Flow Task, DTS.Pipeline: "component "OLE DB Destination" (967)" wrote 0 rows.
Task failed: Data Flow Task
Information: 0x4001100C at Data Flow Task: Aborting the current distributed transaction.
Information: 0x4001100C at Package: Aborting the current distributed transaction.
SSIS package "Package.dtsx" finished: Failure.


10.2.30.2.MainData.sprut2 - connection manager к 2000 серверу

Буду благодарен за помощь
10 сен 09, 11:13    [7640719]     Ответить | Цитировать Сообщить модератору
 Re: ssis error output - простой вопрос  [new]
--__Александр__--
Member

Откуда:
Сообщений: 2631
В лом угадавать причины вашей ошибки.
Гугл рулит.
Поиск по ошибке:
"The SSIS Runtime has failed to enlist the OLE DB connection in a distributed transaction with error 0x8004D00A "Unable to enlist in the transaction."."
10 сен 09, 11:23    [7640803]     Ответить | Цитировать Сообщить модератору
 Re: ssis error output - простой вопрос  [new]
vitema
Member

Откуда:
Сообщений: 89
--__Александр__--
В лом угадавать причины вашей ошибки.
Гугл рулит.
Поиск по ошибке:
"The SSIS Runtime has failed to enlist the OLE DB connection in a distributed transaction with error 0x8004D00A "Unable to enlist in the transaction."."


Я уже пару часов гуглю.
Пока не нашел ничего стоящего, кроме того, что такие проблемы с параллельными транзакциями были до sp1 на 2005 mssql.
У меня сейчас стоит sp3.

Возможно именно, что проблема с 2000 сервером.
10 сен 09, 11:29    [7640865]     Ответить | Цитировать Сообщить модератору
 Re: ssis error output - простой вопрос  [new]
vitema
Member

Откуда:
Сообщений: 89
vitema
--__Александр__--
В лом угадавать причины вашей ошибки.
Гугл рулит.
Поиск по ошибке:
"The SSIS Runtime has failed to enlist the OLE DB connection in a distributed transaction with error 0x8004D00A "Unable to enlist in the transaction."."


Я уже пару часов гуглю.
Пока не нашел ничего стоящего, кроме того, что такие проблемы с параллельными транзакциями были до sp1 на 2005 mssql.
У меня сейчас стоит sp3.

Возможно именно, что проблема с 2000 сервером.



Сам себе похоже и ответил на этот вопрос, сделал перенос на Оракле на 2005 как описывал выше - все отработало.
Видимо проблема с 2000.
10 сен 09, 11:34    [7640905]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить