2016-08-05 16 views
5

Ich habe kürzlich versucht, von SonarQube 5.6.1 LTS auf 6.0 zu aktualisieren.Fehler beim Ausführen der Datenbankmigration von SonarQube 5.6.1 LTS auf 6.0

Ich habe das Upgrade-Handbuch verwendet, aber ich habe einen Datenbankmigrationsfehler.

Fail-Datenbank-Migration auszuführen: org.sonar.db.version.v60.CleanUsurperRootComponents com.microsoft.sqlserver.jdbc.SQLServerException: Kann Sortierungskonflikt zwischen "SQL_Latin1_General_CP1_CS_AS" und "Latin1_General_CS_AS" in den gleichen nicht beheben zum Betrieb.

Ich benutze SQL 2014 mit SQL_Latin1_General_CP1_CS_AS.

ich für die Einrichtung verwendet, um die folgende Anleitung:

SonarQube Setup Gruide for .Net Users v.1.3

Es gibt 157 Spalten mit der falschen Sortierungs "Latin1_General_CS_AS" in der Sonar-Datenbank.

Grüße

Daniel

+3

Sie sollten sich für dieses Thema interessieren: https://groups.google.com/forum/#!searchin/sonarqube/collation%7Csort:relevance/sonarqube/2HYcA97CdY0/JtFRC2YMBgAJ –

+0

Das gleiche Problem hier. Schauen Sie sich [this] (http://stackoverflow.com/questions/9698618/sql-latin1-general-cp1-cs-as-vs-latin1-general-cs-as) an SO Frage: "Der einzige wirkliche Unterschied ist der Sortierreihenfolge für einige Zeichen " –

Antwort

7

Option 1: Beginnen Sie mit einem neuen, leeren Datenbank.

Option 2: die Sonarqube Datenbank wiederherstellen und die Datenbankkollatierung mit SQL Management Studio ändern (unter der Annahme, dass die Datenbank Sonarqube genannt wird), bevor er wieder mit der Aktualisierung beginnen:

-- Show current collation 
USE [master] 
GO 

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

Das Ergebnis Latin1_General_CS_AS sein sollte. Wenn die Abfrage SQL_Latin1_General_CP1_CS_AS die Datenbankkollatierung ändern, bevor auf 6,0 Upgrade:

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 

Option 3: (letztes Mittel) ändern Sie die Datenbanksortierung (siehe Option 2) und die Datenbank manuell ändern (unter Verwendung von SQL Management Studio) . Führen Sie zuerst die folgende Abfrage aus

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 

Dies wird mehrere Zeilen zurückgeben; Beispiel:

Einige Spalten können nicht auf diese Weise geändert werden, da die Spalte in einem Index verwendet wird, der zuerst gelöscht werden muss. Beispiel:

-- 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 

Starten Sie SonarQube neu und starten Sie das Upgrade erneut.

+1

Warum oh warum !!! Warum hat SonarQube die Sortieranforderungen geändert?!!?!?! Ich muss Option 3 durchgehen, um auf Version 6 zu aktualisieren, und das wird ein Albtraum! –

+0

Ich habe Option 2 verwendet und es scheint wie ein Charme gearbeitet zu haben. Vielen Dank dafür. – markdemich

+0

Ich benutzte Option 2 und es scheint wie ein Charme gearbeitet zu haben. Vielen Dank dafür.UPDATE: Ich bin vielleicht auf die Waffe gesprungen. Nach der Aktualisierung der Datenbank scheint es, dass ich eine Art von Korruption habe. Meine Qualitätsprofile hatten keine aktivierten Regeln, aber wenn ich mir die Regeln ansah, hatten einige die Schaltfläche Deaktivieren, was bedeutet, dass sie aktiviert wurden. Es ist sehr merkwürdig. – markdemich