0

0

如何处理RAC下DBCA建库卡在ASM磁盘扫描_udev权限与kfod超时排查

P粉602998670

P粉602998670

发布时间:2026-03-16 14:13:32

|

935人浏览过

|

来源于php中文网

原创

根本原因是udev规则未生效或ASM磁盘设备节点权限不足,导致kfod调用底层open()时阻塞;需检查grid用户对/dev/asm-或/dev/sd的读权限、验证udev规则触发及多节点一致性。

DBCA卡在“Scanning ASM disks”界面,kfod 命令手动执行也卡住

根本原因通常不是磁盘本身有问题,而是 kfod 在调用底层设备接口时被阻塞——最常见的是 udev 规则未生效或权限没落到实际设备节点上。dbca 启动时会以 oracle 用户(或 grid 用户)调用 kfod 扫描 /dev/oracleasm 或裸设备路径,若该用户对底层块设备(如 /dev/sdb/dev/asm-disk1)无读权限,kfod 就会 hang 住,不报错也不退出。

实操建议:

  • 切到 grid 用户,手动运行:kfod disk=asm verbose=true,观察是否卡住、卡在哪一行输出(通常停在 “Reading disk…” 后)
  • 检查 /dev 下对应 ASM 磁盘的属主和权限:ls -l /dev/asm*ls -l /dev/sd*,确认 oracle/grid 用户能否读取(至少要有 crw-rw---- 且组为 asmadmindba
  • 别只看 udev 规则文件(如 /etc/udev/rules.d/99-oracle-asmdevices.rules)是否存在,要验证规则是否真正触发:执行 udevadm test /sys/block/sdb,看输出里有没有 OWNER="grid"GROUP="asmadmin" 这类赋值
  • 如果用的是 multipath 设备,确保 /dev/mapper/mpathx 节点权限正确,且 udev 规则匹配的是 multipath 设备而非底层 sdx

udev 规则写了但 /dev/asm-disk* 权限仍是 root:root

udev 规则没生效,大概率是规则文件名或语法不满足触发条件,或者规则中用了不稳定的匹配项(比如仅靠 KERNEL=="sd?" 匹配所有 sda~sdz,结果把系统盘也卷进来了,导致规则被跳过)。

实操建议:

  • 规则文件名必须以数字开头、.rules 结尾,且数字越小优先级越高;避免用 99-xxx.rules,改用 60-asm.rules 更稳妥
  • 不要只依赖 KERNEL,加上唯一性更强的匹配:用 SUBSYSTEM=="block" + ATTR{ro}=="0" + ATTRS{model}=="Virtual_Disk"(VM 环境)或 ATTRS{wwn}=="0x..."(物理环境)
  • 赋权语句必须用 OWNER/GROUP/MODE,不能写成 run+="/bin/sh -c 'chown ...'" —— udev 不支持这种间接方式
  • 重载后务必执行:udevadm control --reload-rules && udevadm trigger --subsystem-match=block,再检查设备节点

kfod 超时时间不可配,但能绕过扫描阶段

kfod 没有公开参数控制超时,它的 hang 是底层 open() 系统调用阻塞导致的,DBCA 内部调用它时也没有设置 timeout。但你可以让 DBCA 跳过自动扫描,直接指定已知可用磁盘。

HIX Translate
HIX Translate

由 ChatGPT 提供支持的智能AI翻译器

下载

实操建议:

  • 启动 DBCA 图形界面前,先设环境变量:export ORACLE_ASM_DISKS="/dev/asm-disk1,/dev/asm-disk2"(注意路径必须真实存在且可读)
  • 或者用静默建库方式,显式传参:dbca -silent -createDatabase ... -storageType ASM -asmsnmpPassword ... -diskGroupName DATA -asmDiskString '/dev/asm-disk*'
  • 注意 -asmDiskString 的值会被 DBCA 传给 kfod diskstring=...,所以必须确保该 glob 能精确匹配到已有权限的设备,否则仍会卡
  • 这个方法治标不治本——权限问题还在,只是绕开了自动发现环节;后续 asmca、srvctl start asm 等操作仍可能因同样问题失败

RAC 环境下各节点 udev 规则不一致导致部分节点建库成功、部分卡住

这是最容易被忽略的点:RAC 多节点共享同一套存储,但每个节点的 udev 规则、内核模块加载状态、甚至 SCSI 设备识别顺序都可能不同。一个节点上 /dev/sdb 是 ASM 盘,另一个节点上可能是 /dev/sdc,而 udev 规则若硬编码了 sdb,另一节点就完全失效。

实操建议:

  • 所有节点统一用 WWN 或 UUID 匹配设备,而不是依赖 sdx 名字:ATTRS{wwn}=="0x5000c500a1234567"
  • 在每台节点上分别运行:scsi_id -g -u -d /dev/sdbudevadm info --name=/dev/sdb | grep wwn,确认输出一致
  • 检查 oracleasm listdisks 输出是否所有节点完全一样;不一样说明 oracleasm init 或 scandisks 没跑通,根源还是底层设备权限或 oracleasm 服务状态
  • 别忘了验证 grid 用户在所有节点都能无密码 ssh 互通——DBCA 集群建库时会远程拉起其他节点的 kfod,若 ssh 卡住,也会表现为“扫描中…”
事情说清了就结束。最麻烦的永远不是某条命令怎么写,而是你改完 udev 规则后,忘了在所有节点上 udevadm trigger,或者 oracleasm scandisks 报了错但被 DBCA 的图形界面吞掉了。

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1999

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

681

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2418

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

49

2026.01.19

oracle清空表数据
oracle清空表数据

当表中的数据不需要时,则应该删除该数据并释放所占用的空间。本专题为大家提供oracle清空表数据的相关文章,帮助大家解决该问题。

271

2023.08.16

Oracle中declare的使用
Oracle中declare的使用

Oracle DECLARE语句是PL/SQL编程语言中用于声明变量、常量、游标或异常的关键字。它的主要作用是在程序中定义这些对象,以便在后续的代码中使用。DECLARE语句的语法简单明了,可以根据需要声明多个对象。通过使用这些声明的对象,可以进行各种操作,如计算、查询数据库、处理异常等 。

221

2023.09.15

oracle怎么分页
oracle怎么分页

实现分页的步骤:1、使用ROWNUM进行分页查询;2、在执行查询之前进行设置分页参数;3、使用"COUNT(*)"函数来获取总行数,并使用"CEIL"函数来向上取整计算总页数;4、在外部查询中使用"WHERE"子句来筛选出特定的行号范围,以实现分页查询。想了解更多oracle怎么分页的文章,可以来阅读本专题先的文章。

248

2023.09.18

Oracle查看表操作历史记录
Oracle查看表操作历史记录

查看操作历史记录的方法:1、使用Oracle内置的审计功能,可以记录数据库中发生的各种操作,包括登录、DDL语句、DML语句等;2、使用Oracle日志文件,其中包含了数据库中发生的各种操作,可以通过查看日志文件来获取操作历史记录;3、使用Oracle的Flashback功能,可以查看数据库在某个时间点的操作历史记录;4、使用第三方工具等。本专题还提供其他查看表操作的文章,大家可以免费阅读。

464

2023.09.19

C++多线程并发控制与线程安全设计实践
C++多线程并发控制与线程安全设计实践

本专题围绕 C++ 在高性能系统开发中的并发控制技术展开,系统讲解多线程编程模型与线程安全设计方法。内容包括互斥锁、读写锁、条件变量、原子操作以及线程池实现机制,同时结合实际案例分析并发竞争、死锁避免与性能优化策略。通过实践讲解,帮助开发者掌握构建稳定高效并发系统的关键技术。

2

2026.03.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号