Newsgroup: it.comp.lang.visual-basic
Titolo: [?]Problemi con SQLSErver OLE DB RESTORE e BACKUP

Premetto che è una settimana che vado in giro per google e per BK ed MSDN,
ma non sono riuscito a venirne a capo.
Ho un applicativo che lavora in una sede centrale che non può connettersi
via LAN od Internet a dei client.
Sia dalla sede cetale che dai client posso aggiungere modificare e
cancellare i dati.
Sui client naturalmente posso fare solo delle determinate operazioni.
Per sincornizzare al massimo i dati ho impostato sulle tabelle che possono
essere modificate via programma un flag che dice se il dato è di proprietà
della sede centrale.
I dati della sede centrale non possono essere manipolati dai client.
I dati dei client possono però essere aggiunti alla sede centrale e può
anche eliminarli e modificarli.
L'esportazione dai client alla centrale la faccio esportando i recordset
salvandoli su files.
Per esportare i dati dalla centrale ai client, usavo copiare l'intero DB
Access e così ero sicuro che tutto fosse a posto.
Ora invece sto passando l'applicativo su SQLServer.
Naturalmente ora il casino è passare il DB dal Server Centrale ai client.
Effettuo il BACKUP del DB con il comando Execute
BACKUP DATABASE myDB to DISK = 'TempFileName.bak'
E per importarlo nei client uso il comando Execute
RESTORE DATABASE myDB FROM DISK = 'TempFileName.bak'
l'operazione funziona e non mi da alcun problema od errore (ci ho sbattuto
le corna per una settimana tra SQLDMO e TSQL, ma alla fine  ci sono
riuscito) ma.......
Ecco cosa mi succede quando faccio i test sulla macchina di sviluppo.
Apro l'applicazione (come se fosse sul server)
Scrivo dei dati nuovi
Effettuo il backup
Esco dalla apllicazione
apro Enterprise Manager
cancello i dati appena inseriti
Apro l'applicazione (come se fosse sul client)
Eseguo il RESTORE del DB
E mi aspetto che i dati che avevo cancellato siano nuovamente dentro..... ed
invece no.
Allora apro EM ed effettuo il backup dal file che avevo creato e ...... i
dati ricompaiono.
Come diamine è possibile che il comando funzioni da EM e non da VB?
BTW ho anche provato ad usare Query Analizer per controllare che il codice
di EXECUTE funzioni..... ed effettua il backup correttamente.
L'unico cosa che mi viene in mente è che anche se apro l'applicazione quale
Server che quale client il server SQL di appoggio è sempre lo stesso, ma se
fosse così andrei incontro ad altri problmi di sincronizzazione. Sapete
darmi una idea su come risolvere il problema?
In pratica come diamine faccio ad esportare un DB e poi reimportarlo?

 ha scritto nel messaggio
news:FsQUc.120208$OR2.6...@news3.tin.it...

Ciao Spieg,
il motivo potrebbe essere questo:
Un Backup di Sql Server può avere nello stesso file .Bak più di un set di
Backup. Se fai il restore da TSQL senza specificare da quale set vuoi
recuperare i dati viene preso il primo, mentre da EM viene preso per
defauilt l'ultimo.
Forse avevi fatto già un Backup, poi hai inserito i dati e hai rifatto il
Backup, poi hai cancellato i dati inseriti e hai eseguito il restore ma
questo ha preso il Db dal primo set di Backup ovvero quello senza i dati.
Per non dover specificare quale set di Backup usare e per non avere un file
.bak esagerato conviene azzerarlo ogni volta in questo modo
-----------------------
BACKUP DATABASE myDB to DISK = 'TempFileName.bak'
WITH INIT
-----------------------
l'opzione WITH INIT azzera il file .Bak prima del Backup
Ciao Giorgio

 >
Con stesso database senza modificare nulla :
Primo Backup 5 Mb
Secondo Backup 10Mb (5 del primo +5 del secondo)
Terzo Backup 15Mb e cosě via.
Sql Server tratta i Backup su disco o su nastro allo stesso modo, se non gli
dici di fare l'init lui va in accodamento.
Ciao Giorgio

 ha scritto nel
messaggio news:cg0mqm$6of$1...@lacerta.tiscalinet.it...


[CUT]
Per non trovare sorprese ....
Se il percorso del database è uguale in tutti i servers nessun problema, in
altro caso in fase di Restore devi specificare la locazione dei files fisici
(Mdf e Ldf) con l'opzione WITH MOVE
Ciao Giorgio

 ha scritto nel
messaggio news:cg1n9b$j7g$1...@lacerta.tiscalinet.it...


 passare a MySQL.
ROTFL .... resta con noi.... SQL Server ti ama =;-D
-- 
Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz/DbaMgr.shtm
 
http://italy.mvps.org
DbaMgr2k ver 0.8.0  -  DbaMgr ver 0.54.0
(my vb6+sql-dmo little try to provide MS MSDE 1.0 and MSDE 2000 a visual
interface)
--------- remove DMO to reply

passare a MySQL.
Esagerato..... per cosě poco :-)
Ciao Giorgio

 ROTFL .... resta con noi.... SQL Server ti ama =;-D
SI, ma MySQL è gratuito, fa velocemente un restore (non 30 secodi sul mio
computer) e sopratutto...... ste dannate transizioni me piacciono, ho
eliminato un bel po' di codice grazie a loro, quindi ...


Son passato a codice SQLDMO, ora faccio tranquillamente il backup ed il
restore e trovo la posizione dei files via codice.
Mi si presenta però questo problema:
Il mio DB ha un ruolo creato da me per effettuare alcune operazioni.
A questo ruolo ho aggiunto un utente chiamato Programma.
Ho inoltre creato un altro utente chiamao MisterX che ha tutte le
autorizzazioni sia sul server che sul DB.
Ora quando faccio il restore su una macchina diversa da quella di origine
(ma su cui girava già un DB con utenti identici e correttametne settati,
ottenuto usando un backup via EM e non via codice), dopo il restore mi trovo
che:
gli utenti MisterX e Programma hanno si tutte le autorizzazioni corrette nel
DataBase, peccato che i loro Login del Server siano scomparsi e quindi....
non riesco più ad accedere con tali utenti al db che mi interessa e di cui
ho appena fato il restore.
Per ovviare a questo attualmetne, via codice faccio la seguente operazione:
cancello gli utenti dal DB, ricreo i Login nel Server e poi ricreo gli
utenti nel db che mi interessa e riassegno i vari ruoli.
Possibile che debba fare tutto questo ogni volta?
Possibile che con il backup via EM non succede nulla di questo e via codice
invece .... mi perdo i login?(poer login intendo quelli nalla voce Sicurezza
di EM, non quelli nella voce Ruoli o Utenti del DB di interesse).
In pratica sembra che SQLServer si perda i login ma non gli alias usati sul
db di destinazione (assurdo vero?)
BTW non posso semplicemente riaggiungere i login ad SQL Server dato che se
ci provo vado in erre di duplicazione di identità, dato ceh sebbene il login
non esista ...... esiste un utente in un DB con stessa UID.
Esiste qualche particolare comando SQLDMO per ovviare a questo oppure ....
devo fare ccome ho descritto sopra e cancellare e reinserire gli utenti da
zero?