diff --git a/DBPatch/DBPatch_AccountDB_Create.bat b/DBPatch/DBPatch_AccountDB_Create.bat new file mode 100644 index 0000000..1920ffc --- /dev/null +++ b/DBPatch/DBPatch_AccountDB_Create.bat @@ -0,0 +1,20 @@ +@echo off +CD ./sqlScripts/ + +::log +IF NOT EXIST .\logs mkdir logs + +::DB 정의 스키마 +SET Schema=SystemX.DB.AccountDB + +::연결정보 +SET ServerIP=127.0.0.1 +SET ServerPort=1433 +SET UserID=SystemX +SET Passwd=X +SET DBName=AccountDB + +::Default DB +@echo off +::CALL _CreateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName% +::CALL _CreateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName%_DEV \ No newline at end of file diff --git a/DBPatch/DBPatch_AccountDB_Update.bat b/DBPatch/DBPatch_AccountDB_Update.bat new file mode 100644 index 0000000..ea04207 --- /dev/null +++ b/DBPatch/DBPatch_AccountDB_Update.bat @@ -0,0 +1,23 @@ +@echo off +CD .\sqlScripts\ + +::log +IF NOT EXIST .\logs mkdir logs + +::DB 정의 스키마 +SET Schema=SystemX.DB.AccountDB + +::연결정보 +SET ServerIP=127.0.0.1 +SET ServerPort=1433 +SET UserID=SystemX +SET Passwd=X +SET DBName=AccountDB + +@echo off +::generate update script +CALL _UpdateScriptGenerate.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName% + +::Default DB +::CALL _UpdateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName% +::CALL _UpdateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName%_DEV \ No newline at end of file diff --git a/DBPatch/DBPatch_UniqueKeyDB_Create.bat b/DBPatch/DBPatch_UniqueKeyDB_Create.bat new file mode 100644 index 0000000..73d6cdc --- /dev/null +++ b/DBPatch/DBPatch_UniqueKeyDB_Create.bat @@ -0,0 +1,20 @@ +@echo off +CD ./sqlScripts/ + +::log +IF NOT EXIST .\logs mkdir logs + +::DB 정의 스키마 +SET Schema=SystemX.DB.UniqueKeyDB + +::연결정보 +SET ServerIP=127.0.0.1 +SET ServerPort=1433 +SET UserID=SystemX +SET Passwd=X +SET DBName=UniqueKeyDB + +::Default DB +@echo off +::CALL _CreateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName% +::CALL _CreateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName%_DEV \ No newline at end of file diff --git a/DBPatch/DBPatch_UniqueKeyDB_Update.bat b/DBPatch/DBPatch_UniqueKeyDB_Update.bat new file mode 100644 index 0000000..5166c86 --- /dev/null +++ b/DBPatch/DBPatch_UniqueKeyDB_Update.bat @@ -0,0 +1,23 @@ +@echo off +CD .\sqlScripts\ + +::log +IF NOT EXIST .\logs mkdir logs + +::DB 정의 스키마 +SET Schema=SystemX.DB.UniqueKeyDB + +::연결정보 +SET ServerIP=127.0.0.1 +SET ServerPort=1433 +SET UserID=SystemX +SET Passwd=X +SET DBName=UniqueKeyDB + +@echo off +::generate update script +CALL _UpdateScriptGenerate.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName% + +::Default DB +::CALL _UpdateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName% +CALL _UpdateDB.bat %Schema% %ServerIP% %ServerPort% %UserID% %Passwd% %DBName%_DEV \ No newline at end of file diff --git a/Projects/Tools/Tools_Scaffold_AccountDB.bat b/DBPatch/Tool_AccountDB_Scaffold.bat similarity index 100% rename from Projects/Tools/Tools_Scaffold_AccountDB.bat rename to DBPatch/Tool_AccountDB_Scaffold.bat diff --git a/DBPatch/sqlScripts/SystemX.DB.AccountDB_Create.sql b/DBPatch/sqlScripts/SystemX.DB.AccountDB_Create.sql new file mode 100644 index 0000000..72848a5 --- /dev/null +++ b/DBPatch/sqlScripts/SystemX.DB.AccountDB_Create.sql @@ -0,0 +1,346 @@ +/* +SystemX.DB.AccountDB의 배포 스크립트 + +이 코드는 도구를 사용하여 생성되었습니다. +파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면 +변경 내용이 손실됩니다. +*/ + +GO +SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON; + +SET NUMERIC_ROUNDABORT OFF; + + +GO +/* +:setvar DatabaseName "SystemX.DB.AccountDB" +:setvar DefaultFilePrefix "SystemX.DB.AccountDB" +:setvar DefaultDataPath "" +:setvar DefaultLogPath "" +*/ + +GO +:on error exit +GO +/* +SQLCMD 모드가 지원되지 않으면 SQLCMD 모드를 검색하고 스크립트를 실행하지 않습니다. +SQLCMD 모드를 설정한 후에 이 스크립트를 다시 사용하려면 다음을 실행합니다. +SET NOEXEC OFF; +*/ +:setvar __IsSqlCmdEnabled "True" +GO +IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True' + BEGIN + PRINT N'이 스크립트를 실행하려면 SQLCMD 모드를 사용하도록 설정해야 합니다.'; + SET NOEXEC ON; + END + + +GO +USE [master]; + + +GO + +IF (DB_ID(N'$(DatabaseName)') IS NOT NULL) +BEGIN + ALTER DATABASE [$(DatabaseName)] + SET SINGLE_USER WITH ROLLBACK IMMEDIATE; + DROP DATABASE [$(DatabaseName)]; +END + +GO +PRINT N'$(DatabaseName) 데이터베이스를 만드는 중...' +GO +CREATE DATABASE [$(DatabaseName)] COLLATE Korean_Wansung_CI_AS +GO +USE [$(DatabaseName)]; + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET ANSI_NULLS ON, + ANSI_PADDING ON, + ANSI_WARNINGS ON, + ARITHABORT ON, + CONCAT_NULL_YIELDS_NULL ON, + NUMERIC_ROUNDABORT OFF, + QUOTED_IDENTIFIER ON, + ANSI_NULL_DEFAULT ON, + CURSOR_DEFAULT LOCAL, + RECOVERY FULL, + CURSOR_CLOSE_ON_COMMIT OFF, + AUTO_CREATE_STATISTICS ON, + AUTO_SHRINK OFF, + AUTO_UPDATE_STATISTICS ON, + RECURSIVE_TRIGGERS OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET ALLOW_SNAPSHOT_ISOLATION OFF; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET READ_COMMITTED_SNAPSHOT OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET AUTO_UPDATE_STATISTICS_ASYNC OFF, + PAGE_VERIFY NONE, + DATE_CORRELATION_OPTIMIZATION OFF, + DISABLE_BROKER, + PARAMETERIZATION SIMPLE, + SUPPLEMENTAL_LOGGING OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF IS_SRVROLEMEMBER(N'sysadmin') = 1 + BEGIN + IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)] + SET TRUSTWORTHY OFF, + DB_CHAINING OFF + WITH ROLLBACK IMMEDIATE'; + END + END +ELSE + BEGIN + PRINT N'데이터베이스 설정을 수정할 수 없습니다. 이러한 설정을 적용하려면 SysAdmin이어야 합니다.'; + END + + +GO +IF IS_SRVROLEMEMBER(N'sysadmin') = 1 + BEGIN + IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)] + SET HONOR_BROKER_PRIORITY OFF + WITH ROLLBACK IMMEDIATE'; + END + END +ELSE + BEGIN + PRINT N'데이터베이스 설정을 수정할 수 없습니다. 이러한 설정을 적용하려면 SysAdmin이어야 합니다.'; + END + + +GO +ALTER DATABASE [$(DatabaseName)] + SET TARGET_RECOVERY_TIME = 0 SECONDS + WITH ROLLBACK IMMEDIATE; + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET FILESTREAM(NON_TRANSACTED_ACCESS = OFF), + CONTAINMENT = NONE + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET AUTO_CREATE_STATISTICS ON(INCREMENTAL = OFF), + MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = OFF, + DELAYED_DURABILITY = DISABLED + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET QUERY_STORE (QUERY_CAPTURE_MODE = ALL, DATA_FLUSH_INTERVAL_SECONDS = 900, INTERVAL_LENGTH_MINUTES = 60, MAX_PLANS_PER_QUERY = 200, CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 367), MAX_STORAGE_SIZE_MB = 100) + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET QUERY_STORE = OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET MAXDOP = PRIMARY; + ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION = OFF; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET LEGACY_CARDINALITY_ESTIMATION = PRIMARY; + ALTER DATABASE SCOPED CONFIGURATION SET PARAMETER_SNIFFING = ON; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET PARAMETER_SNIFFING = PRIMARY; + ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = OFF; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET QUERY_OPTIMIZER_HOTFIXES = PRIMARY; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET TEMPORAL_HISTORY_RETENTION ON + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF fulltextserviceproperty(N'IsFulltextInstalled') = 1 + EXECUTE sp_fulltext_database 'enable'; + + +GO +PRINT N'테이블 [dbo].[tRefreshToken]을(를) 만드는 중...'; + + +GO +CREATE TABLE [dbo].[tRefreshToken] ( + [cAuid] NVARCHAR (250) NOT NULL, + [cRefreshToken] NVARCHAR (1000) NOT NULL, + PRIMARY KEY CLUSTERED ([cAuid] ASC) +); + + +GO +PRINT N'테이블 [dbo].[tRole]을(를) 만드는 중...'; + + +GO +CREATE TABLE [dbo].[tRole] ( + [cAuid] NVARCHAR (250) NOT NULL, + [cRoleID] TINYINT NOT NULL, + [cRoleName] NVARCHAR (20) NOT NULL, + PRIMARY KEY CLUSTERED ([cAuid] ASC) +); + + +GO +PRINT N'테이블 [dbo].[tUser]을(를) 만드는 중...'; + + +GO +CREATE TABLE [dbo].[tUser] ( + [cUserID] NVARCHAR (50) NOT NULL, + [cAuid] NVARCHAR (250) NOT NULL, + [cPasswordHashed] NVARCHAR (250) NOT NULL, + [cState] TINYINT NOT NULL, + [cCreateDateTime] DATETIME2 (7) NOT NULL, + [cLastLoginDateTime] DATETIME2 (7) NULL, + PRIMARY KEY CLUSTERED ([cUserID] ASC) +); + + +GO +/* +배포 후 스크립트 템플릿 +-------------------------------------------------------------------------------------- + 이 파일에는 빌드 스크립트에 추가될 SQL 문이 있습니다. + SQLCMD 구문을 사용하여 파일을 배포 후 스크립트에 포함합니다. + 예: :r .\myfile.sql + SQLCMD 구문을 사용하여 배포 후 스크립트의 변수를 참조합니다. + 예: :setvar TableName MyTable + SELECT * FROM [$(TableName)] +-------------------------------------------------------------------------------------- +*/ + +IF NOT EXISTS (SELECT 1 FROM tUser WHERE cUserID = 'Alis') +BEGIN + INSERT INTO tUser (cUserID, cAuid, cPasswordHashed, cState, cCreateDateTime, cLastLoginDateTime) + VALUES ('Alis', 'SuperUserAlis' ,'oKLQCdunc2kT5aAVfK+POKwd8R3p8OZvs/NATwpg4gM=' ,1 ,GETDATE(), GETDATE()); + + INSERT INTO tRole(cAuid, cRoleID, cRoleName) + VALUES ('SuperUserAlis','20','SuperUser'); +END + +IF NOT EXISTS (SELECT 1 FROM tUser WHERE cUserID = 'SystemX') +BEGIN + INSERT INTO tUser (cUserID, cAuid, cPasswordHashed, cState, cCreateDateTime, cLastLoginDateTime) + VALUES ('SystemX', 'SuperUserSystemX' ,'S2irOEf+2n1sYsH7y+6/o16rc1HtXnj03a3qXfZLgBU=' ,1 ,GETDATE(), GETDATE()); + + INSERT INTO tRole(cAuid, cRoleID, cRoleName) + VALUES ('SuperUserSystemX','20','SuperUser'); +END +GO + +GO +DECLARE @VarDecimalSupported AS BIT; + +SELECT @VarDecimalSupported = 0; + +IF ((ServerProperty(N'EngineEdition') = 3) + AND (((@@microsoftversion / power(2, 24) = 9) + AND (@@microsoftversion & 0xffff >= 3024)) + OR ((@@microsoftversion / power(2, 24) = 10) + AND (@@microsoftversion & 0xffff >= 1600)))) + SELECT @VarDecimalSupported = 1; + +IF (@VarDecimalSupported > 0) + BEGIN + EXECUTE sp_db_vardecimal_storage_format N'$(DatabaseName)', 'ON'; + END + + +GO +ALTER DATABASE [$(DatabaseName)] + SET MULTI_USER + WITH ROLLBACK IMMEDIATE; + + +GO +PRINT N'업데이트가 완료되었습니다.'; + + +GO diff --git a/DBPatch/sqlScripts/SystemX.DB.AccountDB_Update.sql b/DBPatch/sqlScripts/SystemX.DB.AccountDB_Update.sql new file mode 100644 index 0000000..fc0376e --- /dev/null +++ b/DBPatch/sqlScripts/SystemX.DB.AccountDB_Update.sql @@ -0,0 +1,89 @@ +/* +AccountDB의 배포 스크립트 + +이 코드는 도구를 사용하여 생성되었습니다. +이 파일을 변경하면 잘못된 동작이 발생할 수 있으며 코드가 다시 생성되면 +이러한 변경 내용이 손실됩니다. +*/ + +GO +SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON; + +SET NUMERIC_ROUNDABORT OFF; + + +GO +/* +:setvar DatabaseName "AccountDB" +:setvar DefaultFilePrefix "AccountDB" +:setvar DefaultDataPath "D:\20_MSSQL\DATA\" +:setvar DefaultLogPath "D:\20_MSSQL\DATA\" +*/ + +GO +:on error exit +GO +/* +SQLCMD 모드를 검색하고 SQLCMD 모드가 지원되지 않는 경우 스크립트 실행을 사용하지 않도록 설정합니다. +SQLCMD 모드를 사용하도록 설정한 후 스크립트를 다시 사용하도록 설정하려면 다음을 실행합니다. +NOEXEC를 끕니다. +*/ +:setvar __IsSqlCmdEnabled "True" +GO +IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True' + BEGIN + PRINT N'이 스크립트를 실행하려면 SQLCMD 모드를 사용하도록 설정해야 합니다.'; + SET NOEXEC ON; + END + + +GO +USE [$(DatabaseName)]; + + +GO +PRINT N'테이블 [dbo].[tUser]을(를) 변경하는 중...'; + + +GO +ALTER TABLE [dbo].[tUser] + ADD [cUpdateTest] NCHAR (10) NULL; + + +GO +/* +배포 후 스크립트 템플릿 +-------------------------------------------------------------------------------------- + 이 파일에는 빌드 스크립트에 추가될 SQL 문이 있습니다. + SQLCMD 구문을 사용하여 파일을 배포 후 스크립트에 포함합니다. + 예: :r .\myfile.sql + SQLCMD 구문을 사용하여 배포 후 스크립트의 변수를 참조합니다. + 예: :setvar TableName MyTable + SELECT * FROM [$(TableName)] +-------------------------------------------------------------------------------------- +*/ + +IF NOT EXISTS (SELECT 1 FROM tUser WHERE cUserID = 'Alis') +BEGIN + INSERT INTO tUser (cUserID, cAuid, cPasswordHashed, cState, cCreateDateTime, cLastLoginDateTime) + VALUES ('Alis', 'SuperUserAlis' ,'oKLQCdunc2kT5aAVfK+POKwd8R3p8OZvs/NATwpg4gM=' ,1 ,GETDATE(), GETDATE()); + + INSERT INTO tRole(cAuid, cRoleID, cRoleName) + VALUES ('SuperUserAlis','20','SuperUser'); +END + +IF NOT EXISTS (SELECT 1 FROM tUser WHERE cUserID = 'SystemX') +BEGIN + INSERT INTO tUser (cUserID, cAuid, cPasswordHashed, cState, cCreateDateTime, cLastLoginDateTime) + VALUES ('SystemX', 'SuperUserSystemX' ,'S2irOEf+2n1sYsH7y+6/o16rc1HtXnj03a3qXfZLgBU=' ,1 ,GETDATE(), GETDATE()); + + INSERT INTO tRole(cAuid, cRoleID, cRoleName) + VALUES ('SuperUserSystemX','20','SuperUser'); +END +GO + +GO +PRINT N'업데이트가 완료되었습니다.'; + + +GO diff --git a/DBPatch/sqlScripts/SystemX.DB.UniqueKeyDB_Create.sql b/DBPatch/sqlScripts/SystemX.DB.UniqueKeyDB_Create.sql new file mode 100644 index 0000000..433374e --- /dev/null +++ b/DBPatch/sqlScripts/SystemX.DB.UniqueKeyDB_Create.sql @@ -0,0 +1,290 @@ +/* +SystemX.DB.UniqueKeyDB의 배포 스크립트 + +이 코드는 도구를 사용하여 생성되었습니다. +파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면 +변경 내용이 손실됩니다. +*/ + +GO +SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON; + +SET NUMERIC_ROUNDABORT OFF; + + +GO +/* +:setvar DatabaseName "SystemX.DB.UniqueKeyDB" +:setvar DefaultFilePrefix "SystemX.DB.UniqueKeyDB" +:setvar DefaultDataPath "" +:setvar DefaultLogPath "" +*/ + +GO +:on error exit +GO +/* +SQLCMD 모드가 지원되지 않으면 SQLCMD 모드를 검색하고 스크립트를 실행하지 않습니다. +SQLCMD 모드를 설정한 후에 이 스크립트를 다시 사용하려면 다음을 실행합니다. +SET NOEXEC OFF; +*/ +:setvar __IsSqlCmdEnabled "True" +GO +IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True' + BEGIN + PRINT N'이 스크립트를 실행하려면 SQLCMD 모드를 사용하도록 설정해야 합니다.'; + SET NOEXEC ON; + END + + +GO +USE [master]; + + +GO + +IF (DB_ID(N'$(DatabaseName)') IS NOT NULL) +BEGIN + ALTER DATABASE [$(DatabaseName)] + SET SINGLE_USER WITH ROLLBACK IMMEDIATE; + DROP DATABASE [$(DatabaseName)]; +END + +GO +PRINT N'$(DatabaseName) 데이터베이스를 만드는 중...' +GO +CREATE DATABASE [$(DatabaseName)] COLLATE Korean_Wansung_CI_AS +GO +USE [$(DatabaseName)]; + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET ANSI_NULLS ON, + ANSI_PADDING ON, + ANSI_WARNINGS ON, + ARITHABORT ON, + CONCAT_NULL_YIELDS_NULL ON, + NUMERIC_ROUNDABORT OFF, + QUOTED_IDENTIFIER ON, + ANSI_NULL_DEFAULT ON, + CURSOR_DEFAULT LOCAL, + RECOVERY FULL, + CURSOR_CLOSE_ON_COMMIT OFF, + AUTO_CREATE_STATISTICS ON, + AUTO_SHRINK OFF, + AUTO_UPDATE_STATISTICS ON, + RECURSIVE_TRIGGERS OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET ALLOW_SNAPSHOT_ISOLATION OFF; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET READ_COMMITTED_SNAPSHOT OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET AUTO_UPDATE_STATISTICS_ASYNC OFF, + PAGE_VERIFY NONE, + DATE_CORRELATION_OPTIMIZATION OFF, + DISABLE_BROKER, + PARAMETERIZATION SIMPLE, + SUPPLEMENTAL_LOGGING OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF IS_SRVROLEMEMBER(N'sysadmin') = 1 + BEGIN + IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)] + SET TRUSTWORTHY OFF, + DB_CHAINING OFF + WITH ROLLBACK IMMEDIATE'; + END + END +ELSE + BEGIN + PRINT N'데이터베이스 설정을 수정할 수 없습니다. 이러한 설정을 적용하려면 SysAdmin이어야 합니다.'; + END + + +GO +IF IS_SRVROLEMEMBER(N'sysadmin') = 1 + BEGIN + IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)] + SET HONOR_BROKER_PRIORITY OFF + WITH ROLLBACK IMMEDIATE'; + END + END +ELSE + BEGIN + PRINT N'데이터베이스 설정을 수정할 수 없습니다. 이러한 설정을 적용하려면 SysAdmin이어야 합니다.'; + END + + +GO +ALTER DATABASE [$(DatabaseName)] + SET TARGET_RECOVERY_TIME = 0 SECONDS + WITH ROLLBACK IMMEDIATE; + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET FILESTREAM(NON_TRANSACTED_ACCESS = OFF), + CONTAINMENT = NONE + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET AUTO_CREATE_STATISTICS ON(INCREMENTAL = OFF), + MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = OFF, + DELAYED_DURABILITY = DISABLED + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET QUERY_STORE (QUERY_CAPTURE_MODE = ALL, DATA_FLUSH_INTERVAL_SECONDS = 900, INTERVAL_LENGTH_MINUTES = 60, MAX_PLANS_PER_QUERY = 200, CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 367), MAX_STORAGE_SIZE_MB = 100) + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET QUERY_STORE = OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET MAXDOP = PRIMARY; + ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION = OFF; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET LEGACY_CARDINALITY_ESTIMATION = PRIMARY; + ALTER DATABASE SCOPED CONFIGURATION SET PARAMETER_SNIFFING = ON; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET PARAMETER_SNIFFING = PRIMARY; + ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = OFF; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET QUERY_OPTIMIZER_HOTFIXES = PRIMARY; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET TEMPORAL_HISTORY_RETENTION ON + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF fulltextserviceproperty(N'IsFulltextInstalled') = 1 + EXECUTE sp_fulltext_database 'enable'; + + +GO +PRINT N'테이블 [dbo].[tUniqueKeyStorage]을(를) 만드는 중...'; + + +GO +CREATE TABLE [dbo].[tUniqueKeyStorage] ( + [cIdentity] NVARCHAR (200) NOT NULL, + [cDateTime] DATETIME2 (7) NOT NULL, + [cData1] NVARCHAR (4000) NULL, + [cData2] NVARCHAR (4000) NULL, + [cData3] NVARCHAR (4000) NULL, + [cData4] NVARCHAR (4000) NULL, + [cData5] NVARCHAR (4000) NULL, + PRIMARY KEY CLUSTERED ([cIdentity] ASC) +); + + +GO +DECLARE @VarDecimalSupported AS BIT; + +SELECT @VarDecimalSupported = 0; + +IF ((ServerProperty(N'EngineEdition') = 3) + AND (((@@microsoftversion / power(2, 24) = 9) + AND (@@microsoftversion & 0xffff >= 3024)) + OR ((@@microsoftversion / power(2, 24) = 10) + AND (@@microsoftversion & 0xffff >= 1600)))) + SELECT @VarDecimalSupported = 1; + +IF (@VarDecimalSupported > 0) + BEGIN + EXECUTE sp_db_vardecimal_storage_format N'$(DatabaseName)', 'ON'; + END + + +GO +ALTER DATABASE [$(DatabaseName)] + SET MULTI_USER + WITH ROLLBACK IMMEDIATE; + + +GO +PRINT N'업데이트가 완료되었습니다.'; + + +GO diff --git a/DBPatch/sqlScripts/SystemX.DB.UniqueKeyDB_Update.sql b/DBPatch/sqlScripts/SystemX.DB.UniqueKeyDB_Update.sql new file mode 100644 index 0000000..d09a6e2 --- /dev/null +++ b/DBPatch/sqlScripts/SystemX.DB.UniqueKeyDB_Update.sql @@ -0,0 +1,57 @@ +/* +UniqueKeyDB의 배포 스크립트 + +이 코드는 도구를 사용하여 생성되었습니다. +이 파일을 변경하면 잘못된 동작이 발생할 수 있으며 코드가 다시 생성되면 +이러한 변경 내용이 손실됩니다. +*/ + +GO +SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON; + +SET NUMERIC_ROUNDABORT OFF; + + +GO +/* +:setvar DatabaseName "UniqueKeyDB" +:setvar DefaultFilePrefix "UniqueKeyDB" +:setvar DefaultDataPath "D:\20_MSSQL\DATA\" +:setvar DefaultLogPath "D:\20_MSSQL\DATA\" +*/ + +GO +:on error exit +GO +/* +SQLCMD 모드를 검색하고 SQLCMD 모드가 지원되지 않는 경우 스크립트 실행을 사용하지 않도록 설정합니다. +SQLCMD 모드를 사용하도록 설정한 후 스크립트를 다시 사용하도록 설정하려면 다음을 실행합니다. +NOEXEC를 끕니다. +*/ +:setvar __IsSqlCmdEnabled "True" +GO +IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True' + BEGIN + PRINT N'이 스크립트를 실행하려면 SQLCMD 모드를 사용하도록 설정해야 합니다.'; + SET NOEXEC ON; + END + + +GO +USE [$(DatabaseName)]; + + +GO +PRINT N'테이블 [dbo].[tUniqueKeyStorage]을(를) 변경하는 중...'; + + +GO +ALTER TABLE [dbo].[tUniqueKeyStorage] + ADD [cData6] NCHAR (10) NULL; + + +GO +PRINT N'업데이트가 완료되었습니다.'; + + +GO diff --git a/DBPatch/sqlScripts/_CreateDB.bat b/DBPatch/sqlScripts/_CreateDB.bat new file mode 100644 index 0000000..5b66947 --- /dev/null +++ b/DBPatch/sqlScripts/_CreateDB.bat @@ -0,0 +1,19 @@ +@echo off + +SET Schema=%1 +SET ServerIP=%2 +SET ServerPort=%3 +SET UserID=%4 +SET Passwd=%5 +SET DBName=%6 + +SET SqlCmdOption=-C -U %UserID% -P %Passwd% -S %ServerIP%,%ServerPort% -f 65001 -o .\logs\%DBName%.log +SET DatabaseName=%DBName% +sqlcmd %SqlCmdOption% -i .\%Schema%_Create.sql +if errorlevel 1 goto errexit +goto end +:errexit +echo DB Patch Fail +goto end +:end +@echo on \ No newline at end of file diff --git a/DBPatch/sqlScripts/_UpdateDB.bat b/DBPatch/sqlScripts/_UpdateDB.bat new file mode 100644 index 0000000..c070cdc --- /dev/null +++ b/DBPatch/sqlScripts/_UpdateDB.bat @@ -0,0 +1,20 @@ +@echo off + +SET Schema=%1 +SET ServerIP=%2 +SET ServerPort=%3 +SET UserID=%4 +SET Passwd=%5 +SET DBName=%6 + +SET SqlCmdOption=-U %UserID% -P %Passwd% -S %ServerIP%,%ServerPort% -d %DBName% -o .\logs\%DBName%.log +SET DatabaseName=%DBName% +sqlcmd %SqlCmdOption% -i .\%Schema%_Update.sql + +if errorlevel 1 goto errexit +goto end +:errexit +echo DB Patch Fail +goto end +:end +@echo on \ No newline at end of file diff --git a/DBPatch/sqlScripts/_UpdateScriptGenerate.bat b/DBPatch/sqlScripts/_UpdateScriptGenerate.bat new file mode 100644 index 0000000..c899e38 --- /dev/null +++ b/DBPatch/sqlScripts/_UpdateScriptGenerate.bat @@ -0,0 +1,11 @@ +@echo off + +SET Schema=%1 +SET ServerIP=%2 +SET ServerPort=%3 +SET UserID=%4 +SET Passwd=%5 +SET DBName=%6 + +::create update sql file +sqlpackage /Action:Script /SourceFile:./dacpac/%Schema%.dacpac /TargetConnectionString:"server=%ServerIP%,%ServerPort%; user id=%UserID%; password=%Passwd%; database=%DBName%; TrustServerCertificate=true" /OutputPath:"./%Schema%_Update.sql" /p:CommentOutSetVarDeclarations=True \ No newline at end of file diff --git a/DBPatch/sqlScripts/dacpac/SystemX.DB.AccountDB.dacpac b/DBPatch/sqlScripts/dacpac/SystemX.DB.AccountDB.dacpac new file mode 100644 index 0000000..8681144 Binary files /dev/null and b/DBPatch/sqlScripts/dacpac/SystemX.DB.AccountDB.dacpac differ diff --git a/DBPatch/sqlScripts/dacpac/SystemX.DB.UniqueKeyDB.dacpac b/DBPatch/sqlScripts/dacpac/SystemX.DB.UniqueKeyDB.dacpac new file mode 100644 index 0000000..d134090 Binary files /dev/null and b/DBPatch/sqlScripts/dacpac/SystemX.DB.UniqueKeyDB.dacpac differ diff --git a/Projects/DLL/SystemX.Core.DB.dll b/Projects/DLL/SystemX.Core.DB.dll index 91681c1..5cb286e 100644 Binary files a/Projects/DLL/SystemX.Core.DB.dll and b/Projects/DLL/SystemX.Core.DB.dll differ diff --git a/Projects/DLL/SystemX.Core.dll b/Projects/DLL/SystemX.Core.dll index 25f7c97..10884ee 100644 Binary files a/Projects/DLL/SystemX.Core.dll and b/Projects/DLL/SystemX.Core.dll differ diff --git a/Projects/SystemX.Core/SystemX.DB.AccountDB/SystemX.DB.AccountDB.sqlproj b/Projects/SystemX.Core/DB/SystemX.DB.AccountDB/SystemX.DB.AccountDB.sqlproj similarity index 97% rename from Projects/SystemX.Core/SystemX.DB.AccountDB/SystemX.DB.AccountDB.sqlproj rename to Projects/SystemX.Core/DB/SystemX.DB.AccountDB/SystemX.DB.AccountDB.sqlproj index d94a9b7..de6e417 100644 --- a/Projects/SystemX.Core/SystemX.DB.AccountDB/SystemX.DB.AccountDB.sqlproj +++ b/Projects/SystemX.Core/DB/SystemX.DB.AccountDB/SystemX.DB.AccountDB.sqlproj @@ -73,8 +73,8 @@ - xcopy /y $(ProjectDir)$(OutputPath)$(TargetName)_Create.sql $(SolutionDir)DBPatch\sqlScripts\ + xcopy /y $(ProjectDir)$(OutputPath)$(TargetName)_Create.sql $(SolutionDir)..\..\DBPatch\sqlScripts\ -xcopy /y $(ProjectDir)$(OutputPath)$(TargetName).dacpac $(SolutionDir)DBPatch\sqlScripts\dacpac\ +xcopy /y $(ProjectDir)$(OutputPath)$(TargetName).dacpac $(SolutionDir)..\..\DBPatch\sqlScripts\dacpac\ \ No newline at end of file diff --git a/Projects/SystemX.Core/SystemX.DB.AccountDB/dbo/Scripts/scriptAfterBuild.sql b/Projects/SystemX.Core/DB/SystemX.DB.AccountDB/dbo/Scripts/scriptAfterBuild.sql similarity index 100% rename from Projects/SystemX.Core/SystemX.DB.AccountDB/dbo/Scripts/scriptAfterBuild.sql rename to Projects/SystemX.Core/DB/SystemX.DB.AccountDB/dbo/Scripts/scriptAfterBuild.sql diff --git a/Projects/SystemX.Core/SystemX.DB.AccountDB/dbo/Tables/tRefreshToken.sql b/Projects/SystemX.Core/DB/SystemX.DB.AccountDB/dbo/Tables/tRefreshToken.sql similarity index 100% rename from Projects/SystemX.Core/SystemX.DB.AccountDB/dbo/Tables/tRefreshToken.sql rename to Projects/SystemX.Core/DB/SystemX.DB.AccountDB/dbo/Tables/tRefreshToken.sql diff --git a/Projects/SystemX.Core/SystemX.DB.AccountDB/dbo/Tables/tRole.sql b/Projects/SystemX.Core/DB/SystemX.DB.AccountDB/dbo/Tables/tRole.sql similarity index 100% rename from Projects/SystemX.Core/SystemX.DB.AccountDB/dbo/Tables/tRole.sql rename to Projects/SystemX.Core/DB/SystemX.DB.AccountDB/dbo/Tables/tRole.sql diff --git a/Projects/SystemX.Core/SystemX.DB.AccountDB/dbo/Tables/tUser.sql b/Projects/SystemX.Core/DB/SystemX.DB.AccountDB/dbo/Tables/tUser.sql similarity index 100% rename from Projects/SystemX.Core/SystemX.DB.AccountDB/dbo/Tables/tUser.sql rename to Projects/SystemX.Core/DB/SystemX.DB.AccountDB/dbo/Tables/tUser.sql diff --git a/Projects/SystemX.Core/DB/SystemX.DB.UniqueKeyDB/SystemX.DB.UniqueKeyDB.sqlproj b/Projects/SystemX.Core/DB/SystemX.DB.UniqueKeyDB/SystemX.DB.UniqueKeyDB.sqlproj new file mode 100644 index 0000000..8e11099 --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.UniqueKeyDB/SystemX.DB.UniqueKeyDB.sqlproj @@ -0,0 +1,75 @@ + + + + Debug + AnyCPU + SystemX.DB.UniqueKeyDB + 2.0 + 4.1 + {c67f3f97-1d52-4c75-a04f-16ed41822ccd} + Microsoft.Data.Tools.Schema.Sql.Sql160DatabaseSchemaProvider + Database + + + SystemX.DB.UniqueKeyDB + SystemX.DB.UniqueKeyDB + 1042,CI + BySchemaAndSchemaType + True + v4.7.2 + CS + Properties + False + True + True + True + Korean_Wansung_CI_AS + + + bin\Release\ + $(MSBuildProjectName).sql + False + pdbonly + true + false + true + prompt + 4 + + + bin\Debug\ + $(MSBuildProjectName).sql + true + true + full + false + true + true + prompt + 4 + + + 11.0 + + True + 11.0 + + + + + + + + + + + + + + + + xcopy /y $(ProjectDir)$(OutputPath)$(TargetName)_Create.sql $(SolutionDir)..\..\DBPatch\sqlScripts\ + +xcopy /y $(ProjectDir)$(OutputPath)$(TargetName).dacpac $(SolutionDir)..\..\DBPatch\sqlScripts\dacpac\ + + \ No newline at end of file diff --git a/Projects/SystemX.Core/DB/SystemX.DB.UniqueKeyDB/dbo/Tables/tUniqueKeyStorage.sql b/Projects/SystemX.Core/DB/SystemX.DB.UniqueKeyDB/dbo/Tables/tUniqueKeyStorage.sql new file mode 100644 index 0000000..6dd0daa --- /dev/null +++ b/Projects/SystemX.Core/DB/SystemX.DB.UniqueKeyDB/dbo/Tables/tUniqueKeyStorage.sql @@ -0,0 +1,10 @@ +CREATE TABLE [dbo].[tUniqueKeyStorage] +( + [cIdentity] NVARCHAR(200) NOT NULL PRIMARY KEY, + [cDateTime] DATETIME2 NOT NULL, + [cData1] NVARCHAR(4000), + [cData2] NVARCHAR(4000), + [cData3] NVARCHAR(4000), + [cData4] NVARCHAR(4000), + [cData5] NVARCHAR(4000), +) diff --git a/Projects/SystemX.Core/DBPatch/sqlScripts/SystemX.DB.UniqueKeyDB_Create.sql b/Projects/SystemX.Core/DBPatch/sqlScripts/SystemX.DB.UniqueKeyDB_Create.sql new file mode 100644 index 0000000..433374e --- /dev/null +++ b/Projects/SystemX.Core/DBPatch/sqlScripts/SystemX.DB.UniqueKeyDB_Create.sql @@ -0,0 +1,290 @@ +/* +SystemX.DB.UniqueKeyDB의 배포 스크립트 + +이 코드는 도구를 사용하여 생성되었습니다. +파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면 +변경 내용이 손실됩니다. +*/ + +GO +SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON; + +SET NUMERIC_ROUNDABORT OFF; + + +GO +/* +:setvar DatabaseName "SystemX.DB.UniqueKeyDB" +:setvar DefaultFilePrefix "SystemX.DB.UniqueKeyDB" +:setvar DefaultDataPath "" +:setvar DefaultLogPath "" +*/ + +GO +:on error exit +GO +/* +SQLCMD 모드가 지원되지 않으면 SQLCMD 모드를 검색하고 스크립트를 실행하지 않습니다. +SQLCMD 모드를 설정한 후에 이 스크립트를 다시 사용하려면 다음을 실행합니다. +SET NOEXEC OFF; +*/ +:setvar __IsSqlCmdEnabled "True" +GO +IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True' + BEGIN + PRINT N'이 스크립트를 실행하려면 SQLCMD 모드를 사용하도록 설정해야 합니다.'; + SET NOEXEC ON; + END + + +GO +USE [master]; + + +GO + +IF (DB_ID(N'$(DatabaseName)') IS NOT NULL) +BEGIN + ALTER DATABASE [$(DatabaseName)] + SET SINGLE_USER WITH ROLLBACK IMMEDIATE; + DROP DATABASE [$(DatabaseName)]; +END + +GO +PRINT N'$(DatabaseName) 데이터베이스를 만드는 중...' +GO +CREATE DATABASE [$(DatabaseName)] COLLATE Korean_Wansung_CI_AS +GO +USE [$(DatabaseName)]; + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET ANSI_NULLS ON, + ANSI_PADDING ON, + ANSI_WARNINGS ON, + ARITHABORT ON, + CONCAT_NULL_YIELDS_NULL ON, + NUMERIC_ROUNDABORT OFF, + QUOTED_IDENTIFIER ON, + ANSI_NULL_DEFAULT ON, + CURSOR_DEFAULT LOCAL, + RECOVERY FULL, + CURSOR_CLOSE_ON_COMMIT OFF, + AUTO_CREATE_STATISTICS ON, + AUTO_SHRINK OFF, + AUTO_UPDATE_STATISTICS ON, + RECURSIVE_TRIGGERS OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET ALLOW_SNAPSHOT_ISOLATION OFF; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET READ_COMMITTED_SNAPSHOT OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET AUTO_UPDATE_STATISTICS_ASYNC OFF, + PAGE_VERIFY NONE, + DATE_CORRELATION_OPTIMIZATION OFF, + DISABLE_BROKER, + PARAMETERIZATION SIMPLE, + SUPPLEMENTAL_LOGGING OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF IS_SRVROLEMEMBER(N'sysadmin') = 1 + BEGIN + IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)] + SET TRUSTWORTHY OFF, + DB_CHAINING OFF + WITH ROLLBACK IMMEDIATE'; + END + END +ELSE + BEGIN + PRINT N'데이터베이스 설정을 수정할 수 없습니다. 이러한 설정을 적용하려면 SysAdmin이어야 합니다.'; + END + + +GO +IF IS_SRVROLEMEMBER(N'sysadmin') = 1 + BEGIN + IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)] + SET HONOR_BROKER_PRIORITY OFF + WITH ROLLBACK IMMEDIATE'; + END + END +ELSE + BEGIN + PRINT N'데이터베이스 설정을 수정할 수 없습니다. 이러한 설정을 적용하려면 SysAdmin이어야 합니다.'; + END + + +GO +ALTER DATABASE [$(DatabaseName)] + SET TARGET_RECOVERY_TIME = 0 SECONDS + WITH ROLLBACK IMMEDIATE; + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET FILESTREAM(NON_TRANSACTED_ACCESS = OFF), + CONTAINMENT = NONE + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET AUTO_CREATE_STATISTICS ON(INCREMENTAL = OFF), + MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = OFF, + DELAYED_DURABILITY = DISABLED + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET QUERY_STORE (QUERY_CAPTURE_MODE = ALL, DATA_FLUSH_INTERVAL_SECONDS = 900, INTERVAL_LENGTH_MINUTES = 60, MAX_PLANS_PER_QUERY = 200, CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 367), MAX_STORAGE_SIZE_MB = 100) + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET QUERY_STORE = OFF + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET MAXDOP = PRIMARY; + ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION = OFF; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET LEGACY_CARDINALITY_ESTIMATION = PRIMARY; + ALTER DATABASE SCOPED CONFIGURATION SET PARAMETER_SNIFFING = ON; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET PARAMETER_SNIFFING = PRIMARY; + ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = OFF; + ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET QUERY_OPTIMIZER_HOTFIXES = PRIMARY; + END + + +GO +IF EXISTS (SELECT 1 + FROM [master].[dbo].[sysdatabases] + WHERE [name] = N'$(DatabaseName)') + BEGIN + ALTER DATABASE [$(DatabaseName)] + SET TEMPORAL_HISTORY_RETENTION ON + WITH ROLLBACK IMMEDIATE; + END + + +GO +IF fulltextserviceproperty(N'IsFulltextInstalled') = 1 + EXECUTE sp_fulltext_database 'enable'; + + +GO +PRINT N'테이블 [dbo].[tUniqueKeyStorage]을(를) 만드는 중...'; + + +GO +CREATE TABLE [dbo].[tUniqueKeyStorage] ( + [cIdentity] NVARCHAR (200) NOT NULL, + [cDateTime] DATETIME2 (7) NOT NULL, + [cData1] NVARCHAR (4000) NULL, + [cData2] NVARCHAR (4000) NULL, + [cData3] NVARCHAR (4000) NULL, + [cData4] NVARCHAR (4000) NULL, + [cData5] NVARCHAR (4000) NULL, + PRIMARY KEY CLUSTERED ([cIdentity] ASC) +); + + +GO +DECLARE @VarDecimalSupported AS BIT; + +SELECT @VarDecimalSupported = 0; + +IF ((ServerProperty(N'EngineEdition') = 3) + AND (((@@microsoftversion / power(2, 24) = 9) + AND (@@microsoftversion & 0xffff >= 3024)) + OR ((@@microsoftversion / power(2, 24) = 10) + AND (@@microsoftversion & 0xffff >= 1600)))) + SELECT @VarDecimalSupported = 1; + +IF (@VarDecimalSupported > 0) + BEGIN + EXECUTE sp_db_vardecimal_storage_format N'$(DatabaseName)', 'ON'; + END + + +GO +ALTER DATABASE [$(DatabaseName)] + SET MULTI_USER + WITH ROLLBACK IMMEDIATE; + + +GO +PRINT N'업데이트가 완료되었습니다.'; + + +GO diff --git a/Projects/SystemX.Core/DBPatch/sqlScripts/_UpdateAccountDB.bat b/Projects/SystemX.Core/DBPatch/sqlScripts/_UpdateScript.bat similarity index 100% rename from Projects/SystemX.Core/DBPatch/sqlScripts/_UpdateAccountDB.bat rename to Projects/SystemX.Core/DBPatch/sqlScripts/_UpdateScript.bat diff --git a/Projects/SystemX.Core/DBPatch/sqlScripts/dacpac/SystemX.DB.AccountDB.dacpac b/Projects/SystemX.Core/DBPatch/sqlScripts/dacpac/SystemX.DB.AccountDB.dacpac index 109f752..aadc5aa 100644 Binary files a/Projects/SystemX.Core/DBPatch/sqlScripts/dacpac/SystemX.DB.AccountDB.dacpac and b/Projects/SystemX.Core/DBPatch/sqlScripts/dacpac/SystemX.DB.AccountDB.dacpac differ diff --git a/Projects/SystemX.Core/DBPatch/sqlScripts/dacpac/SystemX.DB.UniqueKeyDB.dacpac b/Projects/SystemX.Core/DBPatch/sqlScripts/dacpac/SystemX.DB.UniqueKeyDB.dacpac new file mode 100644 index 0000000..46822c4 Binary files /dev/null and b/Projects/SystemX.Core/DBPatch/sqlScripts/dacpac/SystemX.DB.UniqueKeyDB.dacpac differ diff --git a/Projects/SystemX.Core/SystemX.Core.sln b/Projects/SystemX.Core/SystemX.Core.sln index 96344c5..de82dab 100644 --- a/Projects/SystemX.Core/SystemX.Core.sln +++ b/Projects/SystemX.Core/SystemX.Core.sln @@ -5,10 +5,14 @@ VisualStudioVersion = 17.9.34728.123 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SystemX.Core", "SystemX.Core\SystemX.Core.csproj", "{F057A1E8-F5FF-4241-BEEA-1A57E971F379}" EndProject -Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "SystemX.DB.AccountDB", "SystemX.DB.AccountDB\SystemX.DB.AccountDB.sqlproj", "{B44C85FA-BD31-419F-8481-477E166A5753}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SystemX.Core.DB", "SystemX.Core.DB\SystemX.Core.DB.csproj", "{78647721-F9BD-4876-89D5-95A2A0F3ADA7}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DB", "DB", "{C8D5274F-AC00-46C7-1F8D-E88E81087A52}" +EndProject +Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "SystemX.DB.AccountDB", "DB\SystemX.DB.AccountDB\SystemX.DB.AccountDB.sqlproj", "{B44C85FA-BD31-419F-8481-477E166A5753}" +EndProject +Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "SystemX.DB.UniqueKeyDB", "DB\SystemX.DB.UniqueKeyDB\SystemX.DB.UniqueKeyDB.sqlproj", "{C67F3F97-1D52-4C75-A04F-16ED41822CCD}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -19,20 +23,30 @@ Global {F057A1E8-F5FF-4241-BEEA-1A57E971F379}.Debug|Any CPU.Build.0 = Debug|Any CPU {F057A1E8-F5FF-4241-BEEA-1A57E971F379}.Release|Any CPU.ActiveCfg = Release|Any CPU {F057A1E8-F5FF-4241-BEEA-1A57E971F379}.Release|Any CPU.Build.0 = Release|Any CPU + {78647721-F9BD-4876-89D5-95A2A0F3ADA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {78647721-F9BD-4876-89D5-95A2A0F3ADA7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {78647721-F9BD-4876-89D5-95A2A0F3ADA7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {78647721-F9BD-4876-89D5-95A2A0F3ADA7}.Release|Any CPU.Build.0 = Release|Any CPU {B44C85FA-BD31-419F-8481-477E166A5753}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B44C85FA-BD31-419F-8481-477E166A5753}.Debug|Any CPU.Build.0 = Debug|Any CPU {B44C85FA-BD31-419F-8481-477E166A5753}.Debug|Any CPU.Deploy.0 = Debug|Any CPU {B44C85FA-BD31-419F-8481-477E166A5753}.Release|Any CPU.ActiveCfg = Release|Any CPU {B44C85FA-BD31-419F-8481-477E166A5753}.Release|Any CPU.Build.0 = Release|Any CPU {B44C85FA-BD31-419F-8481-477E166A5753}.Release|Any CPU.Deploy.0 = Release|Any CPU - {78647721-F9BD-4876-89D5-95A2A0F3ADA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {78647721-F9BD-4876-89D5-95A2A0F3ADA7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {78647721-F9BD-4876-89D5-95A2A0F3ADA7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {78647721-F9BD-4876-89D5-95A2A0F3ADA7}.Release|Any CPU.Build.0 = Release|Any CPU + {C67F3F97-1D52-4C75-A04F-16ED41822CCD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C67F3F97-1D52-4C75-A04F-16ED41822CCD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C67F3F97-1D52-4C75-A04F-16ED41822CCD}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {C67F3F97-1D52-4C75-A04F-16ED41822CCD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C67F3F97-1D52-4C75-A04F-16ED41822CCD}.Release|Any CPU.Build.0 = Release|Any CPU + {C67F3F97-1D52-4C75-A04F-16ED41822CCD}.Release|Any CPU.Deploy.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {B44C85FA-BD31-419F-8481-477E166A5753} = {C8D5274F-AC00-46C7-1F8D-E88E81087A52} + {C67F3F97-1D52-4C75-A04F-16ED41822CCD} = {C8D5274F-AC00-46C7-1F8D-E88E81087A52} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {A26A3BD0-2161-41FA-949A-DEA966E8F798} EndGlobalSection diff --git a/Tools/sqlpackage_install.bat b/Tools/sqlpackage_install.bat new file mode 100644 index 0000000..a4a03e6 --- /dev/null +++ b/Tools/sqlpackage_install.bat @@ -0,0 +1,3 @@ +dotnet tool install -g microsoft.sqlpackage + +pause \ No newline at end of file