1. RMAN là gì ?
RMAN (Recovery Manager) là một công cụ sao lưu và khôi phục dữ liệu được tích hợp sẵn trong hệ thống quản lý cơ sở dữ liệu Oracle. RMAN cho phép các DBA thực hiện các hoạt động backup, restore và recovery của cơ sở dữ liệu Oracle một cách hiệu quả.
Các tính năng của RMAN bao gồm sao lưu toàn bộ hoặc phần cơ sở dữ liệu, khôi phục từ các bản sao lưu trước đó, phục hồi các đối tượng cơ sở dữ liệu từ bản sao lưu, và kiểm tra tính toàn vẹn của bản sao lưu.
Để sử dụng RMAN, người dùng có thể kết nối vào RMAN bằng SQL*Plus hoặc bằng cách sử dụng một tệp lệnh hoặc một script được lưu trữ trong cơ sở dữ liệu RMAN. Các lệnh RMAN cơ bản bao gồm STARTUP, BACKUP, RESTORE và RECOVERY. RMAN cũng có thể được cấu hình thông qua các tham số cấu hình để điều chỉnh các hoạt động sao lưu và khôi phục.
Trong các hệ thống Oracle, RMAN là công cụ sao lưu và khôi phục dữ liệu được khuyến khích sử dụng để đảm bảo tính toàn vẹn và tin cậy của cơ sở dữ liệu.
Đoạn ở trên là chat GPT nó viết đấy. Cũng dễ hiểu mà đúng không.
2. SỬ DỤNG RMAN TRON THỰC TẾ ?
Mình tin chắc rằng khi mà tìm kiếm trong google các bạn luôn gặp những câu RMAN rất chung chung. Cái thực chất khi mà mình muốn tìm lệnh RMAN nào đó có thể backup ở một thư mục mình muốn thì gần như kiếm ít thấy. Nên là sau vài thời gian hỏi hang, tìm hiểu thì mình sẽ chốt các lệnh sau:
2.1 BACKUP FULL DATABASE trong một thư mục
CÚ PHÁP
BACKUP FULL DATABASE FORMAT '/mnt/bk/clonetoPROD/data/%T_%d_%f_db'
Sau chữ FORMAT sẽ là đường dẫn và tên file của backup RMAN
%T: Năm-Tháng-Ngày (Nên để ở đầu để dễ coi ngày backup của file)
%d: Tên SID của database
%f : ID tên file cố định ( có thể thay bằng option khác)
các options của file bạn có thể tham khảo trang sau để hiểu nhiều hơn tại đây
Tuy nhiên lệnh trên chỉ là một lệnh để hiểu về cách backup vào một thư mục
Còn trong dự án mình dùng thêm vài dòng để lấy đủ các thông tin cho 1 lần backup như sau
run {
BACKUP CURRENT CONTROLFILE FORMAT '/mnt/bk/clonetoPROD/data/control-%U';
BACKUP AS COMPRESSED BACKUPSET DATABASE FORMAT '/mnt/bk/clonetoPROD/data/%T_%d_%f_db' FILESPERSET 10 MAXSETSIZE 80G TAG BACKUP_FULL;
sql 'ALTER SYSTEM ARCHIVE LOG CURRENT';
BACKUP AS COMPRESSED BACKUPSET DEVICE TYPE DISK ARCHIVELOG ALL FORMAT '/mnt/bk/clonetoPROD/data/%T_%d_%u_%s_%U_arc' FILESPERSET 10 TAG ARCH;
backup spfile FORMAT '/mnt/bk/clonetoPROD/data/%T_%d_Spfile_%u';
}
Ở đoạn trên sẽ backup 4 loại file sau:
Backup datafile
Backup archivelog
Backup spfile
Backup controlfile
(Thông tin các file này để làm gì thì mình sẽ viết ở bài khác nhé.)
Đồng thời thêm COMPRESSED để nén các file lại cho nhẹ.
Thường lúc restore hay duplicate database mình sẽ chuẩn bị đầy đủ những file này để tránh tình trạng restore thì bị thiếu file.
2.2 KẾT HỢP BASH SCRIPT VỚI RMAN
Thông thường sẽ tạo 1 file .sh
Ở đây mình đặt là backup.sh
Nội dung
LOG_FOLDER=/var/log/ebs #có thể thay đổi
export LOG_FILE=$LOG_FOLDER/backup_rman_`date +%y%m%d`.log
rman target / cmdfile=/backup_full.rman log=$LOG_FILE
BOO=`grep "Recovery Manager complete." $LOG_FILE`
if
[ -n "$BOO" ]
then
echo "Backup OK"
else
echo "Backup Failed"
fi
Đầu tiên là khai báo log file để khi chạy xong ta sẽ theo dõi được RMAN thực hiện có thành công hay không.
1 File tiếp đó là file rman. Như ở trên chỗ cmndfile=backup_full.rman
Nội dung là đoạn mà mình đã mô tả ở trên
run {
BACKUP CURRENT CONTROLFILE FORMAT '/mnt/bk/clonetoPROD/data/control-%U';
BACKUP AS COMPRESSED BACKUPSET DATABASE FORMAT '/mnt/bk/clonetoPROD/data/%T_%d_%f_db' FILESPERSET 10 MAXSETSIZE 80G TAG BACKUP_FULL;
sql 'ALTER SYSTEM ARCHIVE LOG CURRENT';
BACKUP AS COMPRESSED BACKUPSET DEVICE TYPE DISK ARCHIVELOG ALL FORMAT '/mnt/bk/clonetoPROD/data/%T_%d_%u_%s_%U_arc' FILESPERSET 10 TAG ARCH;
backup spfile FORMAT '/mnt/bk/clonetoPROD/data/%T_%d_Spfile_%u';
}
Tới đây bạn cũng hiểu rằng là khi ta chạy lệnh
sh /backup.sh thì file backup.sh sẽ execute file backup_full.rman để thực hiện backup của RMAN đồng thời ghi vào biến LOGFILE để ta theo dõi.
2.3. ỨNG DỤNG THÊM TỰ ĐỘNG HÓA VỚI CRONTAB
Crontab là một ứng dụng trong hệ điều hành Linux, cho phép người dùng lên kế hoạch và tự động hóa các tác vụ thường xuyên hoặc lặp lại theo khoảng thời gian cụ thể.
Thông thường cú pháp crontab sẽ hình sau:
Gõ crontab -l để liệt kê các job được lập lịch
Bạn có thể thấy 40 14 * * * – Chỗ này chính là thời gian, ở đây hiểu là cứ mỗi ngày vào lúc 14h40 thì sẽ dùng user oradev chạy file backup_rman.sh trong thư mục /opt/scripts.
Như vậy ta sẽ dùng crontab chạy lệnh hằng ngày vào khung giờ nhất định, thường thì mình ưu tiên buổi tối, và chạy lệnh backup.sh
Vì thế trình tự như sau
crontab (lập lịch) > run backup.sh > run backup_full.rman > view log
3. KẾT
Như vậy, ta đã đi qua một cách rất nhanh để sử dụng RMAN lập lịch backup hằng ngày, kiến thức ở đây cần có nền tảng linux và một chút oracle database nhất định, sẽ hơi khó với những ai mới bắt đầu, tuy nhiên bản thân mình nghĩ sẽ hữu ích cho những ai đang tìm kiếm vấn đề này. Nếu cảm thấy hay, và bổ ích thì comment cho mình biết nhé.
Blog: https://beatcomputer.com/
Youtube: https://www.youtube.com/channel/UCeLTZuOxo15vR-aEXbfWMUg