The Microsoft documentation provides guidance for upgrading the SQL Server database version and changing the database collation.
For production environments, a new installation or a rolling upgrade (where the old and new databases exist together for a time) are more appropriate than an in-place upgrade.
Upgrade the database server engine version
To upgrade the database server engine version:
- Create a database backup.
- Install SQL Server 2019 (version 15 or above).
- Create new database.
- Restore the database backup. Collation will be overridden based on the backup.
- Change the database collation to: Latin1_General_100_CI_AI_SC_UTF8
This only changes the database collation for future columns. Pre-existing columns still need their collation changed (see Change the collation in place)
Change the collation in place
On pre-existing columns, you must change the collation in place by altering each table column that’s text-based. This involves dropping some elements and recreating them after the change.Note: For the last step of this procedure, you’ll need to create a ticket in the Snow Support Portal to obtain the appropriate script for your Commander version.
To change the collation in place:
- This script will generate a script that, when executed, drops indexes.
Generate indexes drop script
DECLARE @SchemaName VARCHAR(256); DECLARE @TableName VARCHAR(256); DECLARE @IndexName VARCHAR(256); DECLARE @TSQLDropIndex VARCHAR(MAX); DECLARE CursorIndexes CURSOR FOR SELECT schema_name(tables.schema_id), tables.name, indexes.name FROM [databaseName].sys.indexes indexes INNER JOIN [databaseName].sys.tables tables ON tables.object_id = indexes.object_id WHERE indexes.type > 0 AND tables.is_ms_shipped = 0 AND tables.name <> 'sysdiagrams' AND (is_primary_key=0 AND is_unique_constraint=0) OPEN CursorIndexes FETCH NEXT FROM CursorIndexes INTO @SchemaName,@TableName,@IndexName WHILE @@fetch_status = 0 BEGIN SET @TSQLDropIndex = 'DROP INDEX '+QUOTENAME(@SchemaName)+ '.' + QUOTENAME(@TableName) + '.' +QUOTENAME(@IndexName) PRINT @TSQLDropIndex FETCH NEXT FROM CursorIndexes INTO @SchemaName,@TableName,@IndexName END CLOSE CursorIndexes DEALLOCATE CursorIndexes
- Use this script to drop constraints. You’ll recreate them in Step 5.
ALTER TABLE inv_managementservers DROP CONSTRAINT [inv_managementservers_address_key]; ALTER TABLE workflow_notification DROP CONSTRAINT [uk_workflow_notification]; ALTER TABLE inv_regionnames DROP CONSTRAINT [inv_regionnames_pkey] WITH ( ONLINE = OFF ); ALTER TABLE published_services_catagorized_costs DROP CONSTRAINT [fp_published_services_catagorized_costs_pkey] WITH ( ONLINE = OFF ); ALTER TABLE deployment_attribute_value DROP CONSTRAINT [deployment_attribute_value_unique_names]; ALTER TABLE billing_update_status DROP CONSTRAINT [billing_record_updates_pkey] WITH ( ONLINE = OFF ); ALTER TABLE service_cost_service_type_mapping DROP CONSTRAINT [service_cost_service_type_pkey] WITH ( ONLINE = OFF ); ALTER TABLE attribute DROP CONSTRAINT [attribute_name_unique]; ALTER TABLE config_items DROP CONSTRAINT [config_items_name]; ALTER TABLE billing_retrieval_status DROP CONSTRAINT [billing_retrieval_status_pkey] WITH ( ONLINE = OFF ); ALTER TABLE vcommander_metadata DROP CONSTRAINT [vcommander_metadata_name_key]; ALTER TABLE requested_resource_settings DROP CONSTRAINT [requested_resource_settings_pkey] WITH ( ONLINE = OFF ); ALTER TABLE system_properties DROP CONSTRAINT [system_properties_pkey] WITH ( ONLINE = OFF ); ALTER TABLE workflow_definition_history DROP CONSTRAINT [uq_workflow_definition_history]; ALTER TABLE report_template DROP CONSTRAINT [report_template_name_unique]; ALTER TABLE fp DROP CONSTRAINT [fp_fingerprintid_key]; ALTER TABLE fp_pending DROP CONSTRAINT [fp_pending_fingerprintid_key]; ALTER TABLE fp_pending_props DROP CONSTRAINT [fp_pending_props_pkey] WITH ( ONLINE = OFF ); ALTER TABLE media_upload_context DROP CONSTRAINT [media_upload_context_pkey] WITH ( ONLINE = OFF ); ALTER TABLE grouping_type DROP CONSTRAINT [grouping_type_name_unique]; ALTER TABLE saved_search DROP CONSTRAINT [saved_search_name_unique]; ALTER TABLE inv_instance_types DROP CONSTRAINT [inv_instance_types_instanceType_key]; ALTER TABLE cost_model_os_cost DROP CONSTRAINT [cost_model_os_cost_pkey] WITH ( ONLINE = OFF ); ALTER TABLE currency_configuration DROP CONSTRAINT [PK_CURRENCY_CONFIGURATION] WITH ( ONLINE = OFF ); ALTER TABLE cost_model_os_support_cost DROP CONSTRAINT [cost_model_os_support_cost_pkey] WITH ( ONLINE = OFF );
- This script generates a number of scripts that you can run to change the collation.
DECLARE @TableName VARCHAR(255); -- DB table name
DECLARE @ColumnName VARCHAR(255); -- DB table column name
DECLARE @CurrentColumnCollation VARCHAR(255); -- The current DB column collation
DECLARE @DesiredCollationName VARCHAR(255) = 'Latin1_General_100_CI_AI_SC_UTF8'; -- Desired collation name
DECLARE @DataType VARCHAR(255); -- DB table column datatype
DECLARE @CharMaxLength VARCHAR(10); -- The mar byte length. Eg. varchar(100)
DECLARE @IsNullable VARCHAR(10);
DECLARE @SQLText VARCHAR(2048);
DECLARE @LogText VARCHAR(2048);
-- Declare a DB table cursor
-- Get all the regular tables (no views) for the current database
DECLARE DBTableCursor CURSOR FOR
SELECT TABLE_NAME
FROM [databaseName].INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE';
OPEN DBTableCursor
FETCH NEXT FROM DBTableCursor INTO @TableName
WHILE @@FETCH_STATUS = 0
-- Begin DB table enumeration
BEGIN
-- Declare a DB table column cursor
DECLARE TableColumnCursor CURSOR FOR
SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE, COLLATION_NAME
FROM [databaseName].information_schema.columns
WHERE TABLE_NAME = @TableName AND (DATA_TYPE LIKE '%char%' OR DATA_TYPE LIKE '%text%') AND COLLATION_NAME <> @DesiredCollationName
ORDER BY ordinal_position
OPEN TableColumnCursor
FETCH NEXT FROM TableColumnCursor INTO @ColumnName, @DataType, @CharMaxLength, @IsNullable, @CurrentColumnCollation
WHILE @@FETCH_STATUS = 0
-- Begin DB table column enumeration
BEGIN
-- For debuggin purpose
--SET @LogText = @TableName + ':' + @ColumnName + '(' + @CurrentColumnCollation + ')';
-- Generate the scripts to change collation
-- Using square bracket for case where the column name matches keyword such as "language"
SET @SQLText = 'ALTER TABLE ' + @TableName +
' ALTER COLUMN [' + @ColumnName + ']' +
-- Column type 'text' will become varchar(MAX)
' ' + @DataType + '(' + CASE WHEN @CharMaxLength = -1
THEN 'MAX'
ELSE @CharMaxLength
END + ')' +
-- If the column is NOT NULL, then not specifying NOT NULL will cause it to become NULLable, therefore we make it explicit here
' COLLATE ' + @DesiredCollationName + ' ' + CASE WHEN @IsNullable = 'NO'
THEN 'NOT NULL;'
ELSE 'NULL;'
END;
PRINT @SQLText
--PRINT @LogText
-- End DB table column enumeration
FETCH NEXT FROM TableColumnCursor INTO @ColumnName, @DataType, @CharMaxLength, @IsNullable, @CurrentColumnCollation
END
-- Clean up DB table column cursor
CLOSE TableColumnCursor
DEALLOCATE TableColumnCursor
-- End DB table enumeration
FETCH NEXT FROM DBTableCursor INTO @TableName
END
-- Clean up DB table cursor
CLOSE DBTableCursor
DEALLOCATE DBTableCursor
The scripts that are generated by the above script can be executed multiple times. Subsequent executions won’t affect columns that have already been upgraded.
- If the database is large and contains huge tables, the transaction logs may fill and the upgrade will fail. Run this customized script to handle the two largest database tables, and then re-run the generated scripts above.
Handle 2 big tables cloud_costs AND cloud_cost_tags
-- Script to handle costing tables -- this needs to be done when changing collation the generic way is resulting transaction log failures -- Script version is tied to Commander version; this is 9.0 (for other upgrades script needs to be recreated) ALTER TABLE cloud_cost_tags DROP CONSTRAINT cloud_cost_tags_cost_fkey; ALTER TABLE cloud_cost_metadata DROP CONSTRAINT cloud_cost_metadata_fkey; EXEC sp_rename 'cloud_cost_tags', 'cloud_cost_tags_OLD'; CREATE TABLE cloud_cost_tags ( cloud_cost_id bigint NOT NULL, tag_key varchar(512) NOT NULL, tag_value varchar(4096) ); INSERT INTO cloud_cost_tags WITH (TABLOCK) (cloud_cost_id, tag_key, tag_value) SELECT cloud_cost_id, tag_key, tag_value from cloud_cost_tags_OLD; DROP TABLE cloud_cost_tags_OLD; EXEC sp_rename 'cloud_costs.cloud_costs_pkey', 'cloud_costs_pkey_OLD'; EXEC sp_rename 'cloud_costs', 'cloud_costs_OLD'; CREATE TABLE cloud_costs ( id bigint IDENTITY not null, cost_date date NOT NULL, sku varchar(255), region_code varchar(255), service_type varchar(255) NOT NULL, cost_category varchar(255) NOT NULL, service_name varchar(255) NOT NULL, description varchar(1024), identity_hash varchar(32) NOT NULL, cloud_identifier bigint NOT NULL, cloud_type integer NOT NULL, source integer NOT NULL, charge_type integer NOT NULL, remoteid varchar(900), objecthandle_id bigint, -- Ownership organization_id bigint, primary_owner_login_id varchar(255), primary_owner_email varchar(255), -- Cost Data native_currency varchar(3) NOT NULL, unit varchar(255), usage numeric(26, 8), usage_prev_day numeric(24, 8), usd_rate numeric(24, 8), native_rate numeric(24, 8), usd_markup_rate numeric(24, 8), native_markup_rate numeric(24, 8), usd_cost numeric(24, 8) NOT NULL, native_cost numeric(24, 8) NOT NULL, usd_markup_cost numeric(24, 8) NOT NULL, native_markup_cost numeric(24, 8) NOT NULL, usd_cost_prev_day numeric(24, 8), usd_markup_cost_prev_day numeric(24, 8), native_cost_prev_day numeric(24, 8), native_markup_cost_prev_day numeric(24, 8), CONSTRAINT cloud_costs_pkey PRIMARY KEY (id) ); SET IDENTITY_INSERT cloud_costs ON; INSERT INTO cloud_costs WITH (TABLOCK) ( id, cost_date,sku,region_code,service_type,cost_category,service_name,description, identity_hash,cloud_identifier,cloud_type,source,charge_type,remoteid,objecthandle_id, organization_id,primary_owner_login_id,primary_owner_email,native_currency,unit, usage,usage_prev_day,usd_rate,native_rate,usd_markup_rate,native_markup_rate,usd_cost, native_cost,usd_markup_cost,native_markup_cost,usd_cost_prev_day,usd_markup_cost_prev_day, native_cost_prev_day,native_markup_cost_prev_day ) SELECT id, cost_date,sku,region_code,service_type,cost_category,service_name,description, identity_hash,cloud_identifier,cloud_type,source,charge_type,remoteid,objecthandle_id, organization_id,primary_owner_login_id,primary_owner_email,native_currency,unit, usage,usage_prev_day,usd_rate,native_rate,usd_markup_rate,native_markup_rate,usd_cost, native_cost,usd_markup_cost,native_markup_cost,usd_cost_prev_day,usd_markup_cost_prev_day, native_cost_prev_day,native_markup_cost_prev_day FROM cloud_costs_OLD; SET IDENTITY_INSERT cloud_costs OFF; DROP TABLE cloud_costs_OLD; ALTER TABLE cloud_cost_tags ADD CONSTRAINT cloud_cost_tags_cost_fkey FOREIGN KEY (cloud_cost_id) REFERENCES cloud_costs (id) ON DELETE CASCADE; ALTER TABLE cloud_cost_metadata ADD CONSTRAINT cloud_cost_metadata_fkey FOREIGN KEY (cloud_cost_id) REFERENCES cloud_costs (id) ON DELETE CASCADE;
- Recreate the constraints that you dropped in Step 2 with this customized script.
ALTER TABLE inv_managementservers ADD CONSTRAINT [inv_managementservers_address_key] UNIQUE NONCLUSTERED ( [address] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]; ALTER TABLE workflow_notification ADD CONSTRAINT [uk_workflow_notification] UNIQUE NONCLUSTERED ( [notification_id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]; ALTER TABLE inv_regionnames ADD CONSTRAINT [inv_regionnames_pkey] PRIMARY KEY CLUSTERED ( [mgmt_server_id] ASC, [regionCode] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]; ALTER TABLE published_services_catagorized_costs ADD CONSTRAINT [fp_published_services_catagorized_costs_pkey] PRIMARY KEY CLUSTERED ( [id] ASC, [name] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]; ALTER TABLE deployment_attribute_value ADD CONSTRAINT [deployment_attribute_value_unique_names] UNIQUE NONCLUSTERED ( [parent_id] ASC, [name] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]; ALTER TABLE billing_update_status ADD CONSTRAINT [billing_record_updates_pkey] PRIMARY KEY CLUSTERED ( [management_server_objecthandle_id] ASC, [billing_account_id] ASC, [timestamp] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]; ALTER TABLE service_cost_service_type_mapping ADD CONSTRAINT [service_cost_service_type_pkey] PRIMARY KEY CLUSTERED ( [ms_type] ASC, [oem_service_type] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]; ALTER TABLE attribute ADD CONSTRAINT [attribute_name_unique] UNIQUE NONCLUSTERED ( [name] ASC, [retired] ASC, [grouping_type_id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]; ALTER TABLE config_items ADD CONSTRAINT [config_items_name] UNIQUE NONCLUSTERED ( [name] ASC, [userid] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]; ALTER TABLE billing_retrieval_status ADD CONSTRAINT [billing_retrieval_status_pkey] PRIMARY KEY CLUSTERED ( [management_server_objecthandle_id] ASC, [billing_year_and_month] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]; ALTER TABLE vcommander_metadata ADD CONSTRAINT [vcommander_metadata_name_key] UNIQUE NONCLUSTERED ( [name] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]; ALTER TABLE requested_resource_settings ADD CONSTRAINT [requested_resource_settings_pkey] PRIMARY KEY CLUSTERED ( [requested_settings_id] ASC, [resource_settings_class] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]; ALTER TABLE system_properties ADD CONSTRAINT [system_properties_pkey] PRIMARY KEY CLUSTERED ( [property] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]; ALTER TABLE workflow_definition_history ADD CONSTRAINT [uq_workflow_definition_history] UNIQUE NONCLUSTERED ( [subjectGuid] ASC, [version] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]; ALTER TABLE report_template ADD CONSTRAINT [report_template_name_unique] UNIQUE NONCLUSTERED ( [name] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]; ALTER TABLE fp ADD CONSTRAINT [fp_fingerprintid_key] UNIQUE NONCLUSTERED ( [fingerprintid] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]; ALTER TABLE fp_pending ADD CONSTRAINT [fp_pending_fingerprintid_key] UNIQUE NONCLUSTERED ( [fingerprintid] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]; ALTER TABLE fp_pending_props ADD CONSTRAINT [fp_pending_props_pkey] PRIMARY KEY CLUSTERED ( [fpid] ASC, [propname] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]; ALTER TABLE media_upload_context ADD CONSTRAINT [media_upload_context_pkey] PRIMARY KEY CLUSTERED ( [guid] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]; ALTER TABLE grouping_type ADD CONSTRAINT [grouping_type_name_unique] UNIQUE NONCLUSTERED ( [name] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]; ALTER TABLE saved_search ADD CONSTRAINT [saved_search_name_unique] UNIQUE NONCLUSTERED ( [name] ASC, [userid] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]; ALTER TABLE inv_instance_types ADD CONSTRAINT [inv_instance_types_instanceType_key] UNIQUE NONCLUSTERED ( [instanceType] ASC, [managementServerType] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]; ALTER TABLE cost_model_os_cost ADD CONSTRAINT [cost_model_os_cost_pkey] PRIMARY KEY CLUSTERED ( [cost_model_id] ASC, [os_name] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]; ALTER TABLE currency_configuration ADD CONSTRAINT [PK_CURRENCY_CONFIGURATION] PRIMARY KEY CLUSTERED ( [type] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]; ALTER TABLE cost_model_os_support_cost ADD CONSTRAINT [cost_model_os_support_cost_pkey] PRIMARY KEY CLUSTERED ( [cost_model_id] ASC, [os_name] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY];
If there are other columns that didn’t get handled, SQL Server Management Studio can generate drop and create scripts.
6. Recreate the indexes. Scripts are available from Snow to complete this procedure. Create a ticket on the Snow Support Portal to obtain the appropriate script for your Commander version.
Was this helpful?
Related Articles
Spider Setup: SQL database collation 5Number of Views Enable CD/DVD media attachment for VMs in the Snow Commander Service Portal 4Number of Views Creating a SQL Database backup of Snow Inventory and Snow License Manager to send to Snow Support 36Number of Views Microsoft SQL Database Maintenance for Snow Commander 21Number of Views Configuring Azure AD for SSO with Snow Commander 32Number of Views
Revenera Assistant
Online
Hi, I am Reva - Ask me anything.
Updates
No new updates
Chat
Home
Updates
/**/
Thanks for the feedback!
Your feedback has been saved.Rate this response:
1
2
3
4
5
Add Additional feedback ( Optional )
0/240
English
English
Language changed successfully
Something went wrong
Email sent successfully
Something went wrong
Case create successfully
Are you sure you want to cancel
the case creation?
Please select a product to submit the case.
Please select a product version to submit the case.
0/255
Upload Attachment
File Upload
Maximum file
size allowed is 3 MB.
File type
not supported.
Supported file types:
Documents (.txt, .doc, .docx, .pdf), Images (.jpg, .png), Comma Separated Files
(.csv) Speadsheets (.xlsx, .xls)
Are you sure you want to cancel the case creation?
Case closed successfully
File Upload
Maximum file size allowed is 3 MB.
File type not supported.
Supported file types:
Documents (.txt, .doc, .docx, .pdf), Images (.jpg, .png), Comma Separated Files
(.csv) Speadsheets (.xlsx, .xls)
Are you sure you want to close this case
| Products | Region | Phone Numbers |
|---|---|---|
| FlexNet Operations FlexNet Embedded FlexNet Publisher FlexNet Connect FlexNet Code Insight InstallAnywhere InstallShield |
North America * |
+1 630-332-2513 (toll) +1 877-279-2853 (toll-free in North America) |
| Europe * |
+44 1925 944367 (toll) +44 800 047 8642 (toll-free in Europe) |
|
| Japan * | +81 3-4540-5335 (select option 2) | |
| Australia * |
+61 3 9895 2177 +61 1800 560 603 (toll-free in Australia) |
|
|
Usage Intelligence (formerly
Revulytics) Compliance Intelligence |
Please use the Case Portal to submit your support ticket or reach out to your Revenera contact. | |
File Upload
Maximum file
size allowed is 3 MB.
File type
not supported.
Supported file types:
Documents (.txt, .doc, .docx, .pdf), Images (.jpg, .png), Comma Separated Files
(.csv) Speadsheets (.xlsx, .xls)
© 2026 Flexera Software. All Rights Reserved.
Case id: 00001065
Activity: Status change: 2 hours ago