public static GetDatabaseServerName ( System.Data.SqlClient.SqlConnectionStringBuilder connectionStringBuilder ) : string | ||
connectionStringBuilder | System.Data.SqlClient.SqlConnectionStringBuilder | |
return | string |
public override void ExecuteCommand() { if (!String.IsNullOrEmpty(DatabaseName)) { ConnectionString.InitialCatalog = DatabaseName; } Log.Info("Exporting {0} on {1} to {2}", ConnectionString.InitialCatalog, Util.GetDatabaseServerName(ConnectionString), DestinationStorage.Credentials.AccountName); string serverName = ConnectionString.DataSource; if (serverName.StartsWith("tcp:")) { serverName = serverName.Substring(4); } WASDImportExport.ImportExportHelper helper = new WASDImportExport.ImportExportHelper(Log) { EndPointUri = SqlDacEndpoint.AbsoluteUri, DatabaseName = ConnectionString.InitialCatalog, ServerName = serverName, UserName = ConnectionString.UserID, Password = ConnectionString.Password, StorageKey = Convert.ToBase64String(DestinationStorage.Credentials.ExportKey()) }; // Prep the blob string blobUrl = null; if (!WhatIf) { var client = DestinationStorage.CreateCloudBlobClient(); var container = client.GetContainerReference(DestinationContainer); container.CreateIfNotExists(); var blob = container.GetBlockBlobReference(ConnectionString.InitialCatalog + ".bacpac"); if (blob.Exists()) { Log.Info("Skipping export of {0} because the blob already exists", blob.Name); } else { Log.Info("Starting export to {0}", blob.Uri.AbsoluteUri); // Export! blobUrl = helper.DoExport(blob.Uri.AbsoluteUri, WhatIf); } } Log.Info("Export Complete"); }
public override void ExecuteCommand() { using (var destinationConnection = new SqlConnection(Util.GetMasterConnectionString(DestinationConnectionString.ConnectionString))) using (var destinationDbExecutor = new SqlExecutor(destinationConnection)) { string sourceDbServerName = Util.GetDatabaseServerName(SourceConnectionString); string destinationDbServerName = Util.GetDatabaseServerName(DestinationConnectionString); destinationConnection.Open(); var copyDbName = $"CopyOf{BackupName}"; var existingDatabaseBackup = Util.GetDatabase( destinationDbExecutor, copyDbName); if (existingDatabaseBackup != null && existingDatabaseBackup.State == Util.OnlineState) { Log.Info("Skipping {0}. It already exists on {1} and is online.", copyDbName, destinationDbServerName); return; } if (existingDatabaseBackup == null) { StartBackupCopy( destinationDbExecutor, sourceDbServerName, destinationDbServerName, BackupName, copyDbName); Log.Trace("Waiting 15 minutes for copy of {0} from {1} to {2} to complete.", BackupName, sourceDbServerName, destinationDbServerName); if (!WhatIf) { Thread.Sleep(15 * 60 * 1000); } } WaitForBackupCopy( destinationDbExecutor, destinationDbServerName, copyDbName); } }
public override void ExecuteCommand() { Log.Trace("Connecting to server '{0}' to back up database '{1}'.", ConnectionString.InitialCatalog, Util.GetDatabaseServerName(ConnectionString)); _startedBackup = false; var cstr = Util.GetMasterConnectionString(ConnectionString.ConnectionString); using (var connection = new SqlConnection(cstr)) using (var db = new SqlExecutor(connection)) { connection.Open(); if (!Force) { Log.Trace("Checking for a backup in progress."); if (Util.BackupIsInProgress(db, BackupNamePrefix)) { Log.Trace("Found a backup in progress; exiting."); return; } Log.Trace("Found no backup in progress."); Log.Trace("Getting last backup time."); var lastBackupTime = Util.GetLastBackupTime(db, BackupNamePrefix); if (lastBackupTime >= DateTime.UtcNow.Subtract(TimeSpan.FromMinutes(IfOlderThan))) { Log.Info("Skipping Backup. Last Backup was less than {0} minutes ago", IfOlderThan); return; } Log.Trace("Last backup time is more than {0} minutes ago. Starting new backup.", IfOlderThan); } else { Log.Trace("Forcing new backup"); } // Generate a backup name var timestamp = Util.GetTimestamp(); _backupName = BackupNamePrefix + timestamp; if (!WhatIf) { db.Execute(string.Format("CREATE DATABASE {0} AS COPY OF {1}", _backupName, ConnectionString.InitialCatalog)); _startedBackup = true; } Log.Info("Started Copy of '{0}' to '{1}'", ConnectionString.InitialCatalog, _backupName); } }