Avatar billede jesper_cph Nybegynder
20. januar 2004 - 22:33 Der er 4 kommentarer

Midlertidig fejl i SQL Server

Jeg har det problem at jeg midt under en eksekvering af en ASP side får flg. fejl.

"Microsoft OLE DB Provider for SQL Server error '80004005'

[DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied."

ASP siden gør det, at den selecter fra en table (15.000 rækker), og opdaterer resultatet i en anden tabel. Det er forskelligt hvor langt ASP siden kommer, nogle gange når den 70%, andre gang 80% af opdateringen.

------ Kode eksempel -----
SELECT * fra tblScores ORDER by IntScore
SET RS = dbConn.execute(SQL)

I = I + 1

Do while not rs.eof
  SQL = "Update tblUsers set intPos = " & I & " WHERE idUser =" & rs("idUser")
  dbConn.execute(SQL)
Rs.movenext
Loop
-----------------------------

Har prøvet at skiftet netkort, i begge maskiner, så de nu kører 1 Gbit i mellem de 2 servere.

Hvilket ikke har hjulpet. ... suk

Når fejlen opstår, er det som om at IIS serveren (som afvikler ASP koden) ikke kan få kontakt til SQL serveren i ca. 30 sek til 1 minut. Men jeg kan godt på samme tid få adgang til SQL serveren via Enterprise Manager og Query Analyzer imens fra min egen klient.

Så jeg er kommet frem til at fejlen må ligge på ASP/IIS maskinen, men det er en helt ren installation af Windows Server 2003.

------ Server setup --------
Server 1
Fujitsu-Siemens RX300 Server(Dual 2,8 Xeon, 1 Gb Ram, 72 Gb SCSI Raid 1, Gbit net)
Windows 2003 Web Server
MDAC 2.8

Server 2
Fujitsu-Siemens RX300 Server(Dual 2,8 Xeon, 1 Gb Ram, 72 Gb SCSI Raid 1, Gbit net)
Windows 2003 standart server
Microsoft SQL server 2000 SP3a
MDAC 2.8
Avatar billede eagleeye Praktikant
21. januar 2004 - 11:03 #1
Jeg kender ikke til mssql, men kan ka give lidt input (måske)
En søgning på google.com viser fejlen er fordi serveren ikke kan findes eller man ikke har rettigheder, det passer så ikke helt her for du siger den opdatere 70% af posterne og det må jo betyde connection er åben.

Kan man angive en Timeout for en connection i MSSQL?
Måske den timer ud og automatisk lukker for forbindelsen?

Eller sætte CommandTimeout på conenction (http://www.davidj.org/docs/ado_iis_timeout.html):
Conn.CommandTimeout = 5000


MSSQL kan execute flere SQL sætninger i samme streng hvis der er ; imellem:
"UPDATE xx SET A=2 where id=3;update xx set A=3 where id=4
Måkse det kan ændre på det hvis man samler 10 eller 50 i samme streng?? Hvis det er muligt..
Avatar billede the_bma_man Nybegynder
21. januar 2004 - 11:32 #2
Hvis der ikke skal ske andet, end det, du har beskrevet - og du ikke skal lave output til browseren over resultatet - hvorfor så ikke ligge selv opdateringen i en StoredProcedure? Og kalde denne fra din ASP?
Avatar billede jernespand Nybegynder
03. februar 2004 - 09:54 #3
Kan du skrive om den rigtige kode?
Avatar billede the_bma_man Nybegynder
11. marts 2004 - 11:18 #4
lav en stored procedure med følgende indhold:

declare @idUser int,
        @iCounter int,
    @last_error int

declare myCursor cursor for
  select iduser from tblScores ORDER by IntScore

select @iCounter = 0

open myCursor

while 1=1
BEGIN
  fetch next from myCursor into @idUser
  if @@fetch_status <> 0
    break

  select iCounter = iCounter + 1
  Update tblUsers set intPos = @iCounter WHERE idUser = @idUser
  select @last_error = @@error
  if (@last_error <> 0)
    break
end

close myCursor
deallocate myCursor

if (@last_error = 0)
  commit
else
  rollback
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