/* VPKI.DataDB의 배포 스크립트 이 코드는 도구를 사용하여 생성되었습니다. 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면 변경 내용이 손실됩니다. */ GO SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON; SET NUMERIC_ROUNDABORT OFF; GO /* :setvar DatabaseName "VPKI.DataDB" :setvar DefaultFilePrefix "VPKI.DataDB" :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 SIMPLE, 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].[tOcsp]을(를) 만드는 중...'; GO CREATE TABLE [dbo].[tOcsp] ( [cCuid] BIGINT NOT NULL, [cStatus] NVARCHAR (20) NOT NULL, [cVerify] NVARCHAR (20) NOT NULL, [cOcsp] NVARCHAR (MAX) NULL, [cDateTime] DATETIME2 (7) NOT NULL, PRIMARY KEY CLUSTERED ([cCuid] ASC) ); GO PRINT N'테이블 [dbo].[tVerifyResult]을(를) 만드는 중...'; GO CREATE TABLE [dbo].[tVerifyResult] ( [cCuid] BIGINT NOT NULL, [cResult] NCHAR (20) NOT NULL, PRIMARY KEY CLUSTERED ([cCuid] ASC) ); GO PRINT N'테이블 [dbo].[tCertificate]을(를) 만드는 중...'; GO CREATE TABLE [dbo].[tCertificate] ( [cCuid] BIGINT NOT NULL, [cCsrsignature] NVARCHAR (1024) NOT NULL, [cTierCode] NVARCHAR (20) NOT NULL, [cUnitCode] NVARCHAR (20) NOT NULL, [cVehicleCode] NVARCHAR (20) NOT NULL, [cLocalCode] NVARCHAR (20) NOT NULL, [cBrandCode] NVARCHAR (20) NOT NULL, [cCsr] NVARCHAR (2048) NOT NULL, [cCert] NVARCHAR (2048) NOT NULL, [cMessage] NVARCHAR (250) NOT NULL, [cIssueCount] INT NOT NULL, [cDateTime] DATETIME2 (7) NOT NULL, PRIMARY KEY CLUSTERED ([cCuid] ASC) ); GO PRINT N'테이블 [dbo].[tTbscsr]을(를) 만드는 중...'; GO CREATE TABLE [dbo].[tTbscsr] ( [cCuid] BIGINT IDENTITY (1, 1) NOT NULL, [cIftid] NVARCHAR (100) NOT NULL, [cMacaddr] NVARCHAR (100) NOT NULL, [cWmi] NVARCHAR (20) NOT NULL, [cIdType] NVARCHAR (10) NOT NULL, [cSupplierId] NVARCHAR (10) NOT NULL, [cDc] NVARCHAR (20) NOT NULL, [cTierCode] NVARCHAR (20) NOT NULL, [cUnitCode] NVARCHAR (20) NOT NULL, [cPublickey] NVARCHAR (1024) NOT NULL, [cCertType] NVARCHAR (20) NOT NULL, [cOriginTbscsr] NVARCHAR (4000) NOT NULL, [cHashedTbscsr] NVARCHAR (1024) NOT NULL, [cPcid] NVARCHAR (50) NOT NULL, [cDn] NVARCHAR (250) NOT NULL, [cHasCertificate] TINYINT NOT NULL, [cDateTime] DATETIME2 (7) NOT NULL, PRIMARY KEY CLUSTERED ([cCuid] ASC) ); GO -- 배포된 트랜잭션 로그를 사용하여 대상 서버를 업데이트하는 리팩터링 단계 IF OBJECT_ID(N'dbo.__RefactorLog') IS NULL BEGIN CREATE TABLE [dbo].[__RefactorLog] (OperationKey UNIQUEIDENTIFIER NOT NULL PRIMARY KEY) EXEC sp_addextendedproperty N'microsoft_database_tools_support', N'refactoring log', N'schema', N'dbo', N'table', N'__RefactorLog' END GO IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = 'aef5aa4e-a13d-46f1-b18e-e058c617b408') INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('aef5aa4e-a13d-46f1-b18e-e058c617b408') IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '648c532d-8e23-44f8-b657-11f87afbf718') INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('648c532d-8e23-44f8-b657-11f87afbf718') IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '9ee0544c-0be5-4023-8ef4-033987c586b8') INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('9ee0544c-0be5-4023-8ef4-033987c586b8') IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '88f4fb4b-2eb9-4f7f-a439-a365764395e2') INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('88f4fb4b-2eb9-4f7f-a439-a365764395e2') IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '5a0e9793-c50f-4b5b-8c05-283639a11124') INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('5a0e9793-c50f-4b5b-8c05-283639a11124') IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '3ba5afba-2388-4351-9e65-025f6cbe3c89') INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('3ba5afba-2388-4351-9e65-025f6cbe3c89') IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '98b90247-2504-4303-be66-2742a0bf0681') INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('98b90247-2504-4303-be66-2742a0bf0681') IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '8fa6e7d1-aa81-4b5d-afbe-2bbf9823e5e3') INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('8fa6e7d1-aa81-4b5d-afbe-2bbf9823e5e3') IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = '192ddc5c-7dab-4713-b486-4f0b3afb9817') INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('192ddc5c-7dab-4713-b486-4f0b3afb9817') IF NOT EXISTS (SELECT OperationKey FROM [dbo].[__RefactorLog] WHERE OperationKey = 'c7631cfd-d064-4fce-b44f-9df70e6cc41e') INSERT INTO [dbo].[__RefactorLog] (OperationKey) values ('c7631cfd-d064-4fce-b44f-9df70e6cc41e') 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