Gå til innhold

Hente ut navn på database fra .bak fil på cmd ?


Anbefalte innlegg

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
Videoannonse
Annonse

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 av NoBo
Lenke til kommentar

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
  • 1 år senere...

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 av miknira
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...