private void _migrator_MigrationError(object sender, MigrationEventArgs e) { _migrator.MigrationProcessBegin -= _migrator_MigrationProcessBegin; _migrator.MigrationProcessEnd -= _migrator_MigrationProcessEnd; _migrator.PackageMigrated -= _migrator_PackageMigrated; _migrator.PackageMigrating -= _migrator_PackageMigrating; _migrator.TableMigrated -= _migrator_TableMigrated; _migrator.TableMigrating -= _migrator_TableMigrating; _migrator.Fixing -= _migrator_Fixing; _migrator.Fixed -= _migrator_Fixed; _migrator.MigrationError -= _migrator_MigrationError; _migrator.Running = false; _migrator.Error = true; _log += e.Message; }
private void _migrator_MigrationProcessEnd(object sender, MigrationEventArgs e) { _log += string.Format("{0:dd/MM/yyyy HH:mm:ss} : {1}\n", _endTime, e.Message); _log += string.Format("Total time: {0:hh\\:mm\\:ss}\n", (_endTime - _beginTime)); _log += "\n======================================================================\n"; _endTime = DateTime.Now; _migrator.MigrationProcessBegin -= _migrator_MigrationProcessBegin; _migrator.MigrationProcessEnd -= _migrator_MigrationProcessEnd; _migrator.PackageMigrated -= _migrator_PackageMigrated; _migrator.PackageMigrating -= _migrator_PackageMigrating; _migrator.TableMigrated -= _migrator_TableMigrated; _migrator.TableMigrating -= _migrator_TableMigrating; _migrator.Fixing -= _migrator_Fixing; _migrator.Fixed -= _migrator_Fixed; _migrator.MigrationError -= _migrator_MigrationError; _migrator.Running = false; _migrator.Success = true; }
private void _migrator_MigrationProcessBegin(object sender, MigrationEventArgs e) { _log += string.Format("{0:dd/MM/yyyy HH:mm:ss} : {1}\n", _beginTime, e.Message); }
private void _migrator_PackageMigrated(object sender, MigrationEventArgs e) { _log += string.Format("{0:dd/MM/yyyy HH:mm:ss} : End import package {1}, {2} records imported\n", DateTime.Now, e.Package, e.MigratedRecords); }
private void _migrator_TableMigrated(object sender, MigrationEventArgs e) { _log += string.Format("{0:dd/MM/yyyy HH:mm:ss} : {1}\n", DateTime.Now, e.Message); }
private void _migrator_Fixing(object sender, MigrationEventArgs e) { _log += "\n============================\n" + e.Message + "\n"; }
/*public ActionResult GetLog() { return Json(new { Log = _log, _migrator.Running, Success = !_migrator.Running && _migrator.Success, _migrator.MigrateStatus }, JsonRequestBehavior.AllowGet); }*/ #region private function private void _migrator_Fixed(object sender, MigrationEventArgs e) { _log += e.Message + "\n"; }
/// <summary> /// execute the migration process /// iterate the fieldsMaps, query the source and bulkCopy t des /// </summary> public void Run() { MigrateStatus = MigratorStatus.Running; var start = DateTime.Now; Logging.PushInfo("=======================================================================\n\nStart Migrating at : " + start.ToString(CultureInfo.InvariantCulture)); _running = true; try { //raise migration process begin event if (MigrationProcessBegin != null) { TableMigratedCount = 0; MigrationProcessBegin(this, new MigrationEventArgs() { Message = "Migration process begin..." }); } // Disable all triggers /*using (var conn = new SqlConnection(_destinationConnectionString)) { Logging.PushInfo("Start Disable all triggers"); conn.Open(); const string disableTriggerSql = "sp_MSforeachtable 'alter table ? disable trigger all'"; Logging.PushInfo("Command : " + disableTriggerSql); var disableTriggerCmd = new SqlCommand(disableTriggerSql, conn); disableTriggerCmd.CommandTimeout = Int32.MaxValue; disableTriggerCmd.ExecuteNonQuery(); Logging.PushInfo("End Disable all triggers"); }*/ //open connections var sourceConn = new SqlConnection(_soureConnectionString); sourceConn.Open(); Utils.CreateIndexTableAdapt(sourceConn); Utils.CreateSupportTempDb(sourceConn); var desConn = new SqlConnection(_destinationConnectionString); desConn.Open(); Utils.CreateUniqueIndex(desConn); var usersAdapt = Utils.GetListUserAdapt(sourceConn); //var listEmailDuplicate = new List<string>(); if (usersAdapt.Any()) { foreach (var userAdapt in usersAdapt) { var isValid = true;//Utils.CheckExistEmail(desConn, TenantID, userAdapt.Email); if (isValid) { MembershipCreateStatus createStatus; var user = Membership.CreateUser(userAdapt.Email, ConfigurationManager.AppSettings["DefaultPasswordNewUser"], userAdapt.Email, Constants.PasswordQuestion, Constants.PasswordAnswer, true, null, out createStatus); if (createStatus == MembershipCreateStatus.Success) { if (user != null) { var query = string.Format(QueryConstants.QueryInsertUserTempdb, SourceDbSystemAdapt, "[dbo].[users]", DestinationServer, "st_Security", "[dbo].[sec_User]", userAdapt.Email, ParseData.GetGuid(user.ProviderUserKey), TenantID, DatabaseID); using (SqlCommand command = new SqlCommand(query, sourceConn)) { //Logging.PushInfo(query); command.ExecuteNonQuery(); } } } else if (createStatus == MembershipCreateStatus.DuplicateEmail || createStatus == MembershipCreateStatus.DuplicateUserName) { //listEmailDuplicate.Add("'" + userAdapt.Email + "'"); } } } } if (desConn.State == ConnectionState.Open) { desConn.Close(); desConn.Dispose(); } //insert query to queue table Logging.PushInfo("===============Start Insert Query To Queue Table==================="); Logging.PushInfo("Enable identity insert on table [SysproMigration].[dbo].[QueueMigrate]"); var migrationConn1 = MigrationConnectionString.CreateAndOpenConnection("Syspro Migration"); var enableIdentityInsert = new SqlCommand("SET IDENTITY_INSERT [SysproMigration].[dbo].[QueueMigrate] ON", migrationConn1); enableIdentityInsert.ExecuteNonQuery(); migrationConn1.CloseConnection(); foreach (var fieldsMap in FieldsMaps) { InsertQueryToQueue(fieldsMap, MigrationConnectionString); } Logging.PushInfo("===============End Insert Query To Queue Table==================="); Logging.PushInfo("===============Start Read Query from Query Table==================="); var migrationConn = MigrationConnectionString.CreateAndOpenConnection("Syspro Migration"); var sourceConnObject = SourceConnectionString.GetObjectConnection(); var desConnObject = DestinationConnectionString.GetObjectConnection(); var objectQueue = new QueueMigrate { SourceServerName = sourceConnObject.DataSource, SourceDatabaseCompany = sourceConnObject.InitialCatalog, TargetServerName = desConnObject.DataSource, TargetDatabaseCompany = desConnObject.InitialCatalog }; var lstQueue = Utils.GetQueueMigrates(migrationConn, objectQueue); migrationConn.CloseConnection(); foreach (var queue in lstQueue) { var fieldmap = FieldsMaps.FirstOrDefault(t => t.Id == queue.FieldsMapId); MigrateFromQueue(queue, fieldmap); } /* //iterate the fieldsMaps and migrate every tables foreach (var fieldsMap in _fieldsMapsCompany) { MigrateNew(fieldsMap, _destinationConnectionString, sourceConn, listEmailDuplicate.Any() ? string.Join(",", listEmailDuplicate) : ""); }*/ //raise migration process end event if (MigrationProcessEnd != null) { MigrationProcessEnd(this, new MigrationEventArgs() { Message = "Migration process done!!" }); } desConn = DestinationConnectionString.CreateAndOpenConnection("Target"); Utils.DropUniqueIndex(desConn); desConn.CloseConnection(); sourceConn = SourceConnectionString.CreateAndOpenConnection("Source"); Utils.DropIndexTableAdapt(sourceConn); sourceConn.CloseConnection(); // Enable all triggers using (var conn = new SqlConnection(_destinationConnectionString)) { Logging.PushInfo("Start Enable all triggers"); conn.Open(); const string enableTriggerSql = "sp_MSforeachtable 'alter table ? enable trigger all'"; Logging.PushInfo("Command : " + enableTriggerSql); var enableTriggerCmd = new SqlCommand(enableTriggerSql, conn); enableTriggerCmd.ExecuteNonQuery(); Logging.PushInfo("End Enable all triggers"); } //UpdateMigratedRestList(_migratedFilePath); Success = true; MigrateStatus = MigratorStatus.CompletedMigrate; var finish = DateTime.Now; Logging.PushInfo("=======================================================================\n\nFinish Migrating at : " + finish.ToString(CultureInfo.InvariantCulture)); Logging.PushInfo("Process time : " + finish.Subtract(start)); } catch (Exception e) { if (MigrationError != null) { var evg = new MigrationEventArgs { Message = string.Format("{0}\n{1}", e.Message, e.StackTrace) }; MigrationError(this, evg); Error = true; Running = false; Logging.PutError("MigrateError : ", e); } //log.Error("Run : ", e); } finally { _running = false; } }