Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Mengapa saya mendapatkan transaksi terbuka ketika hanya memilih dari tampilan database?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah ada cara untuk menggunakan RSA di Oracle/PL SQL?

  2. Masalah membangun cx_Oracle - libclntsh.so.11.1 => tidak ditemukan

  3. Bagaimana menemukan Baris Kode prosedur dan fungsi yang dikemas di Oracle

  4. Bagaimana cara memasukkan nilai ke tabel bersarang tanpa kehilangan data di tabel itu?

  5. Pisahkan nilai yang dipisahkan koma ke kolom di Oracle