热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Oracle表或分区导出脚本

有兴趣的同学可以帮我测试一下脚本,有什么问题请回复,以便我继续改进!脚本用途:在Oracle10g或以上版本中导出指定表或指

有兴趣的同学可以帮我测试一下脚本,有什么问题请回复,以便我继续改进!

 

脚本用途:在Oracle10g或以上版本中导出指定表或指定分区,并压缩导出文件。

脚本使用前提:

     1. 数据库必须支持expdp,因为脚本调用的是expdp

     2. 需要先在数据库里建立一个名为EXPDPDIR的目录,并把读写权限授予public或system

脚本使用说明:

   1. 脚本可以直接执行,也适合放在cronjob中

   2. expdp使用system用户导出,如果需要使用其它用户导出,需要修改脚本中的ORA_USER设置。system用户密码需要根据实际环境修改PASSWD。

     3. Oracle的环境变量ORACLE_HOME,PATH和ORACLE_SID需要根据实际环境修改

     4. DUMP_DIR参数需要与数据库目录EXPDPDIR的设置保持一致

   

#!/usr/bin/bash
######################################################################
##  Environment. change as needed
######################################################################
export ORACLE_HOME="/app/oracle/product/10.2"
export PATH=${ORACLE_HOME}/bin:$PATH
export ORACLE_SID="ora10g"

######################################################################
##  Parameters, change as needed
######################################################################
LOGDIR="/app/oracle/log"
## Expdp directory,the same directory as created in database
DUMP_DIR="/app/oracle/datapump"
ORA_DUMPDIR="EXPDPDIR"
## Expdp user
ORA_USER="SYSTEM"
## Password for expdp user
PASSWD="SYSTEM"
CURRDATE=$(/usr/bin/date '+%Y%m%d')

######################################################################
## Get commands path
######################################################################                                              
EXPDP=${ORACLE_HOME}/bin/expdp
GZIP=/usr/bin/gzip
GREP=/usr/bin/grep
SQLPLUS=${ORACLE_HOME}/bin/sqlplus
TOUCH=/usr/bin/touch
RM=/usr/bin/rm

######################################################################
##  Funcations
######################################################################

######################################################################
## display Copyright information
######################################################################
printInfo() {
    echo "Script to export table or partition."
    echo "Copyright (C) 2011-2012  Yu jun / ERG-Beijing Ltd."
}

######################################################################
## display help
######################################################################
printHelp()
{
  echo
  echo "The purpose of the script is to export table or partion from a"
  echo "give schema using datapump and compress the export file. The "
  echo "script use \"system\" to export table, you need to change the"
  echo "user's password as needed(The password is in the script)."
  echo "Prerequisite: "
  echo "  1. The version of the Oracle must be 10g or above."
  echo "  2. You need create a directory named \"EXPDPDIR\" in database "
  echo "     and give read and write permission to system or public."
  echo
  echo "Usage: $(basename $0) -u -t

[-p ]"
  echo
  echo " -u Table owner."
  echo " -t Table name."
  echo " -p Patition name. If do not use -p options,the whole table will"
  echo "    be exported."
  echo
  echo "Example : $(basename $0) -u scott -t emp -p p1"
  echo "This will export partion p1 from table scott.emp then"
  echo "compress the export file."
  echo
  echo "Exit Values: "
  echo "             96    Can not create lock file"
  echo "             97    Another instance is running"
  echo "             98    Bad user to run the script"
  echo "             99    Bad options"
  echo "             100   Export file exist"
  echo "             101   Expdp fail"
  echo "             102   Export file compress fail"
  echo "             103   Exit with trap signal"
  echo
}

######################################################################
## Checks command line options (pass $@ as parameter)
######################################################################
# Checks command line options (pass $@ as parameter).
checkOptions() {
    if [ $# -eq 0 ]; then
        printInfo
        printHelp
        exit 99
    fi

    while getopts u:t:p: OPT $@; do
            case $OPT in
                u) # table owner
                   OWNER=$OPTARG
                   ;;
                t) # table name
                   TAB_NAME=$OPTARG
                   ;;
                p) # partition name
                   PART_NAME=$OPTARG
                   ;;
                ?) printInfo
                   printHelp
                   exit 99
                   ;;
            esac
    done
    if [ -z $OWNER ] || [ -z ${TAB_NAME} ]; then
        printInfo
        printHelp
        exit 99
    fi
    if [ -z $PART_NAME ]; then
      LOGFILE=$LOGDIR"/expdp_"$OWNER"_"${TAB_NAME}".log"
    else
      LOGFILE=$LOGDIR"/expdp_"$OWNER"_"${TAB_NAME}"_"${PART_NAME}".log"
    fi
}

######################################################################
## lock the script against parallel run
######################################################################
lock() {
  ## lockfile name
  if [ -z ${PART_NAME} ] ; then
    LOCKF="/tmp/expdp_"${OWNER}"_"${TAB_NAME}".lck"
  else
    LOCKF="/tmp/expdp_"${OWNER}"_"${TAB_NAME}"_"${PART_NAME}".lck"   
  fi

  ## create lock file
  if [ -f $LOCKF ]; then
    echo "$(date)  [Error] : Another instance of the script is running."
    exit 97
  fi
  $TOUCH $LOCKF
  if [ $? -ne 0 ]; then
    echo "$(date)  [Error] : Can not create lock file." 
    exit 96
  fi
}

######################################################################
## Export data from database and compresss the dumpfile
######################################################################
expdp_comp_tab()
{
  ####################################################################
  ## Function:
  ##    Export data from oracle and compress the dump file
  ##
  ## Prerequisite:
  ##    Create a directory on database for datapump and grant read
  ##    and write permission to public.
  ##
  ## Input Values:
  ##    NULL
  ## Output: (two files)
  ##    1. Export file, located on DataPummp Directory with name
  ##       owner_table_partition.dmp
  ##    2. Log file, located on DataPummp Directory with name
  ##       owner_table_partition.log
  ####################################################################
  ## for expdp parameter "tables"
  if [ -z ${PART_NAME} ] ; then
    EXP_TAB_PART=${OWNER}"."${TAB_NAME}
  else
    EXP_TAB_PART=${OWNER}"."${TAB_NAME}":"${PART_NAME}   
  fi
  ## for expdp parameter "dumpfile"
  if [ -z ${PART_NAME} ] ; then
    DUMP_FILE_NAME=${OWNER}"_"${TAB_NAME}"_"$CURRDATE".dmp"
  else
    DUMP_FILE_NAME=${OWNER}"_"${TAB_NAME}"_"${PART_NAME}"_"$CURRDATE".dmp"
  fi
  ## for expdp parameter "logfile"
  if [ -z ${PART_NAME} ] ; then
    DUMP_LOG_NAME=${OWNER}"_"${TAB_NAME}"_"$CURRDATE".log"
  else
    DUMP_LOG_NAME=${OWNER}"_"${TAB_NAME}"_"${PART_NAME}"_"$CURRDATE".log"
  fi
  ## the compressed dumpfile name
  COMP_DUMP_FILE=${DUMP_FILE_NAME}".gz"
  ## the full dumpfile name
  FULL_DUMP_FILE=${DUMP_DIR}"/"${DUMP_FILE_NAME}
  ## the full logfile name
  FULL_DUMP_LOG=${DUMP_DIR}"/"${DUMP_LOG_NAME}
  ## the full compressed dumpfile name
  FULL_COMP_DUMP=${DUMP_DIR}"/"${COMP_DUMP_FILE}
  if [ -f ${FULL_DUMP_FILE} ] ; then     ## Dumpfile exists
    echo "$(date)  [Error] : Dumpfile ${FULL_DUMP_FILE} exist!" ## Give a warning
    return 100
  elif [ -f ${FULL_COMP_DUMP} ] ; then
    echo "$(date)  [Error] : Dumpfile ${FULL_COMP_DUMP} exist!" ## Give a warning
    return 100      
  fi
  ## Export a given table or partition
  $EXPDP ${ORA_USER}/${PASSWD} directory=${ORA_DUMPDIR} dumpfile=${DUMP_FILE_NAME} logfile=${DUMP_LOG_NAME} tables=${EXP_TAB_PART} > /dev/null 2>&1
  ## If expdp succeed or not, using datapump logfile for judgement
  ## not using exit code because of oracle bug 
  MESG=$($GREP "successfully completed" ${FULL_DUMP_LOG})
  if [ $? -eq 0 ] ; then
    echo "$(date)  [Info] : Expdp successfully completed for table ${EXP_TAB_PART}!"
  else
    echo "$(date)  [Error] : Expdp failed for table ${EXP_TAB_PART}!"
    echo "          Please check logfile ${FULL_DUMP_LOG}!"
    return 101
  fi
  ## Compress the dump file
  ERROR=$($GZIP ${FULL_DUMP_FILE} 2>&1)
  if [ $? -eq 0 ] ; then
    echo "$(date)  [Info] : Compress successfully completed for file ${FULL_DUMP_FILE}!"
  else
    echo "$(date)  [Error] : Compress failed for file ${FULL_DUMP_FILE}!"
    echo "Error Messages:"
    echo "*** : "$ERROR
    return 102
  fi 
}

######################################################################
## Main Program
######################################################################
##  Check command line options
checkOptions $@

## Output to logfile, if want to send output to screen, comment out the following line
#exec 1>>$LOGFILE 2>&1

## Script start
echo ==== Script $0 started on $(date) ====

##  The script need to be run as user "oracle"
CUSER=$(id |cut -d "(" -f2 | cut -d ")" -f1)
if [ "$CUSER" != "oracle" ] ; then
  echo "$(date)  [Error] : The script need to be run as user \"oracle\""
  exit 98
fi

## lock the script against parallel run
lock

## trap signal
trap '$RM $LOCKF' 0
trap 'exit 103' 1 2 3 15

## Export table partition and compress the dump file
expdp_comp_tab

## Check the result
REXP=$?

if [ "$REXP" = "0" ]; then
  LOGMSG="Script $0 ended successfully"
else
  LOGMSG="Script $0 ended in error"
fi
echo ==== $LOGMSG on $(date) ====
echo

## exit
exit $REXP

转:https://www.cnblogs.com/cqubityj/archive/2012/01/11/2319734.html



推荐阅读
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 本文介绍了将mysql从5.6.15升级到5.7.15的详细步骤,包括关闭访问、备份旧库、备份权限、配置文件备份、关闭旧数据库、安装二进制、替换配置文件以及启动新数据库等操作。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • 我们有(据我所知)星型模式SQL数据库中的数据文件。该数据库有5个不同的文件,扩展名为 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 本文讨论了在使用sp_msforeachdb执行动态SQL命令时,当发生错误时如何捕获数据库名称。提供了两种解决方案,并介绍了如何正确使用'?'来显示数据库名称。 ... [详细]
  • MongoDB用户验证auth的权限设置及角色说明
    本文介绍了MongoDB用户验证auth的权限设置,包括readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase、cluster相关的权限以及root权限等角色的说明和使用方法。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
author-avatar
凌微茵_686
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有