Help!
I'm trying to create a simple .dtsx package that imports data to SQL server 2005 from an informix 7.3 db using an ADO.net ODBC connection. I am first creating the groundwork for the dtsx package in SQL server using the wizard, and then editing the file later in visual studio.
My data source SQL in the dataflow task is simple and it works great until I hit a locked record on the Informix database.
select <coulmns>
from <table>
Where <condition>
The work around syntax for the locked row on the informix DB should be:
set isolation to dirty read
go
select <coulmns>
from <table>
where <condition>
This syntax will return the data correctly using a non-microsoft SQL editor, however it will will not parse corectly within visual studio. Interestingly enough, in visual studio I can parse the islolation and the select indenpendantly, just not in the same statement.
Has anyone come across this before? Any ideas on what I can do to resolve my problem?
Thanks in advance!
I ended up having the dtsx package run a sql statement before the import.....using an ODBC link in the .dtsx package that had priviledges enough to drop and create a temp table on the Informix side.
I imported the data into the temp table on informix using "set isolation level to dirty read" on the informix side.
Then a standard dtsx package to import from the temp table where there weren't any lock issues.
It works....I'm glad it doesnt have to run often.
|||
I experience exactly the same Problem:
Try to get data from an Informix-Server to a MS SQL2k5-Server using an ODBC-Driver (IBM Informix ODBC 2.90.0000 TC3).
My problem is that I have "readonly"-Permission to the Informix-Server, so the workaround with the temporary table isn′t suitable for me. Is there a "beautiful" solution? I set the "set isolation to dirty read"-command in a seperate SQL-Task, then the data flow task where I try to access the Informix server. It seems that the connection opened for setting the isolation level is closed when the task ends and the data flow task opens a new one.
Please help me, I′m quite desperate now...
|||Ok, so now I figured out that there′s an option in the connection manager properties "RetainSameConnection", which I set "TRUE". Unfortunately I still get the same error. The connection to the Informix-DB fails if there are other users logged on or I don′t get the permission to read data. I also increased the "MaxConcurrentExecutables" Value to 3 due to the fact that I got 3 Tasks which have to use the connection. Still the execution fails.Any ideas?
BTW, here′s my error output: Parts of it are in german but perhaps it helps:
_
SSIS package "Package.dtsx" starting.
Information: 0x4004300A at Datenflusstask, DTS.Pipeline: Die Phase 'überprüfung' beginnt.
Information: 0x4004300A at Datenflusstask, DTS.Pipeline: Die Phase 'überprüfung' beginnt.
Information: 0x40043006 at Datenflusstask, DTS.Pipeline: Die Phase 'Ausführung vorbereiten' beginnt.
Information: 0x40043007 at Datenflusstask, DTS.Pipeline: Die Phase 'Vor der Ausführung' beginnt.
Information: 0x402090DC at Datenflusstask, Flatfileziel [10279]: Die Verarbeitung der Datei 'C:\temp\flatfile_KDstat_Kunden.csv wurde gestartet.
Information: 0x4004300C at Datenflusstask, DTS.Pipeline: Die Phase 'Ausführung' beginnt.
Error: 0xC02090F5 at Datenflusstask, DataReader-Quelle [6976]: 'Komponente 'DataReader-Quelle' (6976)' konnte die Daten nicht verarbeiten.
Error: 0xC0047038 at Datenflusstask, DTS.Pipeline: Die PrimeOutput-Methode in 'Komponente 'DataReader-Quelle' (6976)' hat den Fehlercode 0xC02090F5 zurückgegeben. Die Komponente gab einen Fehlercode zurück, als das Pipelinemodul 'PrimeOutput()' aufgerufen hat. Die Bedeutung des Fehlercodes wird von der Komponente definiert. Der Fehler ist jedoch schwerwiegend, und die Ausführung der Pipeline wurde beendet.
Error: 0xC0047021 at Datenflusstask, DTS.Pipeline: Der Thread 'SourceThread0' wurde mit dem Fehlercode 0xC0047038 beendet.
Error: 0xC0047039 at Datenflusstask, DTS.Pipeline: Der Thread 'WorkThread0' hat ein Signal zum Herunterfahren erhalten und wird beendet. Der Benutzer hat das Herunterfahren angefordert, oder ein Fehler in einem anderen Thread hat dazu geführt, dass die Pipeline heruntergefahren wird.
Error: 0xC0047021 at Datenflusstask, DTS.Pipeline: Der Thread 'WorkThread0' wurde mit dem Fehlercode 0xC0047039 beendet.
Information: 0x40043008 at Datenflusstask, DTS.Pipeline: Die Phase 'Nach der Ausführung' beginnt.
Information: 0x402090DD at Datenflusstask, Flatfileziel [10279]: Die Verarbeitung der Datei 'C:\temp\flatfile_KDstat_Kunden.csv wurde beendet.
Information: 0x40043009 at Datenflusstask, DTS.Pipeline: Die Phase 'Cleanup' beginnt.
Information: 0x4004300B at Datenflusstask, DTS.Pipeline: 'Komponente 'Flatfileziel' (10279)' schrieb 0 Zeilen.
Task failed: Datenflusstask
Warning: 0x80019002 at Package: Die Execution-Methode wurde erfolgreich ausgeführt, aber die Anzahl von ausgel?sten Fehlern (5) hat den maximal zul?ssigen Wert erreicht (1). Deshalb tritt ein Fehler auf. Dieses Problem tritt auf, wenn die Anzahl von Fehlern den in 'MaximumErrorCount' angegebenen Wert erreicht. ?ndern Sie den Wert für 'MaximumErrorCount', oder beheben Sie die Fehler.
SSIS package "Package.dtsx" finished: Failure.
__
|||I got a workaround now: I built an "Execute DTS2000 task" in my SSIS-package. There the isolation and the select-statement are executed correctly. Of course this is ***, because my primary goal is to replace our existing DTS-packages on the SQL2000 Server with SSIS-packages on SQL2k5 :-/
We set up a Microsoft call, I′m very curious, what they will figure out.|||Still we haven′t found a proper solution. If anyone has an idea of how to solve this, please respond. Any help is greatly appreciated.|||
We finally found a possibility to import data from Informix via ODBC. It′s not straight forward, but it works.
1. Set up the Informix Source as System DSN Source
2. Create a linked Server on the Destination Server in the Management Studio, giving it the name of the ODBC-Source
3. Set up an OLE-DB Data Source in BIDS with your Destination Server as Target, giving it the following query:
SELECT <column1,column2...>
FROM openquery
(<lnksrv_name>,
'{SET ISOLATION TO DIRTY READ} SELECT src1 AS column1, src2 AS column2... FROM... WHERE...')
The important thing is the Isolation in the brackets. AFAIK it′s the only way to set a propper isolation level.
No comments:
Post a Comment