Archiviare database SQL creando una copia

venerdì 07 dicembre 2012 - 18.28
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Windows 7  |  Visual Studio 2010  |  SQL Server Express

alsa Profilo | Junior Member

Salve ragazzi,
il quesito che vi pongo penso sia di facile soluzione.
In pratica ho un applicativo sviluppato con VB 2010 che lavora con un database SQL Express (che si chiama MMM), e vorrei, alla fine dell' anno, dare la possibilità all' utente, di archiviare il database effettuandone una copia (dal nome MMM2012) e azzerarlo per scrivere all' interno i dati del nuovo anno come se il database fosse nuovo.
Ovviamente però l' utente deve anche avere la possibilità di tornare a visualizzare i dati del database archiviato tramite un apposito tasto.
La domanda è: qual' è il comando che mi consente, tramite VB.Net di effettuare la copia del database, possibilmente mantenendo gli stessi Nome utente e Password?

Spero di essermi spiegato correttamente e ringrazio da subito chi vorrà aiutarmi.

renarig Profilo | Expert

>il quesito che vi pongo penso sia di facile soluzione.

>La domanda è: qual' è il comando che mi consente, tramite VB.Net
>di effettuare la copia del database, possibilmente mantenendo .....


La soluzione non è cosi facile,
e non mi risulta che esista un comando specifico in VB.Net
__________________________________________________________________

Tu vorresti di una serie di comandi che facciano queste cose

1°) ___ Il BaclUp di MMM ( spero che non lo fai solo a fime anno ! )
2°) ___ archiviazione del BackUp
3°) ___ generazione di un nuovo DB ( MMM2012 ) dal BackUp
4°) ___ Azzeramento dei dati del DB MMM
__________ ( solitamente ci sono dentro delle tabelle che "scavallano" negli anni )
__________ esempio tipico un DB di ordini e la sua tabella Clienti
__________ gli ordini potranno essere annuali, ma i clienti "scavallano" negli anni
5°) ___ poi devi modificare la applicazione affinche a comando modifichi
la sua stringa di connessione da MMM a MMM2012

Tutto quanto sopra per dirti che ti SCONSIGLIO una soluzione simile

___________________________________________________________________________

Io farei cosi:

In ogni tabella del DB MMM aggiungi un campo ( Chiamiamolo DaCr )
con valore predefinito (getdate())
significa che SQL si occupa autonomamente di inserire ad ogni
nuovo record creato la sua data e ora di creazione.


nella tua applicazione aggiungi una casella ( chiamiamola AnCo ) dove scrivi l'anno considerato

poi in tutte le query della applicazione che estraggono dati dal DB aggiungi la clausola
___ WHERE YEAR(DaCr) = AnCo
___ Dove l'anno della data di creazione record sia uguale a Anno Considerato dalla applicazione



.

















alsa Profilo | Junior Member

Ok, in effetti mi sorgevano dubbi se la soluzione che avevo in mente fosse efficace, direi che la soluzione che mi hai proposto è molto valida ma a tal proposito mi sorge un dubbio.
C'è un limite, in SQL Express al numero di record che possono essere presenti in una tabella, oppure, rischio di rallentare l' esecuzione dell' applicazione se una o più tabelle raggiungono un numero di record considerevole?

Inoltre vorrei chiederti ancora una cosa, la mia idea è quella di impostare un backup del database dall' applicazione stessa, ma, qual'è il comando?

Grazie ancora!

renarig Profilo | Expert

>C'è un limite, in SQL Express al numero di record che possono
>essere presenti in una tabella, oppure, rischio di rallentare
>l' esecuzione dell' applicazione se una o più tabelle raggiungono
>un numero di record considerevole?

SQL Express è molto molto molto piu forte di quanto immaginiamo

Rallentamenti solitamente dipendono piu dagli indici che dal numero di record

Comunque i limiti della versione express sono
__ 10 Gb per il DB
__ eccetera
( se fai una ricerca trovi tutto )


>Inoltre vorrei chiederti ancora una cosa, la mia idea è quella
>di impostare un backup del database dall' applicazione stessa,
>ma, qual'è il comando?
Ci sono diversi tipi di BackUp
__Vai in ManagementStudio
__Click Dx sul DB
__Attivita
__BackUp
__Selezioni le tue opzioni
__Prima di dare OK Clicca in alto a Sx ( Script )
__ Ti stampa a video il comando che cerchi ( senza eseguirlo )




.

dompa72 Profilo | Senior Member

io, fossi in te, farei uno script da eseguire non a discrezione dell'utente ma come funzione di manutenzione obbligatoria ad inizio anno, questo per evitare di avere dati riguardanti lo stesso anno su due database.
Queste soluzioni non mi piacciono molto, perché complicano sia la gestione che eventuali sviluppi futuri (es. gestione di un nuovo campo in una tabella comporta modifiche anche a tabelle dei db di anni precedenti), oltre a complicare la gestione di di funzioni di analisi su due periodi diversi, anche se può essere utilizzato la funzione Union.
Se lo scopo è non acquistare una licenza commerciale di SQL Server è possibile sempre utilizzare una versione Freeware ad esempio PostgreSQL.
In definitiva scegliere una soluzione facile (non credo) può portare delle complicazioni dopo (nuove funzioni ed es. di analisi dati) con sviluppi imprevedibili, questo lo dico per esperienza personale. Nella mia azienda ho fatto acquistare due licenze a Processore per evitare problemi di sviluppo, questo dopo aver esposto i pro ed i contro dell'utilizzo di MS SQL Server e PostgreSQL.

Ti posto delle classi che ho trovato su internet, ma non ricordo il link

Ciao e buone feste
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5