
好的,我们来详细解析 ORA-00128 错误。我将按照您的要求,先进行官方正式的说明,再用通俗易懂的语言进行解释。
官方正式说明
错误信息结构组成说明
Oracle数据库的错误信息通常由以下几部分组成:
- ORA-00128: 这是唯一的错误代码,用于精准识别问题类型。
- 错误消息文本:
ADVM driver not loaded。这段文本简明扼要地描述了问题的核心:ADVM 驱动程序未加载。 - 原因 (Cause): 官方文档中会详细解释导致此错误的技术背景。
- 行动 (Action): 官方文档会提供解决此错误需要执行的具体步骤。
详细解释
- 错误代码: ORA-00128
- 错误信息:
ADVM driver not loaded - 中文翻译: ADVM 驱动程序未加载。
原因 (Cause)
当尝试访问或挂载(MOUNT)Oracle ASM Dynamic Volume Manager (ADVM) 卷时,Oracle数据库或ASM实例无法在操作系统中找到或加载所需的ADVM内核驱动程序(通常称为 oracleadvm 驱动)。
ADVM是Oracle Automatic Storage Management (ASM) 的一个组件,它允许在ASM磁盘组之上创建标准的、可动态调整大小的卷设备。这些卷设备可以被用作:
- Oracle ACFS (ASM Cluster File System) 的底层存储。
- 通过ASM Filter Driver (ASMFD) 管理的磁盘。
- 其他需要块设备(Block Device)的应用程序。
要使用ADVM卷,必须在操作系统内核中加载相应的驱动程序。如果该驱动未加载,任何尝试访问ADVM卷的操作都会失败,并抛出ORA-00128错误。
发生场景
- 数据库启动时: 如果数据库的某些文件(如数据文件、控制文件)存放在ACFS文件系统上,而该文件系统又建立在ADVM卷之上,那么在数据库启动挂载这些文件时就会触发此错误。
- 挂载ACFS文件系统时: 当使用
mount命令或acfsutil工具显式挂载一个ACFS文件系统时。 - ASM操作期间: 当在ASM实例中尝试创建或启用一个ADVM卷时(例如,
ALTER DISKGROUP ... ADD VOLUME)。 - 系统重启后: 在服务器重启后,如果ADVM驱动未能配置为自动启动,或者启动顺序有误(例如,试图在驱动加载前挂载ACFS)。
相关原理
- ASM: 提供跨平台的、集成的集群文件系统和卷管理器。
- ADVM (ASM Dynamic Volume Manager): 作为ASM的扩展,它在ASM磁盘组的存储分配单元之上提供卷管理服务,向操作系统暴露标准的块设备接口(如
/dev/asm/volume名-123)。 - ACFS (ASM Cluster File System): 一个基于ADVM卷的、支持集群的通用文件系统,用于存储Oracle数据库文件、应用程序文件等。
- 驱动依赖关系: ACFS和ADVM的使用依赖于一个正确的软件栈:
ASM Disk Groups -> ADVM Volumes (需要oracleadvm.ko驱动) -> ACFS File Systems (需要oracleacfs.ko驱动)。
如果底层ADVM驱动缺失,上层的ACFS也无法工作。
相关联的其他ORA-错误
- ORA-15186:
ASM operation requires ACFS and ADVM to be started- 类似的错误,表明ACFS/ADVM服务未启动。 - ORA-15242:
Could not load ACFS driver- 与ORA-00128类似,但针对的是ACFS文件系统驱动本身。 - ORA-15032:
operation invalid for current state of volume- 在对ADVM卷执行操作时,如果卷状态不正确可能会发生。 - ORA-15196:
invalid ASM initialization parameter detected- 如果ASM_DISKGROUPS参数错误地包含了ACFS挂载点(应该是磁盘组名,而非文件系统路径),也可能间接导致驱动相关问题。
定位原因、分析过程
- 定位: 错误发生在尝试访问ADVM卷或ACFS文件系统时。
- 分析过程:
a. 检查告警日志: 查看数据库或ASM实例的告警日志(alert_<SID>.log),确认错误堆栈和操作上下文。
b. 验证驱动状态: 在操作系统级别,使用ADVM/ACFS工具检查驱动状态。这是最关键的一步。
bash # 以root用户身份执行 /sbin/acfsload start -s # 或 /sbin/acfsdriverstate -orahome <ORACLE_HOME> installed /sbin/acfsdriverstate -orahome <ORACLE_HOME> loaded
c. 检查驱动配置: 确认驱动已正确安装并配置为自动启动。
bash # 检查ADVM驱动是否已配置 /sbin/acfsdriverstate -orahome <ORACLE_HOME> configured
d. 检查集群资源状态: 如果是在RAC环境中,检查Oracle Clusterware是否已管理并启动了ACFS资源。
bash crsctl status resource -t | grep -i acfs
解决方案
解决方案的核心是确保ADVM内核驱动程序被正确加载。
-
手动加载驱动程序 (临时解决):
以 root 用户身份执行以下命令,手动加载ADVM和ACFS驱动:# 切换到Grid Infrastructure的HOME目录 export ORACLE_HOME=<Your_Grid_Home> # 运行加载脚本 $ORACLE_HOME/bin/acfsload start # 或者使用更具体的命令 /sbin/acfsload start执行成功后,再次尝试执行之前失败的操作(如挂载ACFS或启动数据库)。
-
配置驱动自动启动 (永久解决):
为确保每次系统重启后驱动自动加载,需要以 root 用户身份执行配置命令:# 配置驱动 /sbin/acfsdriverstate -orahome <Your_Grid_Home> -configure # 验证配置是否成功 /sbin/acfsdriverstate -orahome <Your_Grid_Home> configured # 输出应为 "ACFS-9459: Driver is configured to load on boot."此命令通常会将驱动注册到系统的初始化流程中(如
udev规则或init脚本)。 -
验证和诊断:
使用以下命令来验证驱动状态,辅助诊断:# 检查驱动是否已加载 lsmod | grep oracle # 应看到 oracleadvm 和 oracleacfs 模块 # 使用acfsdriverstate工具进行详细检查 /sbin/acfsdriverstate -orahome <Your_Grid_Home> status
相关SQL语句和命令
此错误主要与操作系统驱动相关,SQL语句作用有限,但可以用于管理ACFS和ADVM资源。
-- 在ASM实例中,查询ADVM卷的信息
SELECT volume_name, volume_device, state FROM V$ASM_VOLUME;
-- 在数据库实例中,如果文件系统已挂载,可以查询ACFS信息
-- (但错误发生时通常无法查询)
主要的操作命令是操作系统命令:
# 关键的诊断和解决命令 (需root权限)
acfsdriverstate -orahome $GRID_HOME configured
acfsdriverstate -orahome $GRID_HOME loaded
acfsload start -s
lsmod | grep oracle
通俗易懂的语言讲解
ORA-00128 是什么?
简单说,这就是一个“翻译官不见了”的错误。
想象一下,你的电脑操作系统(比如Linux)说中文,而Oracle的ASM存储系统说一种特殊的“甲骨文”。当你想要使用ASM提供的高级卷(ADVM)功能时,就需要一个“翻译官”(ADVM驱动程序)来帮它们俩沟通。ORA-00128错误就是在说:“找不到翻译官!沟通无法进行!”
详细解释
- ADVM卷: 就像是ASM存储大仓库里划分出来的一个标准化集装箱。这个集装箱可以被操作系统当成一个普通的硬盘来用。
- ADVM驱动程序: 就是这个翻译官。它的工作是告诉操作系统:“嘿,我能看懂ASM仓库的规则,让我来帮你把那个‘集装箱’(ADVM卷)转换成你能识别的‘硬盘’格式。”
- ORA-00128: 当操作系统需要去ASM仓库里取用这个“集装箱”时,却发现负责沟通的“翻译官”没来上班(驱动未加载)。于是它只能报错:“ADVM driver not loaded!”
为什么会发生?
- 翻译官还没请(驱动未安装/配置): 可能是Oracle Grid Infrastructure软件安装后,没有专门执行一个步骤来“聘请”这位翻译官(配置驱动自动启动)。
- 电脑重启后,翻译官没自动上岗: 最常见的情况。服务器重启后,虽然Oracle软件自动启动了,但那位“翻译官”需要以更高的权限(root用户)单独下一道命令,它才会每次开机都自动来上班。
- 翻译官被开除了(驱动损坏): 极少数情况下,驱动文件本身可能损坏了。
怎么解决?
原则:找到“翻译官”,让它立刻上岗,并确保它以后每次都自动上岗。
步骤一:立刻请翻译官来上班(手动加载驱动)
- 打开终端,用最高权限(root用户)登录。
- 输入“喊翻译官上班”的咒语(命令):
/sbin/acfsload start - 翻译官立刻到位。现在再去尝试你之前的操作(比如启动数据库或者挂载文件系统),应该就成功了。
步骤二:让翻译官以后都自动上班(配置自动启动)
光手动请一次不够,得给他办个自动入职手续:
- 同样用root用户,输入另一道“办理入职”的咒语:
/sbin/acfsdriverstate -orahome <你的Grid安装目录> -configure - 这样,以后每次服务器重启,这位“翻译官”都会自动报到,ORA-00128错误也就不会再出现了。
如何确认翻译官在岗?
用这个命令检查一下:
lsmod | grep oracle
如果结果列表里有 oracleadvm 和 oracleacfs,就说明两位翻译官(ADVM驱动和ACFS驱动)都在岗位上正常工作了。
总结一下:ORA-00128是一个典型的操作系统驱动未加载的错误。它不涉及SQL或数据库逻辑,纯粹是一个“基础设施”问题。解决它就像解决一个“人员到岗”问题,需要系统管理员(root用户)出面,通过几条简单的命令来确保所需的驱动程序正确加载并配置为自动启动。
欢迎关注我的公众号《IT小Chen》
4699

被折叠的 条评论
为什么被折叠?



