Наскоро клиент, който използваше нашия SQL Server ODBC драйвер за свързване на Oracle® на Linux към SQL Server, попита дали е възможно да се активира нивото на изолация на моментна снимка от ODBC източник на данни.
Можете да активирате това ниво на изолация, като зададете атрибут за връзка в извикване на SQLSetConnectAttr. Този метод обаче не е приложим, ако нямате достъп до изходния код на приложението, както беше в случая с нашия клиент на Oracle®.
Като алтернатива можете да използвате механизъм, предоставен от unixODBC Driver Manager, за да зададете атрибути на връзката:
DMConnAttr=[атрибут ]=стойност
Забележка Нуждаете се от 1.9.10+ от ODBC драйвера на SQL Server, за да зададете атрибути на връзката чрез DMConnAttr
.
Съответният атрибут и стойност за нивото на изолация на моментна снимка се съдържат в заглавния файл на SQL Server sqlncli.h, който се съдържа в дистрибуцията на драйвер на 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)
което ни дава следния ред, който да добавим към нашия източник на ODBC данни:
DMConnAttr=[1227]=\32
1227 е атрибутът (1200+27), а 32 е стойността (десетичната стойност на 0x00000020L е 32).
За да проверим дали настройките ни са правилни, ние:
$ още /etc/odbc.ini[SQLSERVER_SAMPLE]Driver=Easysoft ODBC-SQL ServerServer=myserverPort=50217Database=adventureworksUser=saPassword=p455w0rd$ /usr/local/easysoft/easysoft/unixlERSQL_SQL_SQL -SQL ИЗБЕРЕТЕ CASE transaction_isolation_level WHEN 1 THEN 'ReadUncommitted'WHEN 2 THEN 'ReadCommitted' WHEN 3 THEN 'Repeatable'WHEN 4 THEN 'Serializable' WHEN 5 THEN 'Snapshot' ENDFROM sys.dmsessionidcmit сесията /ReadCommited/ReadCommitted/Reading [SQLSERVER_SAMPLE]Драйвер=Easysoft ODBC-SQL ServerServer=myserverPort=50217Database=adventureworksUser=saPassword=p455w0rdDMConnAttr=[1227]=\32$ /usr/local/easysol/easyqlSQLASE транзакция/usr/local/easyxlSQLSE/uSQLSQLSQLShVlSQLSQLSQLShVlSQLSQLSQLSE 1 СЛЕД 'ReadUncommitted'WHEN 2 THEN 'ReadCommitted' WHEN 3 THEN 'Repeatable'WHEN 4 THEN 'Serializable' WHEN 5 THEN 'Snapshot' ENDFROM sys.dm_exec_sessions където session_id =@@SPID>S