Wbrew oczekiwaniom wygląda na to, że link do bazy danych jest źródło otwartej transakcji. Zauważyłem takie zachowanie już wcześniej podczas uruchamiania zapytań SELECT na zdalnych tabelach w PL/SQL Developer.
Cytując Toma Kyte ( źródło ):
EDYTUJ :'Każda instrukcja SQL uruchamia transakcję w Oracle'? Nie, nie ma, a oto demonstracja tego. Ta demonstracja korzysta z widoku słownika danych V$TRANSACTION , który zawiera listę aktywnych transakcji. To wszystko działa w mojej lokalnej bazie danych Oracle XE, do której nie są podłączeni inni użytkownicy niż ja.
Podczas tej demonstracji użyjemy poniższej tabeli. Zawiera tylko jedną kolumnę:
Test opisuSQL> desc test; Name Null? Type ----------------------------------------- -------- ---------------------------- A NUMBER(38) SQL> select count(*) from v$transaction; COUNT(1) ---------- 0
Brak aktywnych transakcji w tej chwili. Uruchommy zapytanie SQL w tej tabeli:
SQL> select * from test; A ---------- 2 SQL> select count(*) from v$transaction; COUNT(1) ---------- 0
Wciąż brak aktywnych transakcji. Teraz zróbmy coś, co rozpocznie transakcję:
SQL> insert into test values (1); 1 row created. SQL> select count(*) from v$transaction; COUNT(1) ---------- 1
Zgodnie z oczekiwaniami mamy teraz aktywną transakcję.
SQL> commit; Commit complete. SQL> select count(*) from v$transaction; COUNT(1) ---------- 0
Po zatwierdzeniu transakcji nie jest już aktywna.
Teraz stwórzmy link do bazy danych. Używam Oracle XE, a następujące elementy tworzą łącze bazy danych z mojej instancji Oracle XE z powrotem do siebie:
SQL> create database link loopback_xe connect to user identified by password using 'XE'; Database link created.
Zobaczmy teraz, co się stanie, gdy wybierzemy z tabeli nad łączem do bazy danych:
SQL> select count(*) from v$transaction;
COUNT(1)
----------
0
SQL> select * from [email protected]_xe;
A
----------
2
1
SQL> select count(*) from v$transaction;
COUNT(1)
----------
1
Jak widać, po prostu wybranie ze zdalnego stołu otwiera transakcję.
Nie jestem pewien, co dokładnie mam tutaj zatwierdzić lub cofnąć, ale muszę przyznać, że nie znam tajników rozproszonych transakcji, w których prawdopodobnie leży odpowiedź.