Bertentangan dengan harapan Anda, sepertinya tautan basis data adalah sumber transaksi terbuka. Saya telah memperhatikan perilaku seperti ini sebelumnya ketika menjalankan kueri SELECT pada tabel jarak jauh di PL/SQL Developer.
Mengutip Tom Kyte ( sumber ):
EDIT :'Setiap pernyataan SQL memulai transaksi di Oracle'? Tidak, tidak, dan inilah demonstrasinya. Demonstrasi ini menggunakan tampilan kamus data V$TRANSACTION , yang mencantumkan transaksi aktif. Ini semua berjalan di database Oracle XE lokal saya, yang tidak memiliki pengguna selain saya yang terhubung dengannya.
Kami akan menggunakan tabel berikut selama demonstrasi ini. Ini hanya berisi satu kolom:
SQL> desc test; Name Null? Type ----------------------------------------- -------- ---------------------------- A NUMBER(38) SQL> select count(*) from v$transaction; COUNT(1) ---------- 0
Tidak ada transaksi aktif saat ini. Mari kita jalankan kueri SQL terhadap tabel ini:
SQL> select * from test; A ---------- 2 SQL> select count(*) from v$transaction; COUNT(1) ---------- 0
Masih belum ada transaksi aktif. Sekarang mari kita lakukan sesuatu yang akan memulai transaksi:
SQL> insert into test values (1); 1 row created. SQL> select count(*) from v$transaction; COUNT(1) ---------- 1
Seperti yang diharapkan, kami sekarang memiliki transaksi aktif.
SQL> commit; Commit complete. SQL> select count(*) from v$transaction; COUNT(1) ---------- 0
Setelah melakukan transaksi, itu tidak lagi aktif.
Sekarang, mari kita buat link database. Saya menggunakan Oracle XE, dan yang berikut ini membuat tautan basis data dari instance Oracle XE saya kembali ke dirinya sendiri:
SQL> create database link loopback_xe connect to user identified by password using 'XE'; Database link created.
Sekarang mari kita lihat apa yang terjadi ketika kita memilih dari tabel di atas link database:
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
Seperti yang Anda lihat, cukup memilih dari tabel jarak jauh akan membuka transaksi.
Saya tidak yakin persis apa yang harus dilakukan atau dikembalikan di sini, tetapi saya harus mengakui bahwa saya tidak mengetahui seluk beluk transaksi terdistribusi, di mana jawabannya mungkin terletak.