#ssis #informix
#служба службы безопасности #informix
Вопрос:
Я пытаюсь создать пакет SSIS для выполнения относительно простого ETL.
Моим менеджером подключений является DB2 .Net provider (.Net Providers / IBM DB2 .NET Data Priovider).
Моим источником данных является сетевой источник ADO. Он работает в командном режиме SQL.
Работает следующая команда:
select first 10 *
from part
Но это не работает:
select first 10 *
from part
into temp temp2;
select *
from temp2;
drop temp table temp2;
На самом деле он ведет себя довольно странно.
После первого выполнения (нажмите кнопку «Предварительный просмотр …») я обычно получаю эту ошибку:
Pipeline component has returned HRESULT error code 0xC02020FE from a method call. (Microsoft.SqlServer.DTSPipelineWrap)
После второго выполнения (снова нажмите кнопку «Предварительный просмотр …») я получаю набор данных!
Однако после третьего выполнения (и последовательных выполнений) об этом сообщает ошибка…
ERROR [IX000] [IBM][IDS/UNIX64] Temp table (temp3) already exists in session. (IBM.Data.DB2)
Поиск в Google ни к чему меня не приводит: (
Есть ли за этим какая-либо логика и как это исправить?
Обновить:
После инкапсуляции запроса в ХРАНИМУЮ ПРОЦЕДУРУ и вызова его с помощью процедуры EXECUTE, подобной этой…
CREATE PROCEDURE MY_DATA()
RETURNING CHAR(256), CHAR(256);
DEFINE l_fld1 CHAR(256);
DEFINE l_fld2 CHAR(256);
SELECT first 10 fld1, fld2
FROM part
INTO TEMP temp2;
FOREACH
SELECT fld1, fld2
INTO l_fld1, l_fld2
FROM temp2
RETURN l_fld1, l_fld2
WITH RESUME;
END FOREACH
DROP TEMP TABLE temp2;
END PROCEDURE
…У меня есть несколько новых проблем:
- после нажатия «Предварительный просмотр …» сначала я получаю результат, а при втором нажатии я получаю
ERROR [IX000] [IBM][IDS/UNIX64] Temp table (otkalcec.temp2) already exists in session.
- если я немного подожду и снова нажму «Предварительный просмотр …», он снова заработает; очевидно, что сеанс тем временем прерывается (какой-то тайм-аут простоя?)
- тем не менее, запрос всегда возвращается с пустыми именами полей, и это может быть причиной того, что у меня нет ни одного сопоставленного столбца, когда я выбираю «Столбцы» слева : (
ОБНОВЛЕНИЕ 2:
Возникла проблема, связанная с параметром драйвера Informix, использующим SSIS, о существовании которого я не знал: «Время жизни соединения». Это решает первые две проблемы.
Теперь набор результатов предварительного просмотра работает нормально. Единственная проблема, с которой я сталкиваюсь, — это отсутствие информации о столбце в столбцах. Кажется, что все работает, кроме этого, и я не могу продолжить без долбаной информации о столбце! >:(
Комментарии:
1. Вы уверены, что программа отключается от сервера базы данных, так что сеанс уничтожается? Обычно все временные таблицы уничтожаются, как только сеанс базы данных завершается. После завершения работы программы проверьте это еще раз, чтобы убедиться, что сеанс уничтожен.
2. Я думаю, что для устранения вашей первой ошибки вам нужно выполнить шаги отладки, чтобы получить более полное представление о том, что происходило до ошибки 0xC02020FE в вашем пакете.
3. @VikramsinhShinde: что касается первого вопроса, время жизни временной таблицы ограничено продолжительностью сеанса, но мои знания об управлении сеансами SSIS под капотом очень ограничены. AFAIK, проблема непрозрачна и может варьироваться в зависимости от разных драйверов: (Существует только один флаг «RetainSameConnection», для которого установлено значение false, поэтому теоретически соединение (и сеанс, с которым оно должно поддерживаться) должно быть удалено…
4. @VikramsinhShinde: что касается второго наблюдения, ошибка исчезла, когда я использовал ХРАНИМУЮ ПРОЦЕДУРУ для завершения запроса. Однако теперь возникли новые проблемы. Обновляю мой вопрос.
5. Посмотрите, как это автоматически уничтожает сеансы с помощью SSIS: cwebbbi.wordpress.com/2008/12/04 /…