Bình thường query startup_time trong v$instance, ta sẽ biết thời gian uptime tới hiện tại của database. Tuy nhiên muốn thống kê thời gian downtime uptime trong 1 khoảng thời gian, ví dụ từ đầu năm chẳng hạn, thì … search google chưa ra bài nào, chỉ có gợi ý là đọc alert log.

Đọc log startup shutdown trong alert log là 1 giải pháp khả thi, tuy nhiên thống kê bằng tay thì mất cả buổi, nên thôi mình chế ra 1 số script để thống kê cho nhanh vậy boring

 

Chuẩn bị nguyên liệu

 

Tạo 1 thư mục trỏ đến thư mục chứa file alert log

 

Tạo 1 table chứa log, 1 sequence để đánh ID cho nó đẹp

 

Tạo 1 hàm khai thác alert log. Mình sẽ lấy 2 nội dung đánh dấu việc start/shutdown db là “Completed: ALTER DATABASE OPEN” và “Instance shutdown complete“, lấy 2 mốc thời gian ngay trước 2 dòng đó trong alert log để đánh dấu lại thời điểm start/shutdown db. Insert các thông tin này vào 1 table để khai thác.

 

 

Tạo thêm 1 hàm để tính toán thời gian uptime, downtime. Trong đó cho truyền tham số xác định khoảng thời gian kiểm tra, và 1 tham số cho phép xác định khoảng thời gian trước record thông tin đầu tiên, ta cho là db đang up hay down.

 

 

Xong. Giờ thì chạy thôi. Đầu tiên là collect thông tin start/shutdown db. Chạy hàm đầu tiên:

 

 

Kết quả dữ liệu trong table sẽ có dạng như sau

 

 

Sau đó ta dùng hàm db_uptime_calc để tính toán. VD ở đây tính từ đầu năm tới giờ, với thông tin là thời điểm trước 8/3 db vẫn đang chạy bình thường

 

 

Done 🙂