Để thực hiện một backup toàn bộ cơ sở dữ liệu (full database backup), xóa các archivelog đã backup và xóa các file không còn hiệu lực sau khi backup, chúng ta có thể sử dụng kết hợp RMAN với job của Oracle Scheduler.
Thực hành tạo Job backup tự động với DBMS_SCHEDULER trong Oracle database
Bước 1: Viết script RMAN cho backup và quản lý archivelog
Tạo một RMAN script để thực hiện full backup, xóa archivelog đã backup và xóa các file không còn hiệu lực => chúng ta tạo file kịch bản lưu trong đường dẫn sau:
cd /home/oracle vi backup_job.rman
Nội dung file như sau:
RUN { BACKUP AS BACKUPSET DATABASE PLUS ARCHIVELOG DELETE INPUT; DELETE NOPROMPT OBSOLETE; }
Giải thích các bước:
- BACKUP AS BACKUPSET DATABASE PLUS ARCHIVELOG DELETE INPUT: Backup toàn bộ database và các archivelog, sau đó xóa các archivelog đã được backup.
- DELETE NOPROMPT OBSOLETE: Xóa các backup cũ không còn hiệu lực (obsolete files).
Bước 2: Viết file shell script để chạy trong job gọi tới file .rman ở bên trên
vi backup_job.sh
## nội dung file như bên dưới (file này các bạn nhớ ko được để khoảng trắng hay xuống dòng ở đầu và cuối file nhé.
#!/bin/bash export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH export ORACLE_SID=duodb $ORACLE_HOME/bin/rman target / cmdfile=/home/oracle/backup_job.rman
Bước 3: Thực hiện gán thêm quyền thực thi cho 2 file này
chmod +x /home/oracle/backup_job.rman chmod +x /home/oracle/backup_job.sh
Kiểm tra thông tin file:
cd /home/oracle/ ls -l
Bước 4: Tạo job chạy vào 11 PM hàng ngày
Sử dụng DBMS_SCHEDULER để tạo job chạy lệnh RMAN vào lúc 11 PM hàng ngày: Chạy lệnh bên dưới trong Sqlplus
sqlplus / as sysdba
BEGIN DBMS_SCHEDULER.create_job ( job_name => 'DAILY_FULL_BACKUP_JOB', job_type => 'EXECUTABLE', job_action => '/home/oracle/backup_job.sh', start_date => SYSTIMESTAMP, repeat_interval => 'FREQ=DAILY; BYHOUR=23; BYMINUTE=0; BYSECOND=0', enabled => TRUE ); END; /
Bước 5: Kiểm tra trạng thái job
Chúng ta có thể kiểm tra job đã được tạo thành công và trạng thái của nó:
SELECT job_name, state, start_date, next_run_date FROM dba_scheduler_jobs WHERE job_name = 'DAILY_FULL_BACKUP_JOB';
Kiểm tra chi tiết thông tin JOB và kết quả chạy:
SELECT job_name, status, error#, additional_info FROM dba_scheduler_job_run_details WHERE job_name = 'DAILY_FULL_BACKUP_JOB';
Chúc các bạn thành công!