Не удалось выполнить миграцию базы данных с SonarQube 5.6.1 LTS на 6.0

Я недавно пытался обновить SonarQube 5.6.1 LTS до 6.0.

Я использовал Руководство по обновлению, но у меня возникла ошибка миграции базы данных.

Не удалось выполнить миграцию базы данных: org.sonar.db.version.v60.CleanUsurperRootComponents com.microsoft.sqlserver.jdbc.SQLServerException: Невозможно разрешить конфликт сопоставления между «SQL_Latin1_General_CP1_CS_AS» и «Latin1_General_CS_AS в равных операциях».

Я использую SQL 2014 с SQL_Latin1_General_CP1_CS_AS.

Я использовал для настройки следующее руководство:

SonarQube Setup Gruide для пользователей .Net v.1.3

В базе данных сонара 157 столбцов с неправильным сопоставлением «Latin1_General_CS_AS».

С уважением

Даниил

 Jeroen Heier05 авг. 2016 г., 17:05
Та же проблема здесь. смотреть наэтот ТАК вопрос: «единственная реальная разница - это порядок сортировки для некоторых символов»
 Simon Brandhof - SonarSource05 авг. 2016 г., 11:05
Вы должны быть заинтересованы в этой теме:groups.google.com/forum/#!searchin/sonarqube/...

Ответы на вопрос(1)

Решение Вопроса

Вариант 2. Восстановите базу данных SonarQube и измените параметры сортировки базы данных с помощью SQL Management Studio (при условии, что база данных называется SonarQube) перед повторным запуском обновления:

 -- Show current collation
 USE [master]
 GO

 SELECT [collation_name]
 FROM   [sys].[databases]
 WHERE  name = 'SonarQube'
 GO

Результат должен бытьLatin1_General_CS_AS, Если запрос возвращаетсяSQL_Latin1_General_CP1_CS_AS измените сопоставление базы данных перед обновлением до 6.0:

USE [master]
GO

ALTER DATABASE [SonarQube] SET SINGLE_USER WITH ROLLBACK IMMEDIATE    
ALTER DATABASE [SonarQube] COLLATE Latin1_General_CS_AS;  
ALTER DATABASE [SonarQube] SET MULTI_USER
GO

Вариант 3: (в крайнем случае) Измените параметры сортировки базы данных (см. Вариант 2) и измените базу данных вручную (с помощью SQL Management Studio). Сначала выполните следующий запрос

USE [SonarQube]
GO

SELECT  '[' + SCHEMA_NAME(t.[schema_id]) + '].[' + t.[name] + '] -> ' + c.[name]
,       'ALTER TABLE [' + SCHEMA_NAME(t.[schema_id]) + '].[' + t.[name] + ']
          ALTER COLUMN [' + c.[name] + '] ' + UPPER(tt.name) + 
         CASE WHEN t.name NOT IN ('ntext', 'text') 
             THEN '(' + 
                 CASE 
                     WHEN tt.name IN ('nchar', 'nvarchar') AND c.max_length != -1 
                         THEN CAST(c.max_length / 2 AS VARCHAR(10))
                     WHEN tt.name IN ('char', 'varchar') AND c.max_length != -1 
                         THEN CAST(c.max_length AS VARCHAR(10))
                     WHEN tt.name IN ('nchar', 'nvarchar', 'char', 'varchar') AND c.max_length = -1 
                         THEN 'MAX'
                     ELSE CAST(c.max_length AS VARCHAR(10)) 
                 END + ')' 
             ELSE '' 
         END + ' COLLATE Latin1_General_CS_AS' + 
         CASE WHEN c.[is_nullable] = 1 
             THEN ' NULL'
             ELSE ' NOT NULL'
         END
 FROM  [sys].[columns] c
 JOIN  [sys].[tables]  t ON c.[object_id] = t.[object_id]
 JOIN  [sys].[types]   tt ON c.[system_type_id] = tt.[system_type_id] AND c.[user_type_id] = tt.[user_type_id]
 WHERE c.[collation_name] IS NOT NULL
 AND   c.[collation_name] != 'Latin1_General_CS_AS'
 AND   t.[type] = 'U'
 GO

Это вернет несколько строк; например:

ALTER TABLE [dbo].[resource_index] 
ALTER COLUMN [root_component_uuid] NVARCHAR(50) COLLATE Latin1_General_CS_AS NOT NULL

Некоторые столбцы не могут быть изменены таким образом, потому что столбец используется в индексе, который должен быть удален первым. Например:

-- Pay attention: generate script first!
DROP INDEX [resource_index_component] ON [dbo].[resource_index]
GO

ALTER TABLE [dbo].[resource_index] 
ALTER COLUMN [component_uuid] NVARCHAR(50) COLLATE Latin1_General_CS_AS NOT NULL
GO

-- Generate the create script in SQL Management Studio...
CREATE NONCLUSTERED INDEX [resource_index_component] 
  ON [dbo].[resource_index] ([component_uuid] ASC) 
  WITH (...) ON ...
GO

Перезапустите SonarQube и начните обновление снова.

 markdemich19 авг. 2016 г., 17:15
Я использовал вариант 2, и он, кажется, работал как шарм. Большое спасибо за это.
 Tyler Smith16 авг. 2016 г., 16:27
Ой, почему !!! Почему SonarQube изменил требования к сортировке!?!?!?! Я должен пройти через вариант 3, чтобы перейти на v6, и это будет кошмар!
 Jeroen Heier20 авг. 2016 г., 07:46
@markdemich Нет активированных правил: проверьте установку и версию вашего плагина.
 markdemich21 авг. 2016 г., 01:19
Я завел только апгрейд последней 5.х. Когда я закончил, у меня не было никаких активированных правил. Мне нужно было удалить папку data / es при перезагрузке. Это, казалось, заставило это работать.
 markdemich19 авг. 2016 г., 18:56
@TylerSmith, ты получил эту работу? Я действительно не хочу делать вариант 3.
 Tyler Smith19 авг. 2016 г., 20:33
@ markdemich Да, я получил вариант 3 для работы. Когда я использовал вариант 2, у меня было 176 столбцов, которые все еще использовали неправильное сопоставление. Мне пришлось отбросить около 50 индексов, так как вариант 3 предлагает закончить изменение параметров сортировки для всей БД. Это было очень утомительно, но мне потребовалось всего около 2 часов, чтобы скомпилировать повторно используемый сценарий (я еще не завершил обновление в рабочей среде).
 markdemich19 авг. 2016 г., 18:55
Я использовал вариант 2, и он, кажется, работал как шарм. Большое спасибо за это. ОБНОВЛЕНИЕ: я, возможно, подскочил пистолет. После обновления БД у меня может возникнуть какая-то порча. В моих профилях качества не было активированных правил, но когда я посмотрел на правила, у некоторых была кнопка «Деактивировать», что означает, что они активированы. Это очень странно.

Ваш ответ на вопрос