Anonymous - 2012-03-27

UPDATE::
I have been playing around and testing and managed to get DB Sanity working. It turned out that all problems here were due to environment file configuration. Here are some of my observations:
1. Original configuration was:
db_url=jdbc:sqlserver://<my_remote_server>;
db_driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
db_user=<my_user>
db_password=<my_password>
db_catalog=<my_database_name>

RESULT: Error as reported originally.

2. Modified configuration by using all parameters in URL only.
db_url=jdbc:sqlserver://<my_remote_server>;databaseName=<my_database_name>;user=<my_user>;password=<my_password>;
db_driver=com.microsoft.sqlserver.jdbc.SQLServerDriver

RESULT: Check with <sql></sql> passed ok, but checks like UNIQUE, FOREIGN KEY, NOT NULL fail with error like:
org.databene.commons.ObjectNotFoundException: Table 'tcInspection'
at org.databene.jdbacl.model.DefaultDatabase.getTable(DefaultDatabase.java:200)
at org.databene.jdbacl.model.DefaultDatabase.getTable(DefaultDatabase.java:191)
at org.databene.dbsanity.model.NotNullQueryStrategy.perform(NotNullQueryStrategy.java:55)
at org.databene.dbsanity.model.StrategyBasedCheck.perform(StrategyBasedCheck.java:68)
at org.databene.dbsanity.model.CheckHolderSupport.performCheck(CheckHolderSupport.java:149)
at org.databene.dbsanity.model.CheckHolderSupport.perform(CheckHolderSupport.java:81)
at org.databene.dbsanity.model.SuiteHolderSupport.perform(SuiteHolderSupport.java:94)
at org.databene.dbsanity.DbSanity.execute(DbSanity.java:351)
at org.databene.dbsanity.DbSanity.execute(DbSanity.java:310)
at org.databene.dbsanity.Main.main(Main.java:50)

3. Modified configuration by using all parameters in URL and in addition db_catalog parameter
db_url=jdbc:sqlserver://<my_remote_server>;databaseName=<my_database_name>;user=<my_user>;password=<my_password>;
db_driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
db_catalog=<my_database_name>

RESULT: All checks, UNIQUE, FK, NOT NULL and SQL pass fine.

Conclusion:
Initial error due to incorrectly provided URL (maybe better error output could help identify this issue?). However, only <sql></sql> checks are passed fine with db_url provided. Other checks require the optional db_catalog parameter set as well. If the database name was already provided in db_url, could it be possible to avoid duplicating it in db_catalog for all to work? Or maybe documentation just need to be updated?

Tested on Microsoft's JDBC 4.0 driver for SQL and Java SE 7u3

Hope this helps.
Best regards,
Ryandell