sql >> Database teknologi >  >> RDS >> Database

Indstilling af ODBC-forbindelsesattributter uden at skulle skrive kode

For nylig spurgte en kunde, der brugte vores SQL Server ODBC-driver til at forbinde Oracle® på Linux til SQL Server, om det var muligt at aktivere snapshot-isolationsniveauet fra en ODBC-datakilde.

Du kan aktivere dette isolationsniveau ved at indstille en forbindelsesattribut i et SQLSetConnectAttr-kald. Denne metode er dog ikke anvendelig, hvis du ikke har adgang til applikationens kildekode, som det var tilfældet med vores Oracle®-kunde.

Som et alternativ kan du bruge en mekanisme leveret af unixODBC Driver Manager til at indstille forbindelsesattributter:

DMConnAttr=[attribute]=value

Bemærk Du skal bruge 1.9.10+ af SQL Server ODBC-driveren for at indstille forbindelsesattributter via DMConnAttr .

Den relevante attribut og værdi for snapshot-isolationsniveau er indeholdt i SQL Server-header-filen sqlncli.h, som er indeholdt i SQL Server ODBC-driverdistributionen:

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

hvilket giver os følgende linje at tilføje til vores ODBC-datakilde:

DMConnAttr=[1227]=\32

1227 er attributten (1200+27) og 32 er værdien (decimalværdien af ​​0x00000020L er 32).

For at teste, at vores indstillinger var korrekte, gør vi:

$ 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. Sådan redigeres MySQL my.cnf-filen

  2. phpMyBackupPro – Et webbaseret MySQL-sikkerhedskopieringsværktøj til Linux

  3. PHP-kommandoer ude af synkronisering

  4. Hvordan man ikke bygger PostgreSQL 9.0-udvidelser på RPM-platforme