Avatar billede asgerz.dk Nybegynder
26. juni 2006 - 09:22 Der er 12 kommentarer og
1 løsning

Flyt en database (MS-SQL) vha. vb.net

Hej, jeg skal fra min application (vb.net/2.0) kunne tage en backup af en database (ms-sql 2000/2005) og oprette den på en ny server. Jeg ved slet ikke hvordan jeg skal gribe dette an og om det overhovedet kan lade sig gøre.

Er der nogle der kan komme med inputs?
Avatar billede skwat Praktikant
26. juni 2006 - 11:20 #1
Avatar billede arne_v Ekspert
26. juni 2006 - 13:28 #2
en løkke som looper over databaser
  en løkke som looper over tabeller
    kopiering af tabel struktur
    en løkke som looper over rækker

INFORMATION_SCHEMA.TABLES
INFORMATION_SCHEMA.COLUMNS

kan sikkert bruges
Avatar billede nielle Nybegynder
26. juni 2006 - 21:28 #3
Måske kan dette isnspirere lidt:

Imports System.IO
Imports Microsoft.SqlServer.Management.Common
Imports Microsoft.SqlServer.Management.Smo
' Kræver at du opretter en reference til Microsoft.SqlServer.Smo.dll
' og til Microsoft.SqlServer.ConnectionInfo.dll

Module Module1

    Sub Main()
    End Sub

    ' Giver dig en liste over databaser på serveren
    Sub ListDatabaser()
        Dim server As Server = New Server()

        For Each db As Database In server.Databases
            If (db.Name = "master" Or db.Name = "model" Or db.Name = "msdb" Or db.Name = "tempdb") Then Continue For
            Console.WriteLine("Database: {0}", db.Name)
        Next
    End Sub

    ' Tager backup af en given database til en fil i roden af C:
    Sub TagBackup(ByVal databaseNavn As String)
        Dim backupFil As String = Path.Combine("C:\\", databaseNavn & ".backup")

        Dim bdi As BackupDeviceItem = New BackupDeviceItem(backupFil, DeviceType.File)

        Dim backup As Backup = New Backup()
        backup.Database = databaseNavn
        backup.Devices.Add(bdi)
        backup.Initialize = True

        AddHandler backup.PercentComplete, AddressOf PercentComplete
        AddHandler backup.Complete, AddressOf Complete

        Dim server As Server = New Server()
        backup.SqlBackup(server)
    End Sub

    ' Gendanner en given database fra en fil i roden af C:
    Sub GendanBackup(ByVal databaseNavn As String)
        Dim backupFil As String = Path.Combine("C:\\", databaseNavn & ".backup")

        Dim bdi As BackupDeviceItem = New BackupDeviceItem(backupFil, DeviceType.File)

        Dim restore As Restore = New Restore()
        restore.Database = databaseNavn
        restore.ReplaceDatabase = True
        restore.Devices.Add(bdi)

        AddHandler restore.PercentComplete, AddressOf PercentComplete
        AddHandler restore.Complete, AddressOf Complete

        Dim server As Server = New Server()
        restore.SqlRestore(server)
    End Sub

    ' Event-handlere som sikre at du kan følge med undervejs.

    Sub PercentComplete(ByVal sender As Object, ByVal e As PercentCompleteEventArgs)
        Console.WriteLine("{0}% processed.", e.Percent)
    End Sub

    Sub Complete(ByVal sender As Object, ByVal e As ServerMessageEventArgs)
        Console.WriteLine("Done: {0}", e.ToString())
    End Sub

End Module

Kræver at du har MS SQL Server 2005 installeret.
Avatar billede asgerz.dk Nybegynder
27. juni 2006 - 08:59 #4
Ok, har ikke glemt jer... arbejder på funktionen udfra skwat's link! Det er bare lige lidt mere kompliceret end "bare" en backup og en restore da jeg jo skal kunne OPRETTE databasen på en ny server... :)
Avatar billede skwat Praktikant
04. juli 2006 - 00:37 #5
Er det ikke bare at fyre en "create database <mitnavn>" af mod den?
Avatar billede asgerz.dk Nybegynder
04. juli 2006 - 07:42 #6
Jo det er jeg også bange for. Men det betyder at jeg skal ud og have fat på et brugernavn som har rettigheder til det, hvilket jeg helst vil undgå hvis muligt. Jeg holder ferie, derfor ikke den store udvikling i denne sag lige nu, men jeg kigge da lidt på den...
Avatar billede nielle Nybegynder
04. juli 2006 - 08:19 #7
Du er under alle omstændigheder nødt til at logge på database-server nr. 2 med en bruger som har rettigheder til at oprette databaser og tabeller. Så nej, det er ikke muligt, og heldigvis for det - ellers kunne hvem somhelst jo komme forbi og opratte alle de databaser hun måtte ænske.
Avatar billede vbcoder Nybegynder
09. juli 2006 - 11:32 #8
Hvis du har sql server installeret er der gode chancer for at du har en samples mappe

sql2000
programmer\microsoft sql server\80\Tools\DevTools\sqldmo

sql2005
programmer\microsoft sql server\90\samples\engine\programmability\Smo\

Mappen Smo indeholder en bunke programmerings eksempler på bl.a backup/restore men også et verifybackup

mod sql2000 bruger du objekterne i sqldmo.dll som findes i binn mappen og altid installeres med sql2000 motoren

I øvrigt har jeg ud fra disse eksempler bygget en lille backup/restore utility - kig på http://midtjysk-computer.dk for at downloade den.

//Frede
Avatar billede nielle Nybegynder
31. juli 2006 - 19:22 #9
Har du fået løst opgaven?
Avatar billede asgerz.dk Nybegynder
28. august 2006 - 19:40 #10
Hey, havde godt nok lige glemt denne... skwat --> sqldmo klarer alt... smid et svar!
Avatar billede skwat Praktikant
31. august 2006 - 20:33 #11
jeg er for sej
Avatar billede asgerz.dk Nybegynder
31. august 2006 - 20:36 #12
Dem der har skrevet sqldmo er i hvert fald ;-)
Avatar billede skwat Praktikant
31. august 2006 - 22:10 #13
Såså jeg skal jo pleje mit ego
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester