Database Management
During an upgrade to DPA 2024.4 or 2024.4.100, the repository database upgrade fails with a Bad SqlGrammar Exception
Upgrading to DPA 2024.4 or 2024.4.100 fails if the DPA repository database is case-sensitive.
First published date
Last published date
Overview
During an upgrade to DPA 2024.4 or 2024.4.100, the repository database upgrade fails with a message such as the following:
The Repository Database upgrade failed.
org.springframework.jdbc.Bad SqlGrammar Exception: StatementCallback; bad SQL grammar [UPDATE COND SET DB_TYPE = "MariaDB', MONDBVERSION - RTRIM(LEFT(MONDBVERSION, CHARINDEX((MariaDB), MONDBVERSION)-1)) WHERE jdbc_driver = 'org.mariadb.jdbc.Driver' AND DB_TYPE='MySQL' AND MONDBVERSION like % (MariaDB)]; nested exception is java.sql.SQLException: Invalid column name 'jdbc_driver'. at org.springframework.jdbc.support.SQLErrorCode SQLException Translator.do Translate(SQLErrorCode SQLException Translator.java:239) at org.springframework.jdbc.support.AbstractFallback SQLException Translator.translate(AbstractFallback SQLException Translator.java:70) at
org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1583) at org.springframework.jdbc.core.Jdbc Template.execute(Jdbc Template.java:398) at org.springframework.jdbc.core.JdbcTemplate.update(Jdbc Template.java:563) at SC.eval0(SC.java:1) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
Product section
Cause
A script that is part of the repository database upgrade has the column name jdbc_driver in lowercase letters, which does not match the capitalization of the column name in the repository. Therefore, in case-sensitive databases, this column is not found.
SQL Server databases are case-sensitive by default. Oracle and MySQL databases can also be case-sensitive.
Resolution
Note: Edit the schema name to dbo or ignite in the following queries as needed.
-
If you receive the error shown above, stop the DPA server.
-
In the DPA repository database, run the following SQL statements in order:
-
For a SQL Server repository database:
-
Run query 1:
UPDATE ignite.COND SET DB_TYPE = 'MariaDB', MONDBVERSION = RTRIM(LEFT(MONDBVERSION, CHARINDEX('(MariaDB)', MONDBVERSION)-1)) WHERE JDBC_DRIVER = 'org.mariadb.jdbc.Driver' AND DB_TYPE = 'MySQL' AND MONDBVERSION like '%(MariaDB)'; -
Run query 2:
UPDATE ignite.CONLIC_INSTANCE_ALLOCATION SET DB_TYPE = 'B', CONSUMER_ID = CONCAT(SUBSTRING(CONSUMER_ID, 1, CHARINDEX('|', CONSUMER_ID) - 1), '|B') FROM ignite.CONLIC_INSTANCE_ALLOCATION AS cia INNER JOIN ignite.COND AS cd ON SUBSTRING(cia.CONSUMER_ID, 1, CHARINDEX('|', cia.CONSUMER_ID) - 1) = cd.ID WHERE cd.DB_TYPE = 'MariaDB' AND cia.DB_TYPE = 'M' AND cia.CONSUMER_ID = CONCAT(cd.ID, '|M'); -
Run query 3:
UPDATE ignite.CON_VERSION SET VERSION = 20244007 WHERE ARTIFACT = 'REPOVERSION';
-
-
For an Oracle repository database:
-
Run query 1:
UPDATE COND SET DB_TYPE = 'MariaDB', MONDBVERSION = RTRIM(SUBSTR(MONDBVERSION, 0, INSTR(MONDBVERSION,'(MariaDB)')-1)) WHERE JDBC_DRIVER = 'org.mariadb.jdbc.Driver' AND DB_TYPE = 'MySQL' AND MONDBVERSION like '%(MariaDB)';
-
Run query 2:
UPDATE CONLIC_INSTANCE_ALLOCATION cia SET (cia.DB_TYPE, cia.CONSUMER_ID) = (SELECT 'B', cd.ID || '|B' FROM COND cd WHERE cd.DB_TYPE = 'MariaDB' AND cia.CONSUMER_ID = TO_CHAR(cd.ID) || '|M') WHERE cia.DB_TYPE = 'M' AND cia.CONSUMER_ID IN (SELECT cd.ID||'|M' FROM COND cd WHERE cd.DB_TYPE = 'MariaDB');
-
Run query 3:
UPDATE CON_VERSION SET VERSION = 20244007 WHERE ARTIFACT = 'REPOVERSION';
-
-
For a MySQL repository database:
-
Run query 1:
UPDATE COND SET DB_TYPE = 'MariaDB', MONDBVERSION = TRIM(SUBSTRING_INDEX(MONDBVERSION, '(MariaDB)', 1)) WHERE JDBC_DRIVER = 'org.mariadb.jdbc.Driver' AND DB_TYPE = 'MySQL' AND MONDBVERSION like '%(MariaDB)';
-
Run query 2:
UPDATE CONLIC_INSTANCE_ALLOCATION cia JOIN COND cd ON cd.ID = TRIM(SUBSTRING_INDEX(cia.CONSUMER_ID, '|', 1)) AND cd.DB_TYPE = 'MariaDB' AND cia.DB_TYPE = 'M' SET cia.DB_TYPE = 'B', cia.CONSUMER_ID = CONCAT(cd.ID, '|B') WHERE cia.CONSUMER_ID = CONCAT(cd.ID, '|M');
-
Run query 3:
UPDATE CON_VERSION SET VERSION = 20244007 WHERE ARTIFACT = 'REPOVERSION';
-
-