using System; using System.Data; using System.IO; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Threading; using System.Diagnostics; using System.Data.SqlClient; using System.ServiceProcess; using System.Collections; using System.Collections.Specialized; using System.Configuration; using Microsoft.Win32; using System.Linq; using Cosmos.UserFrame; using Cosmos.BaseFrame; using Cosmos.Common; using Cosmos.CommonManager; using Cosmos.ServiceProvider; namespace Cosmos.Win { public partial class frmDatabaseInit : Form { private SManager sManager = new SManager(); // 이 객체를 통해 업무 Service 호출 private StateServer StateObject = (StateServer)StateServer.GetInstance(); // StateObject : StateServer Object (객체) private PosStatus m_cPosStatus = new PosStatus(); // 기본정보 참조 private TranStatus m_cTrnStatus = new TranStatus(); // 거래정보 private string m_sPosMenuKey = string.Empty; public string PosMenuKey { get { return this.m_sPosMenuKey; } set { this.m_sPosMenuKey = value;} } #region 생성자 /// /// 생성자 /// public frmDatabaseInit() { InitializeComponent(); base.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw, true); //this.UpdateStyles(); m_cPosStatus = (PosStatus)StateObject.POS; // POS 기본정보 m_cTrnStatus = (TranStatus)StateObject.TRAN; // POS 거래정보 } private void frmDatabaseInit_Load(object sender, EventArgs e) { try { FormManager.SetFormAllControlFont(this, m_cPosStatus.Base.FONT); picBack.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.SCH_MESSAGE_BOX); this.Tag = "START"; } catch (Exception ex) { WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message); } } private void frmDatabaseInit_Activated(object sender, EventArgs e) { try { if (this.Tag.ToString() == "START") { this.Tag = ""; if (m_sPosMenuKey == "SQLDB") { // 데이터 베이스 생성 lblMessage.Text = "Database initialization"; this.Update(); ModifyDataBase(); // 정산 프로시져 생성 LS_ADMT_Procedure(); //#20181106 sql server 메모리 제한 스크립트 적용 start //SqlserverMemoryUseLimit(); //#20181106 sql server 메모리 제한 스크립트 적용 end } this.Close(); } } catch (Exception ex) { WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message); this.Close(); } } #endregion #region 데이터베이스 복구 처리 private void DBFileRestoreProc() { string sMstScriptFile = "MST_DB_RESTORE.SQL"; string sLogScriptFile = "LOG_DB_RESTORE.SQL"; string sBackupPath = BaseCom.NxBackPath + PosConst.BACKUP_PATH.DB; try { #region 01-POSMST 복구 var mstFiles = Directory.GetFiles(sBackupPath, "*_POSMST.BAK").OrderByDescending(filename => filename); if (mstFiles.LongCount() > 0) { File.Copy(mstFiles.First(), sBackupPath + "POSMST.BAK", true); if (File.Exists(sBackupPath + "POSMST.BAK") == true) { if (File.Exists(BaseCom.NxBinPath + sMstScriptFile) == true) { // Master DB 복구 if (File.Exists(BaseCom.NxBinPath + "OSQL_EXEC.bat") == true) { string sExec = BaseCom.NxBinPath + "OSQL_EXEC.bat"; string sParam = m_cPosStatus.Base.LocalDbSource + " " + m_cPosStatus.Base.LocalDbUserID + " " + m_cPosStatus.Base.LocalDbPassword + " POSMST " + BaseCom.NxBinPath + sMstScriptFile; CmUtil.ExecuteWaitProcess(sExec, sParam, System.Diagnostics.ProcessWindowStyle.Hidden); // Delete renamed file. System.Threading.Thread.Sleep(300); File.Delete(sBackupPath + "POSMST.BAK"); } } } } #endregion 01-POSMST 복구 #region 02-POSLOG 복구 var logFiles = Directory.GetFiles(sBackupPath, "*_POSLOG.BAK").OrderByDescending(filename => filename); if (logFiles.LongCount() > 0) { File.Copy(logFiles.First(), sBackupPath + "POSLOG.BAK", true); if (File.Exists(sBackupPath + "POSLOG.BAK") == true) { // Log DB 복구 if (File.Exists(BaseCom.NxBinPath + "OSQL_EXEC.bat") == true) { string sExec = BaseCom.NxBinPath + "OSQL_EXEC.bat"; string sParam = m_cPosStatus.Base.LocalDbSource + " " + m_cPosStatus.Base.LocalDbUserID + " " + m_cPosStatus.Base.LocalDbPassword + " POSMST " + BaseCom.NxBinPath + sLogScriptFile; CmUtil.ExecuteWaitProcess(sExec, sParam, System.Diagnostics.ProcessWindowStyle.Hidden); // Delete renamed file. System.Threading.Thread.Sleep(300); File.Delete(sBackupPath + "POSLOG.BAK"); } } } #endregion 02-POSLOG 복구 } catch (Exception ex) { WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message); } } #endregion 데이터베이스 복구 처리 #region 데이터 베이스 생성 처리 /// /// 데이터 베이스 생성 처리 /// private void ModifyDataBase() { string sSQL = ""; int nRet = 0; DataTable dtReturn = new DataTable(); try { SqlDB cSqlDB = new SqlDB(m_cPosStatus.Base.LocalDbSource, "MASTER", m_cPosStatus.Base.LocalDbUserID, m_cPosStatus.Base.LocalDbPassword); ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // SQL 서버 연결 체크 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// for (int nConn = 0; nConn < 5; nConn++) { // 데이터베이스 연결 체크 for (int i = 0; i < 10; i++) { sSQL = "SELECT NAME FROM MASTER..SYSDATABASES ORDER BY dbid desc"; nRet = cSqlDB.DBDataTableSelect(sSQL, CommandType.Text, (SqlParameter[])null, out dtReturn); if (nRet != UserCom.OK) { UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "SQL SERVER CONNECT FAIL => " + nRet.ToString()); System.Threading.Thread.Sleep(1000); continue; } break; } if (nRet == UserCom.OK) break; // 연결 성공 // DB 연결 실패시 SQL 서비스 재기동 처리 cSqlDB.DBClose(); //#20171024 restore 주석 start //DBFileRestoreProc(); //#20171024 restore 주석 end ChangeSqlService(true); // SQL 서버 로컬 권한으로 접속 설정 변경(WIN7) ReStartSqlService(); // 서비스 재기동 cSqlDB.DBOpen(); } if (nRet != UserCom.OK) return; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 마스터 DB 연결 체크 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// for (int i = 0; i < 5; i++) { sSQL = "SELECT NAME FROM POSMST..sysobjects WHERE type ='u' ORDER BY name"; nRet = cSqlDB.DBDataTableSelect(sSQL, CommandType.Text, (SqlParameter[])null, out dtReturn); if (nRet != UserCom.OK) { UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "SQL SERVER POSMST FAIL => " + nRet.ToString()); if (File.Exists(BaseCom.NxMstPath + @"\POSMST.mdf") == true) { sSQL = " ALTER DATABASE POSMST SET OFFLINE WITH ROLLBACK IMMEDIATE "; nRet = cSqlDB.DBExecuteNonQuery(new string[] { sSQL }, CommandType.Text, (SqlParameter[])null, false); sSQL = " EXEC sp_detach_db 'POSMST', 'true' "; nRet = cSqlDB.DBExecuteNonQuery(new string[] { sSQL }, CommandType.Text, (SqlParameter[])null, false); System.Threading.Thread.Sleep(1000); sSQL = " EXEC sp_attach_db @dbname = N'POSMST', "; sSQL += " @filename1 = N'" + BaseCom.NxMstPath + @"\POSMST.mdf', "; sSQL += " @filename2 = N'" + BaseCom.NxMstPath + @"\POSMST_log.ldf'"; nRet = cSqlDB.DBExecuteNonQuery(new string[] { sSQL }, CommandType.Text, (SqlParameter[])null, false); } System.Threading.Thread.Sleep(1000); nRet = UserCom.NG; continue; } break; } if (nRet != UserCom.OK) { // 마스터 연결 실패시 DB를 생성 for (int i = 0; i < 3; i++) { UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "SQL SERVER POSMST CREATE START"); CmUtil.FileCopy(BaseCom.NxMstPath + @"\POSMST.mdf", BaseCom.NxMstPath + @"\POSMST.mdf." + DateTime.Now.ToString("yyyyMMddHHmmss"), true); CmUtil.FileCopy(BaseCom.NxMstPath + @"\POSMST_log.ldf", BaseCom.NxMstPath + @"\POSMST_log.ldf." + DateTime.Now.ToString("yyyyMMddHHmmss"), true); System.Threading.Thread.Sleep(1000); sSQL = "CREATE DATABASE [POSMST] ON PRIMARY "; sSQL += " ( NAME = N'POSMST', FILENAME = N'" + BaseCom.NxMstPath + @"\POSMST.mdf' , SIZE = 102400KB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%)"; sSQL += " LOG ON"; sSQL += " ( NAME = N'POSMST_log', FILENAME = N'" + BaseCom.NxMstPath + @"\POSMST_log.ldf' , SIZE = 10240KB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%)"; nRet = cSqlDB.DBExecuteNonQuery(new string[] { sSQL }, CommandType.Text, (SqlParameter[])null, false); if (nRet == UserCom.OK || nRet == UserCom.NG4) { m_cPosStatus.Base.MstDownDate = m_cPosStatus.Mst.ComplexShopType == "0" ? PosConst.BEGINNING_MST_DOWN_DATE : PosConst.BEGINNING_COMPLEX_SHOP_MST_DOWN_DATE; nRet = UserCom.OK; break; } UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "SQL SERVER POSMST CREATE FAIL => " + nRet.ToString()); System.Threading.Thread.Sleep(1000); } } if (nRet != UserCom.OK) return; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 판매 DB 연결 체크 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// for (int i = 0; i < 5; i++) { sSQL = "SELECT NAME FROM POSLOG..sysobjects WHERE type ='u' ORDER BY name"; nRet = cSqlDB.DBDataTableSelect(sSQL, CommandType.Text, (SqlParameter[])null, out dtReturn); if (nRet != UserCom.OK) { UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "SQL SERVER POSLOG FAIL => " + nRet.ToString()); if (File.Exists(BaseCom.NxDataPath + @"\POSLOG.mdf") == true) { sSQL = " ALTER DATABASE POSLOG SET OFFLINE WITH ROLLBACK IMMEDIATE "; nRet = cSqlDB.DBExecuteNonQuery(new string[] { sSQL }, CommandType.Text, (SqlParameter[])null, false); sSQL = " EXEC sp_detach_db 'POSLOG', 'true' "; nRet = cSqlDB.DBExecuteNonQuery(new string[] { sSQL }, CommandType.Text, (SqlParameter[])null, false); System.Threading.Thread.Sleep(1000); sSQL = " EXEC sp_attach_db @dbname = N'POSLOG', "; sSQL += " @filename1 = N'" + BaseCom.NxDataPath + @"\POSLOG.mdf', "; sSQL += " @filename2 = N'" + BaseCom.NxDataPath + @"\POSLOG_log.ldf'"; nRet = cSqlDB.DBExecuteNonQuery(new string[] { sSQL }, CommandType.Text, (SqlParameter[])null, false); } System.Threading.Thread.Sleep(1000); nRet = UserCom.NG; continue; } break; } if (nRet != UserCom.OK) { for (int i = 0; i < 3; i++) { UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "SQL SERVER POSLOG CREATE START"); CmUtil.FileCopy(BaseCom.NxDataPath + @"\POSLOG.mdf", BaseCom.NxDataPath + @"\POSLOG.mdf." + DateTime.Now.ToString("yyyyMMddHHmmss"), true); CmUtil.FileCopy(BaseCom.NxDataPath + @"\POSLOG_log.ldf", BaseCom.NxDataPath + @"\POSLOG_log.ldf." + DateTime.Now.ToString("yyyyMMddHHmmss"), true); System.Threading.Thread.Sleep(1000); sSQL = "CREATE DATABASE [POSLOG] ON PRIMARY "; sSQL += " ( NAME = N'POSLOG', FILENAME = N'" + BaseCom.NxDataPath + @"\POSLOG.mdf' , SIZE = 102400KB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%)"; sSQL += " LOG ON"; sSQL += " ( NAME = N'POSLOG_log', FILENAME = N'" + BaseCom.NxDataPath + @"\POSLOG_log.ldf' , SIZE = 10240KB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%)"; nRet = cSqlDB.DBExecuteNonQuery(new string[] { sSQL }, CommandType.Text, (SqlParameter[])null, false); if (nRet == UserCom.OK || nRet == UserCom.NG4) { nRet = UserCom.OK; break; } UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "SQL SERVER POSLOG CREATE FAIL => " + nRet.ToString()); System.Threading.Thread.Sleep(1000); } } if (nRet != UserCom.OK) return; sSQL = "SELECT TOP 1 * FROM POSMST..MST_ITEM"; nRet = cSqlDB.DBDataTableSelect(sSQL, CommandType.Text, (SqlParameter[])null, out dtReturn); if (nRet != UserCom.OK && nRet != UserCom.NG) { // POSMST 테이블 생성 if (File.Exists(BaseCom.NxBinPath + "CreateMST.sql") == true) { ExecuteSqlScript(cSqlDB, BaseCom.NxBinPath + @"\CreateMST.sql"); // 백업된 AlterMST.sql 복구 if (File.Exists(BaseCom.NxBackPath + "AlterMST.sql") == true) CmUtil.FileCopy("AlterMST.sql", BaseCom.NxBackPath, BaseCom.NxBinPath, ""); //#20181026 DB파일 재생성 시 마감프로시저도 재생성 할 수 있도록 처리 start // 백업된 SP_ADJUSTMENT.SQL 복구 if (File.Exists(BaseCom.NxBackPath + "SP_ADJUSTMENT.SQL") == true) CmUtil.FileCopy("SP_ADJUSTMENT.SQL", BaseCom.NxBackPath, BaseCom.NxBinPath, ""); //#20181026 DB파일 재생성 시 마감프로시저도 재생성 할 수 있도록 처리 end } } sSQL = "SELECT TOP 1 * FROM POSLOG..TR_SALE_HEADER"; nRet = cSqlDB.DBDataTableSelect(sSQL, CommandType.Text, (SqlParameter[])null, out dtReturn); if (nRet != UserCom.OK && nRet != UserCom.NG) { // POSLOG 테이블 생성 if (File.Exists(BaseCom.NxBinPath + "CreateLOG.sql") == true) { ExecuteSqlScript(cSqlDB, BaseCom.NxBinPath + @"\CreateLOG.sql"); // 백업된 AlterLOG.sql 복구 if (File.Exists(BaseCom.NxBackPath + "AlterLOG.sql") == true) CmUtil.FileCopy("AlterLOG.sql", BaseCom.NxBackPath, BaseCom.NxBinPath, ""); } } // POSMST 테이블 변경 스크립트 실행 if (File.Exists(BaseCom.NxBinPath + "AlterMST.sql") == true) { ExecuteSqlScript(cSqlDB, BaseCom.NxBinPath + "AlterMST.sql"); // Backup CmUtil.FileMove("AlterMST.sql", BaseCom.NxBinPath, BaseCom.NxBackPath, "", "AlterMST.sql"); } // POSLOG 테이블 변경 스크립트 실행 if (File.Exists(BaseCom.NxBinPath + "AlterLOG.sql") == true) { ExecuteSqlScript(cSqlDB, BaseCom.NxBinPath + "AlterLOG.sql"); // Backup CmUtil.FileMove("AlterLOG.sql", BaseCom.NxBinPath, BaseCom.NxBackPath, "", "AlterLOG.sql"); } // 2019-02-19 - 1997fx11 : Kiosk용 Table 생성 시작 (target DB : POSMST) sSQL = "SELECT TOP 1 * FROM POSMST..NHS_PRD_MST"; nRet = cSqlDB.DBDataTableSelect(sSQL, CommandType.Text, (SqlParameter[])null, out dtReturn); if (nRet != UserCom.OK && nRet != UserCom.NG) { // POSMST 테이블 생성 if (File.Exists(BaseCom.NxBinPath + "CreateMST.Kiosk.sql") == true) { ExecuteSqlScript(cSqlDB, BaseCom.NxBinPath + @"\CreateMST.Kiosk.sql"); } } // Kiosk용 Table 생성 종료 } catch (Exception ex) { WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message); } } /// /// SQL 서버 로컬 권한으로 접속 설정 변경(WIN7) /// private void ChangeSqlService(bool bLocal) { try { if (bLocal == true) { RegistryKey regKey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\services\MSSQL$SPCPOS\", RegistryKeyPermissionCheck.ReadWriteSubTree); if (regKey == null) return; //RegistryKey regKey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\services\MSSQLSERVER\", RegistryKeyPermissionCheck.ReadWriteSubTree); if (regKey.GetValue("ObjectName").ToString() == "LocalSystem" && regKey.GetValue("Type").ToString() == "272") return; regKey.SetValue("ObjectName", "LocalSystem", RegistryValueKind.String); regKey.SetValue("Type", 0x110, RegistryValueKind.DWord); UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "SQL SERVER SERVICE SET CHANGE => " + "LocalSystem"); } else { RegistryKey regKey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\services\MSSQL$SPCPOS\", RegistryKeyPermissionCheck.ReadWriteSubTree); if (regKey == null) return; //RegistryKey regKey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\services\MSSQLSERVER\", RegistryKeyPermissionCheck.ReadWriteSubTree); if (regKey.GetValue("ObjectName").ToString() == @"NT AUTHORITY\NetworkService" && regKey.GetValue("Type").ToString() == "16") return; regKey.SetValue("ObjectName", @"NT AUTHORITY\NetworkService", RegistryValueKind.String); regKey.SetValue("Type", 0x10, RegistryValueKind.DWord); UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "SQL SERVER SERVICE SET CHANGE => " + @"NT AUTHORITY\NetworkService"); } } catch (Exception ex) { WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message); } } /// /// SQL 서버 서비스 재기동 /// private void ReStartSqlService() { try { UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "SQL SERVER SERVICE RESTART"); // SQL 서버 설정 변경시 서비스 재기동 //ServiceController service = new ServiceController(@"MSSQLSERVER"); ServiceController service = new ServiceController(@"MSSQL$SPCPOS"); TimeSpan timeout = TimeSpan.FromMilliseconds(5000); try { service.Stop(); service.WaitForStatus(ServiceControllerStatus.Stopped, timeout); } catch { } service.Start(); service.WaitForStatus(ServiceControllerStatus.Running, timeout); } catch (Exception ex) { WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message); } } /// /// SQL 스크립트 파일 실행 /// private bool ExecuteSqlScript(SqlDB cSqlDB, string sFileName) { try { string sScript = CmUtil.ReadTextFile(sFileName); if (sScript == "") return true; UserLog.WriteLogFile(UserCom.LOG_ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "SQL SERVER EXEC SCRIPT => " + sFileName); string[] saQuery = sScript.Split(new string[] { "\n\r", "\r\n" }, StringSplitOptions.None); string sQuery = ""; foreach (string sData in saQuery) { if (sData.Trim().ToUpper() == "GO") { int nRet = cSqlDB.DBExecuteNonQuery(new string[] { sQuery }, CommandType.Text, (SqlParameter[])null, false); if (nRet != UserCom.OK && nRet != UserCom.NG4) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "SQL SERVER EXEC SCRIPT FAIL"); } sQuery = ""; } else { sQuery += sData + PosConst.CRLF; } } if ( sQuery != "") { int nRet = cSqlDB.DBExecuteNonQuery(new string[] { sQuery }, CommandType.Text, (SqlParameter[])null, false); if (nRet != UserCom.OK && nRet != UserCom.NG4) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "SQL SERVER EXEC SCRIPT FAIL"); } } return true; } catch (Exception ex) { WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message); } return false; } #endregion #region 정산 프로시져 생성 및 수정 /// /// 정산 프로시져 생성 및 수정 /// /// private string LS_ADMT_Procedure() { string sRet = UserCom.RST_ERR; string sFileName = "SP_ADJUSTMENT.SQL"; try { /* // 프로시져 변경시 참고사항 (중요) // 프로시져 생성 샘픔 //USE [POSMST] //go //DROP PROC dbo.SP_ADJUSTMENT //GO //CREATE PROC dbo.SP_ADJUSTMENT // 기존거 삭제후 적용 */ // Main Pos인 경우만 실행 //if (LoadPosMaster() != PosConst.MAIN_POS_DIV.MAIN_POS) return sRet; if (File.Exists(BaseCom.NxBinPath + sFileName) == true) { // 프로시져 적용 if (File.Exists(BaseCom.NxBinPath + "OSQL_EXEC.bat") == true) { string sExec = BaseCom.NxBinPath + "OSQL_EXEC.bat "; string sParam = m_cPosStatus.Base.LocalDbSource + " " + m_cPosStatus.Base.LocalDbUserID + " " + m_cPosStatus.Base.LocalDbPassword + " POSMST " + BaseCom.NxBinPath + sFileName; CmUtil.ExecuteWaitProcess(sExec, sParam, System.Diagnostics.ProcessWindowStyle.Hidden); // Backup CmUtil.FileMove(sFileName, BaseCom.NxBinPath, BaseCom.NxBackPath, "", sFileName); } } sRet = UserCom.RST_OK; } catch (Exception ex) { WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message); } return sRet; } #endregion #region POS 마스터 로딩 /// /// POS 마스터 로딩 /// /// public string LoadPosMaster() { string sQuery = ""; string sRet = PosConst.MAIN_POS_DIV.MAIN_POS; try { IMasterUs m_cMstService = (IMasterUs)sManager.InitServiceInstance(ServiceLists.ASV_MASTER.DLL, ServiceLists.ASV_MASTER.POS_MASTER); // POS 마스터 로딩 sQuery = "SELECT * FROM POSMST..MST_POS WHERE CMP_CD = '" + m_cPosStatus.Base.CmpCd + "' AND STOR_CD = '" + m_cPosStatus.Base.StoreNo + "' AND POS_NO = '" + m_cPosStatus.Base.PosNo + "'"; sQuery += " AND USE_YN = '" + PosConst.MST_USE_YN.YES + "'"; DataTable dtDataInfo = m_cMstService.Select(new string[] { sQuery }); if (dtDataInfo != null && dtDataInfo.Rows.Count > 0) { DataRow dr = dtDataInfo.Rows[0]; // 메인POS 구분 설정(0:서브POS, 1:메인POS) sRet = CmUtil.GetDataRowStr(dr, PosMst.MST_POS.DATA.MAIN_YN); } //if (sRet != PosConst.MAIN_POS_DIV.MAIN_POS) sRet = PosConst.MAIN_POS_DIV.SUB_POS; } catch (Exception ex) { WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message); } return sRet; } #endregion //#20181106 sql server 메모리 제한 스크립트 적용 start #region SQLSERVER_MAX_MEMORY.BAT 실행 (Sql Server 메모리 사용량 512MB 제한하기) /* private void SqlserverMemoryUseLimit() { try { //XP만 적용. OperatingSystem OS = Environment.OSVersion; if (OS.Platform == PlatformID.Win32NT && OS.Version.Major == 5) { string sFileName = "SQLSERVER_MAX_MEMORY.SQL"; if (File.Exists(BaseCom.NxBinPath + "OSQL_EXEC.bat") == true) { string sExec = BaseCom.NxBinPath + "OSQL_EXEC.bat"; string sParam = m_cPosStatus.Base.LocalDbSource + " " + m_cPosStatus.Base.LocalDbUserID + " " + m_cPosStatus.Base.LocalDbPassword + " MASTER " + BaseCom.NxBinPath + sFileName; CmUtil.ExecuteWaitProcess(sExec, sParam, System.Diagnostics.ProcessWindowStyle.Hidden); // Backup CmUtil.FileMove(sFileName, BaseCom.NxBinPath, BaseCom.NxBackPath, "", sFileName); } } } catch (Exception ex) { WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message); } } */ #endregion //#20181106 sql server 메모리 제한 스크립트 적용 end } }