Database
 sql >> डेटाबेस >  >> RDS >> Database

कोड लिखने के बिना ODBC कनेक्शन विशेषताएँ सेट करना

हाल ही में, एक ग्राहक जो हमारे SQL सर्वर ODBC ड्राइवर का उपयोग Linux पर Oracle® को SQL सर्वर से जोड़ने के लिए कर रहा था, ने पूछा कि क्या ODBC डेटा स्रोत से स्नैपशॉट अलगाव स्तर को सक्षम करना संभव है।

आप SQLSetConnectAttr कॉल में कनेक्शन विशेषता सेट करके इस आइसोलेशन स्तर को सक्षम कर सकते हैं। हालांकि, यह विधि लागू नहीं होती है यदि आपके पास एप्लिकेशन के स्रोत कोड तक पहुंच नहीं है, जैसा कि हमारे Oracle® ग्राहक के मामले में था।

एक विकल्प के रूप में, आप कनेक्शन विशेषताओं को सेट करने के लिए यूनिक्सोडबीसी ड्राइवर प्रबंधक द्वारा प्रदान किए गए तंत्र का उपयोग कर सकते हैं:

DMConnAttr=[attribute]=value

नोट DMConnAttr के माध्यम से कनेक्शन विशेषताओं को सेट करने के लिए आपको SQL सर्वर ODBC ड्राइवर के 1.9.10+ की आवश्यकता है ।

स्नैपशॉट अलगाव स्तर के लिए प्रासंगिक विशेषता और मान SQL सर्वर हेडर फ़ाइल sqlncli.h में निहित है, जो SQL सर्वर ODBC ड्राइवर वितरण में निहित है:

#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 का दशमलव मान 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. आईआरआई कार्यक्षेत्र में ईआर आरेख

  2. ओडीबीसी कितना तेज है? एक "लोडेड" तुलना।

  3. पार्स पैरामीटर डिफ़ॉल्ट मान PowerShell का उपयोग कर - भाग 2

  4. एसक्यूएल प्राकृतिक शामिल हों

  5. LD_DEBUG पर्यावरण चर