2016-08-05 3 views
5

Недавно я попытался обновиться с SonarQube 5.6.1 LTS до 6.0.Не удалось выполнить миграцию базы данных из SonarQube 5.6.1 LTS to 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 for .Net Users v.1.3

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

С уважением

Daniel

+3

Вы должны быть заинтересованы в этой теме: https://groups.google.com/forum/#!searchin/sonarqube/collation%7Csort:relevance/sonarqube/2HYcA97CdY0/JtFRC2YMBgAJ –

+0

Такая же проблема здесь. Посмотрите на [this] (http://stackoverflow.com/questions/9698618/sql-latin1-general-cp1-cs-as-vs-latin1-general-cs-as) Вопрос SO: «Единственная реальная разница - это порядок сортировки для некоторых символов " –

ответ

7

Вариант 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 и снова запустите обновление.

+1

Почему, почему? Почему SonarQube изменил требования к сортировке!?!?!?! Я должен пройти вариант 3, чтобы перейти на v6, и это будет кошмар! –

+0

Я использовал вариант 2 и, похоже, работал как шарм. Большое спасибо за это. – markdemich

+0

Я использовал вариант 2 и, похоже, работал как шарм. Большое спасибо за это.ОБНОВЛЕНИЕ: Я, возможно, подпрыгнул пистолет. После обновления БД, похоже, у меня может быть какая-то коррупция. У моих профилей качества не было активированных правил, но когда я смотрел правила, у некоторых была кнопка Деактивировать, что означает, что они активированы. Это очень странно. – markdemich

Смежные вопросы