带 Liquibase 的 MS SQLServer JDBC 命令行 - 登录失败/TCP IP 异常/端口无效

MS SQLServer JDBCcommandline with Liquibase - Login Failure/ TCP IP Exception/ Port Not Valid

我正在尝试使用 Liquibase 和 Microsoft JDBC Driver 4.1 连接到 Microsoft SQL Server 2008 SP3。我遇到了各种异常,但没有一种成功的方法可以通过命令行对服务器进行身份验证。使用相同的用户名和密码,我能够通过 MS SQL 客户端登录数据库。因此,这不是该用户的登录问题。我认为问题出在 JDBC Driver.

版本:

1) SQL 服务器 2008 - SP3

2) Liquibase v3.3.2

3) JDBC Driver - "Microsoft JDBC Driver 4.1 for SQL Server" - http://www.microsoft.com/en-us/download/details.aspx?id=11774

4) JDK 版本 - 1.7.0_71" [Java(TM) SE Runtime Environment (build 1.7.0_71-b14), Java HotSpot(TM) 64 位服务器 VM(构建 24.71-b01,混合模式)]

我检查过的内容:

1) 允许使用 TCP/ IP,标记为 "YES",端口 1433

2) 安装 MS SQL 2008 SP3 以解决“2976923 2994310 FIX:当您使用 SQL Server 2008 R2 或 SQL Server 2008 时,Oracle 订阅分发代理失败”- http://support.microsoft.com/kb/2653857

3) SQL 服务器身份验证和 Windows 为用户启用身份验证

错误和命令行输入:

1 "com.microsoft.sqlserver.jdbc.sqlserverexception login failed for user"

命令行输入 -

一个。 liquibase --driver=com.microsoft.sqlserver.jdbc.SQLServerDriver --classpath=C:\MicrosoftJDBC\sqljdbc_4.1\enu\sqljdbc4.jar --url="jdbc:sqlserver://DBServer" --username= abcd --password=abcd123 --changeLogFile=db-changelog.xml 更新

b。 liquibase --driver=com.microsoft.sqlserver.jdbc.SQLServerDriver --classpath=C:\MicrosoftJDBC\sqljdbc_4.1\enu\sqljdbc4.jar --url="jdbc:sqlserver://DBServer;databaseName=DBName;" --username= abcd --password=abcd123 --changeLogFile=db-changelog.xml 更新

c。 liquibase --driver=com.microsoft.sqlserver.jdbc.SQLServerDriver --classpath=C:\MicrosoftJDBC\sqljdbc_4.1\enu\sqljdbc4.jar --url="jdbc:sqlserver://DBServer;databaseName=DBName;"; --username=abcd --password=abcd123 --changeLogFile=db-changelog.xml 更新

2 - 意外错误 运行 Liquibase:com.microsoft.sqlserver.jdbc.SQLServerException:端口号 1433\DBName 无效。

命令行输入 -

一个。 liquibase --driver=com.microsoft.sqlserver.jdbc.SQLServerDriver --classpath=sC:\MicrosoftJDBC\sqljdbc_4.1\enu\qljdbc4.jar --url="jdbc:sqlserver://DBServer:1433/DBName" --username= abcd --password=abcd123 --changeLogFile=db-changelog.xml 更新

b。 liquibase --driver=com.microsoft.sqlserver.jdbc.SQLServerDriver --classpath=C:\MicrosoftJDBC\sqljdbc_4.1\enu\sqljdbc4.jar --url="jdbc:sqlserver://DBServer:1433\DBName" --username= abcd --password=abcd123 --changeLogFile=db-changelog.xml 更新

c.liquibase --driver=com.microsoft.sqlserver.jdbc.SQLServerDriver --classpath=C:\MicrosoftJDBC\sqljdbc_4.1\enu\sqljdbc4.jar --url= "jdbc:sqlserver://DBServer\DBName" --username=abcd --password=abcd123 --changeLogFile=db-changelog.xml 更新

3 意外错误 运行 Liquibase:com.microsoft.sqlserver.jdbc.SQLServerException:与主机 DBServer/DBName 的 TCP/IP 连接,端口 1433 失败。错误:"null. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".

命令行输入 -

一个。 liquibase --driver=com.microsoft.sqlserver.jdbc.SQLServerDriver --classpath=C:\MicrosoftJDBC\sqljdbc_4.1\enu\sqljdbc4.jar --url=jdbc:sqlserver:/ /DBServer/DBName" --username=abcd --password=abcd123 --changeLogFile=db-changelog.xml 更新

我需要通过 liquibase 命令行参数解决,而不是通过 Java 或 Maven。我能够通过 Java 和 Maven 成功地对同一用户进行身份验证,但这并没有解决我自动化部署的目的。 请帮助解决这个问题。谢谢!

问题是因为 liquibase.bat 文件删除了 '!' [一个感叹号]最后在批处理文件中解析,然后传递给liquibase.jar文件中的liquibase.integration.commandline.Main方法。我提出了一个问题 liquibase.jira.com/browse/CORE-2250