暂无图片
暂无图片
5
暂无图片
暂无图片
1
暂无图片

Expdp导出受阻,状态为DEFINING,分析前因后果

原创 三石 2021-04-15
5922

2021年某月某日进行网络割接后,数据库所有的EXPDP逻辑路径均不能再设置在NFS上,只能设置在本地文件系统才可以

查询资料如下:
根据故障现象,用如下关键字在MOS中搜索: expdp state DEFINING,匹配到文档:
DataPump Export/Import Hangs With “DEFINING” Status When Using A Directory On NFS Filesystem
按MOS建议,将导出任务移动到本地文件系统:

现暂解决办法如下:
设置数据库逻辑导出路径为本地文件系统,再将DMP文件tar压缩,删除DMP文件,并将tar包移动到NFS盘,非常不方便,部分本地文件系统空间不足,
不能够这样操作,现在急需替换!

另外:NFS磁盘由于受到网络影响,expdp导出的确没有本地文件快

=========================================================

一、问题发现

环境:操作系统Linux redhat6.9 数据库版本为11.2.0.4 单机库

设置的是任务crontab -l

##################################################################

1、发现导出日志log只有开头,却没有报错,一直卡住

Export: Release 11.2.0.4.0 - Production on Thu Apr 15 15:12:24 2021
Copyright © 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

##################################################################

2、查看数据库报警日志,也没有明显报错

su - oracle
cd $ORACLE_BASE/diag/rdbms/test/test/trace/
tail -3000f alert_test.log

Thu Apr 15 15:12:24 2021
DM00 started with pid=24, OS id=4946, job SYSTEM.SYS_EXPORT_SCHEMA_01

##################################################################

3、查看数据库redo日志文件

set pages 999 lines 999
select * from v$log;
看是否所有的日志文件都出与active 或者 current状态
如果大部分都是inactive状态,就说明不是redo日志不够用的原因

 1	    1	     931   52428800	   512		1 NO  INACTIVE		    19633319 12-APR-21	   19648847 12-APR-21
 2	    1	     932   52428800	   512		1 NO  INACTIVE		    19648847 12-APR-21	   19658716 12-APR-21
 4	    1	     933  524288000	   512		1 NO  INACTIVE		    19658716 12-APR-21	   19760856 14-APR-21
 5	    1	     934  524288000	   512		1 NO  INACTIVE		    19760856 14-APR-21	   19765482 14-APR-21
 6	    1	     937  524288000	   512		1 NO  INACTIVE		    19984639 14-APR-21	   19988852 14-APR-21
 7	    1	     938  524288000	   512		1 NO  CURRENT		    19988852 14-APR-21	 2.8147E+14
 8	    1	     930  524288000	   512		1 NO  INACTIVE		    19493013 08-APR-21	   19633319 12-APR-21
 9	    1	     935  524288000	   512		1 NO  INACTIVE		    19765482 14-APR-21	   19966496 14-APR-21
10	    1	     936  524288000	   512		1 NO  INACTIVE		    19966496 14-APR-21	   19984639 14-APR-21
复制

##################################################################

4、从以上报警已知两个消息,分别是分配的job任务和分配的数据库进程

通过attach命令查看导出信息
ATTACH
附加到现有的作业上。
例如,ATTACH = job_name。

命令:
expdp system/oracle attach=SYS_EXPORT_SCHEMA_01

Export: Release 11.2.0.4.0 - Production on Thu Apr 15 15:17:46 2021
Copyright © 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Job: SYS_EXPORT_SCHEMA_01
Owner: SYSTEM
Operation: EXPORT
Creator Privs: TRUE
GUID: BFFE95CC3E20134EE0531351140A2BDF
Start Time: Thursday, 15 April, 2021 15:12:24
Mode: SCHEMA
Instance: test
Max Parallelism: 0
EXPORT Job Parameters:
Parameter Name Parameter Value:
CLIENT_COMMAND system/******** schemas=test1_9999 dumpfile=test11_20210415.dmp directory=hh logfile=hh_20210415.log parallel=2
State: DEFINING
Bytes Processed: 0
Job Error Count: 0

##################################################################

5、查看dba_datapump_jobs视图
set pages 999 lines 999
col OPERATION for a20
col JOB_MODE for a20
col JOB_MODE for a20
col OWNER_NAME for a20
col STATE for a20
select * from dba_datapump_jobs;
OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE DEGREE ATTACHED_SESSIONS DATAPUMP_SESSIONS
SYSTEM SYS_EXPORT_SCHEMA_01 EXPORT SCHEMA DEFINING 1 1 2
test4_9999 SYS_EXPORT_SCHEMA_12 EXPORT SCHEMA NOT RUNNING 0 0 0
test7_9999 SYS_EXPORT_SCHEMA_05 EXPORT SCHEMA NOT RUNNING 0 0 0
test4_9999 SYS_EXPORT_SCHEMA_11 EXPORT SCHEMA NOT RUNNING 0 0 0
test4_9999 SYS_EXPORT_SCHEMA_09 EXPORT SCHEMA NOT RUNNING 0 0 0
test6_9999 SYS_EXPORT_SCHEMA_04 EXPORT SCHEMA

注释:
DBA_DATAPUMP_JOBS在实例上(或在Real Application Clusters的所有实例上)标识数据库中所有活动的Data Pump作业,而不论其状态如何。它还显示了当前未与活动作业关联的所有Data Pump主表。

描述
OWNER_NAME 启动作业的用户
JOB_NAME 用户提供的作业名称(或服务器生成的默认名称)
OPERATION 工作类型
JOB_MODE 工作方式
STATE 当前工作状态
DEGREE 执行该操作的工作进程数
ATTACHED_SESSIONS 作业附加的会话数
DATAPUMP_SESSIONS 参与工作的数据泵会话数

STATE分为三种状态:NOT RUNNING(如果数据泵任务发生异常,但任务并没有退出的情况,需要同步杀掉这类进程)、EXECUTING (执行中)、DEFINING (状态未知,约等于报错)

##################################################################

6、查看数据库进程

查看数据库进程
ps -ef| grep ora_dm
oracle 4946 1 0 15:12 ? 00:00:00 ora_dm00_test
root 8020 7979 0 15:41 pts/2 00:00:00 grep ora_dm

DBWn:数据库块写入器(Database Block Writer)数据库块写入器(DBWn)是负责将脏块写入磁盘的后台进程。

=========================================================

二、开始解决

1、在系统层面kill expdp逻辑导出进程

ps -ef|grep expdp|grep -v grep|awk ‘{print $2}’|xargs kill -9

2、在系统层面kill ora_dm进程

ps -ef|grep ora_dm|grep -v grep|awk ‘{print $2}’|xargs kill -9

3、查看dba_datapump_jobs视图

SQL> select * from dba_datapump_jobs;

SYSTEM SYS_EXPORT_SCHEMA_01 EXPORT SCHEMA NOT RUNNING 1 0 1
test4_9999 SYS_EXPORT_SCHEMA_12 EXPORT SCHEMA NOT RUNNING 0 0 0
test7_9999 SYS_EXPORT_SCHEMA_05 EXPORT SCHEMA NOT RUNNING 0 0 0
test4_9999 SYS_EXPORT_SCHEMA_11 EXPORT SCHEMA NOT RUNNING 0 0 0

4、清理NOT RUNNING的表:

select ‘drop table ‘||OWNER_NAME||’.’||JOB_NAME||’ purge;’ from dba_datapump_jobs where STATE=‘NOT RUNNING’;

–执行结果用来执行,再次查看结果为空:
SQL> select * from dba_datapump_jobs;

no rows selected

##################################################################

6、重新设置导出逻辑路径

sqlplus / as sysdba
create directory HH as ‘/u01/exp’;
grant read,write on directory HH to system;

7、编写定制脚本

vim expdp.sh

#!/bin/sh
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2/db_1
export ORACLE_SID=test

export PATH=ORACLEHOME/bin:ORACLE_HOME/bin:PATH
export NLS_DATE_FORMAT=‘yyyymmdd hh24:mi:ss’
export LD_LIBRARY_PATH=$ORACLE_HOME/lib

#expdp_job
expdp system/oracle schemas=test dumpfile=test_(date +%Y%m%d).dmp directory=EXP_DMP logfile=test(date +%Y%m%d).log parallel=2;

#tar
echo “开始压缩备份…”

cd /u01/exp;
tar -zcvf test_(date +%Y%m%d).tar.gz test_(date +%Y%m%d).dmp test_$(date +%Y%m%d).log;
echo “压缩备份结束…”

mv test_$(date +%Y%m%d).tar.gz /data/backup;
echo “tar包已经迁移…”

mv test_$(date +%Y%m%d).tar.gz /data/backup;
echo “log日志已迁移…”

#delete the backups and logs that are more than 7 days old
find /data/backup -mtime +6 -name “*.tar.gz” -exec rm -f {} ;
echo “删除NFS盘过期tar包…”

find /u01/exp -name “*.log” -exec rm -f {} ;
echo “删除本地文件系统log日志…”

find /data/backup -mtime +6 -name “*.log” -exec rm -f {} ;
echo “删除NFS盘过期日志…”

find /u01/exp -name “*.dmp” -exec rm -f {} ;
echo “删除本地文件系统dmp文件…”

That’s all

8、设置任务

设置脚本
0 1 * * * /u01/exp/expdp.sh > /tmp/expdp.log 2>&1

最后修改时间:2021-04-15 16:51:30
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
2人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

Tonyhacks
暂无图片
2年前
评论
暂无图片 0
检查下防火墙设置 看看主机访问nas服务是否正常 showmount -e ip 是否正常
2年前
暂无图片 点赞
评论
目录
  • 一、问题发现
    • 1、发现导出日志log只有开头,却没有报错,一直卡住
    • 2、查看数据库报警日志,也没有明显报错
    • 3、查看数据库redo日志文件
    • 4、从以上报警已知两个消息,分别是分配的job任务和分配的数据库进程
    • 6、查看数据库进程
  • 二、开始解决
    • 1、在系统层面kill expdp逻辑导出进程
    • 2、在系统层面kill ora_dm进程
    • 3、查看dba_datapump_jobs视图
    • 4、清理NOT RUNNING的表:
    • 6、重新设置导出逻辑路径
    • 7、编写定制脚本
  • That’s all
    • 8、设置任务