Migrating database
The SonarQube database copy tool helps you migrate your SonarQube Community Build database between vendors.
Customers can download the SonarQube DB Copy Tool.
We provide SonarQube DB Copy Tool to help you migrate your SonarQube Community Build database from one database vendor to another. For example, if you’ve been using your SonarQube Community Build instance with Oracle and want to migrate to PostgreSQL, the SonarQube DB Copy Tool will help. DB Copy is preferred for database migration because it does SonarQube-specific checks, ensures data consistency, and outputs meaningful logs.
On this page, source refers to your current database and target refers to the database you are moving to.
1. DB Copy - preparation phase
DB Copy only copies data, not the schema. This is why the purpose of this step is to populate target with an empty SonarQube schema. For this, you have to install a temporary SonarQube Community Build instance.
Make sure you can connect to your target database.
Download a SonarQube Community Build that matches the version and edition of your source instance.
Unzip SonarQube Community Build and put it in a relevant place on the machine.
Configure SonarQube Community Build to connect to your target database (ie. provide JDBC parameters in the
<sonarqubeHome>/conf/sonar.properties
file).Start SonarQube Community Build using the script matching your operating system:
On Linux:
<sonarqubeHome>/bin/linux-x86-64/sonar.sh start
On macOS:
<sonarqubeHome>/bin/macosx-universal-64/sonar.sh start
On Windows:
<sonarqubeHome>\bin\windows-x86-64\StartSonar.bat
Verify that the SonarQube schema was correctly created. To do this, look at the
logs/web.log
file to see the line "Executed DB migrations: success". Once this is done, it means that your target database had been populated with the SonarQube schema.Stop SonarQube Community Build:
On Linux:
<sonarqubeHome>/bin/linux-x86-64/sonar.sh stop
On macOS:
<sonarqubeHome>/bin/macosx-universal-64/sonar.sh stop
On Windows: terminate the
StartSonar.bat
script
You can now delete this temporary SonarQube Community Build instance.
2. DB Copy - execution phase
Because this step is about copying data from source to target, the overall performance makes a difference. Make sure you execute this on a powerful machine that has fast network access to both database servers.
Unzip the DB Copy package provided by SonarSource Support on the machine where it will be executed. Java is required.
Stop the SonarQube Community Build instance connected to your source database. This is to ensure that we don’t have records being inserted/updated while copying.
Execute the base command with the correct parameters. See below how to do it.
If you see something else other than the success message **THE COPY HAS FINISHED SUCCESSFULLY** please open a SonarSource Support ticket and provide the complete DB Copy logs for investigation (logs are just the standard output of the tool).
Base command and parameters
Migrating with an Oracle database
If you wish to migrate with an Oracle database, you need to include the Oracle driver in the classpath so it is available to the sonar-db-copy tool. In this case, the syntax is:
java -cp ojdbc11-21.8.0.0.jar:sonar-db-copy-1.6.0.2092.jar com.sonar.dbcopy.StartApp
On Windows, the classpath arguments separator is a semicolon (;), while on a Unix system (like in the example) it is a colon (:).
Migrating with all other databases
If you are not migrating from or to an Oracle database, then the syntax is:
java -jar sonar-db-copy-1.6.0.2092-jar-with-dependencies.jar
Parameter
Description
Required
-help
Print this help information
no
-urlSrc JDBC_URL
JDBC URL of the source database
yes
-userSrc USERNAME
Username of the source database
yes
-pwdSrc PASSWORD
Password of the source database
yes
-urlDest JDBC_URL
JDBC URL of the target database
yes
-userDest USERNAME
Username of the target database
yes
-pwdDest PASSWORD
Password of the target database
yes
Here is an example of a copy from an Oracle to a Postgres database. Note that each parameter is on one line and there are \ (backslash) characters to continue the command. While this works on most shell command-line interpreters, it is not necessarily the case. Use only one line and remove backslashes in that case.
java \
-cp ojdbc11-21.8.0.0.jar:sonar-db-copy-1.6.0.2092.jar com.sonar.dbcopy.StartApp \
-urlSrc jdbc:oracle:thin:@10.18.51.1:1521/XEPDB1 \
-userSrc sonar \
-pwdSrc 05xlAz1EhgQb9Pl8 \
-urlDest jdbc:postgresql://10.10.1.138/sonarqube \
-userDest sonar \
-pwdDest Ck23L1OpqF4BdwJv
Last updated
Was this helpful?