sql >> データベース >  >> RDS >> Database

コードを記述せずにODBC接続属性を設定する

    最近、SQL ServerODBCドライバーを使用してLinux上のOracle®をSQLServerに接続していた顧客から、ODBCデータソースからスナップショットアイソレーションレベルを有効にできるかどうか尋ねられました。

    SQLSetConnectAttr呼び出しで接続属性を設定することにより、この分離レベルを有効にできます。ただし、Oracle®のお客様の場合のように、アプリケーションのソースコードにアクセスできない場合、この方法は適用できません。

    別の方法として、unixODBCドライバーマネージャーが提供するメカニズムを使用して、接続属性を設定できます。

    DMConnAttr=[attribute]=value
    

    DMConnAttrを介して接続属性を設定するには、1.9.10以上のSQLServerODBCドライバーが必要です。 。

    スナップショットアイソレーションレベルに関連する属性と値は、SQLServerヘッダーファイルsqlncli.hに含まれています。このファイルはSQLServerODBCドライバーディストリビューションに含まれています。

    #define SQL_COPT_SS_BASE            1200
    #define SQL_TXN_SS_SNAPSHOT              0x00000020L
    #define SQL_COPT_SS_TXN_ISOLATION        (SQL_COPT_SS_BASE+27)
    

    これにより、ODBCデータソースに追加する次の行が得られます。

    DMConnAttr=[1227]=\32
    

    1227は属性(1200 + 27)で、32は値です(0x00000020Lの10進値は32です)。

    設定が正しいことをテストするために、次のことを行います。

    $ more /etc/odbc.ini
    
    [SQLSERVER_SAMPLE]
    Driver=Easysoft ODBC-SQL Server
    Server=myserver
    Port=50217
    Database=adventureworks
    User=sa
    Password=p455w0rd
    
    $ /usr/local/easysoft/unixODBC/bin/isql.sh -v SQLSERVER_SAMPLE
    
    SQL> SELECT CASE transaction_isolation_level WHEN 1 THEN 'ReadUncommitted'
    WHEN 2 THEN 'ReadCommitted' WHEN 3 THEN 'Repeatable'
    WHEN 4 THEN 'Serializable' WHEN 5 THEN 'Snapshot' END
    FROM sys.dm_exec_sessions where session_id = @@SPID
    
    ReadCommitted
    
     more /etc/odbc.ini
    
    [SQLSERVER_SAMPLE]
    Driver=Easysoft ODBC-SQL Server
    Server=myserver
    Port=50217
    Database=adventureworks
    User=sa
    Password=p455w0rd
    DMConnAttr=[1227]=\32
    
    $ /usr/local/easysoft/unixODBC/bin/isql.sh -v SQLSERVER_SAMPLE
    
    SQL> SELECT CASE transaction_isolation_level WHEN 1 THEN 'ReadUncommitted'
    WHEN 2 THEN 'ReadCommitted' WHEN 3 THEN 'Repeatable'
    WHEN 4 THEN 'Serializable' WHEN 5 THEN 'Snapshot' END
    FROM sys.dm_exec_sessions where session_id = @@SPID
    
    Snapshot
    

    1. MariaDBのデータベースロールベースのアクセス制御を実装するためのヒントとコツ

    2. 動的クロス集計クエリを実行する

    3. SQL Server 2016:テーブルを作成する

    4. SQLServer比較演算子のリスト