Toon posts:

OSQL in batch file

Pagina: 1
Acties:
  • 259 views sinds 30-01-2008
  • Reageer

Palthe

Topicstarter
Ik wil graag het volgende:
uit de master database informatie halen over de locatie van een database:

select filename from sysdatabases where name in ("databasenaam")

die locatie wil ik dan weer gebruiken om de ldf te verwijderen.
mijn script tot nu:

------------------------------------------------------------------------------------------------------------------------
@ECHO OFF
@ECHO Logfile opnieuw opbouwen.
@SET /P USR_INPUT=[Database:]

OSQL -E -Q "sp_configure 'allow', 1"

OSQL -E -Q "update sysdatabases set status = 32768 where dbid = (select dbid from sysdatabases where name='%USR_INPUT%')"

set name=OSQL -E -d master -Q "select filename from sysdatabases where name in ("%USR_INPUT%")"

net stop sqlserveragent

net stop mssqlserver

copy LOCATIE\%USR_INPUT%*.ldf" LOCATIE\%USR_INPUT%*.oudldf"

net start mssqlserver

net start sqlserveragent

OSQL -E -S -Q "dbcc rebuild_log ('%USR_INPUT%', LOCATIE\%USR_INPUT%.ldf')"

OSQL -E -S -Q "update sysdatabases set status = 16 where dbid= (select dbid from sysdatabases where name='%USR_INPUT%')"

OSQL -E -S -Q "sp_configure 'allow', 0"
------------------------------------------------------------------------------------------------------------------

Het script werkt prima, alleen ik moet nu dus nog een tweede user input ingeven waar de locatie van de database staat. Echter ik wil dus bovenstaande query, herhaal:

select filename from sysdatabases where name in ("databasenaam")

in osql gebruiken om ook nog de locatie van de mdf (en dus de ldf) voor het afsluiten van de service te "kopiëren" en weer te gebruiken bij de delete regel (locatie dikgedrukt)

Dus een SET LOCATION = en dan de uitkomst van de query minus de databasenaam.mdf.

iemand enig idee?

[ Voor 8% gewijzigd door Palthe op 16-06-2006 16:11 ]


Verwijderd

cmd.exe heeft zelf geen string manipulatie routines, en dan ben je aangewezen op externe routines als de GNU text utilities, of cmd-vervangers als 4DOS/4NT, Cygwin, etc.
Ik zweer zelf bij Cygwin, maar dan moet je nogal unix-minded zijn, en een volledige Cygwin installatie is al gauw iets van 15MB. 4DOS was vroeger (in de command.com tijd) ook een favoriet van me.

Maar heb je al 's gekeken naar WSH (Windows Scripting Host, gratis bij Microsoft te halen)? Batch files in VBScript of JScript, met alle string-handling gemakken die die talen bieden.

Verwijderd

Is het misschien een idee om niet de complete server down te gooien, maar om alleen de database die je gaat repareren 'offline' te zetten?
Want dan kan je een script maken en die in master zetten.

[ Voor 5% gewijzigd door Verwijderd op 17-06-2006 07:03 ]


Palthe

Topicstarter
Verwijderd schreef op zaterdag 17 juni 2006 @ 07:03:
Is het misschien een idee om niet de complete server down te gooien, maar om alleen de database die je gaat repareren 'offline' te zetten?
Want dan kan je een script maken en die in master zetten.
Ik heb het nu gewoon opgelost door een tweede user input te gebruiken.
Dank jullie voor het meedenken, het moet gewoon een simpel script worden in batch. Ik ga zeker kijken naar Cygwin / WSH, dank voor de tip.

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 13-01 07:19
Je kunt wel degelijk string manipulatie doen in batch files, in ieder geval in een moderne windows.

Doe SET /? in een command prompt om te zien wat allemaal kan. Je kunt berekeningen doen, input prompts doen, substrings weergeven, etc.