Commit 31cca8095fdfee6fcccba81b77f75a74fc5b7d3e
1 parent
34b4dbe8
v1.31.8.0
- Move DB to remote server letisztázása
Showing
2 changed files
with
150 additions
and
136 deletions
Show diff stats
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")] | ... | ... |