[Oracle DB] Dựng lại toàn bộ database lên server mới từ bản backup

"Giả sử sau sự cố lớn hoặc khi di chuyển hạ tầng, chúng ta cần dựng lại toàn bộ database từ bản backup trên một hạ tầng mới hoàn toàn. Trong bài toán này, chúng ta sẽ có cơ hội trải nghiệm những lỗi phát sinh từ việc sai/ thiếu tuần tự câu lệnh và đặc biệt hơn là lỗi liên quan đến cơ chế đảm bảo tính toàn vẹn dữ liệu của Oracle."

I. Thực hiện backup Level0 và Level1

-- Điều đầu tiên, cần đảm bảo là chúng ta có bản backup đầy đủ với các script backup bao gồm cả SPFILE (Quan trọng cho việc dựng DB mới) như sau:

- Level0:

oracle@db2 10.0.2.15:~$ cat /u01/backup/scriptbk/level0.rman
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/backup/level0/control_file_%F';

CONFIGURE DEVICE TYPE DISK PARALLELISM 3;

RUN {
  ALLOCATE CHANNEL c1 DEVICE TYPE DISK FORMAT '/u01/backup/level0/%U';
  ALLOCATE CHANNEL c2 DEVICE TYPE DISK FORMAT '/u01/backup/level0/%U';
  ALLOCATE CHANNEL c3 DEVICE TYPE DISK FORMAT '/u01/backup/level0/%U';

  CROSSCHECK BACKUP;
  DELETE NOPROMPT EXPIRED BACKUP;
  DELETE NOPROMPT OBSOLETE;
  CROSSCHECK ARCHIVELOG ALL;
  DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;

  BACKUP AS COMPRESSED BACKUPSET INCREMENTAL LEVEL 0 DATABASE
  FORMAT '/u01/backup/level0/data_file_%T_%d_%u_%s'
  FILESPERSET 10
  MAXSETSIZE 32G
  TAG 'LEVEL0';

  SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';

  BACKUP AS COMPRESSED BACKUPSET ARCHIVELOG ALL
  FORMAT '/u01/backup/level0/arc_%T_%d_%u_%s_%U'
  FILESPERSET 10
  TAG 'ARCH';

  BACKUP SPFILE FORMAT '/u01/backup/level0/spfile_%T_%d_%s_%U' TAG 'SPFILE_BACKUP';

  DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-1';

  RELEASE CHANNEL c1;
  RELEASE CHANNEL c2;
  RELEASE CHANNEL c3;
}

EXIT;


oracle@db2 10.0.2.15:~$ cat /u01/backup/scriptbk/level0.sh
# Lấy PID của quy trình hiện tại
PID=$$

# Ghi PID vào tệp tin
echo $PID > /u01/backup/scriptbk/script_pid.pid

# Script for backup full
logfile=/u01/backup/log/$(date +%Y%m%d)_level0.log
export ORACLE_SID=cdb1
export NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss"
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH

# Thêm PID vào tên file log
#log_file="/u01/backup/log/$(date +%Y%m%d)_level0_${PID}.log"
log_file="/u01/backup/log/$(date +%Y%m%d)_level0.log"

# Ghi thông tin PID vào file log
echo "PID: $PID" >> $log_file

# Chạy lệnh RMAN và ghi log vào file
rman target / nocatalog log=$log_file cmdfile=/u01/backup/scriptbk/level0.rman

# Thoát khỏi script
exit

- Level1:

oracle@db2 10.0.2.15:~$ cat /u01/backup/scriptbk/level1.rman
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/backup/level1/control_file_%F';

CONFIGURE DEVICE TYPE DISK PARALLELISM 3;

RUN {
  ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT '/u01/backup/level1/%U';
  ALLOCATE CHANNEL ch2 DEVICE TYPE DISK FORMAT '/u01/backup/level1/%U';
  ALLOCATE CHANNEL ch3 DEVICE TYPE DISK FORMAT '/u01/backup/level1/%U';

  CROSSCHECK BACKUP;
  DELETE NOPROMPT EXPIRED BACKUP;
  DELETE NOPROMPT OBSOLETE;
  CROSSCHECK ARCHIVELOG ALL;
  DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;

  BACKUP AS COMPRESSED BACKUPSET INCREMENTAL LEVEL 1 DATABASE
  FORMAT '/u01/backup/level1/data_file_%T_%d_%u_%s'
  FILESPERSET 10
  TAG 'LEVEL1';

  SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';

  BACKUP AS COMPRESSED BACKUPSET ARCHIVELOG ALL
  FORMAT '/u01/backup/level1/arc_%T_%d_%u_%s_%U'
  FILESPERSET 10
  TAG 'ARCH';

  BACKUP SPFILE FORMAT '/u01/backup/level1/spfile_%T_%d_%s_%U' TAG 'SPFILE_BACKUP';

  DELETE ARCHIVELOG UNTIL TIME 'SYSDATE-1';

  RELEASE CHANNEL ch1;
  RELEASE CHANNEL ch2;
  RELEASE CHANNEL ch3;
}

EXIT;


oracle@db2 10.0.2.15:~$ cat /u01/backup/scriptbk/level1.sh
# Lấy PID của quy trình hiện tại
PID=$$

# Ghi PID vào tệp tin
echo $PID > /u01/backup/scriptbk/script_pid.pid

# Script for backup full
logfile=/u01/backup/log/$(date +%Y%m%d)_level1.log
export ORACLE_SID=cdb1
export NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss"
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH

# Thêm PID vào tên file log
#log_file="/u01/backup/log/$(date +%Y%m%d)_level1_${PID}.log"
log_file="/u01/backup/log/$(date +%Y%m%d)_level1.log"

# Ghi thông tin PID vào file log
echo "PID: $PID" >> $log_file

# Chạy lệnh RMAN và ghi log vào file
rman target / nocatalog log=$log_file cmdfile=/u01/backup/scriptbk/level1.rman

# Thoát khỏi script
exit

-- Trong các script RMAN chúng ta nên sử dụng kĩ thuật parallel, khai báo nhiều channel để tăng luồng xử lí song song. Tuy nhiên kĩ thuật này cần căn cứ vào tài nguyên máy chủ, ví dụ server có 64 core (thread) thì tôi thường chỉ khai báo tối đa 32 luồng.

-- Sau quá trình backup, tôi đã có bản backup level0 và level1 được lưu vào thư mục như sau. Chúng ta sẽ sử dụng bản backup này để dựng lại toàn bộ DB trên một server hoặc DB mới:

oracle@db2 10.0.2.15:~$ ll /u01/backup/level0/
total 602M
drwxr-xr-x 2 oracle oinstall 4.0K Apr 30 13:41 .
drwxr-xr-x 7 oracle oinstall   90 Apr 29 16:39 ..
-rw-r----- 1 oracle oinstall  46M Apr 30 11:47 arc_20240430_CDB1_142pht5r_36_142pht5r_1_1
-rw-r----- 1 oracle oinstall 4.0K Apr 30 11:47 arc_20240430_CDB1_152pht5r_37_152pht5r_1_1
-rw-r----- 1 oracle oinstall  11M Apr 30 12:54 control_file_c-1141296028-20240430-02
-rw-r----- 1 oracle oinstall 239M Apr 30 11:47 data_file_20240430_CDB1_102pht4j_32
-rw-r----- 1 oracle oinstall 228M Apr 30 11:47 data_file_20240430_CDB1_112pht4j_33
-rw-r----- 1 oracle oinstall  79M Apr 30 11:46 data_file_20240430_CDB1_122pht4j_34
oracle@db2 10.0.2.15:~$ ll /u01/backup/level1/
total 426M
drwxr-xr-x 2 oracle oinstall 4.0K May  1 20:48 .
drwxr-xr-x 7 oracle oinstall   90 Apr 29 16:39 ..
-rw-r----- 1 oracle oinstall  52M Apr 30 12:33 arc_20240430_CDB1_1c2phvrq_44_1c2phvrq_1_1
-rw-r----- 1 oracle oinstall  46M Apr 30 12:33 arc_20240430_CDB1_1d2phvrq_45_1d2phvrq_1_1
-rw-r----- 1 oracle oinstall  36M Apr 30 12:33 arc_20240430_CDB1_1e2phvrq_46_1e2phvrq_1_1
-rw-r----- 1 oracle oinstall  98M Apr 30 13:42 arc_20240430_CDB1_1n2pi3th_55_1n2pi3th_1_1
-rw-r----- 1 oracle oinstall  36M Apr 30 13:42 arc_20240430_CDB1_1o2pi3ti_56_1o2pi3ti_1_1
-rw-r----- 1 oracle oinstall  19M Apr 30 13:42 arc_20240430_CDB1_1p2pi3tj_57_1p2pi3tj_1_1
-rw-r----- 1 oracle oinstall  11M Apr 30 12:33 control_file_c-1141296028-20240430-03
-rw-r----- 1 oracle oinstall  11M Apr 30 13:31 control_file_c-1141296028-20240430-04
-rw-r----- 1 oracle oinstall  11M Apr 30 13:42 control_file_c-1141296028-20240430-05
-rw-r----- 1 oracle oinstall  11M Apr 30 13:42 control_file_c-1141296028-20240430-06
-rw-r----- 1 oracle oinstall  19M Apr 30 12:32 data_file_20240430_CDB1_182phvr7_40
-rw-r----- 1 oracle oinstall 640K Apr 30 12:32 data_file_20240430_CDB1_192phvr7_41
-rw-r----- 1 oracle oinstall 9.0M Apr 30 12:32 data_file_20240430_CDB1_1a2phvr7_42
-rw-r----- 1 oracle oinstall 4.2M Apr 30 13:41 data_file_20240430_CDB1_1j2pi3sk_51
-rw-r----- 1 oracle oinstall 640K Apr 30 13:41 data_file_20240430_CDB1_1k2pi3sk_52
-rw-r----- 1 oracle oinstall 3.0M Apr 30 13:42 data_file_20240430_CDB1_1l2pi3sk_53
-rw-r----- 1 oracle oinstall 112K Apr 30 13:42 spfile_20240430_CDB1_58_1q2pi3u3_1_1

II. Dựng lại DB từ bản backup

2.1. Giả lập DB mới

-- Sau khi đã backup xong xuôi ở bước trên, để giả lập tình huống có một DB mới ta có thể sử dụng tiện ích DBCA của Oracle để:

  • Xóa toàn bộ DB hiện tại.
  • Tạo một DB mới.

-- Thế nhưng cách này khá là tốn sức, tôi sẽ dùng phương pháp thay đổi DBID để giả lập tình huống này. Như chúng ta đã biết, mỗi DB sẽ được gán một DBID duy nhất do phần mềm Oracle tự sinh, không cho phép thay đổi theo ý người dùng. Việc thay đổi DBID được thực hiện thông qua tiện ích "nid" với trình tự câu lệnh như sau:

RMAN> SHUTDOWN IMMEDIATE;

RMAN> STARTUP MOUNT;

~$ nid TARGET=SYS/oracle@cdb1

RMAN> SHUTDOWN IMMEDIATE;

RMAN> STARTUP MOUNT;

RMAN> ALTER DATABASE OPEN RESETLOGS;


-- Sau bước này, chúng ta đã giả lập được tình huống dùng bản backup từ DB cũ để apply lên một DB mới hoàn toàn.

oracle@db2 10.0.2.15:~$ nid TARGET=SYS/oracle@cdb1

DBNEWID: Release 19.0.0.0.0 - Production on Wed May 1 22:28:24 2024

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

Connected to database CDB1 (DBID=1141575699)

Connected to server version 19.3.0

Control Files in database:
    /u01/app/oracle/oradata/CDB1/control01.ctl
    /u01/app/oracle/oradata/CDB1/control02.ctl

Change database ID of database CDB1? (Y/[N]) => y

Proceeding with operation
Changing database ID from 1141575699 to 1141584584
    Control File /u01/app/oracle/oradata/CDB1/control01.ctl - modified
    Control File /u01/app/oracle/oradata/CDB1/control02.ctl - modified
    Datafile /u01/app/oracle/oradata/CDB1/system01.db - dbid changed
    Datafile /u01/app/oracle/oradata/CDB1/sysaux01.db - dbid changed
    Datafile /u01/app/oracle/oradata/CDB1/undotbs01.db - dbid changed
    Datafile /u01/app/oracle/oradata/CDB1/users01.db - dbid changed
    Datafile /u01/app/oracle/oradata/CDB1/temp01.db - dbid changed
    Control File /u01/app/oracle/oradata/CDB1/control01.ctl - dbid changed
    Control File /u01/app/oracle/oradata/CDB1/control02.ctl - dbid changed
    Instance shut down

Database ID for database CDB1 changed to 1141584584.
All previous backups and archived redo logs for this database are unusable.
Database has been shutdown, open database with RESETLOGS option.
Succesfully changed database ID.
DBNEWID - Completed succesfully.

2.2. Phục hồi dữ liệu từ bản backup lên DB mới

-- Đây là hoạt động gồm nhiều bước và tuân theo trình tự nhất định như sau, tôi sẽ vừa thực hiện theo trình tự đúng và thử cả trường hợp sai để chúng ta có thể nhận biết được lỗi cho từng trường hợp.

-- Từ bước này, tôi sẽ chỉ nói ngắn gọn bản backup do DB cũ xuất ra là "bản backup" hoặc "backup file", DB mới cần dựng lại dữ liệu là "DB". Lưu trình thực hiện như sau:

  1. Mode: Open. Thao tác: Xóa SPFILE + datafile hiện hành của DB, restore SPFILE từ bản backup lên DB => shutdown immediate => startup nomount => Restore CONTROLFILE từ bản backup, kết quả của bước này là DB sẽ tạo ra các CONTROLFILE mới (ví dụ control01.dbf) => alter database mount.
  2. Mode: Mounted. Thao tác: khai báo các backup file với DB (CATALOG).
  3. Mode: Mounted. Thao tác: Restore toàn bộ data từ bản backup lên DB => alter database open resetlogs.

2.2.1. Restore file tham số của DB

-- Xóa SPFILE + datafile hiện hành, restore SPFILE từ bản backup => shutdown immediate => startup nomount:

oracle@db2 10.0.2.15:~$ rm /u01/app/oracle/oradata/CDB1/*
oracle@db2 10.0.2.15:~$ rm /u01/app/oracle/product/19.0.0/dbhome_1/dbs/spfilecdb1.ora
oracle@db2 10.0.2.15:~$ ll /u01/app/oracle/oradata/CDB1/
total 0
drwxr-x--- 2 oracle oinstall  6 May  1 23:23 .
drwxr-x--- 3 oracle oinstall 18 May  1 21:02 ..
oracle@db2 10.0.2.15:~$ ll /u01/app/oracle/product/19.0.0/dbhome_1/dbs/spfilecdb1.ora
ls: cannot access /u01/app/oracle/product/19.0.0/dbhome_1/dbs/spfilecdb1.ora: No such file or directory

-- Restore SPFILE:

RMAN> startup nomount;

startup failed: ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/u01/app/oracle/product/19.0.0/dbhome_1/dbs/initcdb1.ora'

starting Oracle instance without parameter file for retrieval of spfile
Oracle instance started

Total System Global Area    1073737800 bytes

Fixed Size                     8904776 bytes
Variable Size                289406976 bytes
Database Buffers             767557632 bytes
Redo Buffers                   7868416 bytes

RMAN> RESTORE SPFILE FROM '/u01/backup/level1/control_file_c-1141296028-20240430-06';

Starting restore at 01-MAY-24
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=530 device type=DISK

channel ORA_DISK_1: restoring spfile from AUTOBACKUP /u01/backup/level1/control_file_c-1141296028-20240430-06
channel ORA_DISK_1: SPFILE restore from AUTOBACKUP complete
Finished restore at 01-MAY-24

RMAN> shutdown immediate;

Oracle instance shut down

-- Bật DB vào mode nomount, tiến hành restore CONTROLFILE. Sau quá trình chạy chúng ta sẽ thấy CONTROLFILE mới được tạo:

RMAN> startup nomount;

connected to target database (not started)
Oracle instance started

Total System Global Area    4731172136 bytes

Fixed Size                     8906024 bytes
Variable Size                905969664 bytes
Database Buffers            3808428032 bytes
Redo Buffers                   7868416 bytes

RMAN> RESTORE CONTROLFILE FROM '/u01/backup/level1/control_file_c-1141296028-20240430-06';

Starting restore at 01-MAY-24
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=1151 device type=DISK

channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/u01/app/oracle/oradata/CDB1/control01.ctl
output file name=/u01/app/oracle/oradata/CDB1/control02.ctl
Finished restore at 01-MAY-24

RMAN> ALTER DATABASE MOUNT;

released channel: ORA_DISK_1
Statement processed

-- Lỗi: Nếu trước khi restore CONTROLFILE mà chúng ta không tiến hành khởi động lại DB thì CONTROLFILE mới sẽ không được tạo, khi mount DB sẽ xuất hiện lỗi như sau:

RMAN> ALTER DATABASE MOUNT;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of sql statement command at 05/01/2024 23:30:31
ORA-01103: database name 'CDB1' in control file is not 'DUMMY'

2.2.2. Khai báo bản backup với DB

-- Về lí thuyết, khi đã mount được DB thì ta có thể khai báo bản backup với DB (catalog) nhưng thực tế thì sẽ gặp lỗi:

RMAN> CATALOG START WITH '/u01/backup/level0/';

searching for all files that match the pattern /u01/backup/level0/

List of Files Unknown to the Database
=====================================
File Name: /u01/backup/level0/data_file_20240430_CDB1_112pht4j_33
File Name: /u01/backup/level0/data_file_20240430_CDB1_102pht4j_32
File Name: /u01/backup/level0/data_file_20240430_CDB1_122pht4j_34
File Name: /u01/backup/level0/arc_20240430_CDB1_142pht5r_36_142pht5r_1_1
File Name: /u01/backup/level0/arc_20240430_CDB1_152pht5r_37_152pht5r_1_1
File Name: /u01/backup/level0/control_file_c-1141296028-20240430-02

Do you really want to catalog the above files (enter YES or NO)? yes
cataloging files...
no files cataloged

List of Files Which Were Not Cataloged
=======================================
File Name: /u01/backup/level0/data_file_20240430_CDB1_112pht4j_33
  RMAN-07518: Reason: Foreign database file DBID: 1141296028  Database Name: CDB1
File Name: /u01/backup/level0/data_file_20240430_CDB1_102pht4j_32
  RMAN-07518: Reason: Foreign database file DBID: 1141296028  Database Name: CDB1
File Name: /u01/backup/level0/data_file_20240430_CDB1_122pht4j_34
  RMAN-07518: Reason: Foreign database file DBID: 1141296028  Database Name: CDB1
File Name: /u01/backup/level0/arc_20240430_CDB1_142pht5r_36_142pht5r_1_1
  RMAN-07518: Reason: Foreign database file DBID: 1141296028  Database Name: CDB1
File Name: /u01/backup/level0/arc_20240430_CDB1_152pht5r_37_152pht5r_1_1
  RMAN-07518: Reason: Foreign database file DBID: 1141296028  Database Name: CDB1
File Name: /u01/backup/level0/control_file_c-1141296028-20240430-02
  RMAN-07518: Reason: Foreign database file DBID: 1141296028  Database Name: CDB1

-- Nguyên nhân lỗi là do DBID của bản backup là DBID của database cũ, khác biệt với DBID của database hiện hành => RMAN nhận ra sự khác biệt này và không cho phép chúng ta khai báo bản backup với DB. Đây là một cơ chế nhằm ngăn chặn việc apply bản backup vào nhầm DB. Vậy để khai báo được bản backup với DB, ta cần set lại DBID của phiên làm việc trong RMAN. Lưu trình như sau:

  1. startup nomount;
  2. set dbid <DBID của bản backup>;
  3. alter database mount;
  4. catalog tất cả các thư mục chứa các bản backup.
  5. kiểm tra bằng lệnh list backup summary.

RMAN> STARTUP NOMOUNT;

connected to target database (not started)
Oracle instance started

Total System Global Area    4731172136 bytes

Fixed Size                     8906024 bytes
Variable Size                905969664 bytes
Database Buffers            3808428032 bytes
Redo Buffers                   7868416 bytes

RMAN> SET DBID=1141296028;

executing command: SET DBID

RMAN> ALTER DATABASE MOUNT;

Statement processed

RMAN> CATALOG START WITH '/u01/backup/level0/';

searching for all files that match the pattern /u01/backup/level0/

List of Files Unknown to the Database
=====================================
File Name: /u01/backup/level0/control_file_c-1141296028-20240430-02

Do you really want to catalog the above files (enter YES or NO)? yes
cataloging files...
cataloging done

List of Cataloged Files
=======================
File Name: /u01/backup/level0/control_file_c-1141296028-20240430-02

RMAN> CATALOG START WITH '/u01/backup/level1/';

searching for all files that match the pattern /u01/backup/level1/

List of Files Unknown to the Database
=====================================
File Name: /u01/backup/level1/control_file_c-1141296028-20240430-03
File Name: /u01/backup/level1/control_file_c-1141296028-20240430-06
File Name: /u01/backup/level1/control_file_c-1141296028-20240501-00
File Name: /u01/backup/level1/control_file_c-1141296028-20240501-01
File Name: /u01/backup/level1/control_file_c-1141296028-20240501-02
File Name: /u01/backup/level1/control_file_c-1141296028-20240501-03
File Name: /u01/backup/level1/control_file_c-1141296028-20240501-04
File Name: /u01/backup/level1/control_file_c-1141296028-20240501-05

Do you really want to catalog the above files (enter YES or NO)? yes
cataloging files...
cataloging done

List of Cataloged Files
=======================
File Name: /u01/backup/level1/control_file_c-1141296028-20240430-03
File Name: /u01/backup/level1/control_file_c-1141296028-20240430-06
File Name: /u01/backup/level1/control_file_c-1141296028-20240501-00
File Name: /u01/backup/level1/control_file_c-1141296028-20240501-01
File Name: /u01/backup/level1/control_file_c-1141296028-20240501-02
File Name: /u01/backup/level1/control_file_c-1141296028-20240501-03
File Name: /u01/backup/level1/control_file_c-1141296028-20240501-04
File Name: /u01/backup/level1/control_file_c-1141296028-20240501-05

RMAN> list backup summary;


List of Backups
===============
Key     TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
------- -- -- - ----------- --------------- ------- ------- ---------- ---
30      B  0  A DISK        30-APR-24       1       1       YES        LEVEL0
31      B  0  A DISK        30-APR-24       1       1       YES        LEVEL0
32      B  0  A DISK        30-APR-24       1       1       YES        LEVEL0
34      B  A  A DISK        30-APR-24       1       1       YES        ARCH
35      B  A  A DISK        30-APR-24       1       1       YES        ARCH
38      B  1  A DISK        30-APR-24       1       1       YES        LEVEL1
39      B  1  A DISK        30-APR-24       1       1       YES        LEVEL1
40      B  1  A DISK        30-APR-24       1       1       YES        LEVEL1
42      B  A  A DISK        30-APR-24       1       1       YES        ARCH
43      B  A  A DISK        30-APR-24       1       1       YES        ARCH
44      B  A  A DISK        30-APR-24       1       1       YES        ARCH
46      B  F  A DISK        30-APR-24       1       1       NO         TAG20240430T133137
47      B  1  A DISK        30-APR-24       1       1       YES        LEVEL1
48      B  1  A DISK        30-APR-24       1       1       YES        LEVEL1
49      B  1  A DISK        30-APR-24       1       1       YES        LEVEL1
50      B  F  A DISK        30-APR-24       1       1       NO         TAG20240430T134207
51      B  A  A DISK        30-APR-24       1       1       YES        ARCH
52      B  A  A DISK        30-APR-24       1       1       YES        ARCH
53      B  A  A DISK        30-APR-24       1       1       YES        ARCH
54      B  F  A DISK        30-APR-24       1       1       NO         SPFILE_BACKUP
55      B  F  A DISK        30-APR-24       1       1       NO         TAG20240430T125456
56      B  F  A DISK        30-APR-24       1       1       NO         TAG20240430T123316
57      B  F  A DISK        30-APR-24       1       1       NO         TAG20240430T134228
58      B  F  A DISK        01-MAY-24       1       1       NO         TAG20240501T152831
59      B  F  A DISK        01-MAY-24       1       1       NO         TAG20240501T154321
60      B  F  A DISK        01-MAY-24       1       1       NO         TAG20240501T155737
61      B  F  A DISK        01-MAY-24       1       1       NO         TAG20240501T161030
62      B  F  A DISK        01-MAY-24       1       1       NO         TAG20240501T162056
63      B  F  A DISK        01-MAY-24       1       1       NO         TAG20240501T204827

-- Vậy là vấn đề chỉnh sửa DBID để có thể mang bản backup từ DB cũ đi dựng lại ở DB mới đã được giải quyết.

2.2.3. Restore toàn bộ data lên DB mới

-- Đến đây, chúng ta hoàn toàn có thể apply toàn bộ dữ liệu trong bản backup lên DB. Như thường lệ, tôi sẽ khai báo nhiều kênh xử lí song song và đóng gói lại thành script. Trên các luồng song song hãy khai báo toàn bộ các thư mục chứa bản backup, ví dụ trong trường hợp này tôi đã phân chia ra làm 02 thư mục riêng biệt để chứa các file backup level0 và level1:

RUN {
    CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
    CONFIGURE CHANNEL 1 DEVICE TYPE DISK FORMAT '/u01/backup/level0/%U';
    CONFIGURE CHANNEL 2 DEVICE TYPE DISK FORMAT '/u01/backup/level0/%U';
    CONFIGURE CHANNEL 3 DEVICE TYPE DISK FORMAT '/u01/backup/level1/%U';
    CONFIGURE CHANNEL 4 DEVICE TYPE DISK FORMAT '/u01/backup/level1/%U';

    ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT '/u01/backup/level0/%U';
    ALLOCATE CHANNEL ch2 DEVICE TYPE DISK FORMAT '/u01/backup/level0/%U';
    ALLOCATE CHANNEL ch3 DEVICE TYPE DISK FORMAT '/u01/backup/level1/%U';
    ALLOCATE CHANNEL ch4 DEVICE TYPE DISK FORMAT '/u01/backup/level1/%U';

    RESTORE DATABASE;

    RECOVER DATABASE;

    RELEASE CHANNEL ch1;
    RELEASE CHANNEL ch2;
    RELEASE CHANNEL ch3;
    RELEASE CHANNEL ch4;
}

-- Sau khi script chạy xong, tiếp tục open database:

RMAN> ALTER DATABASE OPEN RESETLOGS;

Statement processed

-- Thử truy cập DB với công cụ Toad, schema TUANTN và dữ liệu đi kèm được phục hồi nguyên trạng:

===

Nhận xét

Bài đăng phổ biến