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=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
评论
