使用实例名(JDBC)动态发布到Tridion Broker数据库时出现连接问题?

使用实例名(JDBC)动态发布到Tridion Broker数据库时出现连接问题?,tridion,tridion-2011,tridion-content-delivery,Tridion,Tridion 2011,Tridion Content Delivery,提交阶段始终失败,并出现以下错误: Committing Deployment Failed Phase: Deployment Prepare Commit Phase failed, Unable to prepare transaction: tcm:0515104-66560, org.hibernate.exception.JDBCConnectionException: Cannot open connection, org.hibernate.exception.JDBCConne

提交阶段始终失败,并出现以下错误:

Committing Deployment Failed
Phase: Deployment Prepare Commit Phase failed, Unable to prepare transaction: tcm:0515104-66560,
org.hibernate.exception.JDBCConnectionException: Cannot open connection,
org.hibernate.exception.JDBCConnectionException: Cannot open connection, Unable to prepare transaction: tcm:0-515104-66560, 
org.hibernate.exception.JDBCConnectionException: Cannot open connection,
org.hibernate.exception.JDBCConnectionException: Cannot open connection
这是在具有默认实例(DEV/UAT)的数据库中工作的配置:


但是,对于我们的产品,使用命名实例是不可避免的。因此,我们尝试通过此配置传递实例的名称,但没有效果;我们仍然得到了错误



连接字符串有什么问题吗?或者是否有方法使用第一个模式传递实例名称;例如说

您可以尝试以下方法:



您指定URL的原始语法是正确的,但是,在检查后,我似乎找不到名为“域”的有效属性。这可能是你的罪魁祸首。尝试使用“\”在用户名中指定域。

根据本msdn文章:

您应该这样配置它:

jdbc:sqlserver://[serverName[\instanceName][:portNumber]][;property=value[;property=value]]

您应该同时使用服务器名和实例名

<Storage Type="persistence" Id="brokerdb" dialect="MSSQL" Class="com.tridion.storage.persistence.JPADAOFactory">
    <Pool Type="jdbc" Size="5" MonitorInterval="60" IdleTimeout="120" CheckoutTimeout="120" />
    <DataSource Class="com.microsoft.sqlserver.jdbc.SQLServerDataSource">
        <Property Name="serverName" Value="ourServerName\\THE_INSTANCE_NAME" />
        <Property Name="portNumber" Value="1433" />
        <Property Name="databaseName" Value="Tridion_Broker" />
        <Property Name="user" Value="TridionBrokerUser" />
        <Property Name="password" Value="xxxxxxxxpassxx" />
    </DataSource>
</Storage>​
另一方面,我对这个旧表示的URL做了一点修改

<Storage Type="persistence" Class="com.tridion.storage.persistence.JPADAOFactory" Id="brokerdb" Url="jdbc:sqlserver://ourServerName;instanceName=THE_INSTANCE_NAME;databaseName=Tridion_Broker;integratedSecurity=true;" Username="TridionBrokerUser" Password="xxxxxxxxpassxx"    Driver="com.microsoft.sqlserver.jdbc.SQLServerDataSource">
    <Pool Type="jdbc" Size="5" MonitorInterval="60" IdleTimeout="120" CheckoutTimeout="120"/>
</Storage>

请为上述旧表示形式尝试以下URL:-

  • jdbc:sqlserver://ourServerName\\_实例_名称;databaseName=Tridion_Broker;integratedSecurity=true

  • jdbc:sqlserver://ourServerName\_实例_名称;databaseName=Tridion_Broker;integratedSecurity=true

  • jdbc:sqlserver://ourServerName;instanceName=实例名称;databaseName=Tridion_Broker;integratedSecurity=true;​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

  • jdbc:sqlserver://ourServerName/Tridion_Broker;instanceName=实例名称;域名=域名

  • 供参考:-

  • Nikoli和Gertjan都让我意识到实例名不是必需的另一种方法是指定实例运行的端口。

    这向我展示了如何知道实例正在使用哪个端口

    此配置工作正常:

    
    
    我还尝试了连接字符串方法,它也起了作用:

    
    
    另外,您似乎缺少存储元素上的方言=“MSSQL”属性。您是对的,在我们的情况下不需要域。它是解决方案的一部分。谢谢。
    不起作用。这与Puntero的答案相同。至于“连接字符串”方法,#2在没有
    integratedSecurity
    参数的情况下工作。如果以下任何回答回答了您的问题,您能否接受这一回答,以便对其他社区成员有所帮助。