上接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。


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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




