Làm cách nào để tìm SCN hiện tại của tôi?


14

Đưa ra bất kỳ phiên bản nào của Oracle:

  • Làm cách nào để tìm SCN hiện tại của tôi?
  • SCN tối đa có thể là gì?

Câu hỏi này được lấy cảm hứng từ bài viết này . Có lẽ có rất nhiều người Oracle đang tìm kiếm những con số này ngay bây giờ. :)
Nick Chammas

Có vẻ như liên kết từ bình luận trước đây của tôi đã bị hỏng. Tôi tin rằng trang đó đã được chuyển đến đây: infoworld.com/article/2618409/ từ
Nick Chammas

Câu trả lời:


16

SCN hiện tại

Oracle 9i:

SELECT dbms_flashback.get_system_change_number as current_scn 
FROM DUAL;

Oracle 10g trở lên:

SELECT current_scn
FROM V$DATABASE;

Giới hạn SCN

SCN có giới hạn cứng được áp đặt bởi định dạng của nó và giới hạn mềm do Oracle áp đặt một cách giả tạo, như được mô tả ở đây . Tôi đã trích dẫn các phần có liên quan dưới đây (nhấn mạnh thêm).

Giới hạn cứng

Các kiến ​​trúc sư của ứng dụng cơ sở dữ liệu hàng đầu của Oracle phải nhận thức rõ SCN cần phải là một số nguyên lớn. Đó là: một số 48 bit ( 281,474,976,710,656 ). Sẽ mất rất nhiều thời gian để cơ sở dữ liệu Oracle làm lu mờ số lượng giao dịch và gây ra sự cố - hoặc bạn có thể nghĩ như vậy.

Giới hạn mềm

Giới hạn mềm xuất phát từ một phép tính rất đơn giản được neo vào một thời điểm cách đây 24 năm: Lấy số giây kể từ 00:00:00 01/01/1988 và nhân con số đó với 16.384. Nếu giá trị SCN hiện tại dưới mức đó, thì tất cả đều ổn và quá trình xử lý vẫn tiếp tục như bình thường. Nói một cách đơn giản, tính toán giả định rằng một cơ sở dữ liệu chạy liên tục kể từ ngày 01/01/1988, xử lý 16.384 giao dịch mỗi giây, không thể tồn tại trong thực tế.

Kiểm tra giới hạn SCN

Kịch bản này (Oracle 10g trở lên) sẽ kiểm tra mức độ giới hạn cứng và mềm mà bạn đã sử dụng. Cảm ơn Rob đã gọi ra giới hạn mềm.

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 * 16384 
        AS SCN_soft_limit
    , 281474976710656 AS SCN_hard_limit
  FROM V$DATABASE
)
SELECT
    current_scn
  , current_scn/scn_soft_limit*100 AS pct_soft_limit_exhausted
  , scn_soft_limit
  , current_scn/scn_hard_limit*100 AS pct_hard_limit_exhausted
  , scn_hard_limit
FROM limits;

2
Tôi thấy bạn có câu trả lời của bạn. Bạn cũng nên đọc bài viết của Riyaj tại orai INTERNals.com/2012/01/20/scn-what-why-and-how
Niall Litchfield

Cảm ơn đã tham khảo! Trong trường hợp bất kỳ ai khác muốn đọc nó, bài viết hiện có tại orai INTERNals.wordpress.com/2012/01/19/scn-what-why-and-how
Magnus Reftel

6

Đây là một truy vấn tôi đã đưa ra để kiểm tra cơ sở dữ liệu của mình về sự tỉnh táo liên quan đến vấn đề lỗi SCN:

# Show the amount of SCN keyspace we have used so far on this database
# By default the SCN max on a 10g/11g 
# instance is a 48-bit integer (281,474,976,710,656) 
SELECT NAME,  
   (current_scn/281474976710656)*100 as 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;

Hầu hết các cơ sở dữ liệu của tôi sử dụng các liên kết DB đều ở mức cạn kiệt 3,5% và có thể tiếp tục ở tốc độ hiện tại trong hơn 50 năm mà không gặp vấn đề gì. Điều này không có nghĩa là tôi an toàn trước việc ai đó chọc vào lỗi SCN, nhưng ít nhất chúng tôi đã không tìm thấy một cơ sở dữ liệu cao hơn các cơ sở dữ liệu khác hoặc gần với giới hạn.


2

281,474,976,710,656 là giới hạn cứng. Bạn sẽ muốn biết giới hạn mềm là gì, vì đó là giá trị bạn chạm vào đầu tiên. Giới hạn mềm là (khoảng) được tính bằng số giây trôi qua kể từ ngày 1 tháng 1 năm 1988 x 16384.


Tôi không biết làm thế nào các câu trả lời cũ bỏ qua giới hạn mềm (được đề cập trong bài viết được liên kết bởi Nick) - vì vậy đó là một ý tưởng tốt để thêm chi tiết bị thiếu.
dezso
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.