[ NeXuS_SO @ 14.08.2015. 17:32 ] @
Pozdrav svim ljudima dobre volje!

Molim vas sve za pomoć - radim na MS SQL serveru, revizija 2014 - EXPRESS izdanje ... A budući da ono ne poseduje agenta gde bih podesio bekap "job" ... pronašao sam alternativno rešenje u vidu saveta sa sledećeg linka ---> MSSQL Tips

Skripte rade odlično, ali u mom slučaju problem mi pravi što SQL skripta bekapuje SVE baze koje postoje na serveru ... a ne pojedinačno ciljano samo onu koju bih odredio za bekap.

Da li bih mogao da zamolim nekog iskusnijeg od mene da prepravi sledeću skriptu da može da se definiše ime jedne ili više pojedinačnih baza za bekap sa iste instance?

Code:

DECLARE @dateString CHAR(12), @dayStr CHAR(2), @monthStr CHAR(2), @hourStr CHAR(2), @minStr CHAR(2)
--month variable
IF (SELECT LEN(CAST(MONTH(GETDATE()) AS CHAR(2))))=2
   SET @monthSTR=CAST(MONTH(GETDATE()) AS CHAR(2))
ELSE
   SET @monthSTR= '0' + CAST(MONTH(GETDATE()) AS CHAR(2))
--day variable
IF (SELECT LEN(CAST(DAY(GETDATE()) AS CHAR(2))))=2
   SET @daySTR=CAST(DAY(GETDATE()) AS CHAR(2))
ELSE
   SET @daySTR='0' + CAST(DAY(GETDATE()) AS CHAR(2))
--hour variable
IF (SELECT LEN(DATEPART(hh, GETDATE())))=2
   SET @hourStr=CAST(DATEPART(hh, GETDATE()) AS CHAR(2))
ELSE
   SET @hourStr= '0' + CAST(DATEPART(hh, GETDATE()) AS CHAR(2))
--minute variable
IF (SELECT LEN(DATEPART(mi, GETDATE())))=2
   SET @minStr=CAST(DATEPART(mi, GETDATE()) AS CHAR(2))
ELSE
   SET @minStr= '0' + CAST(DATEPART(mi, GETDATE()) AS CHAR(2))
--name variable based on time stamp
SET @dateString=CAST(YEAR(GETDATE()) AS CHAR(4)) + @monthStr + @dayStr + @hourStr + @minStr
--=================================================================
DECLARE @IDENT INT, @sql VARCHAR(1000), @DBNAME VARCHAR(200)
SELECT @IDENT=MIN(database_id) FROM SYS.DATABASES WHERE [database_id] > 0 AND NAME NOT IN ('TEMPDB')
WHILE @IDENT IS NOT NULL
BEGIN
   SELECT @DBNAME = NAME FROM SYS.DATABASES WHERE database_id = @IDENT
/*Change disk location here as required*/
   SELECT @SQL = 'BACKUP DATABASE '+@DBNAME+' TO DISK = ''E:\SQL_Backup\'+@DBNAME+'_db_' + @dateString +'.BAK'' WITH INIT'
   EXEC (@SQL)
   SELECT @IDENT=MIN(database_id) FROM SYS.DATABASES WHERE [database_id] > 0 AND database_id>@IDENT AND NAME NOT IN ('TEMPDB')
END 



Svaka sugestija je dobrodošla.
Hvala u napred!
[ Dusan Kondic @ 14.08.2015. 17:58 ] @
Najjednostavnije je da promeniš WHERE klauzulu tako da umesto
Code:
AND NAME NOT IN ('TEMPDB')

staviš
Code:
AND NAME IN ('NazivBaze1', 'NazivBaze2', ... itd.)

Gde su 'NazivBaze1', 'NazivBaze2', ... nazivi baza za koje ŽELIŠ da praviš rezervne kopije.
Napomenuću da ova izmena treba da se uradi na dva mesta.
Pozdrav
[ NeXuS_SO @ 14.08.2015. 18:34 ] @
Hvala ti mnogo dobri čoveče Dušane!

Ne mogu da ti opišem koliko si mi pomogao ... ovo je jedan od onih problema gde imaš 95% posto rešenja pokriveno, ali onih poslednjih 5% je ključ da sve "klikne" i radi




Veliki pozdrav!
[ Dusan Kondic @ 14.08.2015. 18:47 ] @
Hvala na komplimentima. :-)
Drago mi je ako sam pomogao.
Pozdrav