diff --git a/ef-migration/infrastructure/docker-compose-infra.yml b/ef-migration/infrastructure/docker-compose-infra.yml index 08d4307..dc86278 100644 --- a/ef-migration/infrastructure/docker-compose-infra.yml +++ b/ef-migration/infrastructure/docker-compose-infra.yml @@ -2,10 +2,10 @@ version: '3.8' services: sqlserver: - build: - context: . # Changed from ./sql-server to . to include the whole directory - dockerfile: sql-server/Dockerfile # Updated path to Dockerfile - container_name: sqlserver_lightweight + build: + context: . + dockerfile: sql-server/Dockerfile + container_name: sql1 ports: - "1433:1433" environment: @@ -17,12 +17,18 @@ services: deploy: resources: limits: - memory: 1G - cpus: '1.0' + memory: 2G # Minimum required for SQL Server + cpus: '1.0' # Limit to 1 CPU core reservations: - memory: 512M - cpus: '0.5' + memory: 2G # Must reserve 2GB minimum for SQL Server to start + cpus: '0.25' # Reserve quarter of a CPU core restart: unless-stopped + healthcheck: + test: /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P "$$SA_PASSWORD" -Q "SELECT 1" || exit 1 + interval: 10s + timeout: 3s + retries: 10 + start_period: 10s volumes: sqlserver_data: diff --git a/ef-migration/infrastructure/sql-server/Dockerfile b/ef-migration/infrastructure/sql-server/Dockerfile index 31d84a7..6118e15 100644 --- a/ef-migration/infrastructure/sql-server/Dockerfile +++ b/ef-migration/infrastructure/sql-server/Dockerfile @@ -1,30 +1,38 @@ -# Use the lightweight SQL Server 2022 image +# Use SQL Server 2022 Express for smaller footprint FROM mcr.microsoft.com/mssql/server:2022-latest -# Set environment variables -ENV ACCEPT_EULA=Y -ENV MSSQL_PID=Express -ENV SA_PASSWORD=YourStrong@Passw0rd +# Set required environment variables +ENV ACCEPT_EULA=Y \ + MSSQL_PID=Express \ + SA_PASSWORD=YourStrong@Passw0rd \ + PATH="/opt/mssql-tools/bin:${PATH}" -# Create a directory for database scripts +# Install sqlcmd utility +USER root +RUN apt-get update && \ + apt-get install -y wget software-properties-common gnupg2 && \ + wget -qO- https://packages.microsoft.com/keys/microsoft.asc | apt-key add - && \ + add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-2022.list)" && \ + apt-get update && \ + ACCEPT_EULA=Y apt-get install -y mssql-tools unixodbc-dev && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# Create app directory and schemas subdirectory in one layer WORKDIR /usr/src/app +RUN mkdir -p schemas -# Create schemas directory -RUN mkdir -p /usr/src/app/schemas - -# Copy the schema files -COPY sql-server/schemas/dbo_schema_database_statements_small.sql /usr/src/app/schemas/ -COPY sql-server/schemas/fp_schema_database_statements_small.sql /usr/src/app/schemas/ -COPY sql-server/schemas/fw_schema_database_statements_small.sql /usr/src/app/schemas/ -COPY sql-server/schemas/int_schema_database_statements_small.sql /usr/src/app/schemas/ -COPY sql-server/schemas/ob_schema_database_statements_small.sql /usr/src/app/schemas/ - -# Copy initialization script -COPY sql-server/init.sql /usr/src/app/ -COPY sql-server/setup.sh /usr/src/app/ +# Copy all SQL files in a single layer to reduce image size +COPY ./sql-server/schemas/*.sql ./schemas/ +COPY ./sql-server/init.sql ./ +COPY ./sql-server/setup.sh ./ # Fix line endings and make setup script executable -RUN sed -i 's/\r$//' /usr/src/app/setup.sh && \ - chmod +x /usr/src/app/setup.sh +RUN sed -i 's/\r$//' setup.sh && \ + chmod +x setup.sh -CMD /bin/bash /usr/src/app/setup.sh \ No newline at end of file +# Switch back to mssql user +USER mssql + +# Start SQL Server with our setup script +CMD /bin/bash ./setup.sh \ No newline at end of file diff --git a/ef-migration/infrastructure/sql-server/schemas/dbo_schema_database_statements.sql b/ef-migration/infrastructure/sql-server/schemas/dbo_schema_database_statements.sql index 4734fd5..a1abf15 100644 --- a/ef-migration/infrastructure/sql-server/schemas/dbo_schema_database_statements.sql +++ b/ef-migration/infrastructure/sql-server/schemas/dbo_schema_database_statements.sql @@ -16,7 +16,7 @@ CREATE TABLE [dbo].[AMAssumptionView] ( [AssumptionJoinDataGUID] uniqueidentifier NOT NULL, [FolderGUID] uniqueidentifier NOT NULL, [IsDistributionModeActive] bit NOT NULL, - [DistributionInfo] xml(max) NOT NULL, + [DistributionInfo] xml NOT NULL, [ProviderGUID] uniqueidentifier NOT NULL, [CreatedDate] datetime NOT NULL, [CreatedBy] uniqueidentifier NOT NULL, @@ -72,7 +72,7 @@ CREATE TABLE [dbo].[AMCorrelationGroup] ( [AssumptionGroupGUID] uniqueidentifier NOT NULL, [Name] nvarchar(64) NOT NULL, [IsGlobal] bit NOT NULL, - [MembersXML] xml(max) NOT NULL, + [MembersXML] xml NOT NULL, PRIMARY KEY ([CorrelationGroupGUID]) ); GO @@ -1288,7 +1288,7 @@ ALTER TABLE [dbo].[CustomMenu] ADD CONSTRAINT [DF_CustomMenu_ISGLOBAL] DEFAULT ( CREATE TABLE [dbo].[CustomMenuContent] ( [CustomMenuContentGUID] uniqueidentifier NOT NULL, [CustomMenuGUID] uniqueidentifier NOT NULL, - [ContentXML] xml(max) NOT NULL, + [ContentXML] xml NOT NULL, PRIMARY KEY ([CustomMenuContentGUID]) ); GO @@ -2928,7 +2928,7 @@ CREATE TABLE [dbo].[EMFSubtableDefaultTuple] ( [SUBTABLEDEFAULTTUPLEGUID] uniqueidentifier NOT NULL, [SUBTABLEGUID] uniqueidentifier NOT NULL, [ISONCOLUMN] bit NOT NULL, - [DIMENSIONTUPLEXML] xml(max) NOT NULL, + [DIMENSIONTUPLEXML] xml NOT NULL, PRIMARY KEY ([SUBTABLEDEFAULTTUPLEGUID]) ); GO @@ -3707,7 +3707,7 @@ CREATE TABLE [dbo].[FEFormField] ( [RenderComparisonFieldGUID] uniqueidentifier NOT NULL, [RenderComparisonOperator] int NOT NULL, [RefreshMode] tinyint NOT NULL, - [TypeConfigXML] xml(max) NOT NULL, + [TypeConfigXML] xml NOT NULL, PRIMARY KEY ([FORMFIELDGUID]) ); @@ -3930,7 +3930,7 @@ ALTER TABLE [dbo].[FEFormSection] ADD CONSTRAINT [DF_FEFormSection_RuleGroupType CREATE TABLE [dbo].[FEFormSectionRule] ( [FormSectionRuleGUID] uniqueidentifier NOT NULL, [FormSectionGUID] uniqueidentifier NOT NULL, - [RuleXML] xml(max) NOT NULL, + [RuleXML] xml NOT NULL, [Description] nvarchar(max) NOT NULL, [RuleType] int NOT NULL, PRIMARY KEY ([FormSectionRuleGUID]) @@ -4709,7 +4709,7 @@ CREATE TABLE [dbo].[HistoryItem] ( [CATEGORY] nvarchar(64) NOT NULL, [DESCRIPTION] nvarchar(4000) NOT NULL, [USERCOMMENTS] nvarchar(256) NOT NULL, - [METAXML] xml(max) NOT NULL, + [METAXML] xml NOT NULL, [VERSION] timestamp NOT NULL, [MODIFIERUSERNAME] nvarchar(256) NOT NULL, [ITEMCOUNT] int NOT NULL, @@ -4873,7 +4873,7 @@ CREATE TABLE [dbo].[ImportCSVConfig] ( [ImportCSVConfigGUID] uniqueidentifier NOT NULL, [Name] nvarchar(64) NOT NULL, [Description] nvarchar(450) NOT NULL, - [ConfigXML] xml(max) NOT NULL, + [ConfigXML] xml NOT NULL, [TimeoutSeconds] int NOT NULL, PRIMARY KEY ([ImportCSVConfigGUID]) ); @@ -4899,7 +4899,7 @@ CREATE TABLE [dbo].[IntCapERPConnectorConfig] ( [PollFrequency] int NOT NULL, [EnvironmentType] tinyint NOT NULL, [SystemType] smallint NOT NULL, - [AdditionalDataXML] xml(max) NOT NULL, + [AdditionalDataXML] xml NOT NULL, PRIMARY KEY ([ConnectorConfigGUID]) ); GO @@ -6546,7 +6546,7 @@ CREATE TABLE [dbo].[OMZPool] ( [Name] nvarchar(64) NOT NULL, [ProviderSettingsGUID] uniqueidentifier NOT NULL, [PoolDimensionMemberGUID] uniqueidentifier NOT NULL, - [Metadata] xml(max) NOT NULL, + [Metadata] xml NOT NULL, [ApprovedFormFieldGUID] uniqueidentifier NOT NULL, [PlanTypeGUID] uniqueidentifier NOT NULL, [IsUsingFinancialReturn] bit NOT NULL, @@ -6579,7 +6579,7 @@ CREATE TABLE [dbo].[OMZProviderSettings] ( [ProviderSettingsGUID] uniqueidentifier NOT NULL, [Name] nvarchar(64) NOT NULL, [AssemblyQualifiedName] nvarchar(450) NOT NULL, - [Metadata] xml(max) NOT NULL, + [Metadata] xml NOT NULL, [ProviderAssemblyQualifiedName] nvarchar(450) NOT NULL, [PoolDimensionGUID] uniqueidentifier NOT NULL, [DefaultEvaluatorRoleGUID] uniqueidentifier NOT NULL, @@ -6614,7 +6614,7 @@ CREATE TABLE [dbo].[OMZScenario] ( [Name] nvarchar(64) NOT NULL, [Description] nvarchar(4000) NOT NULL, [PoolGUID] uniqueidentifier NOT NULL, - [Metadata] xml(max) NOT NULL, + [Metadata] xml NOT NULL, PRIMARY KEY ([ScenarioGUID]) ); GO @@ -8768,7 +8768,7 @@ CREATE TABLE [dbo].[ReportArchiveEntryDetail] ( [ReportArchiveEntryDetailGUID] uniqueidentifier NOT NULL, [ReportArchiveEntryGUID] uniqueidentifier NOT NULL, [ReportArchiveDetailAQN] nvarchar(400) NOT NULL, - [ReportArchiveDetailXML] xml(max) NOT NULL, + [ReportArchiveDetailXML] xml NOT NULL, PRIMARY KEY ([ReportArchiveEntryDetailGUID]) ); GO @@ -8830,7 +8830,7 @@ CREATE TABLE [dbo].[RuleAction] ( [RuleSetGUID] uniqueidentifier NOT NULL, [ExecutionOrder] int NOT NULL, [RuleActionTypeAQN] nvarchar(450) NOT NULL, - [RuleActionTypeConfigXML] xml(max) NOT NULL, + [RuleActionTypeConfigXML] xml NOT NULL, PRIMARY KEY ([RuleActionGUID]) ); @@ -8873,7 +8873,7 @@ CREATE TABLE [dbo].[RuleItem] ( [RuleGUID] uniqueidentifier NOT NULL, [RuleGroupGUID] uniqueidentifier NOT NULL, [RuleTypeAQN] nvarchar(450) NOT NULL, - [RuleTypeConfigXML] xml(max) NOT NULL, + [RuleTypeConfigXML] xml NOT NULL, [DisplayOrder] int NOT NULL, [Name] nvarchar(100) NOT NULL, PRIMARY KEY ([RuleGUID]) @@ -9217,7 +9217,7 @@ CREATE TABLE [dbo].[SAShockAssumptionType] ( [Name] nvarchar(100) NOT NULL, [BaseTableName] nvarchar(50) NOT NULL, [ShockTableName] nvarchar(50) NOT NULL, - [WhereClauseXML] xml(max) NOT NULL, + [WhereClauseXML] xml NOT NULL, [DisplayFormat] nvarchar(50) NOT NULL, [IsPercentage] bit NOT NULL, [FormulaColumnName] nvarchar(max) NOT NULL, @@ -11171,7 +11171,7 @@ CREATE TABLE [dbo].[ScoreTableEditorColumn] ( [Type] int NOT NULL, [PixelWidth] int NOT NULL, [DisplayOrder] int NOT NULL, - [MetaData] xml(max) NOT NULL, + [MetaData] xml NOT NULL, [DisplayName] nvarchar(450) NOT NULL, [DefaultMemberType] int NOT NULL, [IsTextWrap] bit NOT NULL, @@ -11979,7 +11979,7 @@ CREATE TABLE [dbo].[SystemCenterStep] ( [SortOrder] int NOT NULL, [SectionGUID] uniqueidentifier NOT NULL, [Name] nvarchar(200) NOT NULL, - [PropertyXML] xml(max) NOT NULL, + [PropertyXML] xml NOT NULL, [Url] nvarchar(400) NOT NULL, [GlobalID] nvarchar(100) NOT NULL, [Description] nvarchar(4000) NOT NULL, @@ -12206,7 +12206,7 @@ CREATE TABLE [dbo].[TETaskHistory] ( [TaskGUID] uniqueidentifier NOT NULL, [Name] nvarchar(450) NOT NULL, [Status] int NOT NULL, - [ContextXML] xml(max) NOT NULL, + [ContextXML] xml NOT NULL, [CreationTime] datetime NOT NULL, [StartTime] datetime NOT NULL, [LastRunTime] datetime NOT NULL, @@ -12297,7 +12297,7 @@ ALTER TABLE [dbo].[Tag] ADD CONSTRAINT [DF_Tag_Tag] DEFAULT ('') FOR [Name]; GO CREATE TABLE [dbo].[TaskProgressStatus] ( [RowID] bigint NOT NULL, [TaskGUID] uniqueidentifier NOT NULL, - [DataXML] xml(max) NOT NULL, + [DataXML] xml NOT NULL, [StartTime] datetime NOT NULL, [TaskStatus] nvarchar(100) NOT NULL, [GlobalID] nvarchar(100) NOT NULL, diff --git a/ef-migration/infrastructure/sql-server/schemas/dbo_schema_database_statements_small.sql b/ef-migration/infrastructure/sql-server/schemas/dbo_schema_database_statements_small.sql index 446b5a6..eb359e5 100644 --- a/ef-migration/infrastructure/sql-server/schemas/dbo_schema_database_statements_small.sql +++ b/ef-migration/infrastructure/sql-server/schemas/dbo_schema_database_statements_small.sql @@ -16,7 +16,7 @@ CREATE TABLE [dbo].[AMAssumptionView] ( [AssumptionJoinDataGUID] uniqueidentifier NOT NULL, [FolderGUID] uniqueidentifier NOT NULL, [IsDistributionModeActive] bit NOT NULL, - [DistributionInfo] xml(max) NOT NULL, + [DistributionInfo] xml NOT NULL, [ProviderGUID] uniqueidentifier NOT NULL, [CreatedDate] datetime NOT NULL, [CreatedBy] uniqueidentifier NOT NULL,