SKrypt backupu bazy

0

Jak zrobić w skrypcie do kopi bazy, żeby ją pakował i potem utworzony plik kopii usunął, a ma zostać tylko ten spakowany.

Mam prosty skrypt, który zrzuca wszystkie bazy - działa:

DECLARE @DBName varchar(255)

DECLARE @DATABASES_Fetch int

DECLARE DATABASES_CURSOR CURSOR FOR
select
DATABASE_NAME = db_name(s_mf.database_id)
from
sys.master_files s_mf
where
-- ONLINE
s_mf.state = 0

-- Only look at databases to which we have access
and has_dbaccess(db_name(s_mf.database_id)) = 1

-- Not master, tempdb or model
and db_name(s_mf.database_id) not in ('Master','tempdb','model')
group by s_mf.database_id
order by 1

OPEN DATABASES_CURSOR

FETCH NEXT FROM DATABASES_CURSOR INTO @DBName

WHILE @@FETCH_STATUS = 0
BEGIN
declare @DBFileName varchar(256)
set @DBFileName = datename(dw, getdate()) + ' - ' +
replace(replace(@DBName,':','_'),'\','_')

exec ('BACKUP DATABASE [' + @DBName + '] TO DISK = N''E:\Kopia\BazySQL\bazysql\' +
@DBFileName + ''' WITH NOFORMAT, INIT, NAME = N''' +
@DBName + '-Full Database Backup'', SKIP, NOREWIND, NOUNLOAD, STATS = 100')

FETCH NEXT FROM DATABASES_CURSOR INTO @DBName
END

CLOSE DATABASES_CURSOR
DEALLOCATE DATABASES_CURSOR 

ale tu wszystkie bazy lądują do folderu E:\Kopia\BazySQL\bazysql
Dysk jest mały i potrzebuję daną bazę - czyli w tym WHILE'u na jego końcu każdą bazę spakować np. 7zip lub zip, a następnie ją usunąć

1

To jest SQl server - tak domniemywuję? To masz konkretny przykład jak to zrobić https://www.mssqltips.com/sqlservertip/1070/simple-script-to-backup-all-sql-server-databases/ . Backupy mogą być od razu przez bazę kompresowane - poszukacj na stronie COMPRESSION.

1

@S4t:

mogą, ale w komercyjnym Serverze.
Express nie.

0

@ZrobieDobrze: Tak a to właśnie jest express ;-(

2

@qwek: To opakuj to w skrypt PoweShell i potem odpal kompresje.

0

Hmm - tylko jak to opakować w powershela? Tak żeby w tej pętli - spakował tę bazę, a następnie plik kopi bazy usunął, a zostawił tylko archiwum...?
Chyba, że inny pomysł - niech zrzuca te bazy jako pliki ale potem podczas pakowania w jedno archiwum niech je usuwa podczas dodawania do archiwum - chodzi o to, że mam mało miejsca tam na dysku - jak robi kopie - to mam baz ok 400szt. na ok. 50GB, następnie powstaje archiwum na kolejne 40GB - a miejsca mam tylko 80GB i muszę się w tym zmieścić...

0

Tylko odpalenie skryptu w Power Shellu chyba nic nie da - w skrypcie jest WHILE - pętla, która zrzuca bazy... zatem w tej pętli po zrzuceniu tej bazy, trzeba by ją archiwizować i potem usunąć, a następnie WHILE to samo zrobi z kolejną bazą... Nie mogę w Power Shellu nagle wyjść z pętli - odpalić archiwizację i usunięcie i wrócić do pętli

1 użytkowników online, w tym zalogowanych: 0, gości: 1