Commit f0aff75d4e5af6f7c5678ab652feca4b68973e87

Authored by Schwirg László
1 parent 468b291c

v1.11.3

- adatbázis backup futása során megjelenő üzenetek kiegészítése
Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs
@@ -62,12 +62,16 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS @@ -62,12 +62,16 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS
62 var origsqld = config.GetDefinitionList().FirstOrDefault(x => x.Xml_Key == key); 62 var origsqld = config.GetDefinitionList().FirstOrDefault(x => x.Xml_Key == key);
63 if (origsqld != null) 63 if (origsqld != null)
64 { 64 {
65 - var sqld = new SQLDataBase(origsqld); 65 + var sqld = new SQLDataBase(origsqld);
  66 + var dbname = SQLDataBaseManagerCore.GetDBName(sqld.SQLCS);
  67 + ColorConsole.WriteLine($"Database backup process started. DB key:'{key}', name:'{dbname}'...", ConsoleColor.Yellow);
66 if (!string.IsNullOrWhiteSpace(targetfolder)) { sqld.Xml_BackupTargetDirectoryPath = targetfolder; } 68 if (!string.IsNullOrWhiteSpace(targetfolder)) { sqld.Xml_BackupTargetDirectoryPath = targetfolder; }
67 if (enabledbbackup) { SQLDataBaseManagerCore.CreateBackup(sqld.Xml_BackupTargetDirectoryPath, sqld.SQLCS, sqld.Xml_BackupFileNameMask, sqld.Xml_CreateZip, timestamp); } 69 if (enabledbbackup) { SQLDataBaseManagerCore.CreateBackup(sqld.Xml_BackupTargetDirectoryPath, sqld.SQLCS, sqld.Xml_BackupFileNameMask, sqld.Xml_CreateZip, timestamp); }
68 if (enablescriptbackup) { SQLDataBaseManagerCore.BackupSqlScripts(sqld.Xml_BackupTargetDirectoryPath, sqld.Xml_BackupFileNameMask, sqld.SQLCS, sqld.Xml_CreateZip, timestamp); } 70 if (enablescriptbackup) { SQLDataBaseManagerCore.BackupSqlScripts(sqld.Xml_BackupTargetDirectoryPath, sqld.Xml_BackupFileNameMask, sqld.SQLCS, sqld.Xml_CreateZip, timestamp); }
69 if (enabletabledatabackup) { SQLDataBaseManagerCore.BackupSqlData(sqld, timestamp); } 71 if (enabletabledatabackup) { SQLDataBaseManagerCore.BackupSqlData(sqld, timestamp); }
  72 + ColorConsole.WriteLine($"Database backup process finished!", ConsoleColor.DarkGreen);
70 } 73 }
  74 + else { ColorConsole.WriteLine($"Database backup process error. DB key incorrect:'{key}'...", ConsoleColor.Red); }
71 } 75 }
72 #endregion Execute 76 #endregion Execute
73 77
@@ -448,6 +452,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS @@ -448,6 +452,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS
448 public static void RelocatePhysicalFiles(SQLDataBase sqld, string targetdirectory, string restoredbname) 452 public static void RelocatePhysicalFiles(SQLDataBase sqld, string targetdirectory, string restoredbname)
449 { 453 {
450 var dbbackupfilepath = CreateBackup(sqld.Xml_BackupTargetDirectoryPath, sqld.SQLCS, sqld.Xml_BackupFileNameMask, false); 454 var dbbackupfilepath = CreateBackup(sqld.Xml_BackupTargetDirectoryPath, sqld.SQLCS, sqld.Xml_BackupFileNameMask, false);
  455 + if (dbbackupfilepath == null) return;
451 RestoreBackup(sqld.SQLCS, dbbackupfilepath, targetdirectory, false, restoredbname); 456 RestoreBackup(sqld.SQLCS, dbbackupfilepath, targetdirectory, false, restoredbname);
452 if (File.Exists(dbbackupfilepath)) { File.Delete(dbbackupfilepath); } 457 if (File.Exists(dbbackupfilepath)) { File.Delete(dbbackupfilepath); }
453 } 458 }
@@ -503,45 +508,52 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS @@ -503,45 +508,52 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS
503 public static string CreateBackup(string backupdirectorypath, string sqlconnectionstring, string backupfilenamemask, bool createzip = false,DateTime? timestamp=null) 508 public static string CreateBackup(string backupdirectorypath, string sqlconnectionstring, string backupfilenamemask, bool createzip = false,DateTime? timestamp=null)
504 { 509 {
505 var sqlserver = SQLServerConnect(sqlconnectionstring); 510 var sqlserver = SQLServerConnect(sqlconnectionstring);
  511 + string returnfilename = null;
  512 + if (sqlserver != null)
  513 + {
  514 + var dbname = GetDBName(sqlconnectionstring);
506 515
507 - var backupts = (timestamp.HasValue ? timestamp.Value : DateTime.Now).ToString("yyyyMMddHHmmss");  
508 -  
509 - string backupfileNameOnly = Path.GetFileNameWithoutExtension(backupfilenamemask);  
510 - var vars = new Dictionary<string, string>();  
511 - vars.Add(nameof(DBSubstitutionName.DATABASE), GetDBName(sqlconnectionstring));  
512 - vars.Add(nameof(DBSubstitutionName.DATASOURCE), GetDataSource(sqlconnectionstring));  
513 - vars.Add(nameof(DBSubstitutionName.DBOTYPE), "DBBACKUP");  
514 - vars.Add(nameof(DBSubstitutionName.DBONAME), "");  
515 - vars.Add(nameof(DBSubstitutionName.DBDATAGROUP), "");  
516 - vars.Add(nameof(DBSubstitutionName.BACKUPTS), backupts);  
517 -  
518 - backupfileNameOnly = VRH.Common.StringConstructor.ResolveConstructorR(vars, backupfileNameOnly, "{}@@");  
519 -  
520 - string backupfilename = backupfileNameOnly + ".bak";  
521 - string backupFullName = Path.Combine(backupdirectorypath, backupfilename);  
522 - if (File.Exists(backupFullName)) { File.Delete(backupFullName); } 516 + var backupts = (timestamp.HasValue ? timestamp.Value : DateTime.Now).ToString("yyyyMMddHHmmss");
523 517
524 - var smoBackup = new Backup();  
525 - smoBackup.Action = BackupActionType.Database;  
526 - smoBackup.BackupSetDescription = $"Full Backup of {sqlserver.ConnectionContext.DatabaseName}";  
527 - smoBackup.BackupSetName = sqlserver.ConnectionContext.DatabaseName + " Backup";  
528 - smoBackup.Database = sqlserver.ConnectionContext.DatabaseName;  
529 - smoBackup.MediaDescription = "Disk";  
530 - smoBackup.Devices.AddDevice(backupFullName, DeviceType.File);  
531 - smoBackup.SqlBackup(sqlserver); 518 + string backupfileNameOnly = Path.GetFileNameWithoutExtension(backupfilenamemask);
  519 + var vars = new Dictionary<string, string>();
  520 + vars.Add(nameof(DBSubstitutionName.DATABASE), GetDBName(sqlconnectionstring));
  521 + vars.Add(nameof(DBSubstitutionName.DATASOURCE), GetDataSource(sqlconnectionstring));
  522 + vars.Add(nameof(DBSubstitutionName.DBOTYPE), "DBBACKUP");
  523 + vars.Add(nameof(DBSubstitutionName.DBONAME), "");
  524 + vars.Add(nameof(DBSubstitutionName.DBDATAGROUP), "");
  525 + vars.Add(nameof(DBSubstitutionName.BACKUPTS), backupts);
532 526
533 - if (createzip)  
534 - {  
535 - string ZIPbackupfilename = backupfileNameOnly + ".zip";  
536 - string ZIPbackupFullName = Path.Combine(backupdirectorypath, ZIPbackupfilename);  
537 - if (File.Exists(ZIPbackupFullName)) { File.Delete(ZIPbackupFullName); } 527 + backupfileNameOnly = VRH.Common.StringConstructor.ResolveConstructorR(vars, backupfileNameOnly, "{}@@");
538 528
539 - ZipTools.CreateEntriesFromDirectoryContent(backupdirectorypath, ZIPbackupFullName, backupfilename, "", removearchivedfiles: false, storepathinzip: false); 529 + string backupfilename = backupfileNameOnly + ".bak";
  530 + string backupFullName = Path.Combine(backupdirectorypath, backupfilename);
540 if (File.Exists(backupFullName)) { File.Delete(backupFullName); } 531 if (File.Exists(backupFullName)) { File.Delete(backupFullName); }
541 - return ZIPbackupFullName;  
542 532
  533 + var smoBackup = new Backup();
  534 + smoBackup.Action = BackupActionType.Database;
  535 + smoBackup.BackupSetDescription = $"Full Backup of {sqlserver.ConnectionContext.DatabaseName}";
  536 + smoBackup.BackupSetName = sqlserver.ConnectionContext.DatabaseName + " Backup";
  537 + smoBackup.Database = sqlserver.ConnectionContext.DatabaseName;
  538 + smoBackup.MediaDescription = "Disk";
  539 + smoBackup.Devices.AddDevice(backupFullName, DeviceType.File);
  540 + smoBackup.SqlBackup(sqlserver);
  541 +
  542 + returnfilename = backupFullName;
  543 + if (createzip)
  544 + {
  545 + string ZIPbackupfilename = backupfileNameOnly + ".zip";
  546 + string ZIPbackupFullName = Path.Combine(backupdirectorypath, ZIPbackupfilename);
  547 + if (File.Exists(ZIPbackupFullName)) { File.Delete(ZIPbackupFullName); }
  548 +
  549 + ZipTools.CreateEntriesFromDirectoryContent(backupdirectorypath, ZIPbackupFullName, backupfilename, "", removearchivedfiles: false, storepathinzip: false);
  550 + if (File.Exists(backupFullName)) { File.Delete(backupFullName); }
  551 + returnfilename = ZIPbackupFullName;
  552 + }
  553 + ColorConsole.WriteLine($"Database backup created. DB name:'{dbname}'. BAK/ZIP file name:'{Path.GetFileName(returnfilename)}'", ConsoleColor.DarkGreen);
543 } 554 }
544 - return backupFullName; 555 + else { ColorConsole.WriteLine($"SQL scripts create: error in db connection string. '{sqlconnectionstring}'", ConsoleColor.DarkGreen); }
  556 + return returnfilename;
545 } 557 }
546 558
547 #region private methods 559 #region private methods
@@ -878,6 +890,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS @@ -878,6 +890,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS
878 public static void BackupSqlScripts(string backupdirectorypath,string backupfilenamemask,string sqlcs,bool createZip, DateTime? timestamp=null) 890 public static void BackupSqlScripts(string backupdirectorypath,string backupfilenamemask,string sqlcs,bool createZip, DateTime? timestamp=null)
879 { 891 {
880 var sqlserver = SQLServerConnect(sqlcs); 892 var sqlserver = SQLServerConnect(sqlcs);
  893 + var dbname = GetDBName(sqlcs);
881 if (sqlserver!=null) 894 if (sqlserver!=null)
882 { 895 {
883 string backupts = (timestamp.HasValue? timestamp.Value:DateTime.Now).ToString("yyyyMMddHHmmss"); 896 string backupts = (timestamp.HasValue? timestamp.Value:DateTime.Now).ToString("yyyyMMddHHmmss");
@@ -913,12 +926,11 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS @@ -913,12 +926,11 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS
913 ScriptOneObject(sqlserver, tempbackupdirectorypath, backupfilenamemask + backupfilenameext, sqldatabase.Views.Cast<SqlSmoObject>().ToList(), vars); 926 ScriptOneObject(sqlserver, tempbackupdirectorypath, backupfilenamemask + backupfilenameext, sqldatabase.Views.Cast<SqlSmoObject>().ToList(), vars);
914 ScriptOneObject(sqlserver, tempbackupdirectorypath, backupfilenamemask + backupfilenameext, sqldatabase.Tables.Cast<SqlSmoObject>().ToList(), vars); 927 ScriptOneObject(sqlserver, tempbackupdirectorypath, backupfilenamemask + backupfilenameext, sqldatabase.Tables.Cast<SqlSmoObject>().ToList(), vars);
915 ScriptOneObject(sqlserver, tempbackupdirectorypath, backupfilenamemask + backupfilenameext, sqldatabase.Triggers.Cast<SqlSmoObject>().ToList(), vars); 928 ScriptOneObject(sqlserver, tempbackupdirectorypath, backupfilenamemask + backupfilenameext, sqldatabase.Triggers.Cast<SqlSmoObject>().ToList(), vars);
916 - if (createZip)  
917 - {  
918 - ZipTools.CreateEntriesFromDirectoryContent(tempbackupdirectorypath, zipfilefullpath, "*.sql", backupts,removearchivedfiles:true, storepathinzip: false);  
919 - } 929 + if (createZip) { ZipTools.CreateEntriesFromDirectoryContent(tempbackupdirectorypath, zipfilefullpath, "*.sql", backupts,removearchivedfiles:true, storepathinzip: false); }
  930 + var resultfilename = zipfilefullpath == null ? "-" : Path.GetFileName(zipfilefullpath);
  931 + ColorConsole.WriteLine($"SQL scripts created. DB name:'{dbname}'. BAK/ZIP file name:'{resultfilename}'", ConsoleColor.DarkGreen);
920 } 932 }
921 - 933 + else { ColorConsole.WriteLine($"SQL scripts create: error in db connection string. '{sqlcs}'", ConsoleColor.DarkGreen); }
922 } 934 }
923 private static void ScriptOneObject(Server sqlserver,string backupdirectory,string backupfilenamemask,List<SqlSmoObject> sqldbobjects,Dictionary<string, string> vars) 935 private static void ScriptOneObject(Server sqlserver,string backupdirectory,string backupfilenamemask,List<SqlSmoObject> sqldbobjects,Dictionary<string, string> vars)
924 { 936 {
@@ -989,6 +1001,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS @@ -989,6 +1001,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS
989 { 1001 {
990 string sqlcs = sqld.SQLCS; 1002 string sqlcs = sqld.SQLCS;
991 var sqlserver = SQLServerConnect(sqlcs); 1003 var sqlserver = SQLServerConnect(sqlcs);
  1004 + var dbname = GetDBName(sqlcs);
992 if (sqlserver != null) 1005 if (sqlserver != null)
993 { 1006 {
994 string backupts = (timestamp.HasValue ? timestamp.Value : DateTime.Now).ToString("yyyyMMddHHmmss"); 1007 string backupts = (timestamp.HasValue ? timestamp.Value : DateTime.Now).ToString("yyyyMMddHHmmss");
@@ -1037,7 +1050,10 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS @@ -1037,7 +1050,10 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS
1037 string fullpathregex = Regex.Escape(string.Join(";",backupfilepathlist)).Replace(';','|'); 1050 string fullpathregex = Regex.Escape(string.Join(";",backupfilepathlist)).Replace(';','|');
1038 ZipTools.CreateEntriesFromDirectoryContent(tempbackupdirectorypath, zipfilefullpath, "*.sql", fullpathregex, removearchivedfiles: true, storepathinzip: false); 1051 ZipTools.CreateEntriesFromDirectoryContent(tempbackupdirectorypath, zipfilefullpath, "*.sql", fullpathregex, removearchivedfiles: true, storepathinzip: false);
1039 } 1052 }
  1053 + var resultfilename = zipfilefullpath == null ? "-" : Path.GetFileName(zipfilefullpath);
  1054 + ColorConsole.WriteLine($"SQL data scripts created. DB name:'{dbname}'. BAK/ZIP file name:'{resultfilename}'", ConsoleColor.DarkGreen);
1040 } 1055 }
  1056 + else { ColorConsole.WriteLine($"SQL data scripts create: error in db connection string. '{sqlcs}'", ConsoleColor.DarkGreen); }
1041 } 1057 }
1042 private static List<string> ScriptOneDataGroup(Server sqlserver, string backupdirectorypath, string backupfilenamemask, List<string> tablenamelist, Dictionary<string, string> vars,out List<string> errormessageList) 1058 private static List<string> ScriptOneDataGroup(Server sqlserver, string backupdirectorypath, string backupfilenamemask, List<string> tablenamelist, Dictionary<string, string> vars,out List<string> errormessageList)
1043 { 1059 {
Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices; @@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
32 // You can specify all the values or you can default the Build and Revision Numbers 32 // You can specify all the values or you can default the Build and Revision Numbers
33 // by using the '*' as shown below: 33 // by using the '*' as shown below:
34 // [assembly: AssemblyVersion("1.0.*")] 34 // [assembly: AssemblyVersion("1.0.*")]
35 -[assembly: AssemblyVersion("1.11.2.0")]  
36 -[assembly: AssemblyFileVersion("1.11.2.0")] 35 +[assembly: AssemblyVersion("1.11.3.0")]
  36 +[assembly: AssemblyFileVersion("1.11.3.0")]