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

Memahami perilaku ORA_ROWSCN di Oracle

Secara default, ORA_ROWSCN disimpan di tingkat blok, bukan di tingkat baris. Itu hanya disimpan di tingkat baris jika tabel awalnya dibuat dengan ROWDEPENDENCIES diaktifkan. Dengan asumsi bahwa Anda dapat memuat banyak baris tabel Anda dalam satu blok dan Anda tidak menggunakan APPEND petunjuk untuk memasukkan data baru di atas tanda air tinggi yang ada dari tabel, Anda mungkin memasukkan data baru ke dalam blok yang sudah memiliki beberapa data yang ada di dalamnya. Secara default, itu akan mengubah ORA_ROWSCN dari setiap baris dalam blok yang menyebabkan kueri Anda menghitung lebih banyak baris daripada yang sebenarnya dimasukkan.

Sejak ORA_ROWSCN hanya dijamin menjadi batas atas saat terakhir kali ada DML pada satu baris, akan jauh lebih umum untuk menentukan berapa banyak baris yang dimasukkan hari ini dengan menambahkan CREATE_DATE kolom ke tabel yang defaultnya adalah SYSDATE atau mengandalkan SQL%ROWCOUNT setelah INSERT berlari (dengan asumsi, tentu saja, bahwa Anda menggunakan satu INSERT pernyataan untuk menyisipkan semua baris).

Umumnya, menggunakan ORA_ROWSCN dan SCN_TO_TIMESTAMP function akan menjadi cara yang bermasalah untuk mengidentifikasi kapan sebuah baris dimasukkan meskipun tabel dibuat dengan ROWDEPENDENCIES . ORA_ROWSCN mengembalikan Oracle SCN yang merupakan Nomor Perubahan Sistem. Ini adalah pengidentifikasi unik untuk perubahan tertentu (yaitu transaksi). Dengan demikian, tidak ada hubungan langsung antara SCN dan waktu-- database saya mungkin menghasilkan SCN jutaan kali lebih cepat daripada milik Anda dan SCN 1 saya mungkin bertahun-tahun berbeda dari SCN 1 Anda. Proses latar belakang Oracle SMON memelihara tabel yang memetakan nilai SCN ke perkiraan stempel waktu tetapi hanya mempertahankan data itu untuk jangka waktu terbatas-- jika tidak, database Anda akan berakhir dengan tabel baris multi-miliar yang hanya menyimpan SCN ke pemetaan stempel waktu. Jika baris disisipkan lebih dari, katakanlah, seminggu yang lalu (dan batas pastinya bergantung pada database dan versi database), SCN_TO_TIMESTAMP tidak akan dapat mengonversi SCN menjadi stempel waktu dan akan menampilkan kesalahan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PLS-00201:pengenal 'R_CUR' harus dideklarasikan dalam sql dinamis

  2. Mengapa kita tidak dapat menggunakan kursor ref yang kuat dengan Pernyataan SQL dinamis?

  3. Permintaan Pembaruan Oracle SQL membutuhkan waktu berhari-hari untuk diperbarui

  4. Mengelompokkan Variabel Biner Berdasarkan ID dan Tanggal Min/Maks

  5. Ekstrak tanggal dari string oracle