Avatar billede pimpf202 Nybegynder
11. juli 2004 - 20:44 Der er 7 kommentarer og
1 løsning

problemer med afvikling af kode i et sqlserver job

Jeg har et problem med følgende kode:

print 'Kontrollere databasens tilstand'
alter database cherry set single_user with no_wait 
set @checkdb = @@error
if @checkdb > 0
  begin
  print 'Der er brugere i databasen, fortsætter uden kontrol af databasen'
end
else
  begin
  dbcc checkdb ('cherry', REPAIR_REBUILD) with NO_INFOMSGS
    if @@error > 0
      begin
      set @fejl = @@error
      print 'Databasen er blevet markeret dårlig af systemet... der vil IKKE blive taget nogen backup'
      ALTER DATABASE cherry SET MULTI_USER
      return
    end
    else
      begin
      print ' databasen er blevet kontrolleret og er fundet fejlfri '   
      ALTER DATABASE uniksys SET MULTI_USER
    end
end

!! herefter fortsætter koden!!

Fyre jeg dette af i qa, så fungere det perfekt. Er der noget der hænge databasen op, så kommer den med følgende svar :

"Server: Msg 5070, Level 16, State 2, Line 31
Database state cannot be changed while other users are using the database 'uniksys'
Server: Msg 5069, Level 16, State 1, Line 31
ALTER DATABASE statement failed."

og fortsætter med at skrive mine print statements ud, og fortsætter med at afvikle koden.

smidder jeg så alt dette ind i en sp, og laver et enkelt job, som skal afvikle det, så når den får samme svar som beskrevet oppe over (msg 5069 & 5070), så terminere den, og afvikler ikke mere kode. her ville jeg gerne have at den fortsatte lige som den gør i qa.
Ville være fantastisk hvis der var nogen som kunne hjælpe..
Avatar billede Slettet bruger
11. juli 2004 - 21:09 #1
Jeg har ikke lige en løsning men undrer mig over díne databaser altså du bruger både cherry og uniksys er det en fejl eller er det rigtig nok?
Avatar billede pimpf202 Nybegynder
11. juli 2004 - 21:18 #2
min fejl... databasen hedder cherry, og det er ikke en fejl jeg har i min "rigtige kode"
Avatar billede Slettet bruger
11. juli 2004 - 21:21 #3
ok :-)
Avatar billede pimpf202 Nybegynder
11. juli 2004 - 22:29 #4
Jeg kan tilføje at jeg har nøjagtig samme problem, når jeg benytter koden i en dts pakke.
Avatar billede janus_007 Nybegynder
12. juli 2004 - 16:02 #5
Du skal bruge lidt ekstra i dine ALTER DATABASE syntax!

Sådan her lige efter din set option

alter database cherry set single_user WITH ROLLBACK IMMEDIATE
Avatar billede pimpf202 Nybegynder
13. juli 2004 - 10:29 #6
Du har ret, den afvikler koden nu. Jeg forstår bare ikke hvad der sker. Efter den har rullet tilbage, går den ind og kører dbcc checkdb, og efter dette returnere den @@error = 0 ?? hvordan kan det være når der stadigvæk er brugere i db'en ??. Og ruller man tilbage, er der så en måde man kan kontrollere om skiftet til single user mode er gået godt? Ellers kan man jo ikke rigtig styre koden hvad den så skal gøre, og så vil den jo i dette tilfælde altid køre checkdb.
Hvis du kan svare på noget af dette ville jeg blive meget glad, og give dig point'ne.
Tak for hjælpen indtil videre.
Avatar billede janus_007 Nybegynder
13. juli 2004 - 10:47 #7
Det spørgsmål skal jo oprettes i en ny tråd *S*

Men jeg kan da fortælle at du kan kontrollere single user mode ved at kigge i sysdatabases (status 4096)
Avatar billede pimpf202 Nybegynder
13. juli 2004 - 10:51 #8
ok. tak for hjælpen
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
Computerworld tilbyder specialiserede kurser i database-management

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