Mục lục

Bài viết này tôi thực hiện theo yêu cầu của 2 bạn Nguyen Trung và  Maxo Mac trong nhóm “Kho tài liệu kiến thức Database”.

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?

Hãy thực hiện cùng tôi nhé.

À trước khi đi vào các bước để restore database từ bản backup, chúng ta cần review lại quy trình backup xem có đủ điều kiện để khôi phục lại không đã.

1. 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.

1. 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

2. 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 với cấu trúc như sau:

Đọc thêm  Xử lý truy vấn Top N với ROWNUM

3. 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

4. Bước 4: 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.

2. Quy trình Restore

1. 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

2. 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 ra

mv autobackup.tar backupset.tar /u01/app/fra/PROD/
cd /u01/app/fra/PROD/
tar -xvf autobackup.tar
tar -xvf backupset.tar

3. Startup nomount với dummy spfile

export ORACLE_HOME=/u01/app/oracle/product/12.2/db_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

Kết quả:

Đọc thêm  Quản lý user trong Oracle Database

4. 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

5. 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;
Statement processed
released channel: ORA_DISK_1

6. Restore database

Bạn gõ lệnh sau để restore database:

RMAN> restore database;

7. 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 5 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.

Đọc thêm  Thay đổi tên schema trong PostgreSQL

8. 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

Như vậy là tôi đã restore thành công 1 database sang server mới rồi đó. Nếu các bạn còn câu hỏi gì khác, có thể để lại comment dưới bài viết này hoặc trong group “Kho tài liệu kiến thức Database” nhé.

 

Nguồn: https://dangxuanduy.com/

Hiện tại, tôi có tổ chức đều đặn các khóa học về quản trị Oracle Database, tôi sẽ để thông tin ở đây, để bạn nào quan tâm về lịch học cũng như chương trình học có thể theo dõi nhé.

KHOÁ DÀNH CHO NGƯỜI MỚI

KHÓA HỌC: QUẢN TRỊ ORACLE DATABASE THẬT LÀ ĐƠN GIẢN (ADMIN 1)

CÁC KHOÁ NÂNG CAO:

KHÓA HỌC ORACLE NÂNG CAO: QUẢN TRỊ KIẾN TRÚC MULTITENANT 12c

KHÓA HỌC ORACLE NÂNG CAO: QUẢN TRỊ HỆ THỐNG DATA GUARD

CÁC KHOÁ COMBO:

COMBO 1: ADMIN 1 + MULTITENANT 12c

COMBO 2: ADMIN 1 + DATA GUARD

COMBO 3: ADMIN 1 + MULTITENANT 12c + DATA GUARD

LỊCH HỌC:

Mời bạn xem tại đây: LỊCH HỌC CÁC LỚP ORACLE 

ĐĂNG KÝ:

https://forms.gle/MtCAoRQFenP886y79

Hãy tham gia group “Kho tài liệu kiến thức database” để cùng học hỏi và chia sẻ nhé.

5 1 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
5 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận
Giang
Giang
1 năm trước

mình thấy có bước Backup archive log, nhưng ko thấy restore nó nhỉ?

Giang
Giang
1 năm trước
Trả lời  Đặng Xuân Duy

Nếu mình dùng lệnh Backup database; thì nó đã bao gồm Archive log chưa nhỉ?

Đức
Đức
8 tháng trước

RMAN> restore spfile from ‘ /u01/app/fra/CDB1.1/autobackup/2023_08_07/ o1_mf_s_1144245308_lf15bdfm_.bkp’ ;

Starting restore at 07-AUG-23
using channel ORA_DISK_1

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 08/07/2023 15:10:55
RMAN-06564: must use the TO clause when the instance is started with SPFILE

lỗi này thì sửa thế nào vậy ạ

5
0
Rất thích suy nghĩ của bạn, hãy bình luận.x