Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Đặt thuộc tính kết nối ODBC mà không cần phải viết mã

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thống kê chờ Knee-Jerk:CXPACKET

  2. Kết nối với Cơ sở dữ liệu bằng PHP

  3. Cách đảm bảo rằng cơ sở dữ liệu được sao lưu thường xuyên

  4. Hướng dẫn cơ bản của bạn để tham gia SQL:CROSS JOIN - Phần 3

  5. Cập nhật tệp cấu hình với cài đặt cơ sở dữ liệu mới của bạn