[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:
- 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.
- Mode: Mounted. Thao tác: khai báo các backup file với DB (CATALOG).
- 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:
- startup nomount;
- set dbid <DBID của bản backup>;
- alter database mount;
- catalog tất cả các thư mục chứa các bản backup.
- 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
Đăng nhận xét