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 đã.


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

Đọc thêm  12c New Features - Hướng dẫn kỹ thuật Remote Clone PDB

   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

   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.


   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 ra

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=/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ả:

   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/

Đọc thêm  So sánh Shared Server và Dedicated Server trong Oracle

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;
Statement 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 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.

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

Đọc thêm  Review công cụ quản trị PostgreSQL - DBeaver

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

Xin cho tôi được biết, bạn cảm thấy bài viết này như thế nào? Ý kiến của bạn sẽ giúp tôi nâng cao chất lượng bài viết của mình.

    Hãy chia sẻ bài viết này nếu bạn thấy có ích nhé

     

     

    5 1 vote
    Article Rating
    Subscribe
    Notify of
    guest
    0 Comments
    Inline Feedbacks
    View all comments