Anhängen und Trennen von Datenbanken

MarcoF

Grünschnabel
Hallo zusammen.

Ich möchte das anhänen und trennen von Datenbanken (z.B. zur Weitergabe der Datenbank) automatisieren und dazu ein klienes Programm schreiben. Kann mir jemand Tips geben?
 

MarcoF

Grünschnabel
Hallo niggo

Es handelt sich um den SQL Server 2000.
Um die *.mdf und *.ldf Dateien verschieben zu können müssen sie irgendwie vom Server getrennt werden, da ich sonst einen Fehler bekomme. (zB. beim Kopieren sagt mir MS, dass die Datei noch in gebrauch ist und deshalb nicht kopiert werden kann)
Dies ist nötig, da die DB an einem Entwichlungs PC gefüllt wird und später auf einem Kundenrechner laufen soll.
Momentan löse ich das Problem, indem ich manuell eine andere DB öffne. Dadurch habe ich vollen zugriff auf die Dateien.
 

Nico Graichen

Erfahrenes Mitglied
Das würde ich nicht über diese Dateien lösen sondern über Backup bzw. Restore.
Schau dir mal Bespiele zum Thema SQLDMO (Distributed Management Objects) an.
 

MarcoF

Grünschnabel
habs jetzt so gelöst:

Dim MySqlConnection As New SqlConnection("Server=(local)\webfactory;Database=WEBfactory;User ID=sa;Password=XXXX; pooling=false")

MySqlConnection.Open()

Dim objSqlCmd As New SqlCommand
objSqlCmd.Connection = MySqlConnection
objSqlCmd.CommandTimeout() = 15
objSqlCmd.CommandType() = CommandType.Text

'Alle Verbindungen, bis auf meine beenden (single user)
'exklusiver Zugriff auf DB, wird benötigt um Datenbank an-/abzuhaengen
objSqlCmd.CommandText = "ALTER DATABASE webfactory SET SINGLE_USER WITH ROLLBACK IMMEDIATE"
objSqlCmd.ExecuteNonQuery()

'Benutzer wird auf "master" gesetzt
objSqlCmd.CommandText = "USE master"
objSqlCmd.ExecuteNonQuery()

'Abhaengen
objSqlCmd.CommandText = "sp_detach_db 'webfactory'"
objSqlCmd.ExecuteNonQuery()

'Anhaengen
objSqlCmd.CommandText = "sp_attach_db 'webfactory','" & strPathFileMdf & "','" & strPathFileLdf & "'"
objSqlCmd.ExecuteNonQuery()

'multi user wieder zu lassen
objSqlCmd.CommandText = "ALTER DATABASE webfactory SET MULTI_USER"
objSqlCmd.ExecuteNonQuery()

'Verbindung beenden
MySqlConnection.Close()
 

Nico Graichen

Erfahrenes Mitglied
Hi

OK, aber wieso dieser umständliche Weg mit mdf und ldf Datei? :confused:
Der SQL Server bietet einen Backup Funktionalität! Wieso diese nicht nutzen? Ist vorallem erheblich einfacher als x Commands zu schreiben!
 

MarcoF

Grünschnabel
Ist Vorgabe vom Chef.

Zitat: "... Das haben wir schon immer so gemacht! ..."

Nun ja jetzt hab ichs ja.