暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

新装oracle rac主机识别旧存储并恢复数据库

原创 jieguo 2023-09-19
764

上接oracle 19c rac的asm磁盘组所在的物理存储彻底歇菜了
过了一段时间,终于把存储修好了。由于之前有几个小时的数据丢失,所以期望可以将旧存储重新挂起库用于尝试是否可以找回丢失的数据。

需要明确的风险:
故障时刻存储异常掉线,大概率是缓存的数据丢失没有写入磁盘,所以存储即使能识别挂接回数据库,但很可能数据库无法正常启动。
即使数据库修复启动了,数据也可能出现丢失的情况。如果存在大量坏块,则修复难度巨大。

此次可参考的文档:
Oracle 12.1 RAC 系列-安装新主机,识别老存储和恢复数据库
重装CRS-11.2.0.4挂载原磁盘组-linux7
恢复损坏的表决磁盘(votedisk)和OCR
ORA-00600: internal error code, arguments: [kcbzib_kcrsds_1]模拟与修复
ORA-00600: internal error code, arguments: [2131], [9], [8]
undo表空间损坏4194

完整流程思路:

1.准备两台主机安装和原生产一样的操作系统

export PATH=$PATH:/oracle/app/19c/grid/OPatch
opatchauto apply /oracle/software/35370167/35319490
19.3升到19.20过程需要分两步打补丁:先grid,后db。之前19.11到19.20是会同时打grid和db。

image.png
image.png

2.确认操作系统识别挂接了旧存储,多路径配置识别/etc/multipath.conf

3.配置oracle asm识别/etc/udev/rule.d/99-oracleasm.rules等ll /dev/mapper/asm*,ll /dev/dm*检查确认

4.安装集群和数据库版本及补丁Oracle rac19.20

如果没有新盘则格式化asmcrs1/2/3用来重新安装grid,不影响数据。
dd if=/dev/zero of=/dev/mapper/asmcrs1 bs=1M count=100
dd if=/dev/zero of=/dev/mapper/asmcrs2 bs=1M count=100
dd if=/dev/zero of=/dev/mapper/asmcrs3 bs=1M count=100

[grid@racdb1 grid]$ kfod disks=all ds=true cluster=true status=true
--------------------------------------------------------------------------------
 Disk          Size Header    Path                                    Disk Group    User     Group   
================================================================================
   1:     204800 MB MEMBER    /dev/mapper/asmcrs1                      CRS          grid     asmadmin
   2:     204800 MB MEMBER    /dev/mapper/asmcrs2                      CRS          grid     asmadmin
   3:     204800 MB MEMBER    /dev/mapper/asmcrs3                      CRS          grid     asmadmin
   4:    1048576 MB MEMBER    /dev/mapper/asmdata1                     DATA         grid     asmadmin
   5:    1048576 MB MEMBER    /dev/mapper/asmdata2                     DATA         grid     asmadmin
   6:    1048576 MB MEMBER    /dev/mapper/asmdata3                     DATA         grid     asmadmin
   7:    1048576 MB MEMBER    /dev/mapper/asmdata4                     DATA         grid     asmadmin
   8:    1048576 MB MEMBER    /dev/mapper/asmdata5                     DATA         grid     asmadmin
   9:    1048576 MB MEMBER    /dev/mapper/asmreco1                     RECO         grid     asmadmin
  10:    1048576 MB MEMBER    /dev/mapper/asmreco2                     RECO         grid     asmadmin
  11:    1048576 MB MEMBER    /dev/mapper/asmreco3                     RECO         grid     asmadmin
--------------------------------------------------------------------------------
ORACLE_SID ORACLE_HOME                                      HOST_NAME           
================================================================================
[grid@racdb1 grid]$ kfed find /dev/mapper/asmcrs1|wc -l
256
[grid@racdb1 grid]$ kfed find /dev/mapper/asmcrs2|wc -l
256
[grid@racdb1 grid]$ kfed find /dev/mapper/asmcrs3|wc -l
256
[grid@racdb1 grid]$ kfed find /dev/mapper/asmdata1|wc -l
256
[grid@racdb1 grid]$ kfed find /dev/mapper/asmdata2|wc -l
256
[grid@racdb1 grid]$ kfed find /dev/mapper/asmdata3|wc -l
256
[grid@racdb1 grid]$ kfed find /dev/mapper/asmdata4|wc -l
256
[grid@racdb1 grid]$ kfed find /dev/mapper/asmdata5|wc -l
256
[grid@racdb1 grid]$ kfed find /dev/mapper/asmreco1|wc -l
256
[grid@racdb1 grid]$ kfed find /dev/mapper/asmreco2|wc -l
256
[grid@racdb1 grid]$ kfed find /dev/mapper/asmreco3|wc -l
256


SQL> select group_number,name,state,type from v$asm_diskgroup;

GROUP_NUMBER NAME			    STATE		   TYPE
------------ ------------------------------ ---------------------- ------------
	   0 RECO			    DISMOUNTED
	   0 DATA			    DISMOUNTED
	   1 CRS			    MOUNTED		   NORMAL

SQL> create pfile='/home/grid/asm.txt' from spfile;

File created.

SQL> !more /home/grid/asm.txt
+ASM1.__oracle_base='/oracle/app/grid'#ORACLE_BASE set from in memory value
+ASM2.__oracle_base='/oracle/app/grid'#ORACLE_BASE set from in memory value
*.asm_diskstring='/dev/mapper/asm*'
*.asm_power_limit=1
*.large_pool_size=12M
*.remote_login_passwordfile='EXCLUSIVE'

SQL> show parameter asm;

NAME				     TYPE		    VALUE
------------------------------------ ---------------------- ------------------------------
asm_diskgroups			     string
asm_diskstring			     string		    /dev/mapper/asm*
asm_power_limit 		     integer		    1
asm_preferred_read_failure_groups    string
SQL> alter system set asm_diskgroups='RECO','DATA' scope=both sid='*';

System altered.

SQL> show parameter asm;

NAME				     TYPE		    VALUE
------------------------------------ ---------------------- ------------------------------
asm_diskgroups			     string		    RECO, DATA
asm_diskstring			     string		    /dev/mapper/asm*
asm_power_limit 		     integer		    1
asm_preferred_read_failure_groups    string
SQL> select group_number,name,state,type from v$asm_diskgroup;

GROUP_NUMBER NAME			    STATE		   TYPE
------------ ------------------------------ ---------------------- ------------
	   0 RECO			    DISMOUNTED
	   0 DATA			    DISMOUNTED
	   1 CRS			    MOUNTED		   NORMAL

SQL> alter diskgroup RECO mount;

Diskgroup altered.

SQL> select group_number,name,state,type from v$asm_diskgroup;

GROUP_NUMBER NAME			    STATE		   TYPE
------------ ------------------------------ ---------------------- ------------
	   0 DATA			    DISMOUNTED
	   1 CRS			    MOUNTED		   NORMAL
	   2 RECO			    MOUNTED		   EXTERN

SQL> alter diskgroup data mount;

Diskgroup altered.

SQL> select group_number,name,state,type from v$asm_diskgroup;

GROUP_NUMBER NAME			    STATE		   TYPE
------------ ------------------------------ ---------------------- ------------
	   1 CRS			    MOUNTED		   NORMAL
	   3 DATA			    MOUNTED		   EXTERN
	   2 RECO			    MOUNTED		   EXTERN

SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.20.0.0.0
[grid@racdb1 grid]$ asmcmd lsdg
State    Type    Rebal  Sector  Logical_Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Voting_files  Name
MOUNTED  NORMAL  N         512             512   4096  4194304    614400   613416           204800          204308              0             Y  CRS/
MOUNTED  EXTERN  N         512             512   4096  4194304   5242880  1419436                0         1419436              0             N  DATA/
MOUNTED  EXTERN  N         512             512   4096  4194304   3145728  2176512                0         2176512              0             N  RECO/


5.检查参数文件匹配哪个库:

[grid@racdb1 grid]$ sqlplus / as sysasm

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Sep 13 15:52:57 2023
Version 19.20.0.0.0

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


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.20.0.0.0

SQL> set line 180
SQL> col name for a30
SQL> col type for a20
SQL> SELECT f.group_number, f.file_number, a.name name, f.type type FROM v$asm_file f, v$asm_alias a WHERE f.group_number=a.group_number and f.file_number=a.file_number and f.type='PARAMETERFILE' ORDER BY 1, 2

GROUP_NUMBER FILE_NUMBER NAME				TYPE
------------ ----------- ------------------------------ --------------------
	   3	     272 spfile.272.1061240623		PARAMETERFILE
	   3	     304 spfile.304.1070909407		PARAMETERFILE
	   3	     434 spfile.434.1061475393		PARAMETERFILE

SQL> exit
ASMCMD> cp spfile.272.1061240623 /home/grid/272.ora
[grid@racdb1 ~]$ strings 272.ora 查看内容就可看出对应哪个实例了。
如果控制文件有问题,可以恢复拷贝正常的。
RMAN> restore controlfile to '+RECO' from '+DATA/JYC/CONTROLFILE/current.261.1061239845';
在asmcmd里找到恢复的控制文件。
SQL> alter system set control_files='+DATA/JYC/CONTROLFILE/current.768.1147463171','+RECO/JYC/CONTROLFILE/current.261.1061239845' scope=spfile sid='*';

6.注册数据库服务,起库

[oracle@racdb1 dbs]$ srvctl add database -db jyc -dbname jyc -oraclehome /oracle/app/oracle/product/19c/dbhome_1 -spfile '+data/jyc/parameterfile/spfile.272.1061240
[oracle@racdb1 dbs]$ srvctl config database -db jyc
Database unique name: jyc
Database name: jyc
Oracle home: /oracle/app/oracle/product/19c/dbhome_1
Oracle user: oracle
Spfile: +data/jyc/parameterfile/spfile.272.1061240623
Password file: 
Domain: 
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools: 
Disk Groups: RECO,DATA
Mount point paths: 
Services: 
Type: RAC
Start concurrency: 
Stop concurrency: 
OSDBA group: dba
OSOPER group: oper
Database instances: 
Configured nodes: 
CSS critical: no
CPU count: 0
Memory target: 0
Maximum memory: 0
Default network number for database services: 
Database is administrator managed
[oracle@racdb1 dbs]$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.84 racdb1
192.168.10.85 racdb2
192.168.10.86 racdb1-vip
192.168.10.87 racdb2-vip
192.168.10.83 racdb-scanip

10.10.10.84 racdb1-priv 
10.10.10.85 racdb2-priv
[oracle@racdb1 dbs]$ srvctl add instance -db jyc -instance jyc1 -node racdb1
[oracle@racdb1 dbs]$ srvctl add instance -db jyc -instance jyc2 -node racdb2

最后修改时间:2023-09-20 15:01:41
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论