Newsgroup: it.comp.software.database
Titolo: [NEWBIE SQL Server] Copiare database tra pc

Salve a tutti, è la prima volta che scrivo su qs. NG.
Sto sviluppando un applicativo VB che si appoggia su un database SQL Server.
Ho la necessità di lavorare talvolta su un pc desktop e talvolta su un
portatile, per cui ho bisogno di copiare il database da un pc all'altro.
Io utilizzo SQL Server 7, ed è la prima volta che lo utilizzo. Ho studiato
qualche tutorial, però non sono riuscito a trasportare il database. Per
quanto riguarda la struttura sono riuscito a generare uno script sql e a
eseguirlo, ma per un database nuovo contenente dei dati non ci sono
riuscito.
Qualcuno mi ha detto di effettuare un backup, che però per qualche motivo
fallisce (l'importazione mi restituisce un messaggio di errore che parla
della clausola MOVE, che però non ho trovato da nessuna parte), qualcun
altro mi ha detto che basta interrompere il servizio e copiare i due file
.mdf e .ldf, ma anche questo non funziona sulla macchina target (cancello i
due file originali, copio nella directory i due file provenienti dall'altro
pc, riavvio il servizio, faccio il refresh, ma un messaggio mi dice che il
database è corrotto. A volte addirittura il database non viene visto del
tutto, e sono costretto a ripristinare i due file originali).
Insomma ogni consiglio è bene accetto, ma soprattutto vorrei capire qual è
il metodo migliore, quello corretto che bisognerebbe sempre eseguire.
Ringrazio in anticipo chi vorrà rispondermi.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Ringrazio in anticipo chi vorrà rispondermi.
Prego.
Ciao!
-- 
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

 leggi il seguente post:
[...CUT...]
Ciao, Lorenzo, grazie per la pronta risposta. Leggerò con attenzione gli
articoli che mi hai linkato. Se avrò ancora difficoltà, posterò ancora.


 Se avrò ancora difficoltà, posterò ancora.
Dunque, dalla pagina
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/howtosql/ht_7_design_4wq1.asp
riporto: "Right-click the database, and then select All Tasks/Detach
Database. This menu is visible only if you are a member of the sysadmin
fixed server role and the server to which you are connected is SQL Server
2000." In effetti io non ho il menu Detach Database visibile ("Detach" =
"Disconnetti"? Io ho la versione in italiano).
Ho tentato anche a fare un Restore, come indicato nella pagina XXX , ma si
interrompe dicendo che "il restore deve essere fatto in modalità utente
singolo". In effetti, all'inizio della pagina c'era il messaggio: "Important
The system administrator restoring the files must be the only person
currently using the database to be restored." Il fatto è che io sono l'unico
utente del database, anzi di tutto SQL server: sto lavorando in locale, e il
trasferimento dei file intendo farlo tramite una pen-drive.
Non ci sto capendo nulla...


 Non ci sto capendo nulla...
Allora, ti propongo un esempio basato sul database Northwind.
Apri una sessione di Query Analyzer e connettiti al server di origine con un
account amministrativo appartenente alla fixed server role sysadmin come ad
esempio "sa" (SQL Server) oppure Administrator (Windows) ed effettua il
backup del database:
USE master
GO
EXEC sp_helpdb Northwind
GO
/* Memorizzati il nome logico (name) ed il path fisico (filename) del master
data file
** e del transaction log dato che li utilizzerai in fase di restore
*/
BACKUP DATABASE Northwind
TO DISK = 'C:\Northwind.bak'
GO
/* Output:
Processed 632 pages for database 'Northwind', file 'Northwind' on file 1.
Processed 1 pages for database 'Northwind', file 'Northwind_log' on file 1.
BACKUP DATABASE successfully processed 633 pages in 3.534 seconds (1.465
MB/sec).
*/
OK, a questo punto copia il file 'C:\Northwind.bak' sul server di
destinazione, apri una nuova sessione di Query Analyzer, loggati con un
account amministrativo (esattamente come hai fatto prima) ed effettua il
restore del database:
USE master
GO
RESTORE DATABASE Northwind
FROM DISK = 'C:\Northwind.bak'
WITH RECOVERY,
MOVE 'Northwind' TO 'C:\MSSQL7\Data\northwnd.mdf',
MOVE 'Northwind_log' TO 'C:\MSSQL7\Data\northwnd.ldf'
GO
/* Output:
Processed 632 pages for database 'Northwind', file 'Northwind' on file 1.
Processed 1 pages for database 'Northwind', file 'Northwind_log' on file 1.
RESTORE DATABASE successfully processed 633 pages in 3.165 seconds (1.636
MB/sec).
*/
Per qualsiasi altra informazione consulta i Books Online di SQL Server.


Dunque; Lorenzo, devo ancora abusare della tua pazienza.
Dopo aver aperto QueryAnalyzer per la prima volta in vita mia, dopo aver
capito che dovevo copiare e incollare la tua query dentro la finestra, dopo
aver cliccato sul pulsante con la freccina verde, mi ha risposto
(ovviamente!) che "The database 'Northwind' does not exist. Use sp_helpdb to
show available databases.". Ora, io capisco perfino che sp_helpdb è una
stored procedure di qualche database del mio server (forse...Master?),
sebbene io nemmeno abbia idea di come potrei fare se volessi eseguirla, ma
comunque credo di aver capito il concetto: devo preparare una query con
RESTORE, FROM, WITH RECOVERY e MOVE, ed eseguirla nel QueryAnalizer. Tra
qualche minuto proverò.
Adesso sto provando a creare un database con lo stesso nome da ripristinare
sul secondo pc, ma mi dice che il nome è già in uso (Errore 21084 [SQL-DMO].
Io avevo creato un database con quel nome, ma l'avevo anche cancellato.
Perché è ancora in uso? I relativi file .mdf e .ldf non esistono. Dove posso
trovare ciò che mantiene il nome in vita?
Inoltre, se non riesco a creare un database - vuoto - con quel nome esatto,
posso comunque eseguire il restore?
Nel frattempo avevo letto su qualche forum che potevo esportare in un file
di testo o addirittura in un file di Access. Io ho creato un file CSV, ma
sembra che la dentro ci sia soltanto la struttura delle tabelle, non i dati
in esse contenuti, non è così? Proverò anche a importare questo file.
Io ti sono veramente grato per la tua disponibiltà e pazienza, ma purtroppo
come vedi sono veramente alle prime armi con SQL Server, e tutte le
operazioni che intuisco per te siano banali sono quasi incomprensibili per
me. Beh, speriamo basti la buona volontà.
Spero che vorrai commentare quanto sto facendo, almeno posso comprendere
quali passaggi sto sbagliando. Grazie ancora.
PS: smanettando qua e la per cercare il file in uso, ho trovato la directory
Books che contiene un file .chm: si tratta interamente dei Books online, o
c'è qualcos'altro che devo installare?


 Books online, o c'è qualcos'altro che devo installare?
I Books Online vengono installati contestualmente a SQL Server e li richiami
dal menu Start, Programs, Microsoft SQL Server, Books Online.


 dal menu Start, Programs, Microsoft SQL Server, Books Online.
Grazie. Trovati. Era quel file che dicevo io.
Dunque, adesso devo interrompere, e ti ringrazio tantissimo per l'attenzione
che mi hai dedicato. Leggerò la tua risposta stasera tardi (non voglio che
tu interpreti la mia non-risposta come scortesia) e seguirò i tuoi consigli.
Domani ti farò sapere.
Grazie per ora.


 'GestLightEs'."
Ed il RESTORE l'hai effettuato sul portatile?
Ciao!
-- 
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://italy.mvps.org

 Ed il RESTORE l'hai effettuato sul portatile?
Si, anche questa istruzione l'ho eseguita sul portatile. Il risultato è
abbastanza strano, perché mi dice che il nome 'GestLightEs', che lui stesso
ha indicato come esistente quando ho eseguito la query precedente, in realtà
non esiste quando eseguo questa.
Sai, non è molto difficile accorgersi che qualcosa non quadra: in entrambi i
pc, a parte i quattro database master, model, msdb e tempdb, ho soltanto
altri due database: GestLight e GestLightEs. Il primo è vuoto, cioè esistono
solo le tabelle, ed è stato creato con uno script sql. Nel secondo ho
qualche dato di esempio, e vorrei trasportarlo da un pc all'altro. In totale
sono sei database. Non ho altri server, e non ci sono altri database: quando
mi dice che "...GestLightEs è in uso..." ma mi mostra cinque soli database,
capisco che qualcosa non va.
Il sistema è Win98se, con SQLServer7 Enterprise. Non so più che pesci
pigliare.
Grazie per la pazienza.


 Grazie per la pazienza.
Prego.
Ciao!
-- 
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

 requirements)".
Può darsi che io mi sbagli sulla versione, dopo tutto è un software che
conosco solo da dieci giorni. Come posso fare a vedere la versione?
Cosa ne pensi di piallarlo dal portatile e reinstallarlo ex-novo?
Grazie ancora per l'attenzione.


 Grazie ancora per l'attenzione.


 
http://support.microsoft.com/default.aspx?scid=kb;en-us;889543
lo farò di sicuro.
Ti voglio ringraziare per la pazienza, e ho ammirato il fatto che tu lavori
a linea di comando da QueryAnalyzer, mentre io mi sbatto per cercare le
soluzioni visuali.
Sai, stanotte tardi sono riuscito a passare i dati da un pc all'altro, anche
se con un metodo poco ortodosso: ricordi il discorso sul file CSV? Bene, ho
esportato in un database di Access, e ho reimportato quello. Ha funzionato a
dovere, ma per il futuro vorrei utilizzare uno degli strumenti standard di
SQL Server.
A questo proposito, volevo chiederti: Quando esporto un database (Esporta
dati) se lascio il formato SQL Server invariato, mi crea un ulteriore
database sul server. Se invece esporto in Access mi crea un file .mdb, che
poi posso copiare sulla pen drive e trasportarlo altrove. Domanda: non c'è
un modo di far creare un file esterno, scollegato dal SQL Server in
esecuzione, copiabile e trasportabile, anche col formato SQL Server? O sto
dicendo delle assurdità?
Grazie ancora di tutto


 esecuzione, copiabile e trasportabile, anche col formato SQL Server?
Un banale BACKUP.
Ciao.


 Un banale BACKUP.
Come prevedevo. Allora non mi resta che trovare il modo di farlo funzionare.
Grazie di tutto. Sei stato davvero gentile.
