expdp、rman 等在cifs文件系统上遇到file lock

本文描述了在Linux环境下使用Oracle 11.2.0.4进行EXPDP备份时遇到的ORA-39000错误,并详细记录了解决过程。通过调整CIFS挂载选项加入nolock,成功解决了备份过程中文件锁冲突的问题。

环境是linux oracle 11.2.0.4 ,使用expdp备份到samba,linux连接samba使用的autofs,所以映射过来的目录是cifs格式。

[root@rac1 oradb]# df -Th
Filesystem           Type   Size  Used Avail Use% Mounted on
/dev/sda7            ext4   201G  109G   82G  58% /
tmpfs                tmpfs  127G  508M  126G   1% /dev/shm
/dev/sda1            ext4   477M   40M  412M   9% /boot
/dev/sda6            ext4   9.8G  1.4G  7.9G  16% /osw
/dev/sda2            ext4    99G   57G   37G  61% /u01
/dev/sda3            ext4    99G   18G   77G  19% /u02
//192.168.1.34/oradb cifs    49T   16T   33T  32% /database_backup/oradb

原来的配置是

[root@rac1 ~]# cat /etc/auto.cifs 
oradb   -fstype=cifs,rw,noperm,user=xxxxx,pass=xxxxx       ://192.168.1.23/oradb
ldpfile -fstype=cifs,rw,noperm,user=xxxxx,pass=xxxxx      ://192.168.1.23/SMSHistoryFile

原来的expdp备份正常,但是最近出现了:

ORA-39000: bad dump file specification
ORA-31641: unable to create dump file "/database_backup/oradb/expdpbak/orcl/orcl_20200412_01.expdp"
ORA-27086: unable to lock file - already in use
Linux-x86_64 Error: 5: Input/output error
Additional information: 8
Additional information: 58406

提示文件正在使用,unable to lock file

经过测试,只有expdp出现了该问题,正常的文件复制等操作均不受影响

到oracle support查资料,发现如下文章很类似:

RMAN and/or Datapump Export Backup fails with ORA-27086 on NFS / NAS (Doc ID 1187014.1)

提到:

APPLIES TO:
Oracle Database - Enterprise Edition - Version 10.2.0.1 to 11.2.0.1.0 [Release 10.2 to 11.2]
Information in this document applies to any platform.
***Checked for relevance on 15-Apr-2014***


SYMPTOMS
RMAN and/or Datapump Export Backup to NFS fails with ORA-27086 error.

The error stack looks like the following (exact error stack / messages depend on OS platform):

RMAN BACKUP Error Stack Example:

Starting Control File Autobackup at 20-AUG-10
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of Control File Autobackup command on ORA_DISK_1 channel at 08/20/2010 12:05:47
ORA-01580: error creating control backup file /backups/u01/fs/bkp/fs1/rman_snapshot_controlfile_fs1.f
ORA-27086: unable to lock file - already in use
HPUX-ia64 Error: 22: Invalid argument
Additional information: 9
Additional information: 22


OR

RMAN-10038: database session for channel default terminated unexpectedly
ORACLE error from target database:
ORA-03127: no new operations allowed until the active operation ends

Datapump Export Backup Error Stack Example:

Export: Release 10.2.0.4.0 - 64bit Production on Monday, 23 August, 2010 20:14:51

Copyright (c) 2003, 2007, Oracle. All rights reserved.

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORA-39001: invalid argument value
ORA-39000: bad dump file specification
ORA-31641: unable to create dump file "/backups/u01/fs/exp/fs1/fs1_expdp/fs1_expdp01.20100823_201451.dmp"
ORA-27086: unable to lock file - already in use
HPUX-ia64 Error: 22: Invalid argument
Additional information: 9
Additional information: 22



CHANGES
RMAN and/or Datapump Export is taken on a NFS / NAS storage.

CAUSE
There can be several causes for this issue:

a) The first thing to check is if the storage solution provided by the Vendor is certified by Oracle.

b) Check if the mount points have been mounted with correct NFS mount options.

c) Check if the NFS locking daemons are running. They are also known as rpc.lockd and the rpc.statd on most UNIX flavours. We can also check the service 'nfslock' if it is running:

# service nfslock status

d) On some platforms, the NFS locking is not supported or having issues.

SOLUTION
Case a) We should verify if the storage configuration provided by the Vendor is certified by Oracle. This should be checked with Storage Vendor Support, as Oracle Support may have limited information on this.


Case b) For recommended NFS mount options, we can refer "Oracle Database Installation Guide" for our Database version and platform from the Online Documentation available from http://tahiti.oracle.com . Following Article should also be referred:

Note 359515.1 Mount Options for Oracle files when used with NAS devices


Case c) Check if the service 'nfslock' is running:

# service nfslock status

rpc.statd (pid 16489) is running...

If it is not running, then start the service:

# service nfslock start

We should also consider to enable this service via chkconfig also so that it is automatically started at OS restarts.


Case d) In case we suspect that NFS locking is an issue, consider adding "nolock" option in mount point. E.g:

rw,noac,hard,rsize=32768,wsize=32768,nolock

On some platforms like Solaris, HP Unix, option "llock" (local locking) can also be used. Be aware that it only enables locking locally for a single client and will not be visible to other clients.

Please also check with System Administrator and/or Platform/Storage Vendor before setting these options. Specifically locking options (nolock & llock) should be used with care as these options might violate integrity of the system if not appropriate for the environment setup.

 

尝试加了nolock选项,恢复正常,文章中也提到Solaris或者HPUX,应该使用llock,但是手头没有对应环境,无法测试。

[root@rac1 ~]# cat /etc/auto.cifs 
oradb -fstype=cifs,rw,noperm,nolock,user=lgdomain/backup,pass=xxx   ://192.168.1.23/oradb

添加nolock选项后,得到解决

注意文档中提到没有file lock的话可能会破坏文件完整性环境,造成文件损坏

 

<think>首先,用户的问题是基于提供的引用内容,他们想查找在Windows客户端上使用expdp进行Oracle 19C数据库的全库备份方法。用户指定了使用expdp工具。 回顾引用: - 引用[1]提到了实例1和实例2,但实例1是全库冷备份(脱机),实例2是RMAN热备份。用户想要expdp,这与逻辑备份相关。 - 引用[2]展示了expdp的用法,但它指定了特定模式(schemas)和表(INCLUDE),而不是全库。 - 引用[3]解释了差异备份和逻辑备份,提到了expdp和impdp。 - 引用[4]讨论了Windows下的备份与还原,特别提到了全库还原使用impdp,但用户想要备份(expdp)。 用户明确说“使用expdp进行全库备份”。在Oracle中,expdp(Data Pump Export)用于逻辑备份。全库备份通常意味着整个数据库的备份。 从引用[4]中,它提到了全库导入,但用户需要备份(导出)。引用[2]给出了expdp命令,但针对特定模式。我需要提供使用expdp进行全库备份的命令。 在Oracle Data Pump中,全库导出使用参数FULL=Y。例如: ``` expdp username/password@connect_identifier FULL=Y DIRECTORY=directory_name DUMPFILE=filename.dmp LOGFILE=filename.log ``` 用户指定在Windows客户端上,所以我应该提供Windows命令提示符下的命令格式。 步骤: 1. 确保有目录对象(directory object)创建在数据库中,指向物理路径。 2. 使用expdp命令执行全库导出。 从引用[1]中,它提到“实例1:全库冷备份”,但那是脱机备份,使用SQL*Plus或RMAN。用户要expdp,这是逻辑备份。 引用[3]说“逻辑备份(expdp和impdp)”,所以expdp是逻辑备份工具。 用户说“全库备份”,所以我需要确认expdp的FULL参数用于全库导出。 在expdp中,FULL=Y导出整个数据库。 现在,构建回答: - 结构清晰:逐步解释。 - 使用中文。 - 在回答中,如果有引用,末尾添加引用标识,如[^1]。但用户提供的引用是站内引用,我需要基于它们。 - 用户提供的引用:[^1], [^2], [^3], [^4]。我应该参考这些。 从引用[4]:它提到了impdp用于全库导入,但用户需要导出。命令类似,但用expdp。 引用[2]给出了expdp命令,但针对模式。我需要调整为全库。 标准步骤: 1. 创建或确认目录对象。 - 在数据库中:`CREATE OR REPLACE DIRECTORY backup_dir AS 'C:\backup';`(在Windows上) - 用户需要有权限。 2. 执行expdp命令。 - `expdp username/password@connect_identifier FULL=Y DIRECTORY=backup_dir DUMPFILE=full_backup.dmp LOGFILE=full_backup.log` 在Windows命令提示符下运行。 确保用户有SYSDBA或必要的权限,因为全库导出需要高级权限。 回答结构: - 解释步骤。 - 提供命令示例。 - 参考提供的引用。 生成相关问题:在最后添加§§相关问题§§部分。 系统指令: - 行内数学:无数学内容,但如果有变量,用$...$。 - 独立公式:无。 - LaTeX语法正确。 - 中文回答。 - 生成相关问题。 - 引用标识自然添加。 用户问题:在Windows客户端上使用expdp进行全库备份。 步骤: 1. 准备:创建目录对象。 2. 执行expdp命令。 从引用[4],它说“如果其他用户下有相同的表,就会跳过”,但那是在导入时。导出时是全的。 命令: expdp system/password@orcl FULL=Y DIRECTORY=dump_dir DUMPFILE=full.dmp LOGFILE=full.log 在Windows上,命令在cmd中运行。 提供完整示例。 参考引用: - 引用[1]提到备份实例,但没有直接expdp全库。 - 引用[2]有expdp命令,我可以修改。 - 引用[3]解释逻辑备份。 - 引用[4]有impdp全库,类似。 所以,在回答中,可以说:如引用[2]和[3]所示,expdp可用于逻辑备份,全库备份使用FULL参数。 回答: **步骤:** 1. 首先,在数据库中创建一个目录对象,指向备份文件存储的物理路径。例如: ```sql CREATE DIRECTORY backup_dir AS 'C:\oracle_backup'; GRANT READ, WRITE ON DIRECTORY backup_dir TO system; -- 或相应用户 ``` 这需要在SQL*Plus或SQL开发工具中执行。 2. 在Windows命令提示符下,使用expdp命令进行全库导出: ``` expdp system/password@orcl FULL=Y DIRECTORY=backup_dir DUMPFILE=full_backup.dmp LOGFILE=full_backup.log ``` 其中: - `system/password` 是数据库用户名和密码。 - `@orcl` 是连接标识符。 - `FULL=Y` 指定全库导出。 - `DIRECTORY=backup_dir` 是之前创建的目录对象。 - `DUMPFILE` 和 `LOGFILE` 指定输出文件。 注意:全库导出需要用户具有EXP_FULL_DATABASE角色或SYSDBA权限。 生成相关问题: 1. 如何验证expdp备份文件的完整性? 2. 在Windows上如何自动化Oracle expdp备份? 3. 全库导出和表空间备份的区别是什么? 确保回答真实可靠。 </think> 以下是针对在Windows客户端上使用`expdp`进行Oracle 19C数据库全库备份的详细方法。我将基于您提供的引用内容(特别是引用[^2]和中关于逻辑备份的说明)和Oracle官方实践,逐步解释操作步骤。全库备份使用`FULL=Y`参数导出整个数据库(包括所有用户、表空间和数据),这是一种逻辑备份方式,适合在数据库联机状态下执行。 ### 全库备份步骤(Windows环境) 1. **创建或确认目录对象(Directory Object)** 在Oracle中,必须定义一个目录对象来指定备份文件的物理存储路径。使用SQL*Plus或SQL开发工具执行以下命令: ```sql -- 创建目录对象(替换 'C:\oracle_backup' 为实际备份路径) CREATE OR REPLACE DIRECTORY backup_dir AS 'C:\oracle_backup'; -- 授予读写权限给用户(例如 SYSTEM 用户) GRANT READ, WRITE ON DIRECTORY backup_dir TO SYSTEM; ``` - **注意**: - 路径需在Windows服务器/客户端上真实存在(如`C:\oracle_backup`)。 - 用户需要`CREATE ANY DIRECTORY`权限(通常由SYSDBA角色赋予)[^1]。 2. **执行expdp全库导出命令** 在Windows命令提示符(cmd)中运行以下命令: ``` expdp SYSTEM/密码@服务名 FULL=Y DIRECTORY=backup_dir DUMPFILE=full_backup.dmp LOGFILE=full_backup.log ``` - **参数说明**: - `SYSTEM/密码@服务名`:数据库用户名、密码和连接标识符(如`orcl`)。 - `FULL=Y`:指定全库导出(导出所有数据和元数据)[^3]。 - `DIRECTORY=backup_dir`:步骤1中创建的目录对象。 - `DUMPFILE`:备份文件名(如`full_backup.dmp`)。 - `LOGFILE`:日志文件名(记录导出过程)。 - **示例命令**: ``` expdp SYSTEM/oracle@orcl FULL=Y DIRECTORY=backup_dir DUMPFILE=2024_full.dmp LOGFILE=2024_full.log ``` - **输出文件位置**:备份文件(.dmp)和日志文件(.log)将保存在`C:\oracle_backup`目录下。 3. **验证备份** - 检查日志文件(如`C:\oracle_backup\2024_full.log`),确保结尾显示"**成功完成导出**"。 - 在目标目录确认.dmp文件大小(全库备份通常较大,取决于数据库规模)。 ### 关键注意事项 - **权限要求**:执行全库导出需用户具有`EXP_FULL_DATABASE`角色或`SYSDBA`权限(建议使用`SYSTEM`或`SYS`用户)。 - **备份性能**: - **优点**:联机备份,不影响数据库正常运行。 - **缺点**:大型数据库导出可能耗时较长,建议在低峰期操作。 - **恢复方法**:需使用`impdp`工具导入(如引用所述),命令类似:`impdp ... FULL=Y`。 - **Windows特定提示**: - 命令需在Oracle客户端安装目录的`bin`文件夹下运行(如`C:\app\product\19c\bin`),或确保`PATH`环境变量包含该路径。 - 路径分隔符使用反斜杠(`\`),但SQL中目录对象路径需用单引号包裹(如`'C:\backup'`)。 ### 常见问题排查 - **错误 ORA-39002**:目录对象未创建或权限不足 → 重新执行步骤1的GRANT命令。 - **错误 ORA-39001**:无效参数 → 检查命令拼写(如`FULL=Y`不能写成`FULL=YES`)。 - **空间不足**:确保目标磁盘有足够空间(全库备份文件可能达GB级)。 此方法基于Oracle 19C逻辑备份的最佳实践,确保数据一致性。如需优化(如并行导出),可添加`PARALLEL=4`参数提升速度。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值