当前位置: 首页 > news >正文

解决 Oracle EXPDP 無法鎖定 NFS 相關錯誤: ORA-27086 flock: No locks available

文章目录

  • 背景
  • 初步诊断
  • NFS 挂载检查
  • 解决过程
    • 步骤 1:解除挂载并重新挂载 NFS
    • 步骤 2:测试档案锁定
    • 步骤 3:重新执行 expdp
  • 为什么禁用 NFS 锁定有效?
  • 结论

在 Oracle 数据库管理中,Data Pump(expdp 和 impdp)是常用的工具,用于高效地导出和导入数据库对象。然而,在执行 expdp 导出操作时,可能会遇到档案锁定相关的错误,例如 ORA-31641 和 ORA-27086,导致导出失败。本文将基于一个实际案例,深入探讨这些错误的原因,特别是与 NFS(Network File System)档案锁定配置相关的问题,并分享解决方案和最佳实践。


背景

在某 Oracle 10g 数据库环境(版本 10.2.0.5.0,64 位)中,尝试使用 expdp 工具导出数据库模式,导出档案储存在 NFS 挂载点 /mnt/002005/DUMP/ORADB/ 下。然而,操作失败,报以下错误:

Connected to: Oracle Database 10g Release 10.2.0.5.0 - 64bit Production
ORA-39001: invalid argument value
ORA-39000: bad dump file specification
ORA-31641: unable to create dump file "/mnt/002005/DUMP/ORADB/ORADB.20250501.dmp"
ORA-27086: unable to lock file - already in use
Linux-x86_64 Error: 37: No locks available
Additional information: 10

初步诊断

为确认问题,管理员执行了以下命令,测试档案锁定功能:

touch /mnt/002005/DUMP/ORADB/test.lock
flock /mnt/002005/DUMP/ORADB/test.lock -c "echo 'lock acquired'; sleep 5"

输出:

flock: /mnt/002005/DUMP/ORADB/test.lock: No locks available
  • touch:成功创建测试档案 test.lock,表明文件系统的写入权限正常。
  • flock:尝试对档案加锁,但失败,报「No locks available」,与 expdp 错误一致。这确认问题与档案锁定机制有关,而非权限或空间问题。

NFS 挂载检查

检查 NFS 挂载点的配置:

mount | grep mnt

输出:

172.19.5.105:/tapebackup_restore on /mnt type nfs (rw,lock,nfsvers=3,addr=172.19.5.105)

挂载点:/mnt 挂载了远程 NFS 服务器 172.19.5.105 的 /tapebackup_restore 目录
选项:

  • rw:可擦写。
  • lock:启用档案锁定(预设行为)。
  • nfsvers=3:使用 NFS 版本 3。
  • addr=172.19.5.105:远程服务器 IP。
    lock 选项表明 NFS 客户端尝试使用档案锁定,但 flock 和 expdp 的失败提示锁定服务不可用,可能由以下原因引起:
  • NFS 服务器的锁定服务(rpc.lockd)未运行或配置错误。
  • 网络问题导致锁定请求无法到达服务器。
  • NFS 客户端或服务器的档案锁定支持被禁用。

解决过程

步骤 1:解除挂载并重新挂载 NFS

为解决锁定问题,决定禁用 NFS 档案锁定,重新挂载文件系统:

unmount /mnt
mount -t nfs -o nolock,vers=3 172.19.5.105:/tapebackup_restore /mnt

检查重新挂载情况

mount | grep mnt
172.19.5.105:/tapebackup_restore on /mnt type nfs (rw,nolock,nfsvers=3,addr=172.19.5.105)

输出表明重新挂载成功
变化:挂载选项从 lock 变为 nolock,表明档案锁定已禁用。

步骤 2:测试档案锁定

再次测试档案锁定:

flock /mnt/002005/DUMP/ORADB/test.lock -c "echo 'lock acquired'; sleep 5"

输出:

lock acquired
  • 结果:flock 成功获得锁并输出「lock acquired」,表明禁用 NFS 锁定后,档案锁定操作正常。这是因为 nolock 选项使客户端不再依赖 NFS 服务器的锁定服务。

步骤 3:重新执行 expdp

管理员使用以下命令重新执行 Data Pump 导出:

expdp system/exp parfile=./ORADB.20250420.parfile

输出:

Export: Release 10.2.0.5.0 - 64bit Production on Thursday, 01 May, 2025 9:47:48Copyright (c) 2003, 2007, Oracle.  All rights reserved.Connected to: Oracle Database 10g Release 10.2.0.5.0 - 64bit Production
Starting "SYSTEM"."SYS_EXPORT_SCHEMA_03":  system/******** parfile=./ORADB.20250420.parfile
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 604.3 GB
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX

结果:导出操作成功启动,无 ORA-31641 或 ORA-27086 错误。Data Pump 开始估算表数据大小(604.3 GB)并处理表和索引等对象。

为什么禁用 NFS 锁定有效?

NFS 档案锁定的机制
NFS 档案锁定依赖于 NFS 服务器的锁定守护进程(rpc.lockd)和客户端的锁定支持:

  • 当 NFS 挂载选项包含 lock(默认)时,客户端会尝试通过 rpc.lockd 与服务器协商档案锁。
  • 如果服务器的锁定服务未运行、配置错误或网络中断,锁定请求会失败,导致 No locks available 错误。
    在 Oracle Data Pump 中,expdp 会对导出档案(.dmp)进行锁定,以确保档案在写入过程中不被其他进程干扰。当 NFS 锁定服务不可用时,Oracle 无法锁定档案,报 ORA-27086 和 ORA-31641。
    nolock 选项的作用
    使用 nolock 选项挂载 NFS 文件系统后:
  • 客户端不再尝试使用 NFS 锁定服务,而是依赖本地文件系统的锁定机制或完全不加锁。
  • 这绕过了 NFS 服务器锁定服务的限制,使 expdp 能成功创建和写入导出档案。
  • 对于 flock 测试,nolock 允许本地进程模拟锁定行为,无需与 NFS 服务器协商。

风险与权衡
禁用 NFS 锁定虽然解决了问题,但可能带来以下风险:
• 并发写入风险:如果多个进程同时写入同一档案,缺乏锁定可能导致数据损坏。
• 应用兼容性:某些应用可能依赖 NFS 锁定来确保数据一致性。
在单一 expdp 操作的场景中,这些风险通常可控,因为导出档案由单一进程独占写入。

结论

在 Oracle 环境中执行 expdp 导出时,NFS 档案锁定问题可能导致 ORA-31641 和 ORA-27086 错误。本案例展示了如何通过诊断(使用 flock 测试)、调整 NFS 挂载选项(从 lock 改为 nolock)以及重新执行导出来解决问题。禁用 NFS 锁定虽然有效,但需谨慎评估并发写入的风险。

相关文章:

  • HTTP知识速通
  • Python 函数装饰器和闭包(装饰器基础知识)
  • 文献阅读篇#5:5月一区好文阅读,BFA-YOLO,用于建筑信息建模!(上)
  • 新一代机载相控阵雷达的发展
  • 「Mac畅玩AIGC与多模态12」开发篇08 - 使用自定义汇率查询插件开发智能体应用
  • 【 Node.js】 Node.js安装
  • Java 期中考试练习题
  • 【速写】prune与activate
  • 解决Win10虚拟机“网络连接不上”,“Ethernet0 网络电缆被拔出”的问题
  • PB的框架advgui反编译后控件无法绘制的处理(即导入pbx的操作步骤)
  • 【漫话机器学习系列】234.阈值类特征的方差分析(Thresholding Categorical Feature Variance)
  • 分布式锁的几种实现
  • 【MySQL数据库】视图
  • ESP-ADF esp_dispatcher组件之audio_service子模块连接管理函数详解
  • 艾尔登法环最新3000+MOD大型整合包 5月最新更新
  • 伽利略如何测量光速?一场跨越山头的失败实验
  • 用spring-boot-maven-plugin打包成单个jar有哪些缺点优化方案
  • 最长公共前缀(14)
  • 【STM32】ADC的认识和使用——以STM32F407为例
  • 力扣面试150题--旋转链表
  • 拍摄《我们这一代》的肖全开展“江浙沪叙事”
  • 新能源车盈利拐点:8家上市车企去年合计净利854亿元,多家扭亏
  • 十二届上海市委第六轮巡视全面进驻,巡视组联系方式公布
  • 小核酸药物企业瑞博生物递表港交所,去年亏损2.81亿元
  • 鲁迅先生儿媳、周海婴先生夫人马新云女士逝世,享年94岁
  • 视频丨中国海警位中国黄岩岛领海及周边区域执法巡查