Pertanyaan ini terinspirasi oleh artikel ini . Mungkin ada banyak orang Oracle mencari angka-angka ini sekarang. :)
Nick Chammas
Sepertinya tautan dari komentar saya sebelumnya rusak. Saya percaya bahwa halaman telah dipindahkan di sini: infoworld.com/article/2618409/…
Nick Chammas
Jawaban:
16
SCN saat ini
Oracle 9i:
SELECT dbms_flashback.get_system_change_number as current_scn
FROM DUAL;
Oracle 10g ke atas:
SELECT current_scn
FROM V$DATABASE;
Batas SCN
SCN memiliki batas keras yang ditentukan oleh formatnya dan batas lunak yang dikenakan secara artifisial oleh Oracle, seperti dijelaskan di sini . Saya telah mengutip bagian yang relevan di bawah ini (penekanan ditambahkan).
Batas keras
Arsitek aplikasi basis data andalan Oracle pastilah sangat menyadari bahwa SCN perlu menjadi bilangan bulat besar. Ini adalah: nomor 48-bit ( 281.474.976.710.656 ). Diperlukan waktu ribuan tahun untuk database Oracle untuk melampaui jumlah transaksi dan menyebabkan masalah - atau mungkin Anda berpikir demikian.
Batas lunak
Batas lunak berasal dari perhitungan yang sangat sederhana yang dipusatkan ke titik waktu 24 tahun yang lalu: Ambil jumlah detik sejak 00:00:00 01/01/1988 dan kalikan angka itu dengan 16.384. Jika nilai SCN saat ini di bawah itu, maka semuanya baik-baik saja dan pemrosesan berlanjut seperti biasa. Singkatnya, perhitungan mengasumsikan bahwa database berjalan terus-menerus sejak 01/01/1988, memproses 16.384 transaksi per detik, tidak bisa ada dalam kenyataan.
Pemeriksaan Batas SCN
Skrip ini (Oracle 10g dan lebih tinggi) akan memeriksa berapa banyak batasan keras dan lunak yang Anda gunakan. Terima kasih kepada Rob karena telah memanggil batas lunak.
WITH limits AS(SELECT
current_scn
--, dbms_flashback.get_system_change_number as current_scn -- Oracle 9i,(SYSDATE - TO_DATE('1988-01-01 00:00:00','YYYY-MM-DD HH24:MI:SS'))*24*60*60*16384AS SCN_soft_limit
,281474976710656AS SCN_hard_limit
FROM V$DATABASE)SELECT
current_scn
, current_scn/scn_soft_limit*100AS pct_soft_limit_exhausted
, scn_soft_limit
, current_scn/scn_hard_limit*100AS pct_hard_limit_exhausted
, scn_hard_limit
FROM limits;
Berikut ini adalah pertanyaan yang saya buat untuk memeriksa database saya untuk kewarasan tentang masalah bug SCN:
# Show the amount of SCN keyspace we have used so far on this database#Bydefault the SCN max on a 10g/11g
# instance is a 48-bit integer (281,474,976,710,656)SELECT NAME,(current_scn/281474976710656)*100as PCT_OF_SCN_KEYSPACE_USED,
ROUND(SYSDATE-CREATED)as DAYS_SINCE_DB_CREATION,
ROUND(1/(current_scn/281474976710656)*(SYSDATE-CREATED))AS EST_DAYS_BEFORE_SCN_EXHAUSTED,
ROUND(1/(current_scn/281474976710656)*(SYSDATE-CREATED)/365)AS EST_YEARS_BEFORE_SCN_EXHAUSTED
FROM v$database;
Sebagian besar basis data saya yang menggunakan tautan DB berada pada batas kelelahan 3,5% dan dapat terus pada tingkat saat ini selama 50+ tahun tanpa masalah. Ini tidak berarti saya aman dari seseorang yang menggelitik bug SCN, tetapi setidaknya kami tidak menemukan database yang jauh lebih tinggi daripada yang lain atau mendekati batas.
281.474.976.710.656 adalah batas keras. Anda pasti ingin tahu apa batas lunaknya, karena itu adalah nilai yang akan Anda dapatkan terlebih dahulu. Batas lunak dihitung (secara kasar) dengan jumlah detik yang berlalu sejak 1 Januari 1988 x 16384.
Saya tidak tahu bagaimana jawaban lama melewatkan batas lunak (yang disebutkan dalam artikel yang dihubungkan oleh Nick) - jadi itu adalah ide yang baik untuk menambahkan detail yang hilang.
Jawaban:
SCN saat ini
Oracle 9i:
Oracle 10g ke atas:
Batas SCN
SCN memiliki batas keras yang ditentukan oleh formatnya dan batas lunak yang dikenakan secara artifisial oleh Oracle, seperti dijelaskan di sini . Saya telah mengutip bagian yang relevan di bawah ini (penekanan ditambahkan).
Batas keras
Batas lunak
Pemeriksaan Batas SCN
Skrip ini (Oracle 10g dan lebih tinggi) akan memeriksa berapa banyak batasan keras dan lunak yang Anda gunakan. Terima kasih kepada Rob karena telah memanggil batas lunak.
sumber
Berikut ini adalah pertanyaan yang saya buat untuk memeriksa database saya untuk kewarasan tentang masalah bug SCN:
Sebagian besar basis data saya yang menggunakan tautan DB berada pada batas kelelahan 3,5% dan dapat terus pada tingkat saat ini selama 50+ tahun tanpa masalah. Ini tidak berarti saya aman dari seseorang yang menggelitik bug SCN, tetapi setidaknya kami tidak menemukan database yang jauh lebih tinggi daripada yang lain atau mendekati batas.
sumber
281.474.976.710.656 adalah batas keras. Anda pasti ingin tahu apa batas lunaknya, karena itu adalah nilai yang akan Anda dapatkan terlebih dahulu. Batas lunak dihitung (secara kasar) dengan jumlah detik yang berlalu sejak 1 Januari 1988 x 16384.
sumber