Commit 1ff12b69628093373f0183c7fbae12dc136abbe4
1 parent
f450c758
v1.31.3.0
- Scriptek kezelésének módosítása - DB név nélküli connectionstringek kezelése
Showing
2 changed files
with
128 additions
and
87 deletions
Show diff stats
Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs
| ... | ... | @@ -112,7 +112,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS |
| 112 | 112 | SQLDataBase sqld = p.Parameters as SQLDataBase; |
| 113 | 113 | try |
| 114 | 114 | { |
| 115 | - SQLDataBaseManagerCore.BackupSqlData(sqld,TS); | |
| 115 | + if (FunctionIsNotAvailable(sqld)) { return o; } | |
| 116 | + SQLDataBaseManagerCore.BackupSqlData(sqld,TS); | |
| 116 | 117 | ColorConsole.WriteLine($"SQLDB data scripts created. Name:{sqld.Xml_Description}", ConsoleColor.Green); |
| 117 | 118 | } |
| 118 | 119 | catch (Exception ex){ColorConsole.WriteLine(ex.MessageNested(), ConsoleColor.Red);} |
| ... | ... | @@ -141,7 +142,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS |
| 141 | 142 | SQLDataBase sqld = p.Parameters as SQLDataBase; |
| 142 | 143 | try |
| 143 | 144 | { |
| 144 | - SQLDataBaseManagerCore.BackupSqlScripts(sqld,TS); | |
| 145 | + if (FunctionIsNotAvailable(sqld)) { return o; } | |
| 146 | + SQLDataBaseManagerCore.BackupSqlScripts(sqld,TS); | |
| 145 | 147 | ColorConsole.WriteLine($"SQLDB code scripts created. Name:{sqld.Xml_Description}", ConsoleColor.Green); |
| 146 | 148 | } |
| 147 | 149 | catch (Exception ex) { ColorConsole.WriteLine(ex.MessageNested(), ConsoleColor.Red); } |
| ... | ... | @@ -167,17 +169,24 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS |
| 167 | 169 | var TS = DateTime.Now; |
| 168 | 170 | foreach (var p in sr.SelectedParameterList) |
| 169 | 171 | { |
| 170 | - SQLDataBase ssqldb = p.Parameters as SQLDataBase; | |
| 172 | + SQLDataBase sqld = p.Parameters as SQLDataBase; | |
| 171 | 173 | try |
| 172 | 174 | { |
| 173 | - SQLDataBaseManagerCore.CreateBackup(ssqldb,null,TS); | |
| 174 | - ColorConsole.WriteLine($"Database backup created. Name:{ssqldb.DBName}", ConsoleColor.Green); | |
| 175 | + if (FunctionIsNotAvailable(sqld)) { return o; } | |
| 176 | + SQLDataBaseManagerCore.CreateBackup(sqld,null,TS); | |
| 177 | + ColorConsole.WriteLine($"Database backup created. Name:{sqld.DBName}", ConsoleColor.Green); | |
| 175 | 178 | } |
| 176 | 179 | catch (Exception ex) { ColorConsole.WriteLine(ex.MessageNested(), ConsoleColor.Red); } |
| 177 | 180 | } |
| 178 | 181 | return o; |
| 179 | 182 | } |
| 180 | - private static object RestoreDataBase(object parameter, object o) | |
| 183 | + private static bool FunctionIsNotAvailable(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); return true; } | |
| 187 | + return false; | |
| 188 | + } | |
| 189 | + private static object RestoreDataBase(object parameter, object o) | |
| 181 | 190 | { |
| 182 | 191 | var config = (parameter as Menu.ExecutorParameter).GetConfig<SQLDataBaseManagerXmlProcessor>(); |
| 183 | 192 | var args = (parameter as Menu.ExecutorParameter).Args; |
| ... | ... | @@ -196,13 +205,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS |
| 196 | 205 | else if (sr.Result == Menu.SelectionResult.Ok) { } |
| 197 | 206 | else { } |
| 198 | 207 | var p = sr.SelectedParameterList.First(); |
| 199 | - SQLDataBase st = p.Parameters as SQLDataBase; | |
| 208 | + SQLDataBase sqld = p.Parameters as SQLDataBase; | |
| 200 | 209 | try |
| 201 | 210 | { |
| 202 | - var targetdirectorypath = st.Xml_PhysicalFilesDirectoryPath; | |
| 203 | - var targetdbname = st.DBName; | |
| 204 | - bool restorefromzip = st.Xml_CreateZip; | |
| 205 | - var backupfilelist = SQLDataBaseManagerCore.GetBackupFilePathList(st); | |
| 211 | + if (FunctionIsNotAvailable(sqld)) { return o; } | |
| 212 | + var targetdirectorypath = sqld.Xml_PhysicalFilesDirectoryPath; | |
| 213 | + var targetdbname = sqld.DBName; | |
| 214 | + bool restorefromzip = sqld.Xml_CreateZip; | |
| 215 | + var backupfilelist = SQLDataBaseManagerCore.GetBackupFilePathList(sqld); | |
| 206 | 216 | Dictionary<string, string> selectionlist = new Dictionary<string, string>(); |
| 207 | 217 | |
| 208 | 218 | string selectedbackupfilepath=null; |
| ... | ... | @@ -214,7 +224,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS |
| 214 | 224 | .Select(x => new KeyValuePair<string, string>($"{x.Name}({x.Length}bytes,created:{x.CreationTime})", x.FullName)) |
| 215 | 225 | .ToDictionary(x => x.Key, x => x.Value); |
| 216 | 226 | selectionlist.Add("*", "other..."); |
| 217 | - var ms = Menu.SelectFromItemList($"Backup files of {st.DBName}", "Select the backup file to restore! First is the newest!", selectionlist, Menu.SelectionMode.Single, getconfirmation: true); | |
| 227 | + var ms = Menu.SelectFromItemList($"Backup files of {sqld.DBName}", "Select the backup file to restore! First is the newest!", selectionlist, Menu.SelectionMode.Single, getconfirmation: true); | |
| 218 | 228 | if (ms == null) { goto startselection; } |
| 219 | 229 | else if (ms.SelectedKeyList.First() == "*") { } |
| 220 | 230 | else { selectedbackupfilepath = ms.SelectedParameterList.First().Parameters.ToString(); } |
| ... | ... | @@ -227,8 +237,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS |
| 227 | 237 | else if (string.IsNullOrWhiteSpace(selectedbackupfilepath)) goto enterpathtobackupfileloop; |
| 228 | 238 | } |
| 229 | 239 | |
| 230 | - SQLDataBaseManagerCore.RestoreBackup(st, selectedbackupfilepath, targetdirectorypath, restorefromzip, targetdbname); | |
| 231 | - ColorConsole.WriteLine($"Database '{st.DBName}' restored to '{targetdbname}' into directory '{targetdirectorypath}'.", ConsoleColor.Green); | |
| 240 | + SQLDataBaseManagerCore.RestoreBackup(sqld, selectedbackupfilepath, targetdirectorypath, restorefromzip, targetdbname); | |
| 241 | + ColorConsole.WriteLine($"Database '{sqld.DBName}' restored to '{targetdbname}' into directory '{targetdirectorypath}'.", ConsoleColor.Green); | |
| 232 | 242 | } |
| 233 | 243 | catch (Exception ex) { ColorConsole.WriteLine(ex.MessageNested(), ConsoleColor.Red); } |
| 234 | 244 | return o; |
| ... | ... | @@ -495,8 +505,9 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS |
| 495 | 505 | |
| 496 | 506 | var p = sr.SelectedParameterList.FirstOrDefault(); |
| 497 | 507 | SQLDataBase sqld = p.Parameters as SQLDataBase; |
| 508 | + if (FunctionIsNotAvailable(sqld)) { return o; } | |
| 498 | 509 | |
| 499 | - getparametersloop: | |
| 510 | + getparametersloop: | |
| 500 | 511 | List<SQLDataBase.DBUser> DbusrToExecuteList = new List<SQLDataBase.DBUser>(); |
| 501 | 512 | string selecteddbusrkey = null; |
| 502 | 513 | if (sqld.Xml_SQLDbUserList.Count == 0) |
| ... | ... | @@ -645,7 +656,9 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS |
| 645 | 656 | var DateTimeNow = DateTime.Now; |
| 646 | 657 | |
| 647 | 658 | movedbanswer = YesOrNo_MoveDbToRemoteServer(config, selectedsqldbindexes); |
| 648 | - if (movedbanswer.Exit) break; | |
| 659 | + if (FunctionIsNotAvailable(movedbanswer.Dbfrom)) { continue; } | |
| 660 | + if (FunctionIsNotAvailable(movedbanswer.Dbto)) { continue; } | |
| 661 | + if (movedbanswer.Exit) break; | |
| 649 | 662 | if (movedbanswer.Yes) |
| 650 | 663 | { |
| 651 | 664 | var movesuccess = SQLDataBaseManagerCore.MoveDbToRemoteServer(movedbanswer.Dbfrom, movedbanswer.Dbto, movedbanswer.Selecteddbname, movedbanswer.Emulation); |
| ... | ... | @@ -814,8 +827,9 @@ GO |
| 814 | 827 | var p = sr.SelectedParameterList.FirstOrDefault(); |
| 815 | 828 | if (p == null) { return o; } |
| 816 | 829 | SQLDataBase sqld = p.Parameters as SQLDataBase; |
| 830 | + if (FunctionIsNotAvailable(sqld)) { return o; } | |
| 817 | 831 | |
| 818 | - getparametersloop:; | |
| 832 | + getparametersloop:; | |
| 819 | 833 | |
| 820 | 834 | List<SQLDataBase.LastUpdatedTrigger> TriggerToExecuteList = new List<SQLDataBase.LastUpdatedTrigger>(); |
| 821 | 835 | string selectedtrgkey =null; |
| ... | ... | @@ -1015,7 +1029,7 @@ GO |
| 1015 | 1029 | bool multirunmode = !string.IsNullOrWhiteSpace(ss.MultirunParameters); |
| 1016 | 1030 | int commandtimeout = ss.CommandTimeout; |
| 1017 | 1031 | ReturnInfoJSON result = null; |
| 1018 | - using (var sqlc = ServerConnectionPool.GetSqlConnection(sqld.SQLCS, open: true)) | |
| 1032 | + using (var sqlc = ServerConnectionPool.GetSqlConnection(ss.SQLCS, open: true)) | |
| 1019 | 1033 | { |
| 1020 | 1034 | if (multirunmode) { result = SQLDataBaseManagerCore.ExecuteMultirunSQLScript(sqlc, ss, ExitAtThisPoint); } |
| 1021 | 1035 | else |
| ... | ... | @@ -1085,7 +1099,8 @@ GO |
| 1085 | 1099 | SQLDataBase sqld = p.Parameters as SQLDataBase; |
| 1086 | 1100 | try |
| 1087 | 1101 | { |
| 1088 | - ColorConsole.WriteLine(prefix: $"Enter the userid/password (for the user in favour you want to drop the DB). Format:", bracket: "()", text: "[USERID[,PASSWORD]]:", f: ConsoleColor.Yellow); | |
| 1102 | + if (FunctionIsNotAvailable(sqld)) { return o; } | |
| 1103 | + ColorConsole.WriteLine(prefix: $"Enter the userid/password (for the user in favour you want to drop the DB). Format:", bracket: "()", text: "[USERID[,PASSWORD]]:", f: ConsoleColor.Yellow); | |
| 1089 | 1104 | ColorConsole.WriteLine(prefix: " ", text: "[USERID,PASSWORD empty]", bracket: "[]", suffix: $":use windows authentication with current user", f: ConsoleColor.Yellow); |
| 1090 | 1105 | ColorConsole.WriteLine(prefix: " ", text: "USERID", bracket: "[]", suffix: $":use windows authentication with this user", f: ConsoleColor.Yellow); |
| 1091 | 1106 | ColorConsole.WriteLine(prefix: " ", text: "USERID,PASSWORD", bracket: "[]", suffix: $":use sql server authentication with this user and password.", f: ConsoleColor.Yellow); |
| ... | ... | @@ -1170,7 +1185,8 @@ GO |
| 1170 | 1185 | SQLDataBase sqld = p.Parameters as SQLDataBase; |
| 1171 | 1186 | try |
| 1172 | 1187 | { |
| 1173 | - ColorConsole.WriteLine(prefix: $"Enter the shrink options. Format:", bracket:"()", text:"OPTION,FreeSpacePercent:", f:ConsoleColor.Yellow); | |
| 1188 | + if (FunctionIsNotAvailable(sqld)) { return o; } | |
| 1189 | + ColorConsole.WriteLine(prefix: $"Enter the shrink options. Format:", bracket:"()", text:"OPTION,FreeSpacePercent:", f:ConsoleColor.Yellow); | |
| 1174 | 1190 | ColorConsole.WriteLine(prefix:" ", text:"Default", bracket: "[]", suffix: $": (default) compacts the data and removes free space from the DB. Use togethere with FreeSpacePercent.", f:ConsoleColor.Yellow); |
| 1175 | 1191 | ColorConsole.WriteLine(prefix: " ", text: "NoTruncate",bracket:"[]", suffix: $": compacts the data, but does not remove free space from the DB. FreeSpacePercent is not applicable.", f: ConsoleColor.Yellow); |
| 1176 | 1192 | ColorConsole.WriteLine(prefix: " ", text: "TruncateOnly", bracket: "[]", suffix: $": does not compact the data, but removes free space from the DB. Use togethere with FreeSpacePercent.", f: ConsoleColor.Yellow); |
| ... | ... | @@ -1213,7 +1229,8 @@ GO |
| 1213 | 1229 | SQLDataBase sqld = p.Parameters as SQLDataBase; |
| 1214 | 1230 | try |
| 1215 | 1231 | { |
| 1216 | - var restoredbname = ColorConsole.ReadLine($"Enter the name of the DB to copy '{sqld.DBName}' to. Empty={sqld.DBName}. EX=exit.", ConsoleColor.Yellow, suffix: " --> "); | |
| 1232 | + if (FunctionIsNotAvailable(sqld)) { return o; } | |
| 1233 | + var restoredbname = ColorConsole.ReadLine($"Enter the name of the DB to copy '{sqld.DBName}' to. Empty={sqld.DBName}. EX=exit.", ConsoleColor.Yellow, suffix: " --> "); | |
| 1217 | 1234 | if (restoredbname.ToUpper() == "EX") { continue; } |
| 1218 | 1235 | else if (string.IsNullOrWhiteSpace(restoredbname)) { restoredbname = sqld.DBName; } |
| 1219 | 1236 | ColorConsole.WriteLine("Enter the path for the DB physical files.", ConsoleColor.Yellow); |
| ... | ... | @@ -1266,7 +1283,7 @@ GO |
| 1266 | 1283 | ColorConsole.Write($"{st.Xml_Description}", ConsoleColor.Black, ConsoleColor.White); |
| 1267 | 1284 | var statuscolor = st.Status == SQLDataBase.SQLDBStatus.NoAccess ? ConsoleColor.Red:ConsoleColor.Green; |
| 1268 | 1285 | ColorConsole.Write(st.Status.ToString(), statuscolor, bracket: "[]", prefix: " ", suffix: ". "); |
| 1269 | - ColorConsole.Write(st.DBName, statuscolor, bracket: "[]", prefix: "Database ", suffix: ". "); | |
| 1286 | + if (!string.IsNullOrWhiteSpace(st.DBName)) { ColorConsole.Write(st.DBName, statuscolor, bracket: "[]", prefix: "Database ", suffix: ". "); } | |
| 1270 | 1287 | ColorConsole.Write(st.DataSource, statuscolor, bracket: "[]", prefix: "from server ", suffix: ". "); |
| 1271 | 1288 | if (st.Status != SQLDataBase.SQLDBStatus.NoAccess) |
| 1272 | 1289 | { |
| ... | ... | @@ -1277,7 +1294,8 @@ GO |
| 1277 | 1294 | } |
| 1278 | 1295 | else if (lineix == 1) |
| 1279 | 1296 | { |
| 1280 | - ColorConsole.Write($"{st.Xml_BackupFileNameMask}", ConsoleColor.Yellow, prefix: "Backup to:", suffix: ".xxx"); | |
| 1297 | + if (string.IsNullOrWhiteSpace(st.DBName)) return Menu.MenuItemDisplayerReturnValue.SAMELINE; | |
| 1298 | + ColorConsole.Write($"{st.Xml_BackupFileNameMask}", ConsoleColor.Yellow, prefix: "Backup to:", suffix: ".xxx"); | |
| 1281 | 1299 | ColorConsole.WriteLine(); |
| 1282 | 1300 | return Menu.MenuItemDisplayerReturnValue.NEXTLINE; |
| 1283 | 1301 | } |
| ... | ... | @@ -1289,14 +1307,16 @@ GO |
| 1289 | 1307 | } |
| 1290 | 1308 | else if (lineix == 3) |
| 1291 | 1309 | { |
| 1292 | - var PhysicalFilesDirectoryPathcolor = st.PhysicalFilesDirectoryPath.StartsWith("ERR") ? ConsoleColor.Red : ConsoleColor.Yellow; | |
| 1310 | + if (string.IsNullOrWhiteSpace(st.DBName)) return Menu.MenuItemDisplayerReturnValue.SAMELINE; | |
| 1311 | + var PhysicalFilesDirectoryPathcolor = st.PhysicalFilesDirectoryPath.StartsWith("ERR") ? ConsoleColor.Red : ConsoleColor.Yellow; | |
| 1293 | 1312 | ColorConsole.Write($"{st.PhysicalFilesDirectoryPath}", PhysicalFilesDirectoryPathcolor, prefix: "DB files physical location:", suffix: " "); |
| 1294 | 1313 | ColorConsole.WriteLine(" "); |
| 1295 | 1314 | return Menu.MenuItemDisplayerReturnValue.NEXTLINE; |
| 1296 | 1315 | } |
| 1297 | 1316 | else if (lineix == 4) |
| 1298 | 1317 | { |
| 1299 | - var SizeStringcolor = st.SizeString.StartsWith("ERR") ? ConsoleColor.Red : ConsoleColor.Yellow; | |
| 1318 | + if (string.IsNullOrWhiteSpace(st.DBName)) return Menu.MenuItemDisplayerReturnValue.SAMELINE; | |
| 1319 | + var SizeStringcolor = st.SizeString.StartsWith("ERR") ? ConsoleColor.Red : ConsoleColor.Yellow; | |
| 1300 | 1320 | ColorConsole.Write(st.SizeString, SizeStringcolor, prefix: "DB size:", suffix: " "); |
| 1301 | 1321 | ColorConsole.WriteLine(" "); |
| 1302 | 1322 | return Menu.MenuItemDisplayerReturnValue.NEXTLINE; |
| ... | ... | @@ -1307,7 +1327,8 @@ GO |
| 1307 | 1327 | if (st.Xml_SQLScriptList.Count-1 < lineix-5) { return Menu.MenuItemDisplayerReturnValue.EXIT; } |
| 1308 | 1328 | var s = st.Xml_SQLScriptList.ToArray()[lineix-5]; |
| 1309 | 1329 | ColorConsole.Write(s.Key, ConsoleColor.Yellow, bracket: "[]", suffix: " ", prefix: " Script: "); |
| 1310 | - ColorConsole.WriteLine($"{s.Description} ({s.Name})", ConsoleColor.Yellow); | |
| 1330 | + ColorConsole.Write(s.Name, ConsoleColor.Yellow, bracket: "[]", suffix: " "); | |
| 1331 | + ColorConsole.WriteLine(s.Description, ConsoleColor.White); | |
| 1311 | 1332 | return Menu.MenuItemDisplayerReturnValue.NEXTLINE; |
| 1312 | 1333 | } |
| 1313 | 1334 | return Menu.MenuItemDisplayerReturnValue.EXIT; |
| ... | ... | @@ -1981,18 +2002,18 @@ GO |
| 1981 | 2002 | /// </param> |
| 1982 | 2003 | /// <returns></returns> |
| 1983 | 2004 | |
| 1984 | - public static ReturnInfoJSON ExecuteMultirunSQLScript(SqlConnection sqlc, SQLDataBase.SQLScript sqlscript, Func<ReturnInfoJSON,TimeSpan?, bool> ExitAtThisPoint=null) | |
| 2005 | + public static ReturnInfoJSON ExecuteMultirunSQLScript(SqlConnection sqlc,SQLDataBase.SQLScript sqlscript, Func<ReturnInfoJSON,TimeSpan?, bool> ExitAtThisPoint=null) | |
| 1985 | 2006 | { |
| 1986 | - ReturnInfoJSON ret1=null; | |
| 1987 | - string sqltxt = null; | |
| 1988 | - int? getdbnumofrowsresult=null; | |
| 1989 | - DateTime? getdbmindateresult=null; | |
| 2007 | + ReturnInfoJSON ret1 = null; | |
| 2008 | + string sqltxt = null; | |
| 2009 | + int? getdbnumofrowsresult = null; | |
| 2010 | + DateTime? getdbmindateresult = null; | |
| 1990 | 2011 | |
| 1991 | 2012 | var multirunresult = new List<KeyValuePair<string, string>>(); |
| 1992 | 2013 | |
| 1993 | 2014 | var scriptparameterkvplist = (new Tools.KvpString(sqlscript.ScriptParameters)).ResolveInteractive(); |
| 1994 | - string sqltxtalmostresolved = scriptparameterkvplist.Substitute(sqlscript.ScriptText); //parameters of the run are still unresolved | |
| 1995 | - if (sqltxtalmostresolved == null) {return Finalize(1, Add(multirunresult, ERRMSG_NOTHINGTOEXECUTE));} //won't really get, but we never know... | |
| 2015 | + string sqltxtalmostresolved = scriptparameterkvplist.Substitute(sqlscript.ScriptText); //parameters of the run are still unresolved | |
| 2016 | + if (sqltxtalmostresolved == null) { return Finalize(1, Add(multirunresult, ERRMSG_NOTHINGTOEXECUTE)); } //won't really get, but we never know... | |
| 1996 | 2017 | |
| 1997 | 2018 | //get number of total records in the database |
| 1998 | 2019 | getdbnumofrowsresult = GetDBNumofRows(sqltxtalmostresolved, multirunresult, sqlscript.CommandTimeout, sqlc); |
| ... | ... | @@ -2003,27 +2024,27 @@ GO |
| 2003 | 2024 | getdbmindateresult = GetDBMindate(sqltxtalmostresolved, multirunresult, sqlscript.CommandTimeout, sqlc); |
| 2004 | 2025 | if (getdbmindateresult == null) return Finalize(1, multirunresult); |
| 2005 | 2026 | DateTime mindateTS_before = getdbmindateresult.Value; |
| 2006 | - var _multirunresult = multirunresult.Select(kvp => new KeyValuePair<string, string>(kvp.Key, kvp.Value)).ToList(); | |
| 2027 | + var _multirunresult = multirunresult.Select(kvp => new KeyValuePair<string, string>(kvp.Key, kvp.Value)).ToList(); | |
| 2007 | 2028 | Add(_multirunresult, $"DBRECORDS", $"{numoftotaldbrecords_before}"); |
| 2008 | 2029 | Add(_multirunresult, $"MINDATE", $"{mindateTS_before}"); |
| 2009 | 2030 | |
| 2010 | - var exithere = (ExitAtThisPoint?.Invoke(Finalize(0, _multirunresult),null)) ?? false; | |
| 2031 | + var exithere = (ExitAtThisPoint?.Invoke(Finalize(0, _multirunresult), null)) ?? false; | |
| 2011 | 2032 | if (exithere) { Add(_multirunresult, $"Exit requested by user"); return Finalize(0, _multirunresult); } |
| 2012 | 2033 | |
| 2013 | 2034 | var multirunparameterskvplist = (new Tools.KvpString(sqlscript.MultirunParameters)).ResolveInteractive(); |
| 2014 | - if(multirunparameterskvplist == null) { return Finalize(0, Add(multirunresult, ERRMSG_NOMULTIRUNPARAMETERS)); } //user exit with selecting EX | |
| 2015 | - var smrp = SetMultirunParameters(multirunparameterskvplist, multirunresult); | |
| 2016 | - if (smrp == null) { return Finalize(1, multirunresult);} | |
| 2017 | - (bool par_testmode, DateTime par_limitdate, TimeSpan par_lengthofonerun, TimeSpan par_delaybetweenruns) = smrp.Value; | |
| 2035 | + if (multirunparameterskvplist == null) { return Finalize(0, Add(multirunresult, ERRMSG_NOMULTIRUNPARAMETERS)); } //user exit with selecting EX | |
| 2036 | + var smrp = SetMultirunParameters(multirunparameterskvplist, multirunresult); | |
| 2037 | + if (smrp == null) { return Finalize(1, multirunresult); } | |
| 2038 | + (bool par_testmode, DateTime par_limitdate, TimeSpan par_lengthofonerun, TimeSpan par_delaybetweenruns) = smrp.Value; | |
| 2018 | 2039 | |
| 2019 | 2040 | try |
| 2020 | 2041 | { |
| 2021 | - DateTime starttime = DateTime.Now; | |
| 2042 | + DateTime starttime = DateTime.Now; | |
| 2022 | 2043 | var limitdatefornextrun = mindateTS_before; |
| 2023 | 2044 | int exceptioncounter = 0; |
| 2024 | - const int MAXEXCEPTIONS = 3; //after this number of subsequent exceptions we exit | |
| 2025 | - int deleteruncounter = 0; | |
| 2026 | - int runresult; | |
| 2045 | + const int MAXEXCEPTIONS = 3; //after this number of subsequent exceptions we exit | |
| 2046 | + int deleteruncounter = 0; | |
| 2047 | + int runresult; | |
| 2027 | 2048 | while (true) |
| 2028 | 2049 | { |
| 2029 | 2050 | if (limitdatefornextrun >= par_limitdate) break; |
| ... | ... | @@ -2031,36 +2052,36 @@ GO |
| 2031 | 2052 | var loople = new List<KeyValuePair<string, string>>(); |
| 2032 | 2053 | if (limitdatefornextrun > par_limitdate) limitdatefornextrun = par_limitdate; |
| 2033 | 2054 | Add(loople, $"RUN#{deleteruncounter}"); |
| 2034 | - try | |
| 2035 | - { | |
| 2036 | - sqltxt = Tools.KvpString.Substitute($"{RUNNINGMODE}={RUNNINGMODE_ONERUN};{RUNNINGMODE_ONERUN_PARAMETER_DELETEBEFOREDATE}={limitdatefornextrun:s};", sqltxtalmostresolved); | |
| 2037 | - if (sqltxt == null) { return Finalize(1, Add(multirunresult, ERRMSG_NOTHINGTOEXECUTE)); } //won't really get, but we never know... | |
| 2038 | - ret1 = ExecuteSQLScript(sqlc, sqltxt, sqlscript.CommandTimeout, null); | |
| 2039 | - Add(loople, $"LIMITDATE", limitdatefornextrun.ToString()); | |
| 2040 | - Add(loople, $"RETCODE", ret1.ReturnValue.ToString()); | |
| 2041 | - Add(loople, $"RETMSG", ret1.ReturnMessage); | |
| 2042 | - | |
| 2043 | - deleteruncounter++; | |
| 2044 | - exceptioncounter = 0; | |
| 2045 | - runresult = 0; | |
| 2055 | + try | |
| 2056 | + { | |
| 2057 | + sqltxt = Tools.KvpString.Substitute($"{RUNNINGMODE}={RUNNINGMODE_ONERUN};{RUNNINGMODE_ONERUN_PARAMETER_DELETEBEFOREDATE}={limitdatefornextrun:s};", sqltxtalmostresolved); | |
| 2058 | + if (sqltxt == null) { return Finalize(1, Add(multirunresult, ERRMSG_NOTHINGTOEXECUTE)); } //won't really get, but we never know... | |
| 2059 | + ret1 = ExecuteSQLScript(sqlc, sqltxt, sqlscript.CommandTimeout, null); | |
| 2060 | + Add(loople, $"LIMITDATE", limitdatefornextrun.ToString()); | |
| 2061 | + Add(loople, $"RETCODE", ret1.ReturnValue.ToString()); | |
| 2062 | + Add(loople, $"RETMSG", ret1.ReturnMessage); | |
| 2063 | + | |
| 2064 | + deleteruncounter++; | |
| 2065 | + exceptioncounter = 0; | |
| 2066 | + runresult = 0; | |
| 2046 | 2067 | } |
| 2047 | - catch (Exception ex) | |
| 2048 | - { | |
| 2049 | - exceptioncounter++; | |
| 2050 | - string errmsg = ""; while (ex != null) { errmsg += ex.Message; ex = ex.InnerException; } | |
| 2051 | - Add(loople, $"EXCEPTION RESULT DeleteRun", errmsg); | |
| 2068 | + catch (Exception ex) | |
| 2069 | + { | |
| 2070 | + exceptioncounter++; | |
| 2071 | + string errmsg = ""; while (ex != null) { errmsg += ex.Message; ex = ex.InnerException; } | |
| 2072 | + Add(loople, $"EXCEPTION RESULT DeleteRun", errmsg); | |
| 2052 | 2073 | runresult = 1; |
| 2053 | 2074 | if (exceptioncounter > MAXEXCEPTIONS) { return Finalize(1, multirunresult); } |
| 2054 | 2075 | } |
| 2055 | - var exitfromloop = (ExitAtThisPoint?.Invoke(Finalize(runresult, loople),new TimeSpan(0,0,5))) ?? false; | |
| 2076 | + var exitfromloop = (ExitAtThisPoint?.Invoke(Finalize(runresult, loople), new TimeSpan(0, 0, 5))) ?? false; | |
| 2056 | 2077 | if (exitfromloop) { Add(multirunresult, $"Exit requested by user"); break; } |
| 2057 | 2078 | Thread.Sleep((int)(par_delaybetweenruns.TotalMilliseconds)); |
| 2058 | 2079 | } |
| 2059 | 2080 | |
| 2060 | 2081 | //get minimum date in the database |
| 2061 | - getdbmindateresult = GetDBMindate(sqltxtalmostresolved,multirunresult, sqlscript.CommandTimeout,sqlc); | |
| 2062 | - if (getdbmindateresult==null) return Finalize(1, multirunresult); | |
| 2063 | - DateTime mindateTS_after = getdbmindateresult.Value; | |
| 2082 | + getdbmindateresult = GetDBMindate(sqltxtalmostresolved, multirunresult, sqlscript.CommandTimeout, sqlc); | |
| 2083 | + if (getdbmindateresult == null) return Finalize(1, multirunresult); | |
| 2084 | + DateTime mindateTS_after = getdbmindateresult.Value; | |
| 2064 | 2085 | |
| 2065 | 2086 | //get number of total records in the database |
| 2066 | 2087 | getdbnumofrowsresult = GetDBNumofRows(sqltxtalmostresolved, multirunresult, sqlscript.CommandTimeout, sqlc); |
| ... | ... | @@ -2075,7 +2096,7 @@ GO |
| 2075 | 2096 | } |
| 2076 | 2097 | catch (Exception ex) { return Finalize(1, Add(multirunresult, ex)); } |
| 2077 | 2098 | } |
| 2078 | - private static (bool par_testmode, DateTime par_limitdate, TimeSpan par_lengthofonerun, TimeSpan par_delaybetweenruns)? SetMultirunParameters(Tools.KvpString argkvplist,List<KeyValuePair<string, string>> multirunresult) | |
| 2099 | + private static (bool par_testmode, DateTime par_limitdate, TimeSpan par_lengthofonerun, TimeSpan par_delaybetweenruns)? SetMultirunParameters(Tools.KvpString argkvplist,List<KeyValuePair<string, string>> multirunresult) | |
| 2079 | 2100 | { |
| 2080 | 2101 | bool par_testmode; |
| 2081 | 2102 | int par_limitdays; |
| ... | ... | @@ -2628,11 +2649,22 @@ GO |
| 2628 | 2649 | { |
| 2629 | 2650 | try |
| 2630 | 2651 | { |
| 2631 | - GetPhysicalFilesLocationAndSize(this.SQLCS, out this.SizeString, out this.PhysicalFilesDirectoryPath); | |
| 2632 | - this.Status = this.PhysicalFilesDirectoryPath.StartsWith("ERR") ? SQLDBStatus.NoAccess : SQLDBStatus.OK; | |
| 2633 | - this.DBName = SQLDataBaseManagerCore.GetDBName(this.SQLCS); | |
| 2634 | - this.DataSource = SQLDataBaseManagerCore.GetDataSource(this.SQLCS); | |
| 2635 | - } | |
| 2652 | + string dbname = SQLDataBaseManagerCore.GetDBName(this.SQLCS); | |
| 2653 | + if (string.IsNullOrWhiteSpace(dbname)) | |
| 2654 | + { | |
| 2655 | + var sqlc = ServerConnectionPool.GetSqlConnection(this.SQLCS, open: true); | |
| 2656 | + this.Status = SQLDBStatus.OK; | |
| 2657 | + this.DBName = ""; | |
| 2658 | + this.DataSource = SQLDataBaseManagerCore.GetDataSource(this.SQLCS); | |
| 2659 | + } | |
| 2660 | + else | |
| 2661 | + { | |
| 2662 | + GetPhysicalFilesLocationAndSize(this.SQLCS, out this.SizeString, out this.PhysicalFilesDirectoryPath); | |
| 2663 | + this.Status = this.PhysicalFilesDirectoryPath.StartsWith("ERR") ? SQLDBStatus.NoAccess : SQLDBStatus.OK; | |
| 2664 | + this.DBName = SQLDataBaseManagerCore.GetDBName(this.SQLCS); | |
| 2665 | + this.DataSource = SQLDataBaseManagerCore.GetDataSource(this.SQLCS); | |
| 2666 | + } | |
| 2667 | + } | |
| 2636 | 2668 | catch |
| 2637 | 2669 | { |
| 2638 | 2670 | this.Status = SQLDBStatus.NoAccess; |
| ... | ... | @@ -2725,7 +2757,8 @@ GO |
| 2725 | 2757 | Xml_BackupTimeout = GetValue(nameof(XmlStructure.SQLDataBase.Attributes.BackupTimeout), sqldatabasexml, common.Xml_BackupTimeout); |
| 2726 | 2758 | |
| 2727 | 2759 | Xml_SQLDataList = new List<SQLData>(); |
| 2728 | - var sqldataXmlList = GetAllXElements(sqldatabasexml, nameof(XmlStructure.SQLDataBase.SQLData)); | |
| 2760 | + IEnumerable<XElement> sqldataXmlList=null; | |
| 2761 | + try { sqldataXmlList = GetAllXElements(sqldatabasexml, nameof(XmlStructure.SQLDataBase.SQLData)); } catch { } | |
| 2729 | 2762 | if (sqldataXmlList!=null) { foreach (var sqldataXml in sqldataXmlList) { Xml_SQLDataList.Add(new SQLData(sqldataXml)); } } |
| 2730 | 2763 | |
| 2731 | 2764 | Xml_SQLLastUpdatedTriggerList = new List<LastUpdatedTrigger>(); |
| ... | ... | @@ -2746,7 +2779,7 @@ GO |
| 2746 | 2779 | Xml_SQLScriptList = new List<SQLScript>(); |
| 2747 | 2780 | var sqlscriptsXml = GetXElement(sqldatabasexml, nameof(XmlStructure.SQLDataBase.Scripts)); |
| 2748 | 2781 | var sqlscriptXmlList = GetAllXElements(sqlscriptsXml, nameof(XmlStructure.SQLDataBase.Scripts.Script)); |
| 2749 | - if (sqlscriptXmlList != null) { int scriptindex = 1; foreach (var sqlscriptXml in sqlscriptXmlList) { Xml_SQLScriptList.Add(new SQLScript(sqlscriptXml, Xml_ScriptCommandTimeout,scriptindex++)); } } | |
| 2782 | + if (sqlscriptXmlList != null) { int scriptindex = 1; foreach (var sqlscriptXml in sqlscriptXmlList) { Xml_SQLScriptList.Add(new SQLScript(sqlscriptXml, Xml_SQLConnectionString,Xml_ScriptCommandTimeout, scriptindex++)); } } | |
| 2750 | 2783 | } |
| 2751 | 2784 | #endregion xml constructor |
| 2752 | 2785 | #region cloner constructor |
| ... | ... | @@ -2857,8 +2890,9 @@ GO |
| 2857 | 2890 | public static class ScriptCommandTimeout { public static class Values { public const int DEFAULT = 10000; } } |
| 2858 | 2891 | public static class Parameters { public static class Values { public const string DEFAULT = ""; } } |
| 2859 | 2892 | public static class Multirun { public static class Values { public const string DEFAULT = ""; } } |
| 2860 | - } | |
| 2861 | - } | |
| 2893 | + public static class SQLConnectionString { public static class Values { public const string DEFAULT = null; } } | |
| 2894 | + } | |
| 2895 | + } | |
| 2862 | 2896 | } |
| 2863 | 2897 | } |
| 2864 | 2898 | } |
| ... | ... | @@ -2874,10 +2908,15 @@ GO |
| 2874 | 2908 | public int CommandTimeout = 10000; |
| 2875 | 2909 | public string ScriptParameters=null; |
| 2876 | 2910 | public string MultirunParameters=null; |
| 2911 | + public string SQLConnectionString=null; | |
| 2912 | + public string SQLCS | |
| 2913 | + { | |
| 2914 | + get { return XmlProcessing.ConnectionStringStore.GetSQL(this.SQLConnectionString); } | |
| 2915 | + } | |
| 2877 | 2916 | |
| 2878 | - public SQLScript() { } | |
| 2917 | + public SQLScript() { } | |
| 2879 | 2918 | public SQLScript(SQLScript sqls) { Name = sqls.Name; Description = sqls.Description; ScriptText= sqls.ScriptText; } |
| 2880 | - public SQLScript(XElement sqlscriptXml, int defaultcommandtimeout, int index) | |
| 2919 | + public SQLScript(XElement sqlscriptXml,string sqlconnectionstring, int defaultcommandtimeout, int index) | |
| 2881 | 2920 | { |
| 2882 | 2921 | ScriptParameters = GetValue(nameof(XmlStructure.SQLDataBase.Scripts.Script.Attributes.Parameters), sqlscriptXml, XmlStructure.SQLDataBase.Scripts.Script.Attributes.Parameters.Values.DEFAULT); |
| 2883 | 2922 | MultirunParameters= GetValue(nameof(XmlStructure.SQLDataBase.Scripts.Script.Attributes.Multirun), sqlscriptXml, XmlStructure.SQLDataBase.Scripts.Script.Attributes.Multirun.Values.DEFAULT); |
| ... | ... | @@ -2886,6 +2925,8 @@ GO |
| 2886 | 2925 | Name = GetValue(nameof(XmlStructure.SQLDataBase.Scripts.Script.Attributes.Name), sqlscriptXml, XmlStructure.SQLDataBase.Scripts.Script.Attributes.Name.Values.DEFAULT); |
| 2887 | 2926 | FilePath = GetValue(nameof(XmlStructure.SQLDataBase.Scripts.Script.Attributes.File), sqlscriptXml, XmlStructure.SQLDataBase.Scripts.Script.Attributes.File.Values.DEFAULT); |
| 2888 | 2927 | Description= GetValue(nameof(XmlStructure.SQLDataBase.Scripts.Script.Attributes.Description), sqlscriptXml, XmlStructure.SQLDataBase.Scripts.Script.Attributes.Description.Values.DEFAULT); |
| 2928 | + SQLConnectionString = GetValue(nameof(XmlStructure.SQLDataBase.Scripts.Script.Attributes.SQLConnectionString), sqlscriptXml, XmlStructure.SQLDataBase.Scripts.Script.Attributes.SQLConnectionString.Values.DEFAULT); | |
| 2929 | + if (SQLConnectionString == null) SQLConnectionString = sqlconnectionstring; | |
| 2889 | 2930 | |
| 2890 | 2931 | Tools.KvpString.Resolve(ScriptParameters, this.Name, out this.Name, disableinteractive: true); |
| 2891 | 2932 | Tools.KvpString.Resolve(ScriptParameters, this.Description, out this.Description, disableinteractive: true); |
| ... | ... | @@ -3033,16 +3074,16 @@ GO |
| 3033 | 3074 | } |
| 3034 | 3075 | public static void Open(SqlConnection sqlc) |
| 3035 | 3076 | { |
| 3036 | - if (IsMasterInacessible(sqlc) || IsInacessible(sqlc)) | |
| 3037 | - { | |
| 3038 | - throw new Exception($"DB {sqlc.Database} on server {sqlc.DataSource} is inaccessible!"); | |
| 3039 | - } | |
| 3040 | - try { sqlc.Open(); } | |
| 3041 | - catch (Exception ex) | |
| 3077 | + if (IsMasterInacessible(sqlc) || IsInacessible(sqlc)) { throw new Exception($"SQL server {sqlc.DataSource} is inaccessible!"); } | |
| 3078 | + if (!string.IsNullOrWhiteSpace(sqlc.Database)) | |
| 3042 | 3079 | { |
| 3043 | - MarkMasterInacessible(sqlc); | |
| 3044 | - MarkInacessible(sqlc); | |
| 3045 | - throw ex; | |
| 3080 | + try { sqlc.Open(); } | |
| 3081 | + catch (Exception ex) | |
| 3082 | + { | |
| 3083 | + MarkMasterInacessible(sqlc); | |
| 3084 | + MarkInacessible(sqlc); | |
| 3085 | + throw ex; | |
| 3086 | + } | |
| 3046 | 3087 | } |
| 3047 | 3088 | } |
| 3048 | 3089 | private static bool IsMasterDBConnected(SqlConnection sqlc) | ... | ... |
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.2.0")] | |
| 36 | -[assembly: AssemblyFileVersion("1.31.2.0")] | |
| 35 | +[assembly: AssemblyVersion("1.31.3.0")] | |
| 36 | +[assembly: AssemblyFileVersion("1.31.3.0")] | ... | ... |