salve,
andrea99999 wrote:
Ciao a tutti
dopo alcuni mesi di prove varie, vorrei fare un backup del database, cioè tabelle, dati, stored, trigger, viste ecc ecc.
C'è una funziona automatica o si ricopiano i files da qualche directory????
un backup di SQL Server e' un'azione eseguita tramite gli apposito comandi SQL, appunto, di BACKUP {DATABASE | LOG} [nomeBD] .....;
non e' una copia di file fisici, ma una vera e propria attivita' interna eseguita dallo storage engine che effettua il dump su nastro, file, ..., del database in modo proprietario.. non e' accessibile esternamente e puo' solo essere utilizzato per successive operazione di RESTORE..
e' un'attivita' protetta transazionalmente da SQL Server, che puo' essere eseguita "a caldo", cioe' mentre vengono magari eseguite operazioni DML concorrenti, che "garantisce" un perfetto stato di congruita' logica e fisica nel caso sia necessario eseguire un ripristino da questo dump.. questa e' la funzionalita' da usare anche con SQLExpress, malgrado la possibilita' (non garantita) di eseguire anche copie fisiche dei files che costituiscono il database, in quanto operazioni di cache potrebbero essere pendenti comportando la invalidita' dei file copiati, come magari anche l'impossibilita' di procedere in quanto lo storage engine alloca dei lock a livello di file system sui database in uso.
detto cio', vedi quindi
http://msdn.microsoft.com/en-us/library/ms186865.aspx relativamente alla sinopsi del comando..
questa attivita' puo' (anzi dovrebbe) anche essere in un qualche modo schedulata, in modo da garantire delle finestre sicure di ripristino, e per non demandare il tutto all'incertezza dell'attivita' dell'utente interattivo..
con SQLExpress non e' possibile utilizzare lo scheduler di SQL Server, il SQL Server Agent, in quanto non disponibile all'utilizzo (malgrado installato), e quindi si deve aggirare l'ostacolo utilizzando altri scheduler, in primis e gratuito lo scheduler nativo del sistema operativo.. per l'occasione va scritto un apposito file contenente i comandi SQL da eseguire, che verrano richiamati dal file batch schedulato tramite l'utilizzo di SqlCMD.exe..
l'architettura quindi sara' composta dal file .sql da eseguirsi, tipicamente <backup.sql>
BACKUP DATABASE pubs TO DISK = 'c:\myBackups\pubs.bak' WITH FORMAT; </backup.sql>
richiamato dal file batch
<backup.cmd>
SqlCMD.exe -E -S(Local)\SQLExpress -i"c:\...\backup.sql" -o"c:\'c:\myBackupsBackupLog.txt" </backup.cmd>
che verra' schedulato come desiderato..
saluti