Trong bài viết này chúng ta sẽ cùng nhau thực hiện thực hành cách để Duplicate database sử dụng RMAN trong Oracle Database 19c.
Chúng ta thực hiện Duplicate online RMAN Active Duplication trực tiếp từ database đang hoạt động sang một database mới (còn có phương pháp khác nữa là restore lại từ bản backupset chúng ta sẽ thực hiện ở bài thực hành khác)
Duplicate Database using Rman Active Duplication Oracle Database 19c
Cài đặt Oracle database: https://datalinks.vn/huong-dan-cai-dat-oracle-database-19c-tren-oracle-linux/
Xem thêm Clone database sử dụng backupset ở đây: https://datalinks.vn/restore-oracle-database-to-new-server-using-rman-oracle-database-19c-clone-database/
CHI TIẾT DB:
SRV1 – server tôi đặt là Nguồn nhân bản, đã cài đặt cấu hình DB hoàn chỉnh.
SRV2 – server tôi đặt là DB sau khi nhân bản, chỉ cải đặt Software.
Mục tiêu là nhân bản Database từ SRV1 sang SRV2, không thay đổi thông tin gì về DB name….
Ở đây tôi sử dụng IP cho 2 host lần lượt là 192.168.68.11 và 192.168.68.12, bạn có thể sử dụng bất cứ IP nào mà bạn muốn.
Trên 2 SRV: cài đặt hosts file, và hostname như sau
vi /etc/hosts
192.168.68.11 srv1.localdomain srv1 192.168.68.12 srv2.localdomain srv2
trên SRV1:
hostnamectl set-hostname srv1.localdomain
trên SRV2:
hostnamectl set-hostname srv2.localdomain
Ping kiểm tra kết nối giữa 2 host:
ping srv2 -c 5 ping srv1 -c 5
SRV1 + SRV2: Tắt firewall trên cả Source và Target (quan trọng nếu không sẽ không tnsping được) (sử dụng user root)
systemctl stop firewalld.service systemctl disable firewalld.service
SRV1 – Source: Open database và check thông tin sơ bộ, tạo parameter file từ spfile
su oracle cd . .bash_profile sqlplus / as sysdba startup select open_mode, name from v$database; create pfile from spfile;
Copy password file sang SRV2 target:
exit cd /u01/app/oracle/product/19.3.0/dbhome_1/dbs scp orapwduodb oracle@srv2:/u01/app/oracle/product/19.3.0/dbhome_1/dbs/orapwduodb
Copy pfile vừa tạo ở bên trên sang SRV2 target:
scp initduodb.ora oracle@srv2:/u01/app/oracle/product/19.3.0/dbhome_1/dbs/initduodb.ora
SRV2 – Target:
Tạo đường dẫn cần thiết, tương thích với pfile (xem các đường dẫn cần thiết trong pfile, các đường dẫn phải chính xác và đầy đủ, rất quan trọng nếu không sẽ fail khi duplicate)
su oracle mkdir -p /u01/app/oracle/oradata/DUODB mkdir -p /u01/app/oracle/oradata/DUODB/controlfile mkdir -p /u01/app/oracle/fast_recovery_area/DUODB mkdir -p /u01/app/oracle/archive/DUODB mkdir -p /u01/app/oracle/admin/duodb/adump
Tạo biến bash_profile môi trường cho DUODB database trên Server 2
cd
vi .bash_profile
# User specific environment and startup programs PATH=$PATH:$HOME/.local/bin:$HOME/bin export PATH ORACLE_BASE=/u01/app/oracle ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1 ORACLE_SID=duodb PATH=$PATH:$HOME/.local/bin:$HOME/bin:$ORACLE_HOME/bin export PATH ORACLE_BASE ORACLE_HOME ORACLE_SID
Open Target database trong NOMount State với Pfile:
cd . .bash_profile
sqlplus / as sysdba startup nomount pfile ='/u01/app/oracle/product/19.3.0/dbhome_1/dbs/initduodb.ora' create spfile from pfile; shut immediate startup nomount; !ps -ef | grep pmon
Trên cả 2 host thực hiện tạo listener và tnsname theo thông tin bên dưới:
Ghi chú: file listener và tnsnames phải theo chuẩn các thành phần con và dấu ngoặc là lùi đầu dòng theo cấp bậc, như định dạng bên dưới nhé, nếu tất cả dòng mà cùng dồn về đầu dòng với nhau thì có thể sẽ không chạy được nên các bạn lưu ý nhé
cd /u01/app/oracle/product/19.3.0/dbhome_1/network/admin
— LISTENER server1
vi listener.ora
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = duodb) (ORACLE_HOME = /u01/app/oracle/product/19.3.0/dbhome_1) (PROGRAM = extproc) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.68.11)(PORT = 1521)) ) )
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = duodb) (ORACLE_HOME = /u01/app/oracle/product/19.3.0/dbhome_1) (PROGRAM = extproc) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.68.12)(PORT = 1521)) ) )
— TNSNAMES trên cả 2 host giống nhau theo nội dung bên dưới
vi tnsnames.ora
duodb_source = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.68.11)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = duodb.localdomain) ) ) duodb_clone = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.68.12)(PORT = 1521)) (CONNECT_DATA = (out = DEDICATED) (SERVICE_NAME = duodb.localdomain) ) )
Khởi động listener trên cả 2 Server:
lsnrctl start lsnrctl status
Tiến hành tnsping từ SRV1 sang SRV2 và ngược lại xem thông chưa??
tnsping duodb_clone tnsping duodb_source
[oracle@srv1 admin]$ tnsping clone
TNS Ping Utility for Linux: Version 19.0.0.0.0 – Production on 09-MAY-2024 09:03:13
Copyright (c) 1997, 2019, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = srv2)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = duodb)))
OK (0 msec)
SRV2 – Target: thực hiện kết nối rman đến Host 1 quan tnsname và auxiliary đến chính host 2 target sau đó thực hiện duplicate database:
rman target sys/oracle@duodb_source auxiliary sys/oracle duplicate database to 'DUODB' from active database NOFILENAMECHECK;
[oracle@srv2 admin]$ rman target sys/oracle@duodb_source auxiliary sys/oracle
Recovery Manager: Release 19.0.0.0.0 – Production on Thu Sep 12 18:19:10 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)
connected to auxiliary database: DUODB (not mounted)
RMAN> duplicate database to ‘DUODB’ from active database NOFILENAMECHECK;
Starting Duplicate Db at 12-SEP-24
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=254 device type=DISK
current log archived
contents of Memory Script:
{
sql clone “create spfile from memory”;
}
executing Memory Script
sql statement: create spfile from memory
contents of Memory Script:
{
shutdown clone immediate;
startup clone nomount;
}
executing Memory Script
SRV2 – Target: test database sau khi duplicate
sqlplus / as sysdba select name, open_mode from v$database;
[oracle@srv2 dbs]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 – Production on Thu May 9 10:44:22 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> select name, open_mode from v$database;
NAME OPEN_MODE
——— ——————–
DUODB READ WRITE
Duplicate Database thành công.