【问题标题】:Unix FreeTDS Isolation Level SybaseUnix FreeTDS 隔离级别 Sybase
【发布时间】:2013-11-18 23:05:21
【问题描述】:

根据 Sybase 文档 (http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.sqlanywhere.12.0.1/dbusage/udtisol.html) 有一段:

[...] 默认隔离级别为 0,但 [...] 和 TDS 连接除外,它们的默认隔离级别为 1。[...]

我正在使用 Unix 上的 FreeTDS 连接到该服务器。到目前为止,我还没有找到将 Isolation-Level 更改为 0 (Read-Uncommitted) 的解决方案(可能使用 /etc/freetds.conf 但在这里我也没有找到任何东西)。对我来说,修改 SQL 语句是不可能的,所以我正在寻找一个配置选项。

谁有想法?

【问题讨论】:

    标签: sybase isolation-level freetds unixodbc rowlocking


    【解决方案1】:

    您可以使用以下方法设置连接的隔离级别:

    SET TEMPORARY OPTION isolation_level = 0;
    

    如果您需要更多详细信息check the documentation

    您可以通过以下方式查看当前的隔离级别:

    SELECT CONNECTION_PROPERTY('isolation_level');
    

    【讨论】:

    • 似乎不起作用。 “SET ...”运行时没有任何错误,但“SELECT CONNECTION_PROPERTY...”遇到错误,说明未找到表 databaseName.connection_property。在现有表上运行其他一些选择语句(使用相同的连接)后,我得到了相同的行锁定错误。
    • 您确定您正在运行 Sybase SQL Anywhere 12?
    • 是的。您的解决方案适用于 tSQL,但不适用于 unix 上的 DBI/FreeTDS:/
    • 我不确定,但可能是驱动程序问题。 freeTDS 不使用 Sybase ASE 驱动程序吗?尝试使用 Jconnect 连接到 Sybase SQL Anywhere
    • 如果我错了请纠正我,但 Jconnect 仅适用于 Java,不是吗?我在 Perl 上。
    【解决方案2】:

    这就是诀窍:

    set TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-02
      • 2013-01-25
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      相关资源
      最近更新 更多