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

ORACLE/ASP.NET:ORA-2020 - Terlalu banyak tautan basis data ... apa yang menyebabkan ini?

Pertama, solusi sederhana:Saya akan memeriksa ulang bahwa dalam basis data produksi jumlah tautan default sebenarnya 4.

select *
  from v$system_parameter
 where name = 'OPEN_LINKS'

Dengan asumsi Anda tidak akan melakukannya dengan mudah:

Anda mengatakan bahwa Anda secara eksplisit menutup sesi, yang menurut dokumentasi , harus berarti bahwa semua tautan yang terkait dengan sesi tersebut ditutup. Selain itu, saya mengakui ketidaktahuan sepenuhnya tentang hal ini.

Tidak ada kekurangan yang bisa saya pikirkan. Saran Tom Kyte , meskipun sudah lama sekali, bahwa setiap tautan basis data yang terbuka menggunakan 500 ribu memori PGA. Jika Anda tidak memilikinya maka ini jelas akan menyebabkan masalah tetapi seharusnya lebih dari baik untuk sebagian besar situasi.

Namun, ada konsekuensi yang tidak diinginkan:Bayangkan Anda menaikkan angka ini menjadi 100. Seseorang mengkodekan sesuatu yang terus-menerus membuka tautan dan mengambil banyak data melalui semuanya select * from my_massive_table atau serupa. Alih-alih 4 sesi melakukan ini, Anda memiliki 100, yang mencoba mentransfer ratusan gigabyte secara bersamaan. Jaringan Anda mati di bawah tekanan...

Mungkin ada lebih banyak tetapi Anda mendapatkan gambarannya.

Seperti yang telah Anda catat, jawaban terbaik adalah "mungkin tidak", yang tidak banyak membantu. Anda tidak menyebutkan dengan tepat bagaimana Anda mengakhiri sesi, tetapi jika Anda mematikannya alih-alih menutup dengan anggun, maka pasti.

Menggunakan tautan basis data memunculkan proses anak di server jauh. Karena server Anda tidak lagi bertanggung jawab penuh atas proses ini, ada banyak hal yang dapat menyebabkannya menjadi yatim piatu atau tidak ditutup pada penghentian proses induk. Ini tidak berarti bahwa ini terjadi sepanjang waktu, tetapi hal ini dapat dan terjadi.

Saya akan melakukan dua hal.

  1. Dalam proses Anda, jika pengecualian ditemukan, kirim email hasil kueri berikut ke email Anda sendiri.

    select * 
      from v$dblink
    

    Setidaknya Anda akan mengetahui tautan basis data apa yang terbuka di sesi tersebut dan memberi Anda beberapa cara untuk melacaknya.

  2. Ikuti saran dokumentasi; khusus sebagai berikut:

    "Anda mungkin memiliki kesempatan untuk menutup tautan secara manual. Misalnya, menutup tautan ketika:

    • Koneksi jaringan yang dibuat oleh tautan jarang digunakan dalam aplikasi.
    • Sesi pengguna harus dihentikan."

Yang pertama tampaknya sangat cocok dengan situasi Anda. Kecuali proses Anda sensitif terhadap waktu, yang tampaknya tidak demikian, lalu apa kerugian Anda? Sintaksnya adalah:

alter session close database link <linkname>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pencarian teks Oracle Fuzzy

  2. Cara menghapus file log arsip pada instance Oracle AWS RDS

  3. Kembalikan semua Pengguna, bahkan mereka yang tidak sesuai dengan kriteria saya

  4. Perjalanan Melalui GIMR

  5. Indeks nonpartisi global di Oracle