Epicor Database Replication

Stop App Pool
Invoke-Command -ComputerName "EpicorAPP01" -ScriptBlock { Stop-WebAppPool -Name "ERP102300MRP" }

Backup DB

BACKUP DATABASE [Epicor10Live] TO  DISK = N'T:\AutoCopy_Epicor10DB.bak' WITH COPY_ONLY, NOFORMAT, INIT,  NAME = N'Epicor10Live-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, COMPRESSION,  STATS = 10

Restore DB

ALTER DATABASE [Epicor10MRP] SET SINGLE_USER WITH ROLLBACK IMMEDIATE RESTORE DATABASE [Epicor10MRP] FROM  DISK = N'T:\AutoCopy_Epicor10DB.bak' WITH  FILE = 1,  MOVE N'Epicor10Live' TO N'M:\SQL DBs\Epicor10MRP.mdf',  MOVE N'Epicor10Live_log' TO N'L:\SQL Logs\Epicor10MRP_Log.ldf',  NOUNLOAD,  REPLACE,  STATS = 5
ALTER DATABASE [Epicor10MRP] SET MULTI_USER
GO

Update SQL Script

USE [Epicor10MRP]
GO

UPDATE [Erp].[Company]
	SET [Name] = '*** BV Dairy - MRP Test Environment ' + convert(varchar, GetDate(), 103) + ' ***'
	WHERE [Company] = 'BVD'
GO

UPDATE [Ice].[SysCompany]
	SET [Name] = '*** BV Dairy - MRP Test Environment ' + convert(varchar, GetDate(), 103) + ' ***'
	WHERE [Company] = 'BVD'
GO

UPDATE [Ice].[FavItems]
   SET [AppServerURL] = REPLACE(AppServerURL, 'Live', 'MRP')
GO

UPDATE [Ice].[Menu]
   SET [Program] = REPLACE(Program, 'Live', 'MRP')
GO

UPDATE [Ice].[SysCompany]
   SET [EntSearchURL] = ''
GO

UPDATE [Ice].[SysConfig]
   SET [SysCharacter01] = ''
GO

UPDATE [Ice].[BpDirective]
   SET [IsEnabled] = 0
   WHERE [Source] = 'DB' and [BpMethodCode] = 'Erp.PartTran.Update' and [Name] = 'KanbanAutoPrint'
GO

Start App Pool

Invoke-Command -ComputerName "EpicorAPP01" -ScriptBlock { Start-WebAppPool -Name "ERP102300MRP" }

Build Email Body

public void Main()
		{
			// TODO: Add your code here

            string body = string.Empty;
       
            body = "Epicor10LIVE Database has been copied to Epicor10MRP\n\n";
            body += "The LATEST Transaction Date in the newly copied Epicor10MRP DB is ";
            body += Dts.Variables["User::LatestTranDate"].Value;
            body += "\n\nIf this date is not today's date, then check to ensure the copy has worked as expected.";
            Dts.Variables["User::EmailBody"].Value = body;
         
            Dts.TaskResult = (int)ScriptResults.Success;
		}
10 Likes