Commit 31cca8095fdfee6fcccba81b77f75a74fc5b7d3e

Authored by Schwirg László
1 parent 34b4dbe8

v1.31.8.0

- Move DB to remote server letisztázása
Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs
... ... @@ -32,6 +32,7 @@ using System.Security.Cryptography;
32 32 using System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;
33 33 using System.Windows.Controls;
34 34 using Menu = Vrh.Log4Pro.MaintenanceConsole.MenuNS.Menu;
  35 +using static Vrh.Log4Pro.MaintenanceConsole.MenuNS.Menu;
35 36  
36 37 namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS
37 38 {
... ... @@ -69,25 +70,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS
69 70 menufunctions.ExecuteMenu(functionkey);
70 71 return o2;
71 72 }
72   - public static void Execute(string key, bool enabledbbackup, bool enablescriptbackup, bool enabletabledatabackup, string targetfolder=null,DateTime? timestamp = null)
73   - {
74   - var packagets = (timestamp.HasValue ? timestamp.Value : DateTime.Now).ToString("yyyyMMddHHmmss");
75   - var config = new SQLDataBaseManagerXmlProcessor(XMLCONNECTIONSTRING, "", "hu-HU");
76   - var origsqld = config.GetDefinitionList().FirstOrDefault(x => x.Xml_Key == key);
77   - if (origsqld != null)
78   - {
79   - var sqld = new SQLDataBase(origsqld);
80   - var dbname = SQLDataBaseManagerCore.GetDBName(sqld.SQLCS);
81   - ColorConsole.WriteLine($"Database backup process started. DB key:'{key}', name:'{dbname}'...", ConsoleColor.Yellow);
82   - if (!string.IsNullOrWhiteSpace(targetfolder)) { sqld.Xml_BackupTargetDirectoryPath = targetfolder; }
83   - if (enabledbbackup) { SQLDataBaseManagerCore.CreateBackup(sqld,null, timestamp); }
84   - if (enablescriptbackup) { SQLDataBaseManagerCore.BackupSqlScripts(sqld, timestamp); }
85   - if (enabletabledatabackup) { SQLDataBaseManagerCore.BackupSqlData(sqld, timestamp); }
86   - ColorConsole.WriteLine($"Database backup process finished!", ConsoleColor.DarkGreen);
87   - }
88   - else { ColorConsole.WriteLine($"Database backup process error. DB key incorrect:'{key}'...", ConsoleColor.Red); }
89   - }
90   - #endregion Execute
  73 + #endregion Execute
91 74  
92 75 #region First level Executors with UI
93 76 private static object CreateDataScripts(object parameter, object o)
... ... @@ -180,12 +163,6 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS
180 163 }
181 164 return o;
182 165 }
183   - private static bool NoDBNameSpecified(SQLDataBase ssqldb)
184   - {
185   - const string FUNNOTAVAILTXT = "Function is not available for server connection strings wit no DB name specified!";
186   - if (string.IsNullOrWhiteSpace(SQLDataBaseManagerCore.GetDBName(ssqldb.SQLCS))) { ColorConsole.WriteLine(FUNNOTAVAILTXT, ConsoleColor.Red); ssqldb.DBName = "master"; return true; }
187   - return false;
188   - }
189 166 private static object RestoreDataBase(object parameter, object o)
190 167 {
191 168 var config = (parameter as Menu.ExecutorParameter).GetConfig<SQLDataBaseManagerXmlProcessor>();
... ... @@ -482,9 +459,9 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS
482 459  
483 460 #region CreateDBUser
484 461 private static string[] selectablerolelist = new string[] { "FULLACCESS", "DATAREADER", "db_accessadmin", "db_backupoperator", "db_datareader", "db_datawriter", "db_ddladmin", "db_denydatareader", "db_denydatawriter", "db_owner", "db_securityadmin", };
485   - private static string[] fullaccessrolelist = new string[] { "db_accessadmin", "db_backupoperator", "db_datareader", "db_datawriter", "db_ddladmin", "db_owner", "db_securityadmin", };
  462 + private static string[] fullaccessdbloginrolelist = new string[] { "db_accessadmin", "db_backupoperator", "db_datareader", "db_datawriter", "db_ddladmin", "db_owner", "db_securityadmin", };
486 463 private static string[] datareaderrolelist = new string[] { "db_datareader", };
487   - private static string[] loginrolelist = new string[] { "dbcreator", "securityadmin", };
  464 + private static string[] serverloginrolelist = new string[] { "dbcreator", "securityadmin", };
488 465 private const string COMMA = ",";
489 466 private static object CreateDBUser(object parameter, object o)
490 467 {
... ... @@ -602,7 +579,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS
602 579 if (selectedrolelistnum > 1 && specialselectionactive) { ColorConsole.WriteLine($"ERROR! FULLACCESS or DATAREADER has to be selected alone!", ConsoleColor.Red); return null; }
603 580 if (badrolenames.Count > 0) { ColorConsole.WriteLine($"ERROR! {string.Join(COMMA, badrolenames)} are not available!", ConsoleColor.Red); return null; }
604 581 var effectiverolelist =
605   - enablefullaccess ? fullaccessrolelist
  582 + enablefullaccess ? fullaccessdbloginrolelist
606 583 : enabledatareader ? datareaderrolelist
607 584 : selectedrolelist;
608 585 return string.Join(",", effectiverolelist);
... ... @@ -649,116 +626,128 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS
649 626  
650 627 var selectedsqldbindexes = CommandLine.GetCommandLineArgument(args, CLP.Module.SQLDataBaseManager.Function.CMD_DATABASES);
651 628  
652   - (bool Exit, bool Yes) yesornoanswer;
653   - (bool Exit, bool Yes, SQLDataBase Dbfrom, SQLDataBase Dbto, string Selecteddbname, bool Emulation) movedbanswer;
654   - while (true)
655   - {
  629 + while (true)
  630 + {
656 631 var DateTimeNow = DateTime.Now;
  632 + SQLDataBase dbfrom = null;
  633 + SQLDataBase dbto = null;
657 634  
658   - movedbanswer = YesOrNo_MoveDbToRemoteServer(config, selectedsqldbindexes);
659   - if (NoDBNameSpecified(movedbanswer.Dbfrom)) { continue; }
660   - if (NoDBNameSpecified(movedbanswer.Dbto)) { continue; }
661   - if (movedbanswer.Exit) break;
662   - if (movedbanswer.Yes)
  635 + movedatabaseloop:
  636 + (Menu.SelectionResult selectionresult, bool yes) yesornoanswer = YesOrNo(new List<string>() { $"Do You want to move ANY database from local server to remote server?" });
  637 + if (yesornoanswer.selectionresult == Menu.SelectionResult.Exit) return o;
  638 + if (yesornoanswer.selectionresult == Menu.SelectionResult.Ok && yesornoanswer.yes)
663 639 {
664   - var movesuccess = SQLDataBaseManagerCore.MoveDbToRemoteServer(movedbanswer.Dbfrom, movedbanswer.Dbto, movedbanswer.Selecteddbname, movedbanswer.Emulation);
665   - if (!movesuccess) continue;
666   - }
667   -
668   - var usernamelist = new string[] { "corplear\\lschwirg", "corplear\\gen_vrhalmadmin", $"corplear\\{Program.ThisComputer.ComputerName}$" };
  640 + var dbselection = SelectToDbAndFromDb(config, selectedsqldbindexes, $"Select the SQL database(s) to move the first to the second.!");
  641 + if (dbselection.selection == Menu.SelectionResult.Exit) { return o; }
  642 + if (dbselection.selection != Menu.SelectionResult.Ok) { goto movedatabaseloop; }
  643 + dbfrom = dbselection.dbfrom;
  644 + dbto = dbselection.dbto;
  645 + if (NoDBNameSpecified(dbfrom) || NoDBNameSpecified(dbto)) { continue; }
  646 +
  647 + var todbname = ColorConsole.ReadLine($"Enter the name of the target DB. EMPTY={dbto.DBName}, EX=exit.");
  648 + if (todbname.ToUpper() == "EX") { return o; }
  649 + else if (string.IsNullOrWhiteSpace(todbname)) todbname = dbto.DBName;
  650 +
  651 + confirmloop:;
  652 + var confirmtext = ColorConsole.ReadLine("Enter CONFIRM to start, EX to exit, SKIP to skip.");
  653 + if (confirmtext.ToUpper() == "EX") { return o; }
  654 + else if (confirmtext.ToUpper() == "CONFIRM")
  655 + {
  656 + var movesuccess = SQLDataBaseManagerCore.MoveDbToRemoteServer(dbfrom, dbto, todbname, false);
  657 + if (!movesuccess) continue;
  658 + }
  659 + else if (confirmtext.ToUpper() != "SKIP") { goto confirmloop; };
  660 + }
669 661  
670   - yesornoanswer = YesOrNo_ServerLogin(movedbanswer.Dbfrom.SQLCS, usernamelist);
671   - if (yesornoanswer.Exit) return o;
672   - if (yesornoanswer.Yes) SQLDataBaseManagerCore.CreateServerLogins(movedbanswer.Emulation, movedbanswer.Dbfrom.SQLCS, usernamelist, loginrolelist,fullaccessrolelist);
  662 + serverloginloop:
  663 + yesornoanswer = YesOrNo(new List<string>() { $"Do You want to create server and DB logins for local and/or remote server/database?", });
  664 + if (yesornoanswer.selectionresult == Menu.SelectionResult.Exit) return o;
  665 + if (yesornoanswer.selectionresult == Menu.SelectionResult.Ok && yesornoanswer.yes)
  666 + {
  667 + if (dbfrom == null || dbto == null)
  668 + {
  669 + var dbselection = SelectToDbAndFromDb(config, selectedsqldbindexes, $"Select the SQL database(s) to add server and DB logins!");
  670 + if (dbselection.selection == Menu.SelectionResult.Exit) { return o; }
  671 + if (dbselection.selection != Menu.SelectionResult.Ok) { goto serverloginloop; }
  672 + dbfrom = dbselection.dbfrom;
  673 + dbto = dbselection.dbto;
  674 + }
  675 + var usernamelist = new string[] { "corplear\\lschwirg", "corplear\\gen_vrhalmadmin", $"corplear\\{Program.ThisComputer.ComputerName}$" };
  676 +
  677 + string l1 = $"Do You want to create the following mandatory server and DB logins for SOURCE server and DB?";
  678 + string l2 = $" SQL connection string: {dbfrom.SQLCS}";
  679 + string l3 = $" Username list: " + string.Join(",", usernamelist);
  680 + yesornoanswer = YesOrNo(new List<string>() { l1, l2, l3, });
  681 + if (yesornoanswer.selectionresult== Menu.SelectionResult.Exit) return o;
  682 + if (yesornoanswer.selectionresult == Menu.SelectionResult.Ok && yesornoanswer.yes)
  683 + {
  684 + SQLDataBaseManagerCore.CreateServerAndDBLogins(false, dbfrom.SQLCS, usernamelist, serverloginrolelist, fullaccessdbloginrolelist);
  685 + }
673 686  
674   - yesornoanswer = YesOrNo_ServerLogin(movedbanswer.Dbto.SQLCS, usernamelist);
675   - if (yesornoanswer.Exit) return o;
676   - if (yesornoanswer.Yes) SQLDataBaseManagerCore.CreateServerLogins(movedbanswer.Emulation, movedbanswer.Dbto.SQLCS, usernamelist, loginrolelist, fullaccessrolelist);
  687 + string l13 = $"Do You want to create the following mandatory server and DB logins for TARGET server and DB?";
  688 + string l23 = $" SQL connection string: {dbto.SQLCS}";
  689 + string l33 = $" Username list: " + string.Join(",", usernamelist);
  690 + yesornoanswer = YesOrNo(new List<string>() { l13,l23,l33,});
  691 + if (yesornoanswer.selectionresult == Menu.SelectionResult.Exit) return o;
  692 + if (yesornoanswer.selectionresult == Menu.SelectionResult.Ok && yesornoanswer.yes)
  693 + {
  694 + SQLDataBaseManagerCore.CreateServerAndDBLogins(false, dbto.SQLCS, usernamelist, serverloginrolelist, fullaccessdbloginrolelist);
  695 + }
  696 + }
677 697  
678   - yesornoanswer = YesOrNo_SetDbOffline(movedbanswer.Dbfrom.SQLCS, null);
679   - if (yesornoanswer.Exit) return o;
680   - if (yesornoanswer.Yes) SQLDataBaseManagerCore.SetDatabaseOffline(movedbanswer.Dbfrom.SQLCS);
  698 + yesornoanswer = YesOrNo(new List<string>() { $"Do You want to set database '{SQLDataBaseManagerCore.GetDBName(dbfrom.SQLCS)}' OFFLINE on server '{SQLDataBaseManagerCore.GetDataSource(dbfrom.SQLCS)}'?", });
  699 + if (yesornoanswer.selectionresult == Menu.SelectionResult.Exit) return o;
  700 + if (yesornoanswer.selectionresult == Menu.SelectionResult.Ok && yesornoanswer.yes)
  701 + {
  702 + SQLDataBaseManagerCore.SetDatabaseOffline(dbfrom.SQLCS);
  703 + }
681 704  
682   - ColorConsole.WriteLine($"Moving DB to remote server completed. Required time: {(int)(DateTime.Now.Subtract(DateTimeNow).TotalSeconds)} seconds.", ConsoleColor.Green);
  705 + ColorConsole.WriteLine($"Process completed. Required time: {(int)(DateTime.Now.Subtract(DateTimeNow).TotalSeconds)} seconds.", ConsoleColor.Green);
683 706 }
684   - return o;
685 707 }
686   - private static (bool,bool,SQLDataBase, SQLDataBase, string, bool) YesOrNo_MoveDbToRemoteServer(SQLDataBaseManagerXmlProcessor config,string selectedsqldbindexes)
  708 + private static (Menu.SelectionResult selection,SQLDataBase dbfrom,SQLDataBase dbto) SelectToDbAndFromDb(SQLDataBaseManagerXmlProcessor config, string selectedsqldbindexes, string databaseselectionheadertext)
  709 + {
  710 + var menufolders = DisplaySQLDataBaseMenu(config, $"{databaseselectionheadertext} Format:FROMLOCALDB,TOREMOTEDB", silent: true, selectionmode: Menu.SelectionMode.Multi);
  711 + Menu.Selection sr = menufolders.Select(selectedsqldbindexes);
  712 + if (sr.Result == Menu.SelectionResult.Exit) { return (Menu.SelectionResult.Exit, null,null); }
  713 + else if (sr.Result == Menu.SelectionResult.None) { return (Menu.SelectionResult.None, null,null); }
  714 + else if (sr.Result == Menu.SelectionResult.Error) { return (Menu.SelectionResult.Error, null, null); }
  715 + else if (sr.Result == Menu.SelectionResult.Ok && sr.SelectedParameterList.FirstOrDefault() == null) { return (Menu.SelectionResult.Error, null, null); }
  716 + else if (sr.Result == Menu.SelectionResult.Ok && sr.SelectedParameterList.Count() != 2)
  717 + {
  718 + ColorConsole.WriteLine($"Select exactly 2 DB. Format:FROMLOCALDB,TOREMOTEDB", ConsoleColor.Red);
  719 + return (Menu.SelectionResult.Error, null, null);
  720 + }
  721 + else if (sr.Result == Menu.SelectionResult.Ok) { }
  722 + else { }
  723 + var spfrom = sr.SelectedParameterList.First();
  724 + var spto = sr.SelectedParameterList.ElementAt(1);
  725 + SQLDataBase dbfrom = spfrom.Parameters as SQLDataBase;
  726 + SQLDataBase dbto = spto.Parameters as SQLDataBase;
  727 + if (!dbto.Xml_IsRemoteDB)
  728 + {
  729 + ColorConsole.WriteLine($"TOREMOTEDB '{dbto.SQLCS}' has to be remote!", ConsoleColor.Red);
  730 + return (Menu.SelectionResult.Error, null, null);
  731 + }
  732 + if (dbfrom.Xml_IsRemoteDB)
  733 + {
  734 + ColorConsole.WriteLine($"FROMLOCALDB '{dbfrom.SQLCS}' has to be local!", ConsoleColor.Red);
  735 + return (Menu.SelectionResult.Error, null, null);
  736 + }
  737 + return (Menu.SelectionResult.Ok, dbfrom,dbto);
  738 + }
  739 + private static (Menu.SelectionResult selectionresult, bool yes) YesOrNo(List<string> questiontextLines)
687 740 {
688   - (bool, bool, SQLDataBase, SQLDataBase, string, bool) returnvalueexit = (true, false, null, null, null, false);
689   -
690   - selectionloop:
691   -
692   - ColorConsole.WriteLine($"Do You want to move ANY database from local server to remote server?", ConsoleColor.Yellow);
693   - var yesorno = ColorConsole.ReadLine("Move?", ConsoleColor.Yellow, validitylist: new List<string> { "yes", "no" }, defaultvalue: "yes");
694   - if (yesorno.ToUpper() == "EX") return returnvalueexit;
695   -
696   - var menufolders = DisplaySQLDataBaseMenu(config, $"Select the SQL database(s) to manage with function. '{nameof(MoveDbToRemoteServer)}'! Format:FROMLOCALDB,TOREMOTEDB", silent: true, selectionmode: Menu.SelectionMode.Multi);
697   -
698   - Menu.Selection sr = menufolders.Select(selectedsqldbindexes);
699   - if (sr.Result == Menu.SelectionResult.Exit) { return returnvalueexit; }
700   - else if (sr.Result == Menu.SelectionResult.None) { goto selectionloop; }
701   - else if (sr.Result == Menu.SelectionResult.Error) { goto selectionloop; }
702   - else if (sr.Result == Menu.SelectionResult.Ok && sr.SelectedParameterList.FirstOrDefault() == null) { goto selectionloop; }
703   - else if (sr.Result == Menu.SelectionResult.Ok && sr.SelectedParameterList.Count() != 2)
704   - {
705   - ColorConsole.WriteLine($"Select exactly 2 DB. Format:FROMLOCALDB,TOREMOTEDB", ConsoleColor.Red);
706   - goto selectionloop;
707   - }
708   - else if (sr.Result == Menu.SelectionResult.Ok) { }
709   - else { }
710   - var spfrom = sr.SelectedParameterList.First();
711   - var spto = sr.SelectedParameterList.ElementAt(1);
712   - SQLDataBase dbfrom = spfrom.Parameters as SQLDataBase;
713   - SQLDataBase dbto = spto.Parameters as SQLDataBase;
714   - if (!dbto.Xml_IsRemoteDB)
715   - {
716   - ColorConsole.WriteLine($"TOREMOTEDB '{dbto.SQLCS}' has to be remote!", ConsoleColor.Red);
717   - goto selectionloop;
718   - }
719   - if (dbfrom.Xml_IsRemoteDB)
720   - {
721   - ColorConsole.WriteLine($"FROMLOCALDB '{dbfrom.SQLCS}' has to be local!", ConsoleColor.Red);
722   - goto selectionloop;
723   - }
724   - if (yesorno.ToUpper() != "YES") return (false, false,dbfrom,dbto, null,false);
725   -
726   - bool emulation = false;
727   - var selecteddbname = ColorConsole.ReadLine($"Enter the name of the restored DB. EMPTY={dbto.DBName}, EX=exit.");
728   - if (selecteddbname.ToUpper() == "EX") return returnvalueexit;
729   - else if (string.IsNullOrWhiteSpace(selecteddbname)) selecteddbname = dbto.DBName;
  741 + if (questiontextLines!=null) foreach(string l in questiontextLines) { ColorConsole.WriteLine(l, ConsoleColor.Yellow); }
  742 + var yesorno = ColorConsole.ReadLine("Do action?", ConsoleColor.Yellow, validitylist: new List<string> { "yes", "no" }, defaultvalue: "yes");
  743 + if (yesorno.ToUpper() == "EX") return (Menu.SelectionResult.Exit, false);
  744 + else if (yesorno.ToUpper() == "yes") return (Menu.SelectionResult.Ok, true);
  745 + else return (Menu.SelectionResult.Ok, false);
  746 + }
  747 + #endregion MoveDbToRemoteServer
730 748  
731   - confirmloop:;
732   - var selection = ColorConsole.ReadLine("Enter CONFIRM to start, EMU to emulate, EX to exit.");
733   - if (selection.ToUpper() == "EX") return returnvalueexit;
734   - else if (selection.ToUpper() == "EMU") emulation = true;
735   - else if (selection.ToUpper() == "CONFIRM") { }
736   - else goto confirmloop;
737   - return (false,true,dbfrom,dbto, selecteddbname,emulation);
738   - }
739   - private static (bool,bool) YesOrNo_SetDbOffline(string sqlcs, string dbname)
740   - {
741   - dbname = dbname ?? SQLDataBaseManagerCore.GetDBName(sqlcs);
742   - var servername = SQLDataBaseManagerCore.GetDataSource(sqlcs);
743   - ColorConsole.WriteLine($"Do You want to set database '{dbname}' OFFLINE on server '{servername}'?", ConsoleColor.Yellow);
744   - ColorConsole.WriteLine($" SQL connection string: {sqlcs}", ConsoleColor.Yellow);
745   - ColorConsole.WriteLine($" Server/database: {servername}/{dbname}", ConsoleColor.Yellow);
746   - var yesorno = ColorConsole.ReadLine("Set offline?", ConsoleColor.Yellow, validitylist: new List<string> { "yes", "no" }, defaultvalue: "yes");
747   - return (yesorno.ToUpper() == "EX", yesorno.ToUpper() == "YES");
748   - }
749   - private static (bool,bool) YesOrNo_ServerLogin(string sqlcs,string[] usernamelist)
750   - {
751   - ColorConsole.WriteLine($"Do You want to create the following mandatory server logins?", ConsoleColor.Yellow);
752   - ColorConsole.WriteLine($" SQL connection string: {sqlcs}", ConsoleColor.Yellow);
753   - ColorConsole.WriteLine($" Server: {SQLDataBaseManagerCore.GetDataSource(sqlcs)}", ConsoleColor.Yellow);
754   - ColorConsole.WriteLine($" Username list: " + string.Join(",", usernamelist), ConsoleColor.Yellow);
755   - var yesorno = ColorConsole.ReadLine("Create login?", ConsoleColor.Yellow, validitylist: new List<string> { "yes", "no" }, defaultvalue: "yes");
756   - return (yesorno.ToUpper() == "EX", yesorno.ToUpper() == "YES");
757   - }
758   - #endregion MoveDbToRemoteServer
759   -
760   - #region ManageLastUpdatedTrigger
761   - private static object ManageLastUpdatedTrigger(object parameter, object o) { return _ManageLastUpdatedTrigger(parameter, o, null); }
  749 + #region ManageLastUpdatedTrigger
  750 + private static object ManageLastUpdatedTrigger(object parameter, object o) { return _ManageLastUpdatedTrigger(parameter, o, null); }
762 751 #region script texts for _RemoveAndCreateLastUpdatedTrigger
763 752 const string Header_Script =
764 753 @"USE [{DBNAME}]
... ... @@ -977,6 +966,7 @@ GO
977 966 }
978 967 #endregion ManageLastUpdatedTrigger
979 968  
  969 + #region ExecuteScript
980 970 private static object ExecuteScript(object parameter, object o)
981 971 {
982 972 var config = (parameter as Menu.ExecutorParameter).GetConfig<SQLDataBaseManagerXmlProcessor>();
... ... @@ -1079,7 +1069,7 @@ GO
1079 1069 }
1080 1070 return returnkey != null;
1081 1071 }
1082   -
  1072 + #endregion ExecuteScript
1083 1073 private static object DropDB(object parameter, object o)
1084 1074 {
1085 1075 var config = (parameter as Menu.ExecutorParameter).GetConfig<SQLDataBaseManagerXmlProcessor>();
... ... @@ -1255,6 +1245,30 @@ GO
1255 1245 #endregion First level Executors with UI
1256 1246  
1257 1247 #region private methods
  1248 + private static bool NoDBNameSpecified(SQLDataBase ssqldb)
  1249 + {
  1250 + const string FUNNOTAVAILTXT = "Function is not available for server connection strings wit no DB name specified!";
  1251 + if (string.IsNullOrWhiteSpace(SQLDataBaseManagerCore.GetDBName(ssqldb.SQLCS))) { ColorConsole.WriteLine(FUNNOTAVAILTXT, ConsoleColor.Red); ssqldb.DBName = "master"; return true; }
  1252 + return false;
  1253 + }
  1254 + public static void Execute(string key, bool enabledbbackup, bool enablescriptbackup, bool enabletabledatabackup, string targetfolder=null,DateTime? timestamp = null)
  1255 + {
  1256 + var packagets = (timestamp.HasValue ? timestamp.Value : DateTime.Now).ToString("yyyyMMddHHmmss");
  1257 + var config = new SQLDataBaseManagerXmlProcessor(XMLCONNECTIONSTRING, "", "hu-HU");
  1258 + var origsqld = config.GetDefinitionList().FirstOrDefault(x => x.Xml_Key == key);
  1259 + if (origsqld != null)
  1260 + {
  1261 + var sqld = new SQLDataBase(origsqld);
  1262 + var dbname = SQLDataBaseManagerCore.GetDBName(sqld.SQLCS);
  1263 + ColorConsole.WriteLine($"Database backup process started. DB key:'{key}', name:'{dbname}'...", ConsoleColor.Yellow);
  1264 + if (!string.IsNullOrWhiteSpace(targetfolder)) { sqld.Xml_BackupTargetDirectoryPath = targetfolder; }
  1265 + if (enabledbbackup) { SQLDataBaseManagerCore.CreateBackup(sqld,null, timestamp); }
  1266 + if (enablescriptbackup) { SQLDataBaseManagerCore.BackupSqlScripts(sqld, timestamp); }
  1267 + if (enabletabledatabackup) { SQLDataBaseManagerCore.BackupSqlData(sqld, timestamp); }
  1268 + ColorConsole.WriteLine($"Database backup process finished!", ConsoleColor.DarkGreen);
  1269 + }
  1270 + else { ColorConsole.WriteLine($"Database backup process error. DB key incorrect:'{key}'...", ConsoleColor.Red); }
  1271 + }
1258 1272 #region private DisplaySQLDataBaseMenu
1259 1273 private static void DataBaseListDisplayer() { DisplaySQLDataBaseMenu(); }
1260 1274 private static Menu DisplaySQLDataBaseMenu(SQLDataBaseManagerXmlProcessor config = null, string prompt = null, bool silent = false, Menu.SelectionMode selectionmode = Menu.SelectionMode.Multi)
... ... @@ -1778,14 +1792,14 @@ GO
1778 1792 }
1779 1793 finally { sqlserver?.ConnectionContext.SqlConnectionObject.Dispose(); }
1780 1794 }
1781   - public static void CreateServerLogins(bool emulation, string sqlcs, string[] usernamelist,string[] loginrolelist, string[] fullaccessrolelist)
  1795 + public static void CreateServerAndDBLogins(bool emulation, string sqlcs, string[] usernamelist,string[] serverloginrolelist, string[] dbloginrolelist)
1782 1796 {
1783 1797 foreach (var username in usernamelist)
1784 1798 {
1785   - ColorConsole.WriteLine(username, ConsoleColor.Yellow, prefix: nameof(SQLDataBaseManagerCore.CreateUser) + ":");
1786   - try { if (!emulation) SQLDataBaseManagerCore.CreateLogin(sqlcs, username, null, "master", LoginType.WindowsUser, loginrolelist); }
  1799 + ColorConsole.WriteLine(username, ConsoleColor.Yellow, prefix: nameof(SQLDataBaseManagerCore.CreateServerAndDBLogins) + ":");
  1800 + try { if (!emulation) SQLDataBaseManagerCore.CreateLogin(sqlcs, username, null, "master", LoginType.WindowsUser, serverloginrolelist); }
1787 1801 catch (Exception ex) { ColorConsole.WriteLine(nameof(SQLDataBaseManagerCore.CreateLogin) + ">>>: " + ex.MessageNested(), ConsoleColor.Red); }
1788   - try { if (!emulation) SQLDataBaseManagerCore.CreateUser(sqlcs, username, string.Join(",", fullaccessrolelist), "w"); }
  1802 + try { if (!emulation) SQLDataBaseManagerCore.CreateUser(sqlcs, username, string.Join(",", dbloginrolelist), "w"); }
1789 1803 catch (Exception ex) { ColorConsole.WriteLine(nameof(SQLDataBaseManagerCore.CreateUser) + "\n" + ex.MessageNested(), ConsoleColor.Red); }
1790 1804 }
1791 1805 }
... ... @@ -2060,7 +2074,7 @@ GO
2060 2074 sqltxt = Tools.KvpString.Substitute($"{RUNNINGMODE}={RUNNINGMODE_ONERUN};{RUNNINGMODE_ONERUN_PARAMETER_DELETEBEFOREDATE}={limitdatefornextrun:s};", sqltxtalmostresolved);
2061 2075 if (sqltxt == null) { return Finalize(1, Add(multirunresult, ERRMSG_NOTHINGTOEXECUTE)); } //won't really get, but we never know...
2062 2076 ret1 = ExecuteSQLScript(sqlc, sqltxt, sqlscript.CommandTimeout, null);
2063   - Add(loople, $"LIMITDATE", limitdatefornextrun.ToString());
  2077 + Add(loople, $"LIMITDATE", limitdatefornextrun.ToString("yyyy-MM-ddTHH:mm:ss.fff"));
2064 2078 Add(loople, $"RETCODE", ret1.ReturnValue.ToString());
2065 2079 Add(loople, $"RETMSG", ret1.ReturnMessage);
2066 2080 Add(loople, $"PROCESSINGTIME", DateTime.Now.Subtract(loopstart).ToString());
... ... @@ -2098,7 +2112,7 @@ GO
2098 2112  
2099 2113 Add(multirunresult, $"NUMOFRUNS", deleteruncounter.ToString());
2100 2114 Add(multirunresult, $"DBRECORDS", $"{numoftotaldbrecords_before}-->{numoftotaldbrecords_after} (total:{numoftotaldbrecords_after-numoftotaldbrecords_before})");
2101   - Add(multirunresult, $"MINDATE", $"{mindateTS_before}-->{mindateTS_after}");
  2115 + Add(multirunresult, $"MINDATE", $"{mindateTS_before.ToString("yyyy-MM-ddTHH:mm:ss.fff")}-->{mindateTS_after.ToString("yyyy-MM-ddTHH:mm:ss.fff")}");
2102 2116 Add(multirunresult, $"PROCESSINGTIME", $"{DateTime.Now.Subtract(starttime)}");
2103 2117 return Finalize(0, multirunresult);
2104 2118 }
... ...
Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs
... ... @@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
32 32 // You can specify all the values or you can default the Build and Revision Numbers
33 33 // by using the '*' as shown below:
34 34 // [assembly: AssemblyVersion("1.0.*")]
35   -[assembly: AssemblyVersion("1.31.7.0")]
36   -[assembly: AssemblyFileVersion("1.31.7.0")]
  35 +[assembly: AssemblyVersion("1.31.8.0")]
  36 +[assembly: AssemblyFileVersion("1.31.8.0")]
... ...