Database
 sql >> база данни >  >> RDS >> Database

Задаване на атрибути на ODBC връзка, без да се налага да се пише код

Наскоро клиент, който използваше нашия 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 =@S 
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL ALTER TABLE за начинаещи

  2. Как да намерите дублиращи се редове в SQL?

  3. Въведение в модела на данни за ER

  4. Използване на isql с низ за връзка

  5. Съображения около реда на колоните в индекси и сортове