💡 Bài toán đặt ra là: Giả sử database server bị hỏng hoàn toàn, nhưng thật may mắn chúng ta đã có trong tay bản backup và database đã cấu hình Archive log mode. Vậy các bước để khôi phục bản backup này lên 1 server mới như thế nào?
Quy trình backup
Đây là một quy trình backup cơ bản mà tôi khuyến nghị. Nó vừa đủ để khôi phục lại dữ liệu tại thời điểm gần nhất, tuy nhiên tùy vào hoàn cảnh cụ thể, các bạn có thể đưa vào các tham số để tối ưu thời gian backup, hoặc tối ưu dung lượng lưu trữ backup.
Bước 1: Đặt chế độ autobackup cho control file và spfile
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
new RMAN configuration parameters are successfully stored
Bước 2: Backup full database
RMAN> backup as compressed backupset database;
Kết quả:
Starting backup at 12-JUL-21
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=62 device type=DISK
channel ORA_DISK_1: starting compressed full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/u01/app/oradata/PROD/datafile/o1_mf_system_jgqs2yvr_.dbf
input datafile file number=00003 name=/u01/app/oradata/PROD/datafile/o1_mf_sysaux_jgqs4dg4_.dbf
input datafile file number=00004 name=/u01/app/oradata/PROD/datafile/o1_mf_undotbs1_jgqs55l6_.dbf
input datafile file number=00007 name=/u01/app/oradata/PROD/datafile/o1_mf_users_jgqs56np_.dbf
channel ORA_DISK_1: starting piece 1 at 12-JUL-21
channel ORA_DISK_1: finished piece 1 at 12-JUL-21
piece handle=/u01/app/fra/PROD/backupset/2021_07_12/o1_mf_nnndf_TAG20210712T145640_jgqxfshr_.bkp tag=TAG20210712T145640 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:55
Finished backup at 12-JUL-21
Starting Control File and SPFILE Autobackup at 12-JUL-21
piece handle=/u01/app/fra/PROD/autobackup/2021_07_12/o1_mf_s_1077721056_jgqxhjz6_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 12-JUL-21
Sau khi backup database xong, tôi sẽ có bản backup được lưu tại thư mục Fast Recovery Area
Bước 3: Archiving current redo log
RMAN> sql 'alter system archive log current';
Kết quả:
using target database control file instead of recovery catalog
sql statement: alter system archive log current
Backup archive log
RMAN> backup as compressed backupset archivelog all;
Starting backup at 12-JUL-21
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting compressed archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=1 RECID=1 STAMP=1077720688
input archived log thread=1 sequence=2 RECID=2 STAMP=1077721073
channel ORA_DISK_1: starting piece 1 at 12-JUL-21
channel ORA_DISK_1: finished piece 1 at 12-JUL-21
piece handle=/u01/app/fra/PROD/backupset/2021_07_12/o1_mf_annnn_TAG20210712T145753_jgqxj17g_.bkp tag=TAG20210712T145753 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:07
Finished backup at 12-JUL-21
Starting Control File and SPFILE Autobackup at 12-JUL-21
piece handle=/u01/app/fra/PROD/autobackup/2021_07_12/o1_mf_s_1077721080_jgqxj8bg_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 12-JUL-21
Các bạn có nhìn thấy đoạn cuối cùng không, sau mỗi lần backup, RMAN sẽ tự động backup cả control file và spfile vào trong thư mục autobackup nữa.
Quy trình Restore
Tạo cấu trúc thư mục giống với server cũ
mkdir -p /u01/app/oradata/PROD
mkdir -p /u01/app/fra/PROD
mkdir -p /u01/app/oracle/admin/prod/adump
Chuyển bản backup sang server mới
Bạn chuyển thư mục backupset và autobackup sang server mới và giải nén chúng r
mv autobackup.tar backupset.tar /u01/app/fra/PROD/
cd /u01/app/fra/PROD/
tar -xvf autobackup.tar
tar -xvf backupset.tar
Startup nomount với dummy spfile
export ORACLE_HOME=C:\app\oracle\product\12.1.0\dbhome_1
export ORACLE_SID=prod
$ rman target /
Recovery Manager: Release 12.2.0.1.0 - Production on Mon Jul 12 15:25:36 2021
Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
connected to target database (not started)
RMAN>
Sau đó bạn gõ lệnh startup nomount, Oracle sẽ khởi động một dummy instance (instance giả).
RMAN> startup nomount
Restore spfile
Sau đó, chúng ta sẽ tiến hành khôi phục lại spfile từ bản autobackup
cd /u01/app/fra/PROD/autobackup/2021_07_12
restore spfile from '/u01/app/fra/PROD/autobackup/2021_07_12/o1_mf_s_1077721080_jgqxj8bg_.bkp';
Kết quả:
Starting restore at 12-JUL-21
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=37 device type=DISK
channel ORA_DISK_1: restoring spfile from AUTOBACKUP /u01/app/fra/PROD/autobackup/2021_07_12/o1_mf_s_1077721080_jgqxj8bg_.bkp
channel ORA_DISK_1: SPFILE restore from AUTOBACKUP complete
Finished restore at 12-JUL-21
Sau khi restore spfile thành công, các bạn sẽ thấy 1 spfile xuất hiện trong $ORACLE_HOME/dbs/
Tôi restart lại instance để spfile mới được đọc.
RMAN> startup force nomount
Restore Controlfile
RMAN> restore controlfile from '/u01/app/fra/PROD/autobackup/2021_07_12/o1_mf_s_1077721080_jgqxj8bg_.bkp';
Sau khi restore control file thành công, tôi đưa database về trạng thái mount
RMAN> alter database mount;
tatement processed
released channel: ORA_DISK_1
Restore database
Bạn gõ lệnh sau để restore database:
RMAN> restore database;
Recover database
Tiếp theo bạn tiến hành recover database theo các bước sau
Bạn kiểm tra lại archive log hoặc các bản backup của archive log xem sequence cuối cùng của nó là bao nhiêu.
RMAN> list backup of archivelog all;
Kết quả:
List of Backup Sets
===================
BS Key Size Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ ---------------
5 44.94M DISK 00:00:06 12-JUL-21
BP Key: 7 Status: AVAILABLE Compressed: YES Tag: TAG20210712T160121
Piece Name: /u01/app/fra/PROD/backupset/2021_07_12/o1_mf_annnn_TAG20210712T160121_jgr171op_.bkp
List of Archived Logs in backup set 5
Thrd Seq Low SCN Low Time Next SCN Next Time
---- ------- ---------- --------- ---------- ---------
1 1 1408558 12-JUL-21 1425948 12-JUL-21
1 2 1425948 12-JUL-21 1426176 12-JUL-21
1 3 1426176 12-JUL-21 1429548 12-JUL-21
1 4 1429548 12-JUL-21 1429567 12-JUL-21
Theo như kết quả bên trên, tôi có thể recover được dữ liệu cho đến hết sequence archive log thứ 4 của thread 1. Do đó tôi thực hiện câu lênh tiếp theo như sau để recover được tối đa dữ liệu
run
{
SET UNTIL SEQUENCE 186148733 THREAD 1;
RECOVER DATABASE;
}
Chú ý: SET UNTIL SEQUENCE=5 sẽ làm cho RMAN recover dữ liệu đến hết sequence 4 và dừng lại ở ngay sequence 5
Open resetlogs
Và bước cuối cùng, tôi thực hiện open database với tùy chọn resetlogs (để bắt đầu 1 cuộc đời mới cho database)
RMAN> alter database open resetlogs;
Bạn có thể kiểm tra lại kết quả sau khi đã open resetlogs xong