Avatar billede fuldstop Nybegynder
08. august 2012 - 20:05 Der er 13 kommentarer og
1 løsning

ODBC forbindelse til Oracle - ORA-1013

Jeg har et problem i forbindelse med en odbc forbindelse til en "remote" oracle database via min asp.net side.

Miljø:
Web Server: Windows Server 2008 (64 bit), IIS 7.5, Asp.net 2.0, Web application/pool (64 bit), odbc driver Oracle in OraClient11g_home1 (64 bit).

Jeg forbinder og henter fint data fra oracle databasen med nedenstående kode:

Dim conn As OdbcConnection

Dim comm As OdbcCommand

Dim dr As OdbcDataReader

Dim sql As String

sql = "Select TIMESTAMP From MyDB WHERE P1='AAA' AND P2='BBB' AND P3='CCC' AND P4='DDD' AND TIMESTAMP BETWEEN '05-03-2012 01:00:00' AND '05-03-2012 23:00:00' ORDER BY TIMESTAMP"

conn = New OdbcConnection("Driver={Oracle in OraClient11g_home1};UID=***;Pwd=***;DBQ=***;")

conn.Open()

comm = New OdbcCommand(sql, conn)

dr = comm.ExecuteReader()

While (dr.Read())

Response.Write (dr("TIMESTAMP") & "<br>")

End While

conn.Close()

dr.Close()

comm.Dispose()

conn.Dispose()


Ønsker jeg ligeledes at hente data fra en anden kolonne, f.eks VALUE_AVG som er NUMBER:

sql = "Select TIMESTAMP, VALUE_AVG From MyDB WHERE P1='AAA' AND P2='BBB' AND P3='CCC' AND P4='DDD' AND TIMESTAMP BETWEEN '05-03-2012 01:00:00' AND '05-03-2012 23:00:00' ORDER BY TIMESTAMP"

Timer forbindelsen ud med "ORA-1013 User requested cancellation of current operation" fejl efter ca. 30 sek., selv om det ikke er særlig meget data der hentes (ca. 200-300 dato og tal-værdier). Brugeren (mig selv) har ikke afbrudt noget :).


Korter jeg søgekriteriet ned på "TIMESTAMP BETWEEN" til et kortere tidsinterval, kan den fint hente begge værdier (TIMESTAMP og VALUE_AVG), dog går det langsomt.


Jeg mistænker lidt at at det er de NUMBER værdier som skaber problemerne, da jeg kan hente TIMESTAMP værdierne over en lang tidsperiode på kort tid.

Jeg er lidt på bar bund, og har søgt google tyndt i forbindelse med NUMBER format og ORA 1013 fejlen, og er efterhånden mere forvirret end da jeg startede :).

Har ligeledes prøvet at ændre connection timeout, dog uden at det hjælper på ovenstående problem, og det virker da heller ikke som om at timeout-tiden er problemet. Problemet opstår som sagt først når jeg begynder at forespørge på de NUMBER værdier i ORACLE databasen. Kan godt hente få NUMBER værdier fra databsen men det går langsomt. Prøver jeg at hente relativt flere (hvilket er meget få NUMBER værdier) NUMBER værdier, opstår ORA-1013 fejlen.

Alle inputs er velkommen til at løse dette problem? På forhånd tak.
Avatar billede arne_v Ekspert
08. august 2012 - 21:26 #1
1) de lange svartider kune skyldes enten daarlig net forbindelse til databasen eller mangelende index paa tabellen
Avatar billede arne_v Ekspert
08. august 2012 - 21:27 #2
2) Response.Write er et no no i ASP.NET !
Avatar billede fuldstop Nybegynder
08. august 2012 - 21:37 #3
Tror nu ikke det er netforbindelse. Virker fint vha. en kædet tabel via access (odbc)



Hvorfor er Response.Write et no go?
Avatar billede arne_v Ekspert
08. august 2012 - 21:50 #4
Koerer du ASP.NET og Access paa samme PC naar du tester?
Avatar billede arne_v Ekspert
08. august 2012 - 21:51 #5
ASP.NET web forms har andre og bedre maader at lav eoutput paa via diverse web kontroller.
Avatar billede fuldstop Nybegynder
08. august 2012 - 22:06 #6
Kører godt nok ikke access fra samme server, når der linkes til oracle databasen.

Men finder det godt nok mærkeligt at jeg lynhurtigt kan hente mange TIMESTAMPS ud, og når så jeg tilføjer VALUE_AVG så går det langsomt eller 1013 fejlen opstår via. ASP.NET og IIS-serveren.

Mener jeg for længe siden har prøvet at forbinde til oracle databasen vha. ISQLplus fra IIS serveren og hente værdierne og det gik også fint. Men må prøve igen og se.

Er der mulighed for DSN (system DSN) forbindelse og ASP.NET 2.0? Eller er ADO tilhørende ASP?
Avatar billede arne_v Ekspert
08. august 2012 - 22:14 #7
OdbcConnetion boer understoette DSN.
Avatar billede arne_v Ekspert
08. august 2012 - 22:17 #8
Det er muligt med hiv og sving at bruge ADODB i ASP.NET men det er ikke helt nemt.

OdbcConnection (eller OleDbConnection) er maaden at tilgaa ODBC driver (eller OLE DB provider) paa.

Du boer have en OLE DB provider ogsaa.

Men den rigtige .NET maade at tilgaa en Oracle database paa er via Oracle Client (enten den der kommer med .NET eller den man kan hent hos Oracle).

Saa hedder klassen OracleConnection.
Avatar billede fuldstop Nybegynder
08. august 2012 - 22:25 #9
Må lige prøve med dsn i morgen, og se om jeg kan få det til at virke.

Når jeg nu laver en kædet forbindelse til en oracle database via access, er der en masse forbindelses parametre, måske kan jeg overføre dem til connectionen-strengen i ASP.NET og se om det gør nogen forskel.

f.eks LOB=T;RST=T;GDE=F osv,osv.

Smider du lige et svar Arne? Vender nok tilbage igen i et andet spørgsmål :)
Avatar billede arne_v Ekspert
08. august 2012 - 23:55 #10
Connection string til OdbcConnection burde tage alle de samme parametre.
Avatar billede arne_v Ekspert
08. august 2012 - 23:55 #11
svar
Avatar billede arne_v Ekspert
08. august 2012 - 23:55 #12
Jeg tror at jeg vile proeve med OracleClient foerst.
Avatar billede fuldstop Nybegynder
09. august 2012 - 18:48 #13
Fandt desværre ingen løsning på problemet i dag, og tror det har noget med indexeringen at gøre, som du selv nævner.

Fjerner jeg f.eks de fleste WHERE betingelserne og korter TIMESTAMP BETWEEN ned, kører det fint og jeg kan hente mange værdier fra databsen på kort tid.

sql = "Select * From MyDB WHERE TIMESTAMP BETWEEN '05-03-2012 01:00:00' AND '05-03-2012 01:15:00' ORDER BY TIMESTAMP"

Ender nok med at hente det over i en access database og sortere derfra :).
Avatar billede fuldstop Nybegynder
30. september 2012 - 06:18 #14
Til info, hvis det skulle ha' nogens interesse, så skyldes fejlen åbenbart odbc-driveren og dennes fortolkning af TIMESTAMP/DATE i en ORACLE query.

Ændres query'en i starten af indlægget til (to_char tilføjes TIMESTAMP):

Select TIMESTAMP From MyDB WHERE P1='AAA' AND P2='BBB' AND P3='CCC' AND P4='DDD' AND TIMESTAMP BETWEEN to_char('05-03-2012 01:00:00') AND to_char('05-03-2012 23:00:00') ORDER BY to_char('TIMESTAMP')

Ja, så kører det som en drøm, og der er hurtig svar fra Oracle og ingen fejl ORA-01013.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester