Ich habe mal nach einer Alternative zu den Archivierungsdateien.bak zu SQL-Datenbanken gesucht. Eine Möglichkeit bietet die Erzeugung und Anwendung von Scripts zum Löschen, Kreieren und Befüllen von Datenbanken. Im SSMS über den Menüpunkt Skrips generieren manuell durchführbar. Meine Prozedur erstellt ein bestimmtes gewünschtes Script ausgehend von einer vorhandenen Datenbank. Das Script kann dann als alternatives Archiv gespeichert werden. Folgende Parameter werden für den Aufruf der Prozedur createScript benötigt:
Zur Erzeugung der Script-SQL-Statements wird die Prozedur createSqlStatements angewendet. Sie erzeugt den eigentlichen "Script-Text". Folgende Parameter werden für den Aufruf der Prozedur benötigt und aus der aufrufenden Prozedur createScript übergeben:
Für die Anwendung der Programme ist außerdem notwendig: Imports Microsoft.SqlServer Imports Microsoft.SqlServer.Management.Common Imports Microsoft.SqlServer.Management.Sdk.Sfc Imports Microsoft.SqlServer.Management.Smo Hier der Code für beide Prozeduren: ''' <summary> ''' Funktion zum Erzeugen eines SQL-Scripts für Übertragung von Daten ''' für alle Tabellen einer Datenbank ''' </summary> ''' <param name="srvName">der Server-Name (inkl. Instanzname)</param> ''' <param name="dbName">der Datenbankname</param> ''' <param name="scriptArt">die Art des zu erstellenden Scripts</param> ''' (scriptArt: "Schema" (Script vom Schema), "Daten" (Script von Daten) ''' oder "" (komplette Datenbank)) ''' <param name="target">die Zielversion des Servers</param> ''' <param name="debugFlag">das Script protokollieren ja|nein</param> Public Function createScript(srvName As String, dbName As String, Optional scriptArt As String = "Daten", Optional target As SqlServerVersion = SqlServerVersion.Version140, Optional debugFlag As Boolean = False) _ As String Dim script As String Dim srv As New Server(srvName) Dim Scripter As New Scripter(srv) Dim db As Database = srv.Databases(dbName) With Scripter.Options .TargetServerVersion = target Select Case scriptArt Case "Daten" .ScriptData = True .ScriptSchema = False script = createSqlStatements(srv, db, Scripter, debugFlag) Case "Schema" .ScriptSchema = True .ScriptData = False .Indexes = True ' include indizes script = createSqlStatements(srv, db, Scripter, debugFlag) Case Else ' komplette Datenbank .ScriptData = False .ScriptDrops = True .ScriptSchema = True script = createSqlStatements(srv, db, Scripter, debugFlag) .ScriptDrops = False script += createSqlStatements(srv, db, Scripter, debugFlag) .ScriptSchema = False .ScriptData = True script += createSqlStatements(srv, db, Scripter, debugFlag) End Select End With Return script End Function ''' <summary> ''' Erzeugen eines Scripts ''' </summary> ''' <param name="Server">der Server-Name (inkl. Instanzname)</param> ''' <param name="Database">die Datenbank</param> ''' <param name="Scripter">der Scripter</param> ''' <param name="debugFlag">das Script protokollieren ja|nein</param> ''' <returns></returns> Private Function createSqlStatements(Server As Server, Database As Database, Scripter As Scripter, Optional debugFlag As Boolean = False) As String Dim result As New StringBuilder For Each Table As Table In Database.Tables If Not Table.IsSystemObject Then Dim ScriptLines As List(Of String) ScriptLines = Scripter.EnumScript(New Urn() {Table.Urn}).ToList() For Each Line As String In ScriptLines result.AppendLine(Line) If debugFlag Then Debug.Print(Line) Next End If Next Return result.ToString End Function Beispiele für die Anwendung Es wird die komplette Datenbank DatabankName auf dem Server serverName als Script erstellt; Schema und alle Daten. ' Datenbank Dim st As String = createScript(serverName, DatabankName, "") Erstellung eines Scripts, das ausschließlich alle Daten der Datenbank beinhaltet. ' Daten Dim st As String = createScript(serverName, DatabankName, "Daten") Nur die Schemata aller Tabellen der Datenbank werden gespeichert als Script. ' Schema Dim st As String = createScript(serverName, DatabankName, "Schema") Hinweis: Es empfiehlt sich für die Anwendung des Tipps, die neueste SMO-Version zu installieren. Dieser Tipp wurde bereits 4.057 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats Dezemeber 2024 Roland Wutzke MultiSort im ListView-Control Dieses Beispiel zeigt, wie sich verschiedene Sortierfunktionen für ein ListView Control realisieren lassen. sevZIP40 Pro DLL Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |