Database
 sql >> Baza danych >  >> RDS >> Database

Ustawianie atrybutów połączenia ODBC bez konieczności pisania kodu

Niedawno klient, który używał naszego sterownika ODBC SQL Server do łączenia Oracle® w systemie Linux z SQL Server, zapytał, czy jest możliwe włączenie poziomu izolacji migawki ze źródła danych ODBC.

Ten poziom izolacji można włączyć, ustawiając atrybut połączenia w wywołaniu SQLSetConnectAttr. Jednak ta metoda nie ma zastosowania, jeśli nie masz dostępu do kodu źródłowego aplikacji, jak miało to miejsce w przypadku naszego klienta Oracle®.

Alternatywnie możesz użyć mechanizmu udostępnionego przez menedżera sterowników unixODBC do ustawienia atrybutów połączenia:

DMConnAttr=[attribute]=value

Uwaga Aby ustawić atrybuty połączenia za pomocą DMConnAttr, potrzebujesz wersji 1.9.10+ sterownika ODBC SQL Server .

Odpowiedni atrybut i wartość poziomu izolacji migawki są zawarte w pliku nagłówkowym SQL Server sqlncli.h, który jest zawarty w dystrybucji sterowników 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)

co daje nam następujący wiersz do dodania do naszego źródła danych ODBC:

DMConnAttr=[1227]=\32

1227 to atrybut (1200+27), a 32 to wartość (wartość dziesiętna 0x00000020L to 32).

Aby sprawdzić, czy nasze ustawienia są prawidłowe,:

$ 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. Jak stworzyć model bazy danych od podstaw

  2. Jaki wpływ może mieć wybór typu danych?

  3. Znaczenie wyboru odpowiedniego rozmiaru maszyny wirtualnej platformy Azure

  4. Zrozumienie obsługi Java dla trwałości z JPA

  5. ) Operator dla początkujących