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.104 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. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats Januar 2025 Dieter Otter Zeilen einer MultiLine-TextBox ermitteln (VB.NET) Dieser Zipp zeigt, wie man die Zeilen einer MultiLine-TextBox exakt so ermitteln kann, wie diese auch in der TextBox dargestellt werden. Neu! sevDTA 3.0 Pro SEPA mit Kontonummernprüfung Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. |
||||||||||||||||
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. |