Baru-baru ini, seorang pelanggan yang menggunakan driver SQL Server ODBC kami untuk menghubungkan Oracle® di Linux ke SQL Server, menanyakan apakah mungkin untuk mengaktifkan tingkat isolasi snapshot dari sumber data ODBC.
Anda dapat mengaktifkan tingkat isolasi ini dengan menyetel atribut koneksi dalam panggilan SQLSetConnectAttr. Namun, metode ini tidak berlaku jika Anda tidak memiliki akses ke kode sumber aplikasi, seperti yang terjadi pada pelanggan Oracle® kami.
Sebagai alternatif, Anda dapat menggunakan mekanisme yang disediakan oleh Pengelola Driver unixODBC untuk mengatur atribut koneksi:
DMConnAttr=[attribute]=value
Catatan Anda memerlukan 1.9.10+ driver SQL Server ODBC untuk mengatur atribut koneksi melalui DMConnAttr
.
Atribut dan nilai yang relevan untuk tingkat isolasi snapshot terdapat dalam file header SQL Server sqlncli.h, yang terdapat dalam distribusi driver ODBC SQL Server:
#define SQL_COPT_SS_BASE 1200 #define SQL_TXN_SS_SNAPSHOT 0x00000020L #define SQL_COPT_SS_TXN_ISOLATION (SQL_COPT_SS_BASE+27)
yang memberi kita baris berikut untuk ditambahkan ke sumber data ODBC kita:
DMConnAttr=[1227]=\32
1227 adalah atribut (1200+27) dan 32 adalah nilai (nilai desimal 0x00000020L adalah 32).
Untuk menguji apakah setelan kami sudah benar, kami:
$ 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