हाल ही में, एक ग्राहक जो हमारे 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