Gần đây, một khách hàng đang sử dụng trình điều khiển ODBC SQL Server của chúng tôi để kết nối Oracle® trên Linux với SQL Server, đã hỏi liệu có thể bật mức cách ly ảnh chụp nhanh từ nguồn dữ liệu ODBC hay không.
Bạn có thể bật mức cô lập này bằng cách đặt thuộc tính kết nối trong lệnh gọi SQLSetConnectAttr. Tuy nhiên, phương pháp này không thể áp dụng nếu bạn không có quyền truy cập vào mã nguồn của ứng dụng, như trường hợp với khách hàng Oracle® của chúng tôi.
Thay vào đó, bạn có thể sử dụng cơ chế do Trình quản lý trình điều khiển unixODBC cung cấp để đặt các thuộc tính kết nối:
DMConnAttr=[attribute]=value
Lưu ý Bạn cần 1.9.10+ trình điều khiển SQL Server ODBC để đặt thuộc tính kết nối qua DMConnAttr
.
Thuộc tính và giá trị liên quan cho mức cô lập ảnh chụp nhanh được chứa trong tệp tiêu đề SQL Server sqlncli.h, được chứa trong bản phân phối trình điều khiển 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)
cung cấp cho chúng tôi dòng sau để thêm vào nguồn dữ liệu ODBC của chúng tôi:
DMConnAttr=[1227]=\32
1227 là thuộc tính (1200 + 27) và 32 là giá trị (giá trị thập phân của 0x00000020L là 32).
Để kiểm tra xem cài đặt của chúng tôi có đúng không, chúng tôi:
$ 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