Commit 027cf12665b5fe724fc25ad960396666eec27c1d
1 parent
066d5d55
v1.33.0
-MoveDbFromPrimaryToSecondary átdolgozása és javítása
Showing
2 changed files
with
134 additions
and
75 deletions
Show diff stats
Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs
... | ... | @@ -214,7 +214,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS |
214 | 214 | else if (string.IsNullOrWhiteSpace(selectedbackupfilepath)) goto enterpathtobackupfileloop; |
215 | 215 | } |
216 | 216 | |
217 | - SQLDataBaseManagerCore.RestoreBackup(sqld, selectedbackupfilepath, targetdirectorypath, restorefromzip, targetdbname); | |
217 | + SQLDataBaseManagerCore.RestoreBackup(sqld.SQLCS_Primary, selectedbackupfilepath, targetdirectorypath, restorefromzip, targetdbname); | |
218 | 218 | ColorConsole.WriteLine($"Database '{sqld.DBName}' restored to '{targetdbname}' into directory '{targetdirectorypath}'.", ConsoleColor.Green); |
219 | 219 | } |
220 | 220 | catch (Exception ex) { ColorConsole.WriteLine(ex.MessageNested(), ConsoleColor.Red); } |
... | ... | @@ -252,7 +252,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS |
252 | 252 | if (targetdirectorypath.ToUpper() == "EX") { return o; } |
253 | 253 | if (string.IsNullOrWhiteSpace(selectedbackupfilepath)) { targetdbname = st.DBName; } |
254 | 254 | bool restorefromzip =Path.GetExtension(selectedbackupfilepath).ToLower() == ".zip"; ; |
255 | - SQLDataBaseManagerCore.RestoreBackup(st, selectedbackupfilepath, targetdirectorypath, restorefromzip, targetdbname); | |
255 | + SQLDataBaseManagerCore.RestoreBackup(st.SQLCS_Primary, selectedbackupfilepath, targetdirectorypath, restorefromzip, targetdbname); | |
256 | 256 | ColorConsole.WriteLine($"Database '{targetdbname}' restored into directory '{targetdirectorypath}'.", ConsoleColor.Green); |
257 | 257 | goto startselection; |
258 | 258 | } |
... | ... | @@ -443,7 +443,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS |
443 | 443 | |
444 | 444 | if (!srvrlogintoexecute.Remove) |
445 | 445 | { |
446 | - SQLDataBaseManagerCore.CreateLogin(sqlcs, srvrlogintoexecute.LoginName, srvrlogintoexecute.LoginPassword, srvrlogintoexecute.DefaultDatabase, srvrlogintoexecute.LoginType, null, srvrlogintoexecute.GrantorUserLoginName, srvrlogintoexecute.GrantorUserLoginPassword); | |
446 | + SQLDataBaseManagerCore.CreateLogin(sqlcs,sqldbname:null, srvrlogintoexecute.LoginName, srvrlogintoexecute.LoginPassword, srvrlogintoexecute.DefaultDatabase, srvrlogintoexecute.LoginType, null, srvrlogintoexecute.GrantorUserLoginName, srvrlogintoexecute.GrantorUserLoginPassword); | |
447 | 447 | ColorConsole.WriteLine($"SUCCESS! {removeactionText} server login: {SRVRLogin_fulldesignation}", ConsoleColor.Green); |
448 | 448 | } |
449 | 449 | else |
... | ... | @@ -604,7 +604,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS |
604 | 604 | |
605 | 605 | if (!dbusertoexecute.Remove) |
606 | 606 | { |
607 | - SQLDataBaseManagerCore.CreateUser(sqlcs, dbusertoexecute.UserName, dbusertoexecute.RoleNameCommaList, dbusertoexecute.LoginName); | |
607 | + SQLDataBaseManagerCore.CreateUser(sqlcs,sqldbname:null, dbusertoexecute.UserName, dbusertoexecute.RoleNameCommaList, dbusertoexecute.LoginName); | |
608 | 608 | ColorConsole.WriteLine($"SUCCESS! {removeactionText} database user: {DBUser_fulldesignation}", ConsoleColor.Green); |
609 | 609 | } |
610 | 610 | else |
... | ... | @@ -630,25 +630,25 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS |
630 | 630 | { |
631 | 631 | var DateTimeNow = DateTime.Now; |
632 | 632 | SQLDataBase dbtomove = null; |
633 | - | |
634 | - movedatabaseloop: | |
635 | - (Menu.SelectionResult selectionresult, bool yes) yesornoanswer = YesOrNo(new List<string>() { $"Do You want to move ANY database from local server to remote server?" }); | |
633 | + string todbname=null; | |
634 | + movedatabaseloop: | |
635 | + (Menu.SelectionResult selectionresult, bool yes) yesornoanswer = YesOrNo(new List<string>() { $">>>> Do You want to move ANY database from local server to remote server?" }); | |
636 | 636 | if (yesornoanswer.selectionresult == Menu.SelectionResult.Exit) return o; |
637 | 637 | if (yesornoanswer.selectionresult == Menu.SelectionResult.Ok && yesornoanswer.yes) |
638 | 638 | { |
639 | - var dbselection = SelectDbToMove(config, selectedsqldbindexes, $"Select the SQL database to move from its PRIMARY to SECONDARY location!"); | |
639 | + var dbselection = SelectDbToMove(config, selectedsqldbindexes, $">>>> Select the SQL database to move from its PRIMARY to SECONDARY location!"); | |
640 | 640 | if (dbselection.selection == Menu.SelectionResult.Exit) { return o; } |
641 | 641 | if (dbselection.selection != Menu.SelectionResult.Ok) { goto movedatabaseloop; } |
642 | 642 | dbtomove = dbselection.dbtomove; |
643 | 643 | if (NoDBNameSpecified(dbtomove)) { continue; } |
644 | 644 | var dbnameSecondary = SQLDataBaseManagerCore.GetDBName(dbtomove.SQLCS_Secondary); |
645 | 645 | |
646 | - var todbname = ColorConsole.ReadLine($"Enter the name of the target DB. EMPTY={dbnameSecondary}, EX=exit."); | |
646 | + todbname = ColorConsole.ReadLine($">>>> Enter the name of the target DB. EMPTY={dbnameSecondary}, EX=exit."); | |
647 | 647 | if (todbname.ToUpper() == "EX") { return o; } |
648 | 648 | else if (string.IsNullOrWhiteSpace(todbname)) todbname = dbnameSecondary; |
649 | 649 | |
650 | 650 | confirmloop:; |
651 | - var confirmtext = ColorConsole.ReadLine("Enter CONFIRM to start, EX to exit, SKIP to skip."); | |
651 | + var confirmtext = ColorConsole.ReadLine(">>>> Enter CONFIRM to start, EX to exit, SKIP to skip."); | |
652 | 652 | if (confirmtext.ToUpper() == "EX") { return o; } |
653 | 653 | else if (confirmtext.ToUpper() == "CONFIRM") |
654 | 654 | { |
... | ... | @@ -659,41 +659,45 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS |
659 | 659 | } |
660 | 660 | |
661 | 661 | serverloginloop: |
662 | - yesornoanswer = YesOrNo(new List<string>() { $"Do You want to create server and DB logins for the server/database PRIMARY and/or SECONDARY locations?", }); | |
662 | + yesornoanswer = YesOrNo(new List<string>() { $">>>> Do You want to create server and DB logins for the server/database PRIMARY and/or SECONDARY locations?", }); | |
663 | 663 | if (yesornoanswer.selectionresult == Menu.SelectionResult.Exit) return o; |
664 | 664 | if (yesornoanswer.selectionresult == Menu.SelectionResult.Ok && yesornoanswer.yes) |
665 | 665 | { |
666 | 666 | if (dbtomove == null) |
667 | 667 | { |
668 | - var dbselection = SelectDbToMove(config, selectedsqldbindexes, $"Select the SQL database to add server and DB logins to its PRIMARY and its SECONDARY location!"); | |
668 | + var dbselection = SelectDbToMove(config, selectedsqldbindexes, $">>>> Select the SQL database to add server and DB logins to its PRIMARY and its SECONDARY location!"); | |
669 | 669 | if (dbselection.selection == Menu.SelectionResult.Exit) { return o; } |
670 | 670 | if (dbselection.selection != Menu.SelectionResult.Ok) { goto serverloginloop; } |
671 | 671 | dbtomove = dbselection.dbtomove; |
672 | 672 | } |
673 | - var usernamelist = new string[] { "corplear\\lschwirg", "corplear\\gen_vrhalmadmin", $"corplear\\{Program.ThisComputer.ComputerName}$" }; | |
674 | 673 | |
675 | - string l1 = $"Do You want to create the following mandatory server/database logins for the PRIMARY location?"; | |
674 | + var usernamelist = new List<string> { "corplear\\lschwirg", "corplear\\gen_vrhalmadmin", $"corplear\\{Program.ThisComputer.ComputerName}$" }; | |
675 | + if (!string.IsNullOrWhiteSpace(dbtomove.Xml_PrimaryDB_ServerName)) usernamelist.Add( $"corplear\\{dbtomove.Xml_PrimaryDB_ServerName}$"); | |
676 | + if (!string.IsNullOrWhiteSpace(dbtomove.Xml_SecondaryDB_ServerName)) usernamelist.Add($"corplear\\{dbtomove.Xml_SecondaryDB_ServerName}$"); | |
677 | + | |
678 | + string l1 = $">>>> Do You want to create the following mandatory server/database logins for the PRIMARY location?"; | |
676 | 679 | string l2 = $" SQL connection string: {dbtomove.SQLCS_Primary}"; |
677 | 680 | string l3 = $" Username list: " + string.Join(",", usernamelist); |
678 | - yesornoanswer = YesOrNo(new List<string>() { l1, l2, l3, }); | |
681 | + yesornoanswer = YesOrNo(new List<string>() { l1, l2, l3 }); | |
679 | 682 | if (yesornoanswer.selectionresult== Menu.SelectionResult.Exit) return o; |
680 | 683 | if (yesornoanswer.selectionresult == Menu.SelectionResult.Ok && yesornoanswer.yes) |
681 | 684 | { |
682 | - SQLDataBaseManagerCore.CreateServerAndDBLogins(false, dbtomove.SQLCS_Primary, usernamelist, serverloginrolelist, fullaccessdbloginrolelist); | |
685 | + SQLDataBaseManagerCore.CreateServerAndDBLogins(false, dbtomove.SQLCS_Primary, null, usernamelist.ToArray(), serverloginrolelist, fullaccessdbloginrolelist); | |
683 | 686 | } |
684 | 687 | |
685 | - string l13 = $"Do You want to create the following mandatory server/database logins for SECONDARY location?"; | |
688 | + string l13 = $">>>> Do You want to create the following mandatory server/database logins for SECONDARY location?"; | |
686 | 689 | string l23 = $" SQL connection string: {dbtomove.SQLCS_Secondary}"; |
687 | - string l33 = $" Username list: " + string.Join(",", usernamelist); | |
688 | - yesornoanswer = YesOrNo(new List<string>() { l13,l23,l33,}); | |
690 | + string l33 = $" SQL database name: {todbname}"; | |
691 | + string l43 = $" Username list: " + string.Join(",", usernamelist); | |
692 | + yesornoanswer = YesOrNo(new List<string>() { l13,l23,l33,l43}); | |
689 | 693 | if (yesornoanswer.selectionresult == Menu.SelectionResult.Exit) return o; |
690 | 694 | if (yesornoanswer.selectionresult == Menu.SelectionResult.Ok && yesornoanswer.yes) |
691 | 695 | { |
692 | - SQLDataBaseManagerCore.CreateServerAndDBLogins(false, dbtomove.SQLCS_Secondary, usernamelist, serverloginrolelist, fullaccessdbloginrolelist); | |
696 | + SQLDataBaseManagerCore.CreateServerAndDBLogins(false, dbtomove.SQLCS_Secondary, todbname, usernamelist.ToArray(), serverloginrolelist, fullaccessdbloginrolelist); | |
693 | 697 | } |
694 | 698 | } |
695 | 699 | |
696 | - yesornoanswer = YesOrNo(new List<string>() { $"Do You want to set database '{SQLDataBaseManagerCore.GetDBName(dbtomove.SQLCS_Primary)}' OFFLINE on server '{SQLDataBaseManagerCore.GetDataSource(dbtomove.SQLCS_Primary)}'?", }); | |
700 | + yesornoanswer = YesOrNo(new List<string>() { $">>>> Do You want to set database '{SQLDataBaseManagerCore.GetDBName(dbtomove.SQLCS_Primary)}' OFFLINE on server '{SQLDataBaseManagerCore.GetDataSource(dbtomove.SQLCS_Primary)}'?", }); | |
697 | 701 | if (yesornoanswer.selectionresult == Menu.SelectionResult.Exit) return o; |
698 | 702 | if (yesornoanswer.selectionresult == Menu.SelectionResult.Ok && yesornoanswer.yes) |
699 | 703 | { |
... | ... | @@ -1291,10 +1295,7 @@ GO |
1291 | 1295 | ColorConsole.Write(st.Status.ToString(), statuscolor, bracket: "[]", prefix: " ", suffix: ". "); |
1292 | 1296 | if (!string.IsNullOrWhiteSpace(st.DBName)) { ColorConsole.Write(st.DBName, statuscolor, bracket: "[]", prefix: "Database ", suffix: ". "); } |
1293 | 1297 | ColorConsole.Write(st.DataSource, statuscolor, bracket: "[]", prefix: "from server ", suffix: ". "); |
1294 | - if (st.Status != SQLDataBase.SQLDBStatus.NoAccess) | |
1295 | - { | |
1296 | - } | |
1297 | - if (st.Xml_PrimaryDB_IsUseTranzit) { ColorConsole.Write("REMOTE", ConsoleColor.Cyan, bracket: "[]", prefix: "", suffix: ""); } | |
1298 | + if (st.Status != SQLDataBase.SQLDBStatus.NoAccess) {} | |
1298 | 1299 | ColorConsole.WriteLine(); |
1299 | 1300 | return Menu.MenuItemDisplayerReturnValue.NEXTLINE; |
1300 | 1301 | } |
... | ... | @@ -1314,21 +1315,59 @@ GO |
1314 | 1315 | } |
1315 | 1316 | else if (lineix == 3) |
1316 | 1317 | { |
1318 | + const string STANDARD = "STANDARD"; | |
1317 | 1319 | if (string.IsNullOrWhiteSpace(st.DBName)) return Menu.MenuItemDisplayerReturnValue.SAMELINE; |
1318 | 1320 | var PhysicalFilesDirectoryPathcolor = st.PrimaryDB_PhysicalFilesDirectoryPath.StartsWith("ERR") ? ConsoleColor.Red : ConsoleColor.Yellow; |
1319 | - ColorConsole.Write($"{st.PrimaryDB_PhysicalFilesDirectoryPath}", PhysicalFilesDirectoryPathcolor, prefix: "DB files physical location:", suffix: " "); | |
1321 | + ColorConsole.Write($"{st.PrimaryDB_PhysicalFilesDirectoryPath??STANDARD}", PhysicalFilesDirectoryPathcolor, prefix: "DB files PHYSICAL location:", suffix: " "); | |
1320 | 1322 | ColorConsole.WriteLine(" "); |
1321 | 1323 | return Menu.MenuItemDisplayerReturnValue.NEXTLINE; |
1322 | 1324 | } |
1323 | - else if (lineix == 4) | |
1324 | - { | |
1325 | + else if (lineix == 4) | |
1326 | + { | |
1325 | 1327 | if (string.IsNullOrWhiteSpace(st.DBName)) return Menu.MenuItemDisplayerReturnValue.SAMELINE; |
1326 | - var SizeStringcolor = st.SizeString.StartsWith("ERR") ? ConsoleColor.Red : ConsoleColor.Yellow; | |
1327 | - ColorConsole.Write(st.SizeString, SizeStringcolor, prefix: "DB size:", suffix: " "); | |
1328 | - ColorConsole.WriteLine(" "); | |
1329 | - return Menu.MenuItemDisplayerReturnValue.NEXTLINE; | |
1330 | - } | |
1331 | - else if (5 <= lineix && lineix <= 5 + st.Xml_SQLScriptList.Count) | |
1328 | + if (!st.Xml_PrimaryDB_IsUseTranzit) return Menu.MenuItemDisplayerReturnValue.SAMELINE; | |
1329 | + var TranzitDirectoryPathcolor = st.Xml_PrimaryDB_TranzitDirectoryPath.StartsWith("ERR") ? ConsoleColor.Red : ConsoleColor.Yellow; | |
1330 | + ColorConsole.Write($"{st.Xml_PrimaryDB_TranzitDirectoryPath}", TranzitDirectoryPathcolor, prefix: "DB files TRANZIT location:", suffix: " "); | |
1331 | + ColorConsole.WriteLine(" "); | |
1332 | + return Menu.MenuItemDisplayerReturnValue.NEXTLINE; | |
1333 | + } | |
1334 | + else if (lineix == 5) | |
1335 | + { | |
1336 | + if (string.IsNullOrWhiteSpace(st.DBName)) return Menu.MenuItemDisplayerReturnValue.SAMELINE; | |
1337 | + var SizeStringcolor = st.SizeString_Primary.StartsWith("ERR") ? ConsoleColor.Red : ConsoleColor.Yellow; | |
1338 | + ColorConsole.Write(st.SizeString_Primary, SizeStringcolor, prefix: "DB size:", suffix: " "); | |
1339 | + ColorConsole.WriteLine(" "); | |
1340 | + return Menu.MenuItemDisplayerReturnValue.NEXTLINE; | |
1341 | + } | |
1342 | + else if (lineix == 6) | |
1343 | + { | |
1344 | + if (string.IsNullOrWhiteSpace(st.DBName)) return Menu.MenuItemDisplayerReturnValue.SAMELINE; | |
1345 | + if (!st.Xml_SecondaryDB_IsDefined) return Menu.MenuItemDisplayerReturnValue.SAMELINE; | |
1346 | + ColorConsole.Write($"{st.SQLCS_Secondary}", ConsoleColor.Yellow, prefix: "Secondary SQL DB connection:", suffix: ", "); | |
1347 | + ColorConsole.WriteLine(" "); | |
1348 | + return Menu.MenuItemDisplayerReturnValue.NEXTLINE; | |
1349 | + } | |
1350 | + else if (lineix == 7) | |
1351 | + { | |
1352 | + const string STANDARD = "STANDARD"; | |
1353 | + if (string.IsNullOrWhiteSpace(st.DBName)) return Menu.MenuItemDisplayerReturnValue.SAMELINE; | |
1354 | + if (!st.Xml_SecondaryDB_IsDefined) return Menu.MenuItemDisplayerReturnValue.SAMELINE; | |
1355 | + var PhysicalFilesDirectoryPathcolor = st.SecondaryDB_PhysicalFilesDirectoryPath.StartsWith("ERR") ? ConsoleColor.Red : ConsoleColor.Yellow; | |
1356 | + ColorConsole.Write($"{st.SecondaryDB_PhysicalFilesDirectoryPath??STANDARD}", PhysicalFilesDirectoryPathcolor, prefix: "Secondary DB files PHYSICAL location:", suffix: " "); | |
1357 | + ColorConsole.WriteLine(" "); | |
1358 | + return Menu.MenuItemDisplayerReturnValue.NEXTLINE; | |
1359 | + } | |
1360 | + else if (lineix == 8) | |
1361 | + { | |
1362 | + if (string.IsNullOrWhiteSpace(st.DBName)) return Menu.MenuItemDisplayerReturnValue.SAMELINE; | |
1363 | + if (!st.Xml_SecondaryDB_IsDefined) return Menu.MenuItemDisplayerReturnValue.SAMELINE; | |
1364 | + if (!st.Xml_SecondaryDB_IsUseTranzit) return Menu.MenuItemDisplayerReturnValue.SAMELINE; | |
1365 | + var TranzitDirectoryPathcolor = st.Xml_SecondaryDB_TranzitDirectoryPath.StartsWith("ERR") ? ConsoleColor.Red : ConsoleColor.Yellow; | |
1366 | + ColorConsole.Write($"{st.Xml_SecondaryDB_TranzitDirectoryPath}", TranzitDirectoryPathcolor, prefix: "Secondary DB files TRANZIT location:", suffix: " "); | |
1367 | + ColorConsole.WriteLine(" "); | |
1368 | + return Menu.MenuItemDisplayerReturnValue.NEXTLINE; | |
1369 | + } | |
1370 | + else if (9 <= lineix && lineix <= 9 + st.Xml_SQLScriptList.Count) | |
1332 | 1371 | { |
1333 | 1372 | if (st.Xml_SQLScriptList.Count == 0) { return Menu.MenuItemDisplayerReturnValue.EXIT; } |
1334 | 1373 | if (st.Xml_SQLScriptList.Count-1 < lineix-5) { return Menu.MenuItemDisplayerReturnValue.EXIT; } |
... | ... | @@ -1358,7 +1397,7 @@ GO |
1358 | 1397 | { |
1359 | 1398 | var dbbackupfilepath = CreateBackup(sqld, false,null); |
1360 | 1399 | if (dbbackupfilepath == null) return; |
1361 | - RestoreBackup(sqld, dbbackupfilepath, targetdirectory, false, restoredbname); | |
1400 | + RestoreBackup(sqld.SQLCS_Primary, dbbackupfilepath, targetdirectory, false, restoredbname); | |
1362 | 1401 | if (File.Exists(dbbackupfilepath)) { File.Delete(dbbackupfilepath); } |
1363 | 1402 | } |
1364 | 1403 | |
... | ... | @@ -1378,18 +1417,18 @@ GO |
1378 | 1417 | |
1379 | 1418 | if (!emulation && !File.Exists(backupfileFullname)) { return false; } |
1380 | 1419 | |
1381 | - string tranzitfileFullname = backupfileFullname; | |
1382 | - if (dbtomove.Xml_SecondaryDB_IsUseTranzit) | |
1420 | + string tranzitfileNetworkFullname = backupfileFullname; | |
1421 | + if (dbtomove.Xml_SecondaryDB_IsUseTranzit) | |
1383 | 1422 | { |
1384 | 1423 | try |
1385 | 1424 | { |
1386 | 1425 | string backupfileFilename = Path.GetFileName(backupfileFullname); |
1387 | - tranzitfileFullname = Path.Combine(dbtomove.Xml_SecondaryDB_TranzitDirectoryPath, backupfileFilename); | |
1426 | + tranzitfileNetworkFullname = Path.Combine(dbtomove.Xml_SecondaryDB_TranzitDirectoryPath, backupfileFilename); | |
1388 | 1427 | ColorConsole.WriteLine($"Moving backup file {backupfileFullname} to tranzit location: {dbtomove.Xml_SecondaryDB_TranzitDirectoryPath}", ConsoleColor.Yellow); |
1389 | 1428 | if (!emulation) |
1390 | 1429 | { |
1391 | - if (File.Exists(tranzitfileFullname)) { File.Delete(tranzitfileFullname); } | |
1392 | - File.Move(backupfileFullname, tranzitfileFullname); | |
1430 | + if (File.Exists(tranzitfileNetworkFullname)) { File.Delete(tranzitfileNetworkFullname); } | |
1431 | + File.Move(backupfileFullname, tranzitfileNetworkFullname); | |
1393 | 1432 | ColorConsole.WriteLine($"...completed...", ConsoleColor.Yellow); |
1394 | 1433 | } |
1395 | 1434 | } |
... | ... | @@ -1400,10 +1439,10 @@ GO |
1400 | 1439 | return false; |
1401 | 1440 | } |
1402 | 1441 | } |
1403 | - if (!emulation && !File.Exists(tranzitfileFullname)) { return false; } | |
1442 | + if (!emulation && !File.Exists(tranzitfileNetworkFullname)) { return false; } | |
1404 | 1443 | |
1405 | 1444 | //restore backup to dbto |
1406 | - SQLDataBaseManagerCore.RestoreBackup(dbtomove, tranzitfileFullname, dbtomove.Xml_SecondaryDB_PhysicalFilesDirectoryPath, false, selecteddbname, emulation); | |
1445 | + SQLDataBaseManagerCore.RestoreBackup(dbtomove.SQLCS_Secondary, tranzitfileNetworkFullname, dbtomove.Xml_SecondaryDB_PhysicalFilesDirectoryPath, false, selecteddbname, emulation); | |
1407 | 1446 | return true; |
1408 | 1447 | } |
1409 | 1448 | |
... | ... | @@ -1416,19 +1455,22 @@ GO |
1416 | 1455 | /// <param name="restorefromZIP">true=sourcesqlbackupfilepath is a zip file</param> |
1417 | 1456 | /// <param name="restoretodbname"></param> |
1418 | 1457 | /// <param name="emulate"></param> |
1419 | - public static void RestoreBackup(SQLDataBase sqldb, string sourcesqlbackupfilepath, string targetdbphysicalfilesdirectorypath, bool restorefromZIP = false, string restoretodbname = null,bool emulate=false) | |
1458 | + public static void RestoreBackup(string sqldbcs, string sourcesqlbackupfilepath, string targetdbphysicalfilesdirectorypath, bool restorefromZIP = false, string restoretodbname = null,bool emulate=false) | |
1420 | 1459 | { |
1421 | - string sqlcs = sqldb.SQLCS_Primary; //sqlcs = sqlcs.Replace("LearALM2", "master"); | |
1460 | + string sqlcs = sqldbcs; //sqlcs = sqlcs.Replace("LearALM2", "master"); | |
1422 | 1461 | string zippedbackupfilepath = restorefromZIP? sourcesqlbackupfilepath:Path.Combine(Path.GetDirectoryName(sourcesqlbackupfilepath), Path.GetFileNameWithoutExtension(sourcesqlbackupfilepath) + ".zip"); |
1423 | 1462 | string normalbackupfilepath = !restorefromZIP? sourcesqlbackupfilepath : Path.Combine(Path.GetDirectoryName(sourcesqlbackupfilepath), Path.GetFileNameWithoutExtension(sourcesqlbackupfilepath) + ".bak"); |
1424 | 1463 | |
1425 | 1464 | ColorConsole.WriteLine(nameof(RestoreBackup), ConsoleColor.Yellow, prefix: "running...."); |
1426 | 1465 | ColorConsole.WriteLine(restoretodbname, ConsoleColor.Yellow, prefix: " restoretodbname:"); |
1427 | - ColorConsole.WriteLine(sqldb.SQLCS_Primary, ConsoleColor.Yellow, prefix: " sqldb.SQLCS:"); | |
1466 | + ColorConsole.WriteLine(sqldbcs, ConsoleColor.Yellow, prefix: " sqldb.SQLCS:"); | |
1428 | 1467 | ColorConsole.WriteLine(sourcesqlbackupfilepath, ConsoleColor.Yellow, prefix: " sourcesqlbackupfilepath:"); |
1429 | - ColorConsole.WriteLine(normalbackupfilepath, ConsoleColor.Yellow, prefix: " backupfilepath:"); | |
1430 | - ColorConsole.WriteLine(restorefromZIP.ToString(), ConsoleColor.Yellow, prefix: " restorefromZIP:"); | |
1431 | - ColorConsole.WriteLine(zippedbackupfilepath, ConsoleColor.Yellow, prefix: " zippedbackupfilepath:"); | |
1468 | + ColorConsole.WriteLine(restorefromZIP.ToString(), ConsoleColor.Yellow, prefix: " restorefromZIP:"); | |
1469 | + if (restorefromZIP) | |
1470 | + { | |
1471 | + ColorConsole.WriteLine(normalbackupfilepath, ConsoleColor.Yellow, prefix: " backupfilepath:"); | |
1472 | + ColorConsole.WriteLine(zippedbackupfilepath, ConsoleColor.Yellow, prefix: " zippedbackupfilepath:"); | |
1473 | + } | |
1432 | 1474 | ColorConsole.WriteLine(targetdbphysicalfilesdirectorypath, ConsoleColor.Yellow, prefix: " targetdbphysicalfilesdirectorypath:"); |
1433 | 1475 | if (emulate) { return; } |
1434 | 1476 | |
... | ... | @@ -1444,18 +1486,14 @@ GO |
1444 | 1486 | while (DateTime.Now.Subtract(starttime).TotalSeconds > 5) { if (File.Exists(normalbackupfilepath)) { break; } Thread.Sleep(500); } |
1445 | 1487 | } |
1446 | 1488 | |
1447 | - if (!File.Exists(normalbackupfilepath)) | |
1448 | - { | |
1449 | - ColorConsole.WriteLine($"ERROR! Restore source backup file '{normalbackupfilepath}' does not exist!", ConsoleColor.Red, prefix: ""); | |
1450 | - return; | |
1451 | - } | |
1452 | 1489 | Server sqlserver = null; |
1453 | 1490 | try |
1454 | 1491 | { |
1455 | 1492 | var sc = ServerConnectionPool.GetSqlConnection(sqlcs, "master"); |
1456 | 1493 | sqlserver = SQLServerConnect(sc);if (sqlserver == null) { return; } |
1494 | + sqlserver.ConnectionContext.StatementTimeout = 2000;// sqld.Xml_BackupTimeout; | |
1457 | 1495 | |
1458 | - var smoRestore = new Restore(); | |
1496 | + var smoRestore = new Restore(); | |
1459 | 1497 | smoRestore.NoRecovery = false; |
1460 | 1498 | smoRestore.ReplaceDatabase = true; |
1461 | 1499 | smoRestore.Action = RestoreActionType.Database; |
... | ... | @@ -1588,9 +1626,10 @@ GO |
1588 | 1626 | sqlserver = SQLServerConnect(sqld.SQLCS_Primary, "master"); if (sqlserver == null) { return null; } |
1589 | 1627 | sqlserver.ConnectionContext.StatementTimeout = sqld.Xml_BackupTimeout; |
1590 | 1628 | backupstarttime = DateTime.Now; |
1591 | - smoBackup.SqlBackup(sqlserver); | |
1592 | - //smoBackup.Wait(); | |
1593 | - Console.WriteLine($""); | |
1629 | + smoBackup.SqlBackupAsync(sqlserver); | |
1630 | + smoBackup.Wait(); | |
1631 | + //smoBackup.Wait(); | |
1632 | + Console.WriteLine($""); | |
1594 | 1633 | Console.WriteLine($"Backup completed. Backup time: {(int)(DateTime.Now.Subtract(backupstarttime).TotalSeconds)}sec."); |
1595 | 1634 | } |
1596 | 1635 | catch (Exception ex) |
... | ... | @@ -1672,9 +1711,9 @@ GO |
1672 | 1711 | } |
1673 | 1712 | finally { sqlserver?.ConnectionContext.SqlConnectionObject.Dispose(); } |
1674 | 1713 | } |
1675 | - public static void CreateUser(string sqldbconnectionString, string dbusername, string dbrolenamecommalist,string loginname) | |
1714 | + public static void CreateUser(string sqldbconnectionString, string sqldbname, string dbusername, string dbrolenamecommalist,string loginname) | |
1676 | 1715 | { |
1677 | - using (SqlConnection connection = ServerConnectionPool.GetSqlConnection(sqldbconnectionString,open:true)) | |
1716 | + using (SqlConnection connection = ServerConnectionPool.GetSqlConnection(sqldbconnectionString, sqldbname,open: true)) | |
1678 | 1717 | { |
1679 | 1718 | // Create user |
1680 | 1719 | //USE [LearALM2] |
... | ... | @@ -1758,12 +1797,12 @@ GO |
1758 | 1797 | |
1759 | 1798 | } |
1760 | 1799 | } |
1761 | - public static void CreateLogin(string sqldbconnectionString, string name, string password, string defaultDatabase, LoginType logintype, string[] roles,string grantoruser=null,string grantoruserpsw=null) | |
1800 | + public static void CreateLogin(string sqldbconnectionString,string sqldbname, string name, string password, string defaultDatabase, LoginType logintype, string[] roles,string grantoruser=null,string grantoruserpsw=null) | |
1762 | 1801 | { |
1763 | 1802 | Server sqlserver = null; |
1764 | 1803 | try |
1765 | 1804 | { |
1766 | - var sc = ServerConnectionPool.GetSqlConnection(sqldbconnectionString,null, grantoruser, grantoruserpsw); | |
1805 | + var sc = ServerConnectionPool.GetSqlConnection(sqldbconnectionString, sqldbname, grantoruser, grantoruserpsw); | |
1767 | 1806 | sqlserver = SQLServerConnect(sc); if (sqlserver == null) return; |
1768 | 1807 | Login login = new Login(sqlserver, name); |
1769 | 1808 | login.LoginType = logintype; |
... | ... | @@ -1782,14 +1821,14 @@ GO |
1782 | 1821 | } |
1783 | 1822 | finally { sqlserver?.ConnectionContext.SqlConnectionObject.Dispose(); } |
1784 | 1823 | } |
1785 | - public static void CreateServerAndDBLogins(bool emulation, string sqlcs, string[] usernamelist,string[] serverloginrolelist, string[] dbloginrolelist) | |
1824 | + public static void CreateServerAndDBLogins(bool emulation, string sqlcs,string dbname, string[] usernamelist,string[] serverloginrolelist, string[] dbloginrolelist) | |
1786 | 1825 | { |
1787 | 1826 | foreach (var username in usernamelist) |
1788 | 1827 | { |
1789 | 1828 | ColorConsole.WriteLine(username, ConsoleColor.Yellow, prefix: nameof(SQLDataBaseManagerCore.CreateServerAndDBLogins) + ":"); |
1790 | - try { if (!emulation) SQLDataBaseManagerCore.CreateLogin(sqlcs, username, null, "master", LoginType.WindowsUser, serverloginrolelist); } | |
1829 | + try { if (!emulation) SQLDataBaseManagerCore.CreateLogin(sqlcs, dbname, username, null, "master", LoginType.WindowsUser, serverloginrolelist); } | |
1791 | 1830 | catch (Exception ex) { ColorConsole.WriteLine(nameof(SQLDataBaseManagerCore.CreateLogin) + ">>>: " + ex.MessageNested(), ConsoleColor.Red); } |
1792 | - try { if (!emulation) SQLDataBaseManagerCore.CreateUser(sqlcs, username, string.Join(",", dbloginrolelist), "w"); } | |
1831 | + try { if (!emulation) SQLDataBaseManagerCore.CreateUser(sqlcs, dbname, username, string.Join(",", dbloginrolelist), "w"); } | |
1793 | 1832 | catch (Exception ex) { ColorConsole.WriteLine(nameof(SQLDataBaseManagerCore.CreateUser) + "\n" + ex.MessageNested(), ConsoleColor.Red); } |
1794 | 1833 | } |
1795 | 1834 | } |
... | ... | @@ -1925,7 +1964,12 @@ GO |
1925 | 1964 | var sqlcb = new SqlConnectionStringBuilder(cs); |
1926 | 1965 | return sqlcb.InitialCatalog; |
1927 | 1966 | } |
1928 | - public static string GetDataSource(string cs) | |
1967 | + public static string GetDBServerName(string cs) | |
1968 | + { | |
1969 | + var sqlcb = new SqlConnectionStringBuilder(cs); | |
1970 | + return sqlcb. DataSource; | |
1971 | + } | |
1972 | + public static string GetDataSource(string cs) | |
1929 | 1973 | { |
1930 | 1974 | var sqlcb = new SqlConnectionStringBuilder(cs); |
1931 | 1975 | return sqlcb.DataSource; |
... | ... | @@ -2635,6 +2679,7 @@ GO |
2635 | 2679 | public int Xml_ScriptCommandTimeout; |
2636 | 2680 | public int Xml_BackupTimeout; |
2637 | 2681 | |
2682 | + public string Xml_PrimaryDB_ServerName; | |
2638 | 2683 | public string Xml_PrimaryDB_SQLConnectionString; |
2639 | 2684 | public string Xml_PrimaryDB_TranzitDirectoryPath; |
2640 | 2685 | public bool Xml_PrimaryDB_IsUseTranzit { get { return !string.IsNullOrWhiteSpace(Xml_PrimaryDB_TranzitDirectoryPath); } } |
... | ... | @@ -2675,9 +2720,12 @@ GO |
2675 | 2720 | } |
2676 | 2721 | } |
2677 | 2722 | |
2723 | + public string Xml_SecondaryDB_ServerName; | |
2678 | 2724 | public string Xml_SecondaryDB_SQLConnectionString; |
2679 | 2725 | public string Xml_SecondaryDB_TranzitDirectoryPath; |
2680 | - public bool Xml_SecondaryDB_IsUseTranzit { get { return !string.IsNullOrWhiteSpace(Xml_SecondaryDB_TranzitDirectoryPath); } } | |
2726 | + | |
2727 | + public bool Xml_SecondaryDB_IsDefined { get { return !string.IsNullOrWhiteSpace(Xml_SecondaryDB_SQLConnectionString); } } | |
2728 | + public bool Xml_SecondaryDB_IsUseTranzit { get { return !string.IsNullOrWhiteSpace(Xml_SecondaryDB_TranzitDirectoryPath); } } | |
2681 | 2729 | public string Xml_SecondaryDB_PhysicalFilesDirectoryPath; |
2682 | 2730 | public string SQLCS_Secondary |
2683 | 2731 | { |
... | ... | @@ -2698,9 +2746,11 @@ GO |
2698 | 2746 | public string DataSource; |
2699 | 2747 | public SQLDBStatus Status; |
2700 | 2748 | public string PrimaryDB_PhysicalFilesDirectoryPath; |
2701 | - public string SizeString; | |
2702 | - #endregion fields | |
2703 | - public enum SQLDBStatus { NoAccess, OK, } | |
2749 | + public string SecondaryDB_PhysicalFilesDirectoryPath; | |
2750 | + public string SizeString_Primary; | |
2751 | + public string SizeString_Secondary; | |
2752 | + #endregion fields | |
2753 | + public enum SQLDBStatus { NoAccess, OK, } | |
2704 | 2754 | |
2705 | 2755 | #region CollectInfo |
2706 | 2756 | public SQLDataBase CollectInfo() |
... | ... | @@ -2725,8 +2775,9 @@ GO |
2725 | 2775 | } |
2726 | 2776 | else |
2727 | 2777 | { |
2728 | - GetPhysicalFilesLocationAndSize(this.SQLCS_Primary, out this.SizeString, out this.PrimaryDB_PhysicalFilesDirectoryPath); | |
2729 | - this.Status = this.PrimaryDB_PhysicalFilesDirectoryPath.StartsWith("ERR") ? SQLDBStatus.NoAccess : SQLDBStatus.OK; | |
2778 | + GetPhysicalFilesLocationAndSize(this.SQLCS_Primary, out this.SizeString_Primary, out this.PrimaryDB_PhysicalFilesDirectoryPath); | |
2779 | + GetPhysicalFilesLocationAndSize(this.SQLCS_Secondary, out this.SizeString_Secondary, out this.SecondaryDB_PhysicalFilesDirectoryPath); | |
2780 | + this.Status = this.PrimaryDB_PhysicalFilesDirectoryPath.StartsWith("ERR") ? SQLDBStatus.NoAccess : SQLDBStatus.OK; | |
2730 | 2781 | this.DBName = SQLDataBaseManagerCore.GetDBName(this.SQLCS_Primary); |
2731 | 2782 | this.DataSource = SQLDataBaseManagerCore.GetDataSource(this.SQLCS_Primary); |
2732 | 2783 | } |
... | ... | @@ -2736,10 +2787,12 @@ GO |
2736 | 2787 | { |
2737 | 2788 | this.Status = SQLDBStatus.NoAccess; |
2738 | 2789 | this.PrimaryDB_PhysicalFilesDirectoryPath = ""; |
2790 | + this.SecondaryDB_PhysicalFilesDirectoryPath = ""; | |
2739 | 2791 | this.DBName = ""; |
2740 | 2792 | this.DataSource = ""; |
2741 | - this.SizeString = ""; | |
2742 | - try | |
2793 | + this.SizeString_Primary = ""; | |
2794 | + this.SizeString_Secondary = ""; | |
2795 | + try | |
2743 | 2796 | { |
2744 | 2797 | this.DBName = SQLDataBaseManagerCore.GetDBName(this.SQLCS_Primary); |
2745 | 2798 | this.DataSource = SQLDataBaseManagerCore.GetDataSource(this.SQLCS_Primary); |
... | ... | @@ -2760,6 +2813,7 @@ GO |
2760 | 2813 | { |
2761 | 2814 | dbsizetext = null; |
2762 | 2815 | dbpathtext = null; |
2816 | + if (string.IsNullOrWhiteSpace(sqlconnectionstring)) { return; } | |
2763 | 2817 | try |
2764 | 2818 | { |
2765 | 2819 | var sqlc = ServerConnectionPool.GetSqlConnection(sqlconnectionstring,open:true); |
... | ... | @@ -2821,9 +2875,11 @@ GO |
2821 | 2875 | Xml_RestoreFileNameMask = GetValue(nameof(XmlStructure.SQLDataBase.Attributes.RestoreFileNameMask), sqldatabasexml, common.Xml_RestoreFileNameMask); |
2822 | 2876 | Xml_BackupTargetDirectoryPath = GetValue(nameof(XmlStructure.SQLDataBase.Attributes.BackupTargetDirectoryPath), sqldatabasexml, common.Xml_BackupTargetDirectoryPath); |
2823 | 2877 | Xml_PrimaryDB_TranzitDirectoryPath = GetValue(nameof(XmlStructure.SQLDataBase.Attributes.TranzitDirectoryNetworkPath), sqldatabasexml, common.Xml_PrimaryDB_TranzitDirectoryPath); |
2878 | + Xml_PrimaryDB_ServerName = GetValue(nameof(XmlStructure.SQLDataBase.Attributes.Server), sqldatabasexml, XmlStructure.SQLDataBase.Attributes.Server.Values.DEFAULT); | |
2824 | 2879 | Xml_PrimaryDB_SQLConnectionString = GetValue(nameof(XmlStructure.SQLDataBase.Attributes.SQLConnectionString), sqldatabasexml, XmlStructure.SQLDataBase.Attributes.SQLConnectionString.Values.DEFAULT); |
2825 | 2880 | |
2826 | 2881 | var secdbxml = GetXElement(sqldatabasexml,nameof(XmlStructure.SQLDataBase.SecondaryDB)); |
2882 | + Xml_SecondaryDB_ServerName = GetValue(nameof(XmlStructure.SQLDataBase.SecondaryDB.Attributes.Server), secdbxml, ""); | |
2827 | 2883 | Xml_SecondaryDB_SQLConnectionString = GetValue(nameof(XmlStructure.SQLDataBase.SecondaryDB.Attributes.SQLConnectionString), secdbxml, ""); |
2828 | 2884 | Xml_SecondaryDB_TranzitDirectoryPath = GetValue(nameof(XmlStructure.SQLDataBase.SecondaryDB.Attributes.TranzitDirectoryNetworkPath), secdbxml, ""); |
2829 | 2885 | Xml_SecondaryDB_PhysicalFilesDirectoryPath = GetValue(nameof(XmlStructure.SQLDataBase.SecondaryDB.Attributes.PhysicalFilesDirectoryPath), secdbxml, ""); |
... | ... | @@ -2899,6 +2955,7 @@ GO |
2899 | 2955 | { |
2900 | 2956 | public static class Key { public static class Values { public const string DEFAULT = ""; } } |
2901 | 2957 | public static class Description { } |
2958 | + public static class Server { public static class Values { public const string DEFAULT = ""; } } | |
2902 | 2959 | public static class SQLConnectionString { public static class Values { public const string DEFAULT = ""; } } |
2903 | 2960 | public static class BackupFileNameMask { } |
2904 | 2961 | public static class RestoreFileNameMask { } |
... | ... | @@ -2976,9 +3033,11 @@ GO |
2976 | 3033 | { |
2977 | 3034 | public static class Attributes |
2978 | 3035 | { |
3036 | + public static class TranzitDirectoryLocalPath { public static class Values { public const string DEFAULT = ""; } } | |
2979 | 3037 | public static class TranzitDirectoryNetworkPath { public static class Values { public const string DEFAULT = ""; } } |
2980 | 3038 | public static class PhysicalFilesDirectoryPath { public static class Values { public const string DEFAULT = ""; } } |
2981 | 3039 | public static class SQLConnectionString { public static class Values { public const string DEFAULT = null; } } |
3040 | + public static class Server { public static class Values { public const string DEFAULT = null; } } | |
2982 | 3041 | } |
2983 | 3042 | } |
2984 | 3043 | } | ... | ... |
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.32.0.0")] | |
36 | -[assembly: AssemblyFileVersion("1.32.0.0")] | |
35 | +[assembly: AssemblyVersion("1.33.0.0")] | |
36 | +[assembly: AssemblyFileVersion("1.33.0.0")] | ... | ... |