How to fix the collation of Microsoft SQL Server database for Jira manually
Platform notice: Server and Data Center only. This article only applies to Atlassian products on the Server and Data Center platforms.
Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.
*Except Fisheye and Crucible
Purpose
If your Microsoft SQL Server database doesn't use the recommended collation you can run this procedure to bring them into line with the
- Connecting JIRA to SQL Server 2005
- Connecting JIRA to SQL Server 2008
- Connecting JIRA to SQL Server 2012
- Connecting JIRA to SQL Server 2016
- Connecting JIRA to SQL Server 2017
- Connecting JIRA to SQL Server 2019
This method may also be used to move a SQL Server Database between two servers while ensuring the collation is correct. Direct database manipulation is not covered by our Atlassian Support Offerings and should be up to your DBAs discretion.
Our recommended method for migrating databases is as follows
- Create a new database with the required collation as per the appropriate documentation in Connecting JIRA to a Database.
- Follow our Switching Databases using an XML backup to migrate JIRA from the old databases (with the incorrect collation) to the new one, with the correct collation.
If the recommended method for some reason is not suitable for your scenario, please follow the Solution section below to manually fix the collation at the database server side manually
Solution
Before you begin
Always back up your data before performing any modifications to the database. If possible, test any alter, insert, update, or delete SQL commands on a staging server first.
The steps outlined on this article are provided AS-IS. This means we've had reports of them working for some customers — under certain circumstances — yet are not officially supported, nor can we guarantee they'll work for your specific scenario — though you may try them out. As the steps below pertain to direct database manipulations, we strongly recommend engaging your DBA to assist with the procedure.
You may follow through and validate them on your own non-prod environment prior to production or fall back to supported alternatives if they don't work out.
We also invite you to reach out to our Community for matters that fall beyond Atlassian's scope of support!
Portfolio for JIRA: For instances that do have Portfolio for JIRA installed, please note on Plans missing in Advanced Roadmaps for Jira after updating SQL Server Collation KB article before applying the database update change below.
To run this procedure SQL Server Management Studio needs to be in version 2008, if you are still using SQL Server Management Studio 2005, you will need to upgrade it to at least 2008 or migrate your JIRA database to SQL Server Management 2008 or latest.
Diagnosis
The following line is being thrown in atlassian-jira.log:
****************************************************************************************************
You are using an unsupported mssql collation: SQL_Latin1_General_CP1_CI_AS. This may cause some functionality to not work.
Please use SQL_Latin1_General_CP437_CI_AI or Latin1_General_CI_AI as the collation instead.
****************************************************************************************************
Run the following query against your old database. If it returns any results, you must adjust the collation.
SELECT object_name(object_id) as TableName, name as ColumnName, collation_name
FROM sys.columns
WHERE collation_name != 'SQL_Latin1_General_CP437_CI_AI' AND collation_name != 'Latin1_General_CI_AI'
AND object_name(object_id) NOT LIKE 'sys%'
AND object_name(object_id) NOT LIKE 'queue%'
AND object_name(object_id) NOT LIKE 'file%'
AND object_name(object_id) NOT LIKE 'spt%'
AND object_name(object_id) NOT LIKE 'MSrep%'
AND object_name(object_id) NOT LIKE 'sqlagent%'
AND object_name(object_id) NOT LIKE 'plan_persist%'
Create the new Database
Firstly, create a new database as per our guidelines linked above in the 'Purpose' section. It is important that the new database is configured correctly from the start, for example the isolation levels need to be set and the collation should be set to SQL_Latin1_General_CP437_CI_AI or
Latin1_General_CI_AI, depending of the the version of supported by JIRA and your preference.
Create the Database Tables
We'll create the database tables from your existing database. In SQL Server Management Studio, right click on your old database:
- Click Tasks > Generate Scripts...;
- In the Choose Objects screen, choose Select specific database objects;
- Tick Tables - this selects all the objects in the database, but not the database itself (since we already created a new database);
- On the Set Scripting Options click Advanced and adjust the following options:
- Set Script USE DATABASE to false;
- Set Script Full-Text Indexes to true;
- Set Script Indexes to true;
- Click Next, then Finish;
- Run the script against your new database. At this point, your new database will contain tables, but no data.
Disable "Constraint Checks" before importing
Before we import the data, we must temporarily disable constraint checks against all tables in the database. Execute the following query against your new database:
EXEC sp_MSforeachtable"ALTER TABLE ? NOCHECK CONSTRAINT all"
Import data from the old database
Make sure you have enough disk space on your server before starting this section as we will have two databases with the same size once the export wizard is done.
In SQL Server Management Studio, right click on your old database:
- Click Tasks > Export Data...;
- In the Choose a Data Source screen, ensure your old database is selected. Then click Next;
- In the Choose a Destination screen, provide the connection information for your new database. Usually, this will be the same server, however, you can use any SQL Server you can authenticate against. Then click Next;
- Choose Copy data from one or more tables or views then click Next;
- In the Select Source Tables and Views, ensure all tables are ticked, and that all tables have been highlighted;
- With the tables highlighted, click Edit Mappings...
- Ensure the correct schema has been selected (
dbo
is usually the correct schema) and that Enable Identity Insert has been ticked. Click OK; - Click Next and complete the transfer of data. Depending on the size of the database, and the speed of the database server(s) being used, this process will take time.
Re-enable Constraint Checks after importing
Once the import has been completed, you must re-enable constraint checks on the database. Execute the following query against your new database:
EXEC sp_MSforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
Check the collation is correct
Run the diagnosis query again, to ensure that there are no rows with the incorrect collation.
Point JIRA to the new database
- Stop JIRA.
- Backup your JIRA Home Directory and Installation Directory.
- Reconfigure the connection to your database:
- Open the
<jira-home>/dbconfig.xml
file - Locate the
<url>
tag Change the name of the database (the one after the last slash) to your new database. For example,
<url>jdbc:jtds:sqlserver://dbserver:1433/
old_db</url>
would be changed to
<url>jdbc:jtds:sqlserver://dbserver:1433/
new_db</url>
- Save the file
- Start JIRA and check everything is working.
Having problems?
Create a new database with the required collation as per the appropriate documentation in Connecting JIRA to a Database.
Follow our Switching Databases using an XML backup to migrate JIRA from the old databases (with the incorrect collation) to the new one, with the correct collation.