Have an amazing solution built in RAD Studio? Let us know. Looking for discounts? Visit our Special Offers page!
Новости

Изменения в конфигурации изоляции транзакций FireDAC в RAD Studio 10.4

До RAD Studio 10.4 параметр изоляции транзакции по умолчанию для соединений FireDAc считался подтвержденным. Это TFDConnection.TxOptions.Isolation был xiReadCommitted. Это было значение, установленное для компонента, и по умолчанию оно не отправлялось в базу данных. FireDAC просто предположил, что значение по умолчанию в его конфигурации было значением по умолчанию для базы данных, и он не отправлял эту конфигурацию изоляции явно в базу данных в начале сеанса. Например, в MySQL требуемая команда SET SESSION TRANSACTION ISOLATION LEVEL не была выполнена, если значение по умолчанию не было изменено. В этом случае изоляция транзакции MySQL оставалась равной значению базы данных по умолчанию, равному xiRepeatableRead, независимо от того, что было установлено в конфигурации FireDAC по умолчанию.

Чтобы решить эту проблему, мы решили, что лучше оставить уровень изоляции по умолчанию на xiUnspecified, что означает, что если вам не потребуется определенный уровень изоляции, будет использоваться конфигурация по умолчанию для конкретной базы данных — это тот, который уже предварительно установлен int база данных, и вам не нужно спрашивать настройку. Уровень изоляции по умолчанию оптимизирован для конкретной базы данных, поскольку значения по умолчанию отличаются, а некоторые уровни изоляции даже не поддерживаются всеми ядрами баз данных одинаково хорошо.

Если разработчик хочет использовать уровень изоляции, отличный от уровня изоляции по умолчанию, используемого базой данных, он должен быть явно установлен в конфигурации компонента или в коде. Если разработчик хочет использовать базу данных по умолчанию, код не требуется.

Вот уровни изоляции основных баз данных по умолчанию в терминах FireDAC — опять же, значение свойства просто xiUnspecified:

DB2 — xiReadCommitted
InterBase и Firebird — xiSnapshot
MySQL и MariaDB — xiRepeatableRead
Oracle — xiReadCommitted
Microsoft SQL Server — xiReadCommitted
SQLite — xiSerializible
PostgreSQL — xiReadCommitted

Я надеюсь, что это поможет прояснить изменение и объяснить, как его обойти, изменив уровень изоляции транзакции вашего FireDAC-соединения на тот, который вам конкретно нужен, если он отличается от уровня базы данных по умолчанию. Это изменение не было указано в примечаниях к выпуску RAD Studio 10.4, и оно действительно вызывало некоторые опасения (и сообщения об ошибках).


Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.
Start Free Trial   Upgrade Today

   Free Delphi Community Edition   Free C++Builder Community Edition

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

IN THE ARTICLES