asm 磁盘头丢失,损坏

BUG 14693394 – ORA-15196: INVALID ASM BLOCK HEADER [KFC.C:26076] [ENDIAN_KFBH]
BUG 14758001 – ORA-15196: INVALID ASM BLOCK HEADER [KFC.C:23924] [ENDIAN_KFBH] [2147483654]
BUG 14827224 – PS:WIN64:ORA-15196:INVALID ASM BLOCK HEADER[KFC.C:28261] ON DB CREATE ON VMS
BUG 14779268 – ASM DISK HEADER ERASED – NEED TO EXTRACT DATA
BUG 13772417 – LNX64-12.1-ASM:ORA-15196: INVALID ASM BLOCK HEADER [KFC.C:27615] [CHECK_KFBH]
 

Disk header copy

Lately there is an extra copy of the asm disk header. This copy can be used to fix the real header using kfed with the

repair option.


Location

This copy is stored as the last block of the PST. That means it is in the last block of allocation unit 1 (the original is
block 0 of au 0). The default sizes for an allocation unit is 1M and for the meta data block size is 4K, meaning 256
blocks in each au. So typically the copy is in au 1 block 254. (ASM counts from zero, the original is in allocation unit 0
block 0)
kfed repair Provided you established that the only problem is with the lost/corrupt disk header, the fix is as simple as:

$ kfed repair <disk name>


If the AU size is non-standard, the above will fail with something like:
KFED-00320: Invalid block num1 = [3], num2 = [1], error = [type_kfbh]
But that is expected and no harm is done. All you need to do is specify the correct AU size. E.g. for 4MB AU the
command would be:
$ kfed repair <disk name> ausz=4194304
<think>我们正在处理一个关于OracleASM磁盘组重建的问题。用户提到原ASM磁盘组所挂载的存储损坏,现在有新挂载的存储,想要重建ASM磁盘组。根据OracleASM的特性,磁盘组是由多个磁盘组成的逻辑单元,用于存储数据库文件。当存储损坏时,我们需要使用新的存储来重新创建磁盘组,并恢复数据。但是,请注意:ASM磁盘组本身并不存储数据文件的元数据(如数据文件、控制文件等的位置和结构),这些信息存储在数据库的控制文件和参数文件中。因此,重建磁盘组后,我们还需要恢复数据库文件。步骤大致如下:1.确保新存储已经正确挂载到服务器上,并且操作系统可以识别这些磁盘。2.使用OracleASM工具(如asmca或sqlplus)创建新的磁盘组,将新存储的磁盘加入该磁盘组。3.如果有备份(如RMAN备份),则使用RMAN恢复数据库到新的磁盘组上。如果没有备份,但原磁盘组中的文件有镜像(如使用NORMAL或HIGH冗余),则可以通过重新挂载磁盘组来恢复,但这里原存储已损坏,所以只能从备份恢复。然而,用户的问题中并没有提到有备份,所以我们需要考虑如果没有备份怎么办?实际上,如果没有备份,原存储损坏且没有冗余,那么数据可能丢失。因此,重建磁盘组后,如果没有备份,我们无法恢复数据。但是,用户的问题集中在如何用新存储重建磁盘组,所以我们先回答这部分。具体步骤:1.检查新挂载的磁盘是否被操作系统识别。可以使用`fdisk-l`(Linux)或`format`(Solaris)等命令查看。2.为这些磁盘配置ASM磁盘。通常有两种方式:使用ASMLib或直接使用裸设备(或者使用udev规则绑定)。现在推荐使用udev规则来绑定磁盘并设置正确的权限。-例如,在Linux上,我们可以通过udev规则为磁盘设置固定的权限和所有者。参考引用[2]中的方法,确保磁盘的UUID被正确识别,并设置udev规则。-创建udev规则文件(如`/etc/udev/rules.d/99-oracle-asmdevices.rules`),内容示例:```KERNEL=="sd*",SUBSYSTEM=="block",PROGRAM="/sbin/scsi_id-g-u-d/dev/$name",RESULT=="<磁盘的SCSI_ID>",SYMLINK+="oracleasm/disk1",OWNER="grid",GROUP="asmadmin",MODE="0660"```需要为每块磁盘执行,并替换SCSI_ID(通过命令`/sbin/scsi_id-g-u-d/dev/sdX`获取)。3.重新加载udev规则:```udevadmcontrol--reload-rulesudevadmtrigger--type=devices--action=change```4.确认磁盘权限正确,并且`/dev/oracleasm/*`下的磁盘链接已创建(或者直接使用/dev/下由udev规则设置的设备)。5.以grid用户(OracleGridInfrastructure用户)登录,使用asmca图形工具或命令行工具(asmcmd或sqlplus)创建新的磁盘组。-命令行创建示例(在sqlplus中连接到ASM实例):```sqlCREATEDISKGROUPnew_dgEXTERNALREDUNDANCYDISK'/dev/oracleasm/disk1','/dev/oracleasm/disk2';```这里假设使用外部冗余(即无镜像),如果有多个磁盘且需要冗余,可以选择NORMAL或HIGH冗余,并指定故障组(参考引用[1]中关于故障组的设置)。6.创建磁盘组后,需要将数据库恢复到这个新的磁盘组上。这通常需要:-如果数据库的控制文件还在(比如控制文件有多个副本,其中一个在未损坏的存储上),那么可以启动数据库到mount状态,然后使用RMAN进行恢复。-如果没有可用的控制文件,则需要使用RMAN的恢复目录或控制文件自动备份来恢复控制文件,然后再恢复数据库。由于用户的问题主要是重建磁盘组,所以我们先完成磁盘组的重建步骤。相关问题:1.如何为新挂载的存储配置ASM磁盘?2.在创建新的ASM磁盘组时,如何选择冗余级别和故障组?3.重建ASM磁盘组后,如何恢复Oracle数据库?4.如果没有备份,原存储损坏后还有哪些数据恢复方法?5.如何验证新创建的ASM磁盘组是否正常工作?请注意,如果没有备份,且原存储完全损坏,数据恢复将非常困难。因此,强烈建议用户定期备份。下面,我们将按照用户要求的结构化方式回答,并生成相关问题。</think>### ASM磁盘组重建步骤 当原ASM磁盘组存储损坏后,需通过以下步骤使用新存储重建磁盘组并恢复数据: #### **1. 验证新存储设备** - **操作系统识别**:确认新存储已挂载且操作系统可识别(如Linux执行 `lsblk` 或 `fdisk -l`)。 - **获取磁盘标识符**: 使用 `scsi_id` 命令获取磁盘唯一UUID(确保 `disk.EnableUUID="TRUE"`[^2]): ```bash for i in $(ls /dev/sd* | grep -E 'sd[b-z]$'); do echo "Disk $i: $(/sbin/scsi_id -g -u -d $i)"; done ``` 输出示例: ```text Disk /dev/sdb: 36000c29ff0363b8ebda7309f6f26c8c3 Disk /dev/sdc: 36000c29811ad6d1353dd6df390513d3f ``` #### **2. 配置ASM磁盘** - **创建UDEV规则**(确保权限正确): 编辑 `/etc/udev/rules.d/99-oracle-asm.rules`,添加: ```bash KERNEL=="sd*", ENV{ID_SERIAL}=="36000c29ff0363b8ebda7309f6f26c8c3", SYMLINK+="oracleasm/disk01", OWNER="grid", GROUP="asmadmin", MODE="0660" ``` - **生效配置**: ```bash udevadm control --reload-rules udevadm trigger --type=devices --action=change ``` #### **3. 创建新ASM磁盘组** - **连接到ASM实例**: ```sql sqlplus / as sysasm ``` - **创建磁盘组**(按需选择冗余级别): ```sql CREATE DISKGROUP NEW_DG EXTERNAL REDUNDANCY -- 外部冗余 DISK '/dev/oracleasm/disk01', '/dev/oracleasm/disk02'; -- 或指定故障组(引用[1]语法): CREATE DISKGROUP NEW_DG NORMAL REDUNDANCY FAILGROUP FG1 DISK '/dev/oracleasm/disk01', FAILGROUP FG2 DISK '/dev/oracleasm/disk02'; ``` #### **4. 恢复数据库到新磁盘组** - **RMAN恢复**(需有效备份): ```sql RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP; RMAN> RESTORE DATABASE; RMAN> RECOVER DATABASE; ``` - **修改参数文件**: 更新 `DB_CREATE_FILE_DEST` 指向新磁盘组: ```sql ALTER SYSTEM SET DB_CREATE_FILE_DEST = '+NEW_DG' SCOPE=SPFILE; ``` #### **关键注意事项** 1. **数据恢复依赖备份**:若原存储无冗余且无备份,数据将丢失。 2. **冗余策略选择**: - `EXTERNAL`:依赖存储自身冗余(如RAID)。 - `NORMAL`:ASM提供镜像(需至少2个故障组)。 - `HIGH`:三路镜像(需至少3个故障组)。 3. **故障组配置**:确保故障组对应物理隔离的存储设备[^1]。 --- ### 相关问题 1. ASM磁盘组如何配置多路径存储以提高可用性? 2. 无备份情况下,ASM磁盘损坏后有哪些应急恢复方案? 3. 如何验证ASM磁盘组的冗余策略是否生效? 4. ASM磁盘组扩容时如何平衡数据分布? [^1]: Set the parameter where diskgroup is the name of the disk group and failuregroup is the name of the failure group, separating these variables with a period. Oracle ASM ignores the name of a failure group that you use in this parameter setting if the failure group does not exist in the named disk group. [^2]: 检查Vmware虚拟机配置文件xxx.vmx,确认EnableUUID是否为TRUE。执行`lsblk`命令查看挂载的硬盘,确认是否识别到UUID号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值