目的:实现自动针对指定的ORACLE模式用户,导出该模式下的所有表,每个表形成一个导出文件(.dmp)和对应的日志文件(.log)
脚本名:vmdbexportcron.ksh
说明:该脚本直接放入CRONTAB中,我们在工作中是将导出的备份存放在一个NFS目录中,所以在脚本开始部分有相关NFS目录是否正常的判断。
#! /bin/sh
NFS_MOUNTDIR='/home/vmdb'
/bin/logger "+++ VMDB DATABASE export and copy start."
# ++
nfscount=`mount | grep $NFS_MOUNTDIR | wc -l`
if (( nfscount == 0 ))
then
/bin/logger "+++ $NFS_MOUNTDIR directory no mount !"
/bin/logger "+++ remount $NFS_MOUNTDIR directory. "
/etc/init.d/nfs start
fi
#+++++++++++++++++++++++++++++++++
# /home/vmdb is NFS_MOUNTDIR !!
# Be care !!!!
#+++++++++++++++++++++++++++++++++
/bin/logger "+++ delete direcotry $NFS_MOUNTDIR backuped files start."
/bin/rm -rf /home/vmdb/*
/bin/logger "+++ delete direcotry $NFS_MOUNTDIR backuped files end."
# ++
su - oracle -c "/backup/vmdb/db/vmdbexport.ksh <Oracle连接名> <用户名> <用户密码>"
/bin/logger "+++ VMDB DATABASE export and copy finished ."
脚本名:vmdbexport.ksh
说明:该脚本执行真正的导出动作,构造导出脚本,然后执行它。一些需要过滤的不必要表,可以添加到脚本的相应行。
#!/bin/ksh
# ++
if [ $# -ne 3 ]
then
echo "+=========================================================================================="
echo "| Usage: $0 ORACLE_NETSERVICENAME ORACLE_USERNAME ORACLE_PASSWORD "
echo "+=========================================================================================="
exit 1
fi
# ++
THISDAY=$(date +%Y%m%d)
ORACLE_HOME='/oracle/product/9ir2'
ORACLE_NETSERVICENAME=$1
ORACLE_USERNAME=$2
ORACLE_PASSWORD=$3
BASEDIR="/backup/vmdb/db"
LOG_FILE=${BASEDIR}/vmdbdbexport.log
TEMPLATE_FILE=${BASEDIR}/template
NFS_MOUNTDIR="/home/vmdb"
THISDIR=${BASEDIR}/${ORACLE_NETSERVICENAME}.${ORACLE_USERNAME}.${THISDAY}
# !! Require !!
THISDIR_RELATE=${ORACLE_NETSERVICENAME}.${ORACLE_USERNAME}.${THISDAY}
THISDAY_EXECUTER=${THISDIR}/export.$ORACLE_NETSERVICENAME.${ORACLE_USERNAME}.sh
THISDAY_TABLIST_FILE=${THISDIR}/tablist.$ORACLE_NETSERVICENAME.${ORACLE_USERNAME}
if [ ! -f "$LOG_FILE" ]
then
touch $LOGFILE
fi
echo "++" >> ${LOG_FILE}
echo "info:" >> ${LOG_FILE}
echo "info:" >> ${LOG_FILE}
echo "info: start time = $(date +'%b %e %T') . " >> ${LOG_FILE}
echo "info: database $ORACLE_NETSERVICENAME ." >> ${LOG_FILE}
echo "info: username $ORACLE_USERNAME ." >> ${LOG_FILE}
echo "info: create directory ${THISDIR} start" >> ${LOG_FILE}
if [ -d "$THISDIR" ]
then
echo "error: $THISDIR aleary exist." >> ${LOG_FILE}
echo "error: $0 abort." >> ${LOG_FILE}
exit 1
else
mkdir $THISDIR
fi
echo "info: create directory ${THISDIR} end." >> ${LOG_FILE}
echo "info: create $THISDAY_TABLIST_FILE start." >> ${LOG_FILE}
$ORACLE_HOME/bin/sqlplus /nolog <<EOF
connect ${ORACLE_USERNAME}/${ORACLE_PASSWORD}@${ORACLE_NETSERVICENAME};
set termout off;
spool $THISDAY_TABLIST_FILE
select '${ORACLE_USERNAME}.'||table_name from user_tables;
spool off;
exit
EOF
if [ $? -eq 0 ]
then
echo "info: create $THISDAY_TABLIST_FILE ok." >> ${LOG_FILE}
else
echo "error: create $THISDAY_TABLIST_FILE wrong, $0 is terminate ." >> ${LOG_FILE}
exit 1
fi
count=0
echo "info: create exp execute shell start." >> ${LOG_FILE}
touch $THISDAY_EXECUTER
echo "#!/bin/ksh" >> $THISDAY_EXECUTER
echo >> $THISDAY_EXECUTER
# Filter: RCNT_ORIGINAL_XXX manage_taxi.GPS_LOG perfstat.STATS
luxsh="sed -e 's/ //g' -e '/RCNT_ORIGINAL/d' -e '/manage_taxi.GPS_LOG$/d' -e '/perfstat.STATS/d' -e '/selected\.$/d' -e '/^---.*--$/d' -e '/TABLE_NAME/d' -e '/^---*--/d' -e '/SQL>/d' -e '/^$/d' ${THISDAY_TABLIST_FILE}"
eval $luxsh | while read table_name
do
sed -e "s/%%1/${table_name}/g" -e "s/%%2/${THISDIR_RELATE}/g" -e "s/%%3/${ORACLE_USERNAME}/g" -e "s/%%4/${ORACLE_PASSWORD}/g" -e "s/%%5/${ORACLE_NETSERVICENAME}/g" $TEMPLATE_FILE > ${THISDIR}/${table_name}.par
echo "$ORACLE_HOME/bin/exp parfile=${THISDIR}/${table_name}.par" >> $THISDAY_EXECUTER
done
echo "sudo /bin/cp -a $THISDIR $NFS_MOUNTDIR" >> $THISDAY_EXECUTER
echo "info: create exp execute shell end." >> ${LOG_FILE}
chmod ug+r+x $THISDAY_EXECUTER
echo "info: execute $THISDAY_EXECUTER start." >> ${LOG_FILE}
$THISDAY_EXECUTER
echo "info: execute $THISDAY_EXECUTER finished." >> ${LOG_FILE}
echo "info: end time = $(date +'%b %e %T') . " >> ${LOG_FILE}
echo "++" >> ${LOG_FILE}
exit 0
文件名:template
说明:vmdbexport.ksh脚本调用
log=/backup/vmdb/db/%%2/%%1.log
file=/backup/vmdb/db/%%2/%%1.dmp
userid=%%3/%%4@%%5
buffer=4096
tables=(%%1)
rows=y
compress=n
脚本名:vmdbexportcron.ksh
说明:该脚本直接放入CRONTAB中,我们在工作中是将导出的备份存放在一个NFS目录中,所以在脚本开始部分有相关NFS目录是否正常的判断。
#! /bin/sh
NFS_MOUNTDIR='/home/vmdb'
/bin/logger "+++ VMDB DATABASE export and copy start."
# ++
nfscount=`mount | grep $NFS_MOUNTDIR | wc -l`
if (( nfscount == 0 ))
then
/bin/logger "+++ $NFS_MOUNTDIR directory no mount !"
/bin/logger "+++ remount $NFS_MOUNTDIR directory. "
/etc/init.d/nfs start
fi
#+++++++++++++++++++++++++++++++++
# /home/vmdb is NFS_MOUNTDIR !!
# Be care !!!!
#+++++++++++++++++++++++++++++++++
/bin/logger "+++ delete direcotry $NFS_MOUNTDIR backuped files start."
/bin/rm -rf /home/vmdb/*
/bin/logger "+++ delete direcotry $NFS_MOUNTDIR backuped files end."
# ++
su - oracle -c "/backup/vmdb/db/vmdbexport.ksh <Oracle连接名> <用户名> <用户密码>"
/bin/logger "+++ VMDB DATABASE export and copy finished ."
脚本名:vmdbexport.ksh
说明:该脚本执行真正的导出动作,构造导出脚本,然后执行它。一些需要过滤的不必要表,可以添加到脚本的相应行。
#!/bin/ksh
# ++
if [ $# -ne 3 ]
then
echo "+=========================================================================================="
echo "| Usage: $0 ORACLE_NETSERVICENAME ORACLE_USERNAME ORACLE_PASSWORD "
echo "+=========================================================================================="
exit 1
fi
# ++
THISDAY=$(date +%Y%m%d)
ORACLE_HOME='/oracle/product/9ir2'
ORACLE_NETSERVICENAME=$1
ORACLE_USERNAME=$2
ORACLE_PASSWORD=$3
BASEDIR="/backup/vmdb/db"
LOG_FILE=${BASEDIR}/vmdbdbexport.log
TEMPLATE_FILE=${BASEDIR}/template
NFS_MOUNTDIR="/home/vmdb"
THISDIR=${BASEDIR}/${ORACLE_NETSERVICENAME}.${ORACLE_USERNAME}.${THISDAY}
# !! Require !!
THISDIR_RELATE=${ORACLE_NETSERVICENAME}.${ORACLE_USERNAME}.${THISDAY}
THISDAY_EXECUTER=${THISDIR}/export.$ORACLE_NETSERVICENAME.${ORACLE_USERNAME}.sh
THISDAY_TABLIST_FILE=${THISDIR}/tablist.$ORACLE_NETSERVICENAME.${ORACLE_USERNAME}
if [ ! -f "$LOG_FILE" ]
then
touch $LOGFILE
fi
echo "++" >> ${LOG_FILE}
echo "info:" >> ${LOG_FILE}
echo "info:" >> ${LOG_FILE}
echo "info: start time = $(date +'%b %e %T') . " >> ${LOG_FILE}
echo "info: database $ORACLE_NETSERVICENAME ." >> ${LOG_FILE}
echo "info: username $ORACLE_USERNAME ." >> ${LOG_FILE}
echo "info: create directory ${THISDIR} start" >> ${LOG_FILE}
if [ -d "$THISDIR" ]
then
echo "error: $THISDIR aleary exist." >> ${LOG_FILE}
echo "error: $0 abort." >> ${LOG_FILE}
exit 1
else
mkdir $THISDIR
fi
echo "info: create directory ${THISDIR} end." >> ${LOG_FILE}
echo "info: create $THISDAY_TABLIST_FILE start." >> ${LOG_FILE}
$ORACLE_HOME/bin/sqlplus /nolog <<EOF
connect ${ORACLE_USERNAME}/${ORACLE_PASSWORD}@${ORACLE_NETSERVICENAME};
set termout off;
spool $THISDAY_TABLIST_FILE
select '${ORACLE_USERNAME}.'||table_name from user_tables;
spool off;
exit
EOF
if [ $? -eq 0 ]
then
echo "info: create $THISDAY_TABLIST_FILE ok." >> ${LOG_FILE}
else
echo "error: create $THISDAY_TABLIST_FILE wrong, $0 is terminate ." >> ${LOG_FILE}
exit 1
fi
count=0
echo "info: create exp execute shell start." >> ${LOG_FILE}
touch $THISDAY_EXECUTER
echo "#!/bin/ksh" >> $THISDAY_EXECUTER
echo >> $THISDAY_EXECUTER
# Filter: RCNT_ORIGINAL_XXX manage_taxi.GPS_LOG perfstat.STATS
luxsh="sed -e 's/ //g' -e '/RCNT_ORIGINAL/d' -e '/manage_taxi.GPS_LOG$/d' -e '/perfstat.STATS/d' -e '/selected\.$/d' -e '/^---.*--$/d' -e '/TABLE_NAME/d' -e '/^---*--/d' -e '/SQL>/d' -e '/^$/d' ${THISDAY_TABLIST_FILE}"
eval $luxsh | while read table_name
do
sed -e "s/%%1/${table_name}/g" -e "s/%%2/${THISDIR_RELATE}/g" -e "s/%%3/${ORACLE_USERNAME}/g" -e "s/%%4/${ORACLE_PASSWORD}/g" -e "s/%%5/${ORACLE_NETSERVICENAME}/g" $TEMPLATE_FILE > ${THISDIR}/${table_name}.par
echo "$ORACLE_HOME/bin/exp parfile=${THISDIR}/${table_name}.par" >> $THISDAY_EXECUTER
done
echo "sudo /bin/cp -a $THISDIR $NFS_MOUNTDIR" >> $THISDAY_EXECUTER
echo "info: create exp execute shell end." >> ${LOG_FILE}
chmod ug+r+x $THISDAY_EXECUTER
echo "info: execute $THISDAY_EXECUTER start." >> ${LOG_FILE}
$THISDAY_EXECUTER
echo "info: execute $THISDAY_EXECUTER finished." >> ${LOG_FILE}
echo "info: end time = $(date +'%b %e %T') . " >> ${LOG_FILE}
echo "++" >> ${LOG_FILE}
exit 0
文件名:template
说明:vmdbexport.ksh脚本调用
log=/backup/vmdb/db/%%2/%%1.log
file=/backup/vmdb/db/%%2/%%1.dmp
userid=%%3/%%4@%%5
buffer=4096
tables=(%%1)
rows=y
compress=n
发表评论
-
在Windows上激活Oracle10g数据库的企业管理器
2007-06-28 09:52 40681. 建立好Oracle数据库和监听器。 2. 建立企业管理器 ... -
在Suse企业版9SP3安装Oracle10gR2
2007-06-21 12:05 1518按以下设置,一切都变得很简单! 一、SUSE9SP3安装必须要 ... -
Oracle问题排查步骤
2007-06-21 12:00 1164一、确定问题 1. 程序是 ... -
自动导入脚本的补充说明
2007-06-21 11:54 945出租车数据库恢复步骤 ... -
使用“利用exp自动逻辑导出脚本”的结果自动导入的脚本
2007-06-21 11:43 1150上一篇写了有关“利用exp自动逻辑导出脚本”的文章,但光有导出 ... -
undo段相关
2007-06-19 10:03 1908概述: 1. 回滚段已过时(u ... -
调整Redo日志的大小
2007-06-13 13:05 1682---- 日志文件大小的更改过程 (注:REDO日志组内所有成 ...
相关推荐
Oracle逻辑导出脚本是系统管理员和DBA(数据库管理员)的重要工具,用于自动化和简化Oracle数据库的备份过程。通过理解上述知识点,不仅可以更好地掌握如何编写类似的脚本来满足自己的需求,还可以深入了解Oracle...
Oracle_backup[exp]文件可能包含了一系列的EXP命令脚本,这些脚本可以自动化地导出特定用户或整个数据库的数据。 1. **自动备份配置**:EXP脚本通常会设置参数,如数据库连接信息(SID、用户名、密码),导出模式...
二是通过客户机手动执行Oracle的EXP逻辑备份命令。然而,这两种方法都存在明显的局限性。 磁带备份虽然是一种传统的备份方式,但其设备可靠性较低,容易受到环境因素的影响,如磁带驱动器、机械手、磁带等部件的...
导出脚本可能包含指定用户、表空间、时间戳等参数,以定制备份内容。 `Oracle_bakup.bat`则可能包含RMAN(恢复管理器)命令,RMAN是Oracle提供的强大备份和恢复工具。RMAN可以执行全库备份、增量备份、表空间备份等...
至于标签“源码”和“工具”,这可能意味着问题可能涉及到EXP的底层工作原理,或者是通过自定义脚本或工具来自动化EXP操作时遇到的问题。源码可能指的是Oracle的内部工作流程,而工具可能是指用于辅助EXP操作的第三...
2. **逻辑备份工具`exp`**:`exp`是一种用于Oracle数据库的逻辑备份工具,它可以将指定的表、模式或整个数据库导出为一个二进制文件,此文件包含了用于重建数据的所有SQL语句。通过`exp`,我们可以按需对生产库中的...
本篇主要介绍如何利用批处理(bat)脚本来实现Oracle数据库的自动导出备份。 Oracle数据库的导出备份通常使用的是Oracle的数据泵工具(expdp),它允许我们创建数据的逻辑备份,这些备份可以是整个数据库、特定用户...
本文主要涉及的是在Linux环境下,针对Oracle数据库创建自动备份脚本以及通过Crontab设置定时任务的相关知识。 1. **Oracle数据库备份**: Oracle数据库的备份通常使用`expdp`(Export Data Pump)工具进行,它允许...
"exp"是Oracle早期的数据泵工具,全称为Export,它主要用于将Oracle数据库中的表、用户、存储过程等对象导出到一个二进制文件中,形成逻辑备份。这个备份文件可以被稍后导入到其他数据库或者同一数据库的不同时间点...
EXP/IMP 是 Oracle 早期的数据导出导入工具,它提供了逻辑导出导入的功能。EXP 用于导出数据,IMP 用于导入数据。导出的文件(dmp 文件)是二进制格式,包含 DDL(数据定义语言)和 DML(数据操纵语言)脚本。DDL ...
导出脚本通常包含一系列参数,如用户名、密码、导出模式(完整、部分)、文件名等。在Kshell和bat脚本环境下,可以编写自动化脚本来调用expdp命令执行导出操作,这有助于简化和标准化工作流程。 2. Oracle IMP工具...
本实战演练旨在让你熟悉Oracle的逻辑导出导入工具IMP和IMPDP,以及如何制定自动备份策略。 1. **Exp/Imp与Expdp/Impdp的简介** - **Exp/Imp** 是Oracle早期的数据导出导入工具,可以在客户端执行,支持基本的导出...
在这个场景中,用户希望利用Linux命令行工具实现Oracle数据库的EXP导出备份。Oracle EXP是Oracle数据库提供的一个实用程序,用于导出数据库对象到一个二进制文件,以便于数据迁移、恢复或存档。 首先,我们看到邮件...
在Oracle 9i及之前版本中,exp和imp是常用的导入导出工具。exp用于导出数据,imp用于导入数据。它们的操作相对简单,但速度较慢且功能相对有限。 - exp命令示例: ```bash exp username/password file=export.dmp ...
在这种情况下,RMAN成为首选的备份工具,因为它提供了更高级的功能,如增量备份、多通道备份和直接到磁带的备份,同时还支持脚本化和自动化操作。 尽管如此,了解并熟练掌握EXP/IMP的使用仍然很重要,因为它们在...
这两个命令允许用户将数据库中的数据导出(exp)到文件,然后在需要时导入(imp)回数据库。逻辑备份在某些情况下比物理备份更实用,特别是当数据库运行在非归档模式下,或者没有足够的外部存储设备,如磁带库时。 ...
"Form1.Designer.vb" 可能包含了由Visual Studio自动生成的控件布局和属性设置,而"OracleManager.vb"很可能是具体的数据库操作逻辑,比如连接、查询、导入和导出的实现。 "数据库导入导出小工具(VB).sln" 是解决...
`exp`是Oracle数据库早期版本中的一个实用程序,用于导出数据库对象到操作系统文件,以实现逻辑备份。在这个场景中,"Oracle_backup.rar_oracle_oracle exp t"标题暗示了我们将讨论如何使用`exp`命令创建Oracle...
在`exp_map.py`这个脚本中,应该包含了类似上述的逻辑,根据实际需求对MXD进行操作。如果你有多个MXD需要处理,可以将它们的路径存储在一个列表中,然后遍历这个列表执行上述步骤。这将实现MXD文件的批量自动化处理...
同时,理解数据导出的格式(如CSV、XML、SQL脚本等)也很重要,因为不同的格式有不同的导入要求和兼容性。 总的来说,SQL导出是数据库管理的关键环节,它涉及到数据安全、备份策略以及跨系统数据迁移。正确理解和...