【Linux Oracle】批量抽取数据库特定条件的数据
Linux && Oracle相关文档,希望互相学习,
共同进步
风123456789~-CSDN博客
1.背景
近期需要实现:批量按机构号条件导出dmp文件的数据,且通过不同参数实现不同数据库的导出。前台功能通过选择系统+机构号,调用脚本导出指定的数据库文件。
本文整理实现的大体思路:
1)通过脚本实现不同数据库不同参数、带上机构号条件;
2)采用expdp 方式,使用parfile 导出不同表的数据库文件
3)导出的数据库文件,按照指定格式、指定路径,方便前台下载。
2. 实验-expdp | 脚本 | 优化整合
2.1 脚本动态传参
创建脚本 test.sh ,动态入参 “系统”+“机构” 共2个参数。
细节:1)判断参数个数是否正确 2)动态结果目录是否存在,不存在则创建。
脚本代码如下:
#! /bin/bash
source ~/.bash_profile
source /home/oracle/extract/config/extract_config.ini
echo "hello"starttime=`date +'%Y-%m-%d %H:%M:%S'`
echo "`date +'%Y-%m-%d %H:%M:%S'`"
#1.入参2个: 系统 + 机构
if [ $# -eq 2 ]; thensystem_param=$1system=${system_param,,}orgno=$2
elseecho "===============入参机构号、系统不正确 ======================"exit
fi
echo "=============== 入参: ${system} |${orgno} "#获取时间
BATH_TIME=`date +%Y%m%d`
BACKUP_ROUTE="${BACKUP_MENU}/${BATH_TIME}"if [ ! -d ${BACKUP_ROUTE} ]thenecho "chuang jian ${BACKUP_ROUTE}"`/usr/bin/mkdir ${BACKUP_ROUTE}`chmod 777 ${BACKUP_ROUTE}
fi
2.2 expdp 基础导出 parfile
oracle 基础导出,可参考之前的文章:Oracle Expdp按条件导出-指定表数据
主要思想:expdp 用户名/密码@oracle连接串 parfile=文件路径
其中,各类条件可以放在parfile中,parfile中可以包含:路径 directory、导出文件 dumpfile、日志文件 logfile、压缩方式 COMPRESSION、表清单 tables=(表1,表2:分区,表3...)、查询条件 query=(表1:“条件1”,表2:“条件2”,....)
难点:动态参数替换,变量重定向取值。
