热门标签 | 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



推荐阅读
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 本文介绍了如何使用Flume从Linux文件系统收集日志并存储到HDFS,然后通过MapReduce清洗数据,使用Hive进行数据分析,并最终通过Sqoop将结果导出到MySQL数据库。 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • 在本文中,我们将探讨如何在Docker环境中高效地管理和利用数据库。首先,需要安装Docker Desktop以确保本地环境准备就绪。接下来,可以从Docker Hub中选择合适的数据库镜像,并通过简单的命令将其拉取到本地。此外,我们还将介绍如何配置和优化这些数据库容器,以实现最佳性能和安全性。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • WinMain 函数详解及示例
    本文详细介绍了 WinMain 函数的参数及其用途,并提供了一个具体的示例代码来解析 WinMain 函数的实现。 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 本文总结了在SQL Server数据库中编写和优化存储过程的经验和技巧,旨在帮助数据库开发人员提升存储过程的性能和可维护性。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 在 Android 开发中,`android:exported` 属性用于控制组件(如 Activity、Service、BroadcastReceiver 和 ContentProvider)是否可以被其他应用组件访问或与其交互。若将此属性设为 `true`,则允许外部应用调用或与之交互;反之,若设为 `false`,则仅限于同一应用内的组件进行访问。这一属性对于确保应用的安全性和隐私保护至关重要。 ... [详细]
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社区 版权所有