Chủ Nhật, 20 tháng 4, 2025

Xóa và add node ORACLE RAC 19.15

Môi trường ORACLE RAC chạy trên VMware

Node 1:

OS: Windows server 2019 standard

Server name: SVR-1145-DB

CPU: 32 core, RAM 64GB

Oracle: 19.15

Node 2:

OS: Windows server 2019 standard

Server name: SVR-1146-DB

CPU: 32 core, RAM 64GB

Oracle: 19.15

1. Vấn đề hệ thống

Dùng tool zerto move Node 1 qua môi trường khác start cluster không lên. Node 2 ở DC vẫn hoạt động bình thường

Move node 1 về lại môi trường cũ start lại cluster cũng không lên.

Lưu ý: Node 1 đã không chạy trong thời gian dài trên 2 tháng.

Lúc setup đặt tên cluster dài hơn 15 ký tự nó vẫn cho cài tiếp nhưng khi đến bước addnode thứ hai có thể sẽ bị lỗi

bởi vì tại bước này nó thực thi file gridconfig.bat, trong file này sẽ tiếp tục gọi đến file crsgenconfig_params nằm trong 

đường dẫn ( C:\oracle\app\19.0.0\gridhome\crs\install) để lấy cluster name lúc này cluster name chỉ còn 15 ký tự nên 

nó không hiểu và sinh ra lỗi không addnode được.

Giải pháp để xử lý trước khi add node lại

    1. Xác định đúng cluster name

    2. Edit cluster name trong file  crsgenconfig_params trên node còn hoạt động cho đúng với cluster name được yêu 

cầu trong log khi quá trình addnode bị lỗi sinh ra. Sau khi sửa xong tiến hành addnode trở lại và tiếp tục theo dõi log 

mới để trouble. 

2. Giải quyết vấn đề

2.1 Clone toàn bộ hệ thống Prod đưa vào môi trường isolate để làm UAT

  • Kiểm tra phần share disk trên tất cả các node. 

    Đảm bảo tất cả các disk phải được share theo đúng thứ tự vmdk và các controller.

  • Dùng diskpart để kiểm tra:
    Mở Command Prompt với quyền Administrator
    Nhập lệnh:

    diskpart
    list disk
       
    select disk 1
    online disk -- nếu nó chưa online
    detail disk -- xem chi tiết disk 1 nếu nó read only
    attribute disk clear readonly -- remove thuộc tính readonly của disk 1
    --Current Read-only State : No

    Tất cả disk phải có trạng thái online

  • Kiểm tra lại môi trường như

    • Tắt tất cả local firewall trên tất cả các node
      Tắt tất cả local firewall trên tất cả các node

    • Chạy lệnh cluvfy stage -pre crsinst svr-1145-db, svr-1146-db -verbose

  • Start lại cluster trên node 1 đứng trên node 1

    • Kiểm tra asm disk bằng lệnh asmca hoặc asmtool -list

    • Kiểm tra toàn bộ trạng thái resource trong cluster

  • Trong trường hợp này instance database startup mount nhưng không thể open

 

  • Đứng trên node 2 delete instance node 1 ra khỏi cluster.

  • Sqlplus và instance node 2 kiểm tra redo log group của node 1 xem còn không? 
    nếu còn thì phải xóa tất cả các redo log group 1 ra khỏi database bằng câu lệnh sau:

         Status: inactive

    SQL> ALTER DATABASE DISABLE THREAD 1;

SQL> ALTER DATABASE DROP LOGFILE GROUP 1;

SQL> ALTER DATABASE DROP LOGFILE GROUP 2;

SQL> ALTER DATABASE DROP LOGFILE GROUP 3;

SQL> ALTER DATABASE DROP LOGFILE GROUP 4;

SQL> ALTER DATABASE DROP LOGFILE GROUP 14;

  • Deinstall database software (database home trên node 1)

         deinstall.bat -local

  • Deinstall grid software (grid home trên node 1)    

         deinstall.bat -local

  • Kiểm tra thông tin (đứng trên node 2)

    • olsnodes -s -t -n --> đảm bảo không còn node 1

    • resource VIP của node 1 trong cluster --> nếu còn phải remove

    • Chạy cluvfy stage -post nodedel svr-1145-db -verbose      

    • Chạy cluvfy stage -pre nodeadd svr-1145-db -verbose

  • Thực hiện add grid home vào cluster (đứng trên node 2 add node 1)

    • Restart lại node 1

    • Kiểm tra WTime32

    • Tạo grid home

    • Chạy lại cluvfy stage -pre nodeadd svr-1145-db -verbose (fix hết các lỗi nếu có mới tiến hành add node)

    • Đứng trên grid home node 2 chạy lệnh addnode.bat với quyền Administrator

    • Đứng trên node 1 chạy lệnh gridconfig.bat trên node 1 ( chú ý cluster name không được lớn 15 ký tự)

    • Kiểm tra tất cả resource của node 1 trên cluster

  • Thực hiện add database home và cluster (đứng trên node 2 add node 1)

    • Đứng trên database home node 2 chạy lệnh addnode.bat với quyền Administrator

    • Làm theo yêu cầu từ màn hình

  •  Add instance database vào cluster

    • Đứng trên node 2 khai bao môi trường database home chạy lệnh DBCA để add instance vào cluster 

    • Add instance database vào cluster

2.2 Thực hiện trên môi trường Prod

 👉 Trường hợp này cluster trên node 1 bị lỗi không start được

 👉 Instance database không chạy

 

 Giải quyết:

 1. Manual xóa tất cả các thành phần

  • Xóa redo log group của instance 1

    Status: inactive

    SQL> ALTER DATABASE DISABLE THREAD 1;

SQL> ALTER DATABASE DROP LOGFILE GROUP 1;

SQL> ALTER DATABASE DROP LOGFILE GROUP 2;

SQL> ALTER DATABASE DROP LOGFILE GROUP 3;

SQL> ALTER DATABASE DROP LOGFILE GROUP 4;

SQL> ALTER DATABASE DROP LOGFILE GROUP 14;

  • Deinstall database software (database home trên node 1)

         deinstall.bat -local 

  • Deinstall grid software (grid home trên node 1)    

         deinstall.bat -local

  • Kiểm tra thông tin (đứng trên node 2)

    • olsnodes -s -t -n --> đảm bảo không còn node 1 → nếu còn cần phải restart cluster trên node 2 và thực hiện lệnh sau:

crsctl delete node -n svr-1145-db

  • resource VIP của node 1 trong cluster --> nếu còn phải remove

  • Chạy cluvfy stage -post nodedel svr-1145-db -verbose      

  • Chạy cluvfy stage -pre nodeadd svr-1145-db -verbose

2. Thực hiện add node vào cluster

Lưu ý: Kiểm tra phải restart process OracleRemExecServiceV2 thành công trên cả 2 node

  • Thực hiện add grid home vào cluster (đứng trên node 2 add node 1)

    • Restart lại node 1

    • Kiểm tra WTime32

    • Tạo grid home

    • Chạy lại cluvfy stage -pre nodeadd svr-1145-db -verbose (fix hết các lỗi nếu có mới tiến hành add node)

    • Đứng trên grid home node 2 chạy lệnh addnode.bat với quyền Administrator

    • Đứng trên node 1 chạy lệnh gridconfig.bat trên node 1 (chú ý cluster name không được lớn 15 ký tự)

    • Kiểm tra tất cả resource của node 1 trên cluster

    • Chỉnh 2 tham số này trong registry trên cả 2 node có giá trị 600 (MaxNegPhaseCorrection,MaxPosPhaseCorrection)

  • Thực hiện add database home và cluster (đứng trên node 2 add node 1)

    • Đứng trên database home node 2 chạy lệnh addnode.bat với quyền Administrator

    • Làm theo yêu cầu từ màn hình

  •  Add instance database vào cluster

    • Đứng trên node 2 khai báo môi trường database home chạy lệnh DBCA để add instance vào cluster 

    • Add instance database vào cluster




Chủ Nhật, 23 tháng 3, 2025

Migrate Oracle RAC 19C To New SAN

 

1. Tạo diskgroup mới

 ##Disk group name:
 OCR (3 LUN - 20GB/LUN - Total: 60GB)
 ARCH (1 LUN - 500GB/LUN - Total: 500GB)
 BACKUP (1 LUN - 500GB/LUN - Toal: 500GB)
 REDO1:(2 LUN - 20GB/LUN - Toal: 40GB)
 REDO2: (2 LUN - 20GB/LUN - Toal: 40GB)
 DGDATA: (3 LUN - 300GB/LUN - Toal: 900GB)

2. Tạo database nhỏ dùng file system để test CALIBRATE_IO (link)

CONN / AS SYSDBA

SET SERVEROUTPUT ON
DECLARE
  l_latency  PLS_INTEGER;
  l_iops     PLS_INTEGER;
  l_mbps     PLS_INTEGER;
BEGIN
   DBMS_RESOURCE_MANAGER.calibrate_io (num_physical_disks => 1, 
                                       max_latency        => 20,
                                       max_iops           => l_iops,
                                       max_mbps           => l_mbps,
                                       actual_latency     => l_latency);
 
  DBMS_OUTPUT.put_line('Max IOPS = ' || l_iops);
  DBMS_OUTPUT.put_line('Max MBPS = ' || l_mbps);
  DBMS_OUTPUT.put_line('Latency  = ' || l_latency);
END;
/

Max IOPS = 95
Max MBPS = 449
Latency  = 20

PL/SQL procedure successfully completed.

SQL>

3. Migrate datafile oracle database

3.1 CREATE NEW DISKGROUP (ONLINE)

3.2 BACKUP AS COPY DATABASE (ONLINE)

rman target /
## set PARALLEL để tăng tốc độ backup
CONFIGURE DEVICE TYPE DISK PARALLELISM 20 BACKUP TYPE TO BACKUPSET;
backup as copy database format '+DGDATA';

3.3 SWITCH DATABASE TO COPY (OFFLINE)

srvctl stop database -d coredb
srvctl start instance -d coredb -i coredb1 -o mount
rman target /
switch database to copy;
recover database;
srvctl stop instance -d coredb -i coredb1
srvctl start database -d coredb

4. Migrate TEMP FILE

4.1 Check total size temp files old

SELECT tablespace_name, sum(round((bytes / 1024 / 1024), 2)) AS "Size (MB)"
FROM dba_temp_files group by tablespace_name;

4.2 Check temp files size

set line 200
col name for a60
col status for a20
select name, bytes/1024/1024/1024 MB,status from v$tempfile;

4.3 Create the new temp files


ALTER TABLESPACE TEMP ADD TEMPFILE '+ARCH' SIZE 10M AUTOEXTEND ON NEXT 1M MAXSIZE 100M;

4.4 Make sure there is no session is using the temp tablespace

SELECT USERNAME, SESSION_NUM, SESSION_ADDR FROM V$SORT_USAGE;

SELECT SID, SERIAL#, STATUS FROM V$SESSION WHERE SERIAL#=SESSION_NUM;
Or
SELECT SID, SERIAL#, STATUS FROM V$SESSION WHERE SADDR=SESSION_ADDR;

4.5 Change the status of the temp files to Offline.

alter database tempfile '<PATH>/XXX_PF_TMP_001.dbf' OFFLINE;
alter database tempfile '<PATH>/XXX_PF_TMP_002.dbf' OFFLINE;

4.6 Drop the old temp files.

ALTER DATABASE TEMPFILE '<PATH>/XXX_PF_TMP_001.dbf' DROP;

ALTER DATABASE TEMPFILE '<PATH>/XXX_PF_TMP_002.dbf' DROP;

Verify the info of the new temp files.

SQL> select * from dba_temp_files;
Or
SQL> select * from V$TEMPFILE;

5. Migrate online redo logfile (online)

Tạo thêm các redo log group nằm trên diskgroup mới

Thực hiện drop các redo log group cũ đang inactive
ALTER DATABASE ADD LOGFILE THREAD 1 ('+REDO1', '+REDO2') SIZE 200M;
ALTER DATABASE ADD LOGFILE THREAD 1 ('+REDO1', '+REDO2') SIZE 200M;
ALTER DATABASE ADD LOGFILE THREAD 1 ('+REDO1', '+REDO2') SIZE 200M;
ALTER DATABASE ADD LOGFILE THREAD 2 ('+REDO1', '+REDO2') SIZE 200M;
ALTER DATABASE ADD LOGFILE THREAD 2 ('+REDO1', '+REDO2') SIZE 200M;
ALTER DATABASE ADD LOGFILE THREAD 2 ('+REDO1', '+REDO2') SIZE 200M;

6. Migrate spfile (offline)

Note: alter system set archive_log_dest_1='LOCATION=+ARCH';
. oraenv
coredb
sqlplus / as sysdba
create pfile='/tmp/init/init_coredb.ora' from spfile;
create spfile='+DGDATA' from pfile='/tmp/init/init_coredb.ora';
##Check lại location spfile
$srvctl config database -d coredb

7. Migrate controlfile (offline)

sqlplus / as sysdba 

alter system set controlfile ='+new_diskgroup/ctr1.ora',''+new_diskgroup/ctr2.ora' scope = spfile sid='*';

srvctl stop database -d coredb

Vào asm

copy control file từ đường dẫn cũng sang đường dẫn mới.

srvctl start database -d coredb

8. Migrate OCR (online)

#$ORACLE_HOME/bin/ocrcheck
#$crsctl query css votedisk
#$ORACLE_HOME/bin/bin/ocrconfig -add +OCR //(+OCR diskgroup mới)
#$ORACLE_HOME/bin/bin/ocrconfig -delete +ASM //(+ASM diskgroup cũ)
#$ORACLE_HOME/bin/crsctl replace votedisk +OCR //(+OCR diskgroup mới)
#$ORACLE_HOME/bin/crsctl query css votedisk // check vote disk
#$ORACLE_HOME/bin/ocrcheck

==MODIFY THE BACKUP LOCATION FOR THE OCR
ocrconfig -showbackup
ocrconfig -backuploc <new location>

9. Migrate asm spfile (offline)

oraenv
+ASM1
sqlplus / as sysasm
create pfile='/tmp/initasm.ora' from spfile;
create spfile='+OCR' from pfile='/tmp/initasm.ora';
$ORACLE_HOME/bin/gpnptool get

10. Move password file asm

 Login as user grid
$srvctl config asm


https://www.oracledbworld.com/oracle-rac/how-to-migrate-ocr-vote-file-asm-spfile-and-asm-password-file-to-new-diskgroup-in-oracle-19c/

 
$asmcmd pwmove --asm  -f +ASM/orapwASM +OCR/orapwASM
## Change location backup of password file asm
Login as user grid
$ srvctl modify asm -pwfilebackup  +OCR/orapwASM_backup


==STOP VÀ START CRS TRÊN ALL NODES
#crsctl stop crs -f
#crsctl start crs -wait
#crsctl status res -t 

 11. ROLLBACK (SỐ NGÀY ROLLBACK PHỤ THUỘC VÀO SỐ NGÀY ARCHIVE ĐƯỢC GIỮ)

srvctl stop database -d coredb
srvctl start instance -d coredb -i coredb1 -o mount
rman target /
switch database to copy;
recover database;
srvctl stop instance -d coredb -i coredb1
srvctl start database -d coredb