Rman recovery point in time Oracle Database 19c

Bài viết này sẽ hướng dẫn các bạn cách để Recovey dữ liệu về một mốc thời gian nào đó trong quá khứ sử dụng RMAN trong Oracle Database 19c.

Point-in-time recovery (PITR), hay khôi phục dữ liệu theo thời điểm, là một kỹ thuật cho phép khôi phục lại tình trạng của dữ liệu tại một thời điểm cụ thể trong quá khứ. Nó đặc biệt hữu ích trong trường hợp:

  • Xóa nhầm dữ liệu: Bạn vô tình xóa một file quan trọng hoặc bảng dữ liệu. PITR cho phép khôi phục lại dữ liệu từ một bản sao lưu được thực hiện trước khi xóa.
  • Cập nhật sai dữ liệu: Bạn đã cập nhật nhầm dữ liệu và cần khôi phục lại trạng thái chính xác trước đó. PITR giúp đưa dữ liệu về thời điểm mong muốn.
  • Đòn tấn công ransomware: Ransomware là một loại phần mềm độc hại mã hóa dữ liệu của bạn và yêu cầu tiền chuộc để giải mã. PITR cho phép khôi phục lại dữ liệu từ bản sao lưu trước khi bị tấn công.

PITR hoạt động như thế nào?

Để thực hiện PITR, cần có hai yếu tố chính:

  1. Bản sao lưu thường xuyên: Hệ thống cần phải có lịch sao lưu dữ liệu định kỳ. PITR phụ thuộc vào các bản sao lưu này để phục hồi lại trạng thái trước đó.
  2. Ghi nhật ký thay đổi (Transaction logs, Archivelog): Ghi nhật ký thay đổi theo dõi tất cả các hoạt động CRUD (Create, Read, Update, Delete) trên dữ liệu. Nó lưu lại các phiên bản trước đó của dữ liệu, cho phép khôi phục về một điểm cụ thể.

Các bước cơ bản của PITR:

  1. Xác định thời điểm khôi phục: Bạn cần xác định thời điểm cụ thể trong quá khứ mà bạn muốn khôi phục lại dữ liệu.
  2. Khôi phục bản sao lưu: Dựa trên thời điểm đã chọn, hệ thống sẽ khôi phục lại bản sao lưu được thực hiện gần nhất trước đó.
  3. Áp dụng nhật ký thay đổi: Hệ thống sẽ sử dụng các bản ghi trong nhật ký thay đổi để hoàn tác các hoạt động diễn ra sau thời điểm khôi phục, đưa dữ liệu về trạng thái mong muốn.

Oracle cung cấp hai phương pháp chính để thực hiện PITR:

  1. Oracle Recovery Manager (RMAN): Đây là công cụ sao lưu và khôi phục tích hợp của Oracle. RMAN cho phép bạn khôi phục toàn bộ database hoặc một tập hợp tablespaces (vùng lưu trữ dữ liệu) về một SCN (System Change Number) cụ thể, sequence number (số sequence), thời gian cụ thể, hoặc restore point (điểm khôi phục).

Để thực hiện PITR bằng RMAN, cần đáp ứng các điều kiện (tiền quyết điều kiện – prerequisite):

  • Archive log mode: Database phải được bật chế độ lưu trữ nhật ký thay đổi (archive log mode) để đảm bảo lưu trữ đầy đủ các thay đổi trên dữ liệu.
  • Bản sao lưu: Bạn cần có sẵn các bản sao lưu dữ liệu trước thời điểm khôi phục mong muốn.
  • Nhật ký thay đổi (archived logs): Các nhật ký thay đổi được lưu trữ (archived logs) cần có sẵn để áp dụng cho bản sao lưu được khôi phục.
  1. Flashback Technology: Oracle Flashback Technology cung cấp một tập hợp các tính năng cho phép khôi phục dữ liệu theo thời điểm mà không cần sử dụng RMAN. Các tính năng chính bao gồm:
  • Flashback Database: Khôi phục toàn bộ database về một SCN cụ thể.
  • Flashback Table: Khôi phục một bảng cụ thể về một SCN cụ thể.
  • Flashback Transaction: Khôi phục các thay đổi của một transaction (giao dịch) cụ thể.

Flashback Technology có những ưu điểm so với RMAN:

  • Nhanh chóng: Flashback thường nhanh hơn PITR sử dụng RMAN vì không cần khôi phục toàn bộ database.
  • Dễ sử dụng: Flashback sử dụng cú pháp SQL đơn giản, dễ dàng cho người dùng thực hiện.

Tuy nhiên, Flashback Technology cũng có hạn chế:

  • Giới hạn thời gian: Khả năng sử dụng Flashback phụ thuộc vào thời gian lưu trữ các dữ liệu liên quan (undo data). Oracle khuyến nghị cấu hình để lưu trữ undo data đủ lâu để đáp ứng nhu cầu khôi phục.
  • Không khôi phục toàn bộ database: Flashback chỉ khôi phục một phần dữ liệu (bảng, transaction) chứ không khôi phục toàn bộ database.

Cài đặt Oracle database: https://datalinks.vn/huong-dan-cai-dat-oracle-database-19c-tren-oracle-linux/

THÔNG TIN DB TEST:

DB: duodb

IP: 192.168.68.11

Thực hiện tạo backup full DB:

exit

rman target /

backup database;

word image 1127 1

Login DB và check thông tin SCN, log:

sqlplus / as sysdba

startup

archive log list

Tạo user và test:

create user duong identified by oracle;

grant create session, create table to duong;

alter user duong quota 500M on users;

create table duong.tab1(id number);

insert into duong.tab1 values (123);

commit;

select * from duong.tab1;

SQL> create user duong identified by oracle;

User created.

SQL> grant create session, create table to duong;

Grant succeeded.

SQL> alter user duong quota 500M on users;

User altered.

SQL> select * from duong.tab1;

ID

———-

123

Test lại SCN, log:

conn sys/oracle as sysdba

archive log list;

SQL> archive log list;

Database log mode Archive Mode

Automatic archival Enabled

Archive destination USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence 11

Next log sequence to archive 13

Current log sequence 13

Xoá table => tab1 sẽ mất hết data:

exit;

sqlplus / as sysdba

delete duong.tab1;

commit;

select * from duong.tab1;

RMAN> exit

Recovery Manager complete.

[oracle@srv1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 – Production on Fri May 10 09:24:11 2024

Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle. All rights reserved.

Connected to:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production

Version 19.3.0.0.0

SQL> delete duong.tab1;

1 row deleted.

SQL> commit;

Commit complete.

SQL> select * from duong.tab1;

no rows selected

Check log theo từng điểm thời gian:

conn sys/oracle as sysdba

select sequence#,first_change#, to_char(first_time,'HH24:MI:SS') from v$log order by 3;

SQL> conn sys/oracle as sysdba

Connected.

SQL> select sequence#,first_change#, to_char(first_time,’HH24:MI:SS’) from v$log order by 3;

SEQUENCE# FIRST_CHANGE# TO_CHAR(

———- ————- ——–

13 2331231 00:37:59

14 2334368 09:23:09

15 2334399 09:23:28

Chúng ta xoá tab1 vào thời điểm 09:23 tại số sequence là 14, như vậy trước đó là còn data trong tab1, sau thời điểm đó đến hiện tại là mất data, => cần khôi phục về trước thời điểm đó có nghĩa là chúng ta quay về số SEQ: 14

Thực hiện Restore point in time:

shut immediate
startup mount

exit
rman target /

run
{
set until sequence=14;
restore database;
recover database;
}

alter database open resetlogs;

SQL> shut immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount

ORACLE instance started.

Total System Global Area 1828713632 bytes

Fixed Size 8897696 bytes

Variable Size 436207616 bytes

Database Buffers 1375731712 bytes

Redo Buffers 7876608 bytes

Database mounted.

SQL> exit

Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production

Version 19.3.0.0.0

[oracle@srv1 ~]$ rman target /

Recovery Manager: Release 19.0.0.0.0 – Production on Fri May 10 09:30:09 2024

Version 19.3.0.0.0

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

connected to target database: DUODB (DBID=381617332, not open)

RMAN> run

{

set until sequence=14;

restore database;

recover database;

}

2> 3> 4> 5> 6>

executing command: SET until clause

Starting restore at 10-MAY-24

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=237 device type=DISK

channel ORA_DISK_1: starting datafile backup set restore

channel ORA_DISK_1: specifying datafile(s) to restore from backup set

channel ORA_DISK_1: restoring datafile 00001 to /u01/app/oracle/oradata/DUODB/datafile/o1_mf_system_m3bvtvd1_.dbf

channel ORA_DISK_1: restoring datafile 00003 to /u01/app/oracle/oradata/DUODB/datafile/o1_mf_sysaux_m3bvvyk8_.dbf

channel ORA_DISK_1: restoring datafile 00004 to /u01/app/oracle/oradata/DUODB/datafile/o1_mf_undotbs1_m3bvwqpc_.dbf

channel ORA_DISK_1: restoring datafile 00007 to /u01/app/oracle/oradata/DUODB/datafile/o1_mf_users_m3bvwrsm_.dbf

channel ORA_DISK_1: reading from backup piece /u01/app/oracle/fast_recovery_area/DUODB/backupset/2024_05_10/o1_mf_nnndf_TAG20240510T003006_m3t20z2x_.bkp

channel ORA_DISK_1: piece handle=/u01/app/oracle/fast_recovery_area/DUODB/backupset/2024_05_10/o1_mf_nnndf_TAG20240510T003006_m3t20z2x_.bkp tag=TAG20240510T003006

channel ORA_DISK_1: restored backup piece 1

channel ORA_DISK_1: restore complete, elapsed time: 00:00:15

Finished restore at 10-MAY-24

Starting recover at 10-MAY-24

using channel ORA_DISK_1

starting media recovery

archived log for thread 1 with sequence 11 is already on disk as file /u01/app/oracle/fast_recovery_area/DUODB/archivelog/2024_05_10/o1_mf_1_11_m3t21g85_.arc

archived log for thread 1 with sequence 12 is already on disk as file /u01/app/oracle/fast_recovery_area/DUODB/archivelog/2024_05_10/o1_mf_1_12_m3t2hr00_.arc

archived log file name=/u01/app/oracle/fast_recovery_area/DUODB/archivelog/2024_05_10/o1_mf_1_11_m3t21g85_.arc thread=1 sequence=11

archived log file name=/u01/app/oracle/fast_recovery_area/DUODB/archivelog/2024_05_10/o1_mf_1_12_m3t2hr00_.arc thread=1 sequence=12

media recovery complete, elapsed time: 00:00:01

Finished recover at 10-MAY-24

RMAN> alter database open resetlogs;

Statement processed

Check thông tin DB sau khi restore:

exit

sqlplus / as sysdba

select * from duong.tab1;

Connected to:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production

Version 19.3.0.0.0

SQL> select * from duong.tab1;

ID

———-

123

Restore point in time với Rman thành công.

 

Datalinks.vn

Hello các bạn, tôi là Dương Nguyễn (DuoDBA - https://www.youtube.com/@DuoDBA) tác giả của blog này. Mong muốn được chia sẻ kiến thức và kinh nghiệm về cơ sở dữ liệu với những người đam mê và quan tâm đến lĩnh vực này. Tôi có tổ chức các khoá Coaching về #OracleDatabase và luyện thi #OCP thường xuyên, các bạn muốn có người đồng hành thì alo tôi nhé. Call/Zalo: 0765 871 888. Thanks you !.....
0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest

0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận