Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Setting Atribut Koneksi ODBC Tanpa Harus Menulis Kode

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menemukan Nilai Minimum di Kolom

  2. Relasional vs basis data non-relasional - Part 3

  3. SQL PILIH DAN Operator

  4. Apakah Anda selalu membutuhkan database untuk aplikasi Anda?

  5. Pola Hubungan Partai. Bagaimana Memodelkan Hubungan