miknira Skrevet 23. februar 2012 Del Skrevet 23. februar 2012 Var ikke enkelt å finne på nettet dette. Holder på med et lite batch script hvor jeg er avhengig av å hente ut database navnet fra .bak fila så jeg kan få det samme navnet på basen på ny server. Skal sette en variabel med dette basenavnet. ??? Lenke til kommentar
weebl Skrevet 24. februar 2012 Del Skrevet 24. februar 2012 .bak er vel som oftest kun en endelse som settes for å vise at dette er en backup av en annen fil. sikker på at ikke filen heter noe som: foo.bar.bak? Lenke til kommentar
NoBo Skrevet 25. februar 2012 Del Skrevet 25. februar 2012 (endret) Litt usikker på om jeg skjønner hva du vil men prøver meg med et forslag. FOR -kommandoen (FOR /? i et command prompt) gir deg mulighet til å jobbe med blant annet filer. Fra Command Prompt (cmd.exe): 1. CD til katalogen hvor backupfilene dine ligger 2. FOR /F %I in ('dir /on /b /a-d') do @ECHO %~nI Forklaring: ('dir /on /b /a-d') - Gir som resultat kun filnavnet og endelsen @ECHO %~nI - Viser kun filnavnet. Bytt ut @ECHO med kommandoen du skal kjøre for å få kjørt restore. Eksempel: Jeg skal restore alle databaser som ligger under W:\Backup. Databasefiler skal ligge under R:\Data02, Logfiler under S:\Log02. Filnavnet har en space i seg, derfor "tokens=* delims=_". Database- og Logfilene lå et annet sted tidligere, så jeg angir eksplisitt den nye pathen. FOR /F "tokens=* delims=_" %I in ('dir /on /b') DO @sqlcmd -S {SQL SERVERNAVN} -E -Q "RESTORE DATABASE [%~nI] FROM DISK = N'W:\Backup\%I' WITH FILE = 1, MOVE N'Testbase' TO N'R:\Data02\%~nI.mdf', MOVE N'Testbase_log' TO N'S:\Log02\%~nI.ldf', NOUNLOAD, STATS = 10" Hvis du jobber med MS sQL server, husk på at det kan ligge stored procedures etc. i Master som du må ha med, collation bør stemme overens og at du må ha med deg logins fra den gamle serveren, se f. eks. How to transfer the logins and the passwords between instances of SQL Server 2005 and SQL Server 2008. Endret 25. februar 2012 av NoBo Lenke til kommentar
RulleRimfrost Skrevet 27. februar 2012 Del Skrevet 27. februar 2012 Kanskje du kunne skilt ut sqlcmd rutinen fra loopen som en egen bat-fil, og sendt inn navnet som en parameter? for %%i in ('dir /xxxx) do call MinSqlCmd %%~ni %%~xi Bat-filen MinSqlCmd vil da motta filnavnet som %1 og extension som %2, og så gjøre noen smart ala set filnavn=%1:~0,12% (eller kanskje telle tegn med LEN) for evt å strippe ut datoer i filnavnet etterpå. Tror jeg... Lenke til kommentar
miknira Skrevet 11. mars 2013 Forfatter Del Skrevet 11. mars 2013 (endret) Ble lagt på hylla den greien der helt til det kom opp igjen nå i helga :-) Har delvis funnet en løsning på dette teoretisk men har litt problemer med å sende en variabel fra et batch script inni en sql fil (stored procedure) + å sette variabelen inn i sql spørringen i sql fila. Kan legge ut det jeg har hittil. Bat filen: echo off set dire=c:\db-bck\ For /F %%N IN ('dir C:\db-bck\*.bak /on /b /a-d') DO ( TITLE %%N sqlcmd -S .\sql-db -i db_list.sql -v database="%%1" -v root="C:\db-bck\" > c:\db-bck\temp.txt set /p value=< c:\db-bck\temp.txt echo %value% echo %dire%%%N \"Program Files (x86)"\Pranas.NET\SQLRestore\sqlrestore %dire%%%N -srv .\sql-db -db %value% break ) sql filen: declare @db varchar(255) set @db = (SELECT DatabaseName FROM OPENROWSET('SQLNCLI', 'Server=.\VESTDIST;Trusted_Connection=yes;', 'SET NOCOUNT ON;SET FMTONLY OFF;EXEC('' RESTORE HEADERONLY FROM DISK = ''''C:\db-bck\data1.BAK'''' '')') ) print @db Endret 11. mars 2013 av miknira Lenke til kommentar
miknira Skrevet 11. mars 2013 Forfatter Del Skrevet 11. mars 2013 ps. bruker her et gratis program som heter One-Click SQL Restore på slutten av batchscriptet. Blir litt enklere koding da. Poenget med hele greia er å restore over 2600 baser til en ny sql server uten og måtte klikke seg igjen hele greia manuelt :-) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå