oracle数据库逻辑备份脚本

1.此次备份是在hp unix环境下进行的,大家可以按照程序思路自己设计并改动程序。

备份脚本说明

一.相关脚本说明

exp_full_tab_backup.sh – 全表备份脚本

full_tab_cfg_file.cfg  -- 全表备份配置表

exp_partition_montab_backup.sh – 月分区表备份

partition_montab_cfg_file.cfg  --月分区表备份配置表

exp_partition_tab_backup.sh  -- 分区表备份表

partition_tab_cfg_file.cfg --分区表备份表配制表

exp_user_backup.sh  -- 用户备份表

user_cfg_file.cfg  --用户备份表

二.相关目录说明

/etl/dbbackup/db   --备份的主目录

/etl/dbbackup/db   -- 备份脚本目录

三.备份文件所在目录

a.如果为全表备份则生成的文件在/etl/dbbackup/db/fulltab/yyyymm/目录中

b.如果为月分区表备份则生成的文件在为/etl/dbbackup/db/yyyymm/tabname目录中

c.如果为用户备份则生成的文件在/etl/dbbackup/db/user_name/yyyymm目录中

d.如果为日分区表备则生成的文件在/etl/dbbackup/db/yyyymmdd/user_tab目录中

.目录生成说明

a.对于全表非分区备份生成的目录为当天所在的目录

b.对于月分区表备份生成的目录为上个月的月份

c.对于日分区考虑备份的时间较长,所以备份前N天的日分区表(N<60),生成的目录也为前N天的目录

d.对于全表备份则在fulltab下生成用户目录并在用户目录生成相关的全表文件

注意事项:

在配置文件中千成不要配错了,不要把日分区表配到全表或月分区表里。

a. exp_full_tab_backup.sh:

#!/bin/ksh

##################################################################

#

#程序功能:对db_bas,db_edw及其他用户的关键表进行全备份

#

##################################################################

#环境变量

#ORACLE_BASE=/oracle; export ORACLE_BASE

#ORACLE_HOME=$ORACLE_BASE/product/9.2.0; export ORACLE_HOME

#ORACLE_SID=BIDW2; export ORACLE_SID

#ORACLE_TERM=vt100; export ORACLE_TERM

#TNS_ADMIN=$ORACLE_HOME/network/admin;export TNS_ADMIN

##NLS_LANG=american_america.zhs16cgb231280; export NLS_LANG

#NLS_LANG=AMERICAN_AMERICA.ZHS16GBK; export NLS_LANG

#ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data; export ORA_NLS33

#LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib; export LD_LIBRARY_PATH

#LIBPATH=$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib ;export LIBPATH

#ORA_DB=$ORACLE_HOME/dbs;export ORA_DB

#CLASSPATH=$ORACLE_HOME/JRE/lib:$ORACLE_HOME/JRE/lib/rt.jar:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH

##PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:/usr/bin:.:$PATH; export PATH

#PATH=$ORACLE_HOME/bin:/oratmp/parameter/OPatch:/usr/bin:.:$PATH; export PATH

#export EDITOR=/usr/bin/vi

#EPC_DISABLED=TRUE;export EPC_DISABLED

#umask 022

#ulimit -c 0

#

. /home/etl/.profile

###############################################################

##存放db_bas,db_edw,dsjz_573用户及密码

###############################################################

db_bas_password='bas1001dbedw'

db_edw_password='edw1006dbedw'

dsjz_573_password='hljedwdsjz573'

etl_password='hljedwetl123'

########################################################

#函数名:export_full_tab_db  导出用户关键表

#入口参数:

########################################################

export_full_tab_db()

{

day_str=`date +%d`

date_str=`date +%Y%m%d`

mon_sts=`date +%Y%m`

#备份目录及脚本目录及生成的临时脚本文件(执行),run_scripts是运行时生成的

scripts_dir='/etl/dbbackup/script'

backup_dir='/etl/dbbackup/db'

full_tab_cfg_file=${scripts_dir}/full_tab_cfg_file.cfg

cd ${scripts_dir}

file_exist=`ls ${full_tab_cfg_file} 2>/dev/null |wc -l`;

if [ ${file_exist} = 0 ];

then

    echo 'Error the full_tab_cfg_file not exist!'

    exit;

fi

cd ${backup_dir}

while read tmplistline

do

    export_owner=`echo "${tmplistline}" | awk '{printf "%s",$1}'`

    export_tab=`echo "${tmplistline}" | awk '{printf "%s",$2}'`

    export_store_directory="`echo "${tmplistline}" | awk '{printf "%s",$4}'`/${mon_sts}"  

    if [ ${export_owner} = 'db_bas' ];

    then

    password=${db_bas_password}

    fi

    if [ ${export_owner} = 'db_edw' ];

    then

    password=${etl_password}

    fi

    if [ ${export_owner} = 'dsjz_573' ];

    then

    password=${dsjz_573_password}

    fi 

    if [ ${export_owner} = 'etl' ];

    then

    password=${etl_password}

    fi 

#对己经备份的进行删除操作

   if [ -d ${export_store_directory} ]; then

     rm -rf ${export_store_directory}

   fi

#创建备份目录

   mkdir ${export_store_directory}

   cd ${export_store_directory}

#执行备份操作

   nohup exp ${export_owner}/${password}@bidb file=${export_tab}.dmp log=${export_tab}.log tables=${export_tab} 

   nohup compress ${export_store_directory}/${export_tab}.dmp &

   sleep 1800

done < ${full_tab_cfg_file}

}

#主函数调用

export_full_tab_db

b.full_tab_cfg_file.cfg
etl td_config_callpd td_config_callpd /etl/dbbackup/db/fulltab/etl
c.exp_partition_montab_backup.sh
#!/bin/ksh
##################################################################
#
#程序功能:对db_bas,db_edw,dsjz_573,db_app,db_dm用户的分区表进行备份
#
##################################################################
#环境变量
#ORACLE_BASE=/oracle; export ORACLE_BASE
#ORACLE_HOME=$ORACLE_BASE/product/9.2.0; export ORACLE_HOME
#ORACLE_SID=BIDW2; export ORACLE_SID
#ORACLE_TERM=vt100; export ORACLE_TERM
#TNS_ADMIN=$ORACLE_HOME/network/admin;export TNS_ADMIN
##NLS_LANG=american_america.zhs16cgb231280; export NLS_LANG
#NLS_LANG=AMERICAN_AMERICA.ZHS16GBK; export NLS_LANG
#ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data; export ORA_NLS33
#LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib; export LD_LIBRARY_PATH
#LIBPATH=$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib ;export LIBPATH
#ORA_DB=$ORACLE_HOME/dbs;export ORA_DB
#CLASSPATH=$ORACLE_HOME/JRE/lib:$ORACLE_HOME/JRE/lib/rt.jar:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
##PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:/usr/bin:.:$PATH; export PATH
#PATH=$ORACLE_HOME/bin:/oratmp/parameter/OPatch:/usr/bin:.:$PATH; export PATH
#export EDITOR=/usr/bin/vi
#EPC_DISABLED=TRUE;export EPC_DISABLED
#umask 022
#ulimit -c 0
#
. /home/etl/.profile
###############################################################
##存放db_bas,db_edw,dsjz_573,db_app,db_dm用户的分区表
###############################################################
db_bas_password='basdbedw'
db_edw_password='edw6dbedw'
dsjz_573_password='hljedsjz573'
db_app_password='app1013hljedw'
db_dm_password='bidm10'
########################################################
#函数名:export_full_tab_db  导出用户关键表
#入口参数:
########################################################
export_patition_montab_db()
{
#当月备份上一个月数据
date_str=`date +%Y%m%d`;
year="`date +"%Y"`"
mon=`date +"%m"`
if [ $mon -eq 01 ]; then
{
month=12
year=`expr $year  - 1`
};
else
{
month=`expr $mon - 1`
};
fi
backup_mon="${year}${month}"
echo ${backup_mon}
#备份目录及脚本目录及生成的临时脚本文件(执行),run_scripts是运行时生成的
scripts_dir='/etl/dbbackup/script'
backup_dir='/etl/dbbackup/db'
partition_montab_cfg_file=${scripts_dir}/partition_montab_cfg_file.cfg
cd ${scripts_dir}
file_exist=`ls ${partition_montab_cfg_file} 2>/dev/null |wc -l`;
if [ ${file_exist} = 0 ];
then
    echo 'Error the partition_montab_cfg_file.cfg not exist!'
    exit;
fi
cd ${backup_dir}
while read tmplistline
do
    export_owner=`echo "${tmplistline}" | awk '{printf "%s",$1}'`
    export_tab=`echo "${tmplistline}" | awk '{printf "%s",$2}'`
    export_directory="`echo "${tmplistline}" | awk '{printf "%s",$3}'`${backup_mon}"
    echo ${export_directory}
    export_store_directory="${export_directory}/${export_tab}"
    if [ ${export_owner} = 'db_bas' ];
    then
    password=${db_bas_password}
    fi
    if [ ${export_owner} = 'db_edw' ];
    then
    password=${db_edw_password}
    fi
    if [ ${export_owner} = 'dsjz_573' ];
    then
    password=${dsjz_573_password}
    fi
    if [ ${export_owner} = 'db_app' ];
    then
    password=${db_app_password}
    fi
    if [ ${export_owner} = 'db_dm' ];
    then
    password=${db_dm_password}
    fi
   #对己经备份的进行删除操作
   if [ -e ${export_directory} ]; then
   {
     echo "备份的月目录己经存在"
   };
   else
   {
   #创建备份月目录
   mkdir ${export_directory}
   };
   fi
   cd ${export_directory}
   #创建备份表目录,如果有先删除然后再创建
   if [ -d ${export_store_directory} ]; then
   {
     rm -rf ${export_store_directory}
   };
   fi
   mkdir ${export_store_directory}
  #在备份表目录下生成执行脚本
  cd ${export_store_directory}
  #拼接导出命令的sql
  echo ${export_tab}
      sSQL="select 'nohup exp '||t.table_owner||'/'||'${password}'||'@bidb LOG='||t.partition_name||'.log TABLES=/('||t.table_name||':'||t.partition_name||'/) FILE='||t.partition_name||'.dmp  ROWS=y '||chr(13)||'
nohup compress '||t.partition_name||'.dmp &' from all_tab_partitions t where t.table_owner=upper('${export_owner}') and t.table_name=upper('${export_tab}') and t.partition_name like '%'||'$backup_mon'||'%'; ";  
  #生成命令脚本
echo ${sSQL}
    sqlplus -S sys/hljedw2010@bidb as sysdba<<EOF
    set echo off;
    set feedback off;
    set heading off;
    set pagesize 0;
    set linesize 800;
    set termout off;
    set trimout on;
    set trimspool on;
    set newpage 0;
    set space 0;
    set verify off;
    set markup html off spool off;
    set long 2048576;
    spool sTmpFile.lst;
    ${sSQL}
    spool off;
    exit;
EOF
    #进入备份表目录
    cd ${export_store_directory}
    #给生成的临时执行脚本赋执行权限
    chmod +x sTmpFile.lst
    sh sTmpFile.lst
done < ${partition_montab_cfg_file}
#生成成功标识
    cd ${export_directory}
    touch $backup_mon
}
#主函数调用
export_patition_montab_db
d.partition_montab_cfg_file.cfg
db_bas tp_serv_mon /etl/dbbackup/db/
e.exp_partition_tab_backup.sh
#!/bin/ksh
##################################################################
#
#程序功能:对db_bas,db_edw,dsjz_573,db_app,db_dm用户的分区表进行备份
#
##################################################################
#环境变量
#ORACLE_BASE=/oracle; export ORACLE_BASE
#ORACLE_HOME=$ORACLE_BASE/product/9.2.0; export ORACLE_HOME
#ORACLE_SID=BIDW2; export ORACLE_SID
#ORACLE_TERM=vt100; export ORACLE_TERM
#TNS_ADMIN=$ORACLE_HOME/network/admin;export TNS_ADMIN
##NLS_LANG=american_america.zhs16cgb231280; export NLS_LANG
#NLS_LANG=AMERICAN_AMERICA.ZHS16GBK; export NLS_LANG
#ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data; export ORA_NLS33
#LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib; export LD_LIBRARY_PATH
#LIBPATH=$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib ;export LIBPATH
#ORA_DB=$ORACLE_HOME/dbs;export ORA_DB
#CLASSPATH=$ORACLE_HOME/JRE/lib:$ORACLE_HOME/JRE/lib/rt.jar:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
##PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:/usr/bin:.:$PATH; export PATH
#PATH=$ORACLE_HOME/bin:/oratmp/parameter/OPatch:/usr/bin:.:$PATH; export PATH
#export EDITOR=/usr/bin/vi
#EPC_DISABLED=TRUE;export EPC_DISABLED
#umask 022
#ulimit -c 0
#
. /home/etl/.profile
###############################################################
##存放db_bas,db_edw,dsjz_573,db_app,db_dm用户的分区表
###############################################################
db_bas_password='bas1001dbedw'
db_edw_password='edw1006dbedw'
dsjz_573_password='hljedwdsjz573'
db_app_password='app100813hljedw'
db_dm_password='bidm2010'
########################################################
#函数名:export_full_tab_db  导出用户关键表
#入口参数:
########################################################
export_patition_tab_db()
{
#当月备份上一个月数据
#date_str=`date +%Y%m%d`;
#year="`date +"%Y"`"
#mon=`date +"%m"`
#if [ $mon -eq 01 ]; then
#{
#month=12
#year=`expr $year  - 1`
#};
#else
#{
#month=`expr $mon - 1`
#};
#fi
yy=`date +%Y`
mm=`date +%m-1|bc`
if [ $mm -lt 1 ]; then
{
mm1=12
yy=`expr $yy-1`
};
elif [ $mm -le 9 ]; then
{
 mm1="0$mm"
};
else
{
mm1=$mm
}
fi
echo $mm1
getcal=`cal $mm1 $yy`
dd=`echo $getcal|awk '{print $NF}'`
date_tmp1=$yy$mm1$dd
date_tmp3=`date +%Y%m%d`;
date_tmp2=`date +%d`
date_setup=23
if [ $date_tmp2 -le $date_setup ]; then
{
backup_str=`expr $date_tmp1 - $date_setup + $date_tmp2`
};
else
{
backup_str=`expr $date_tmp3 - $date_setup`
}
fi
#backup_mon="${year}${month}"
#echo ${backup_mon}
#备份目录及脚本目录及生成的临时脚本文件(执行),run_scripts是运行时生成的
scripts_dir='/etl/dbbackup/script'
backup_dir='/etl/dbbackup/db'
partition_tab_cfg_file=${scripts_dir}/partition_tab_cfg_file.cfg
cd ${scripts_dir}
file_exist=`ls ${partition_tab_cfg_file} 2>/dev/null |wc -l`;
if [ ${file_exist} = 0 ];
then
    echo 'Error the partition_tab_cfg_file.cfg not exist!'
    exit;
fi
cd ${backup_dir}
while read tmplistline
do
    export_owner=`echo "${tmplistline}" | awk '{printf "%s",$1}'`
    export_tab=`echo "${tmplistline}" | awk '{printf "%s",$2}'`
    export_directory="`echo "${tmplistline}" | awk '{printf "%s",$3}'`${backup_str}"
    echo ${export_directory}
    export_store_directory="${export_directory}/${export_tab}"
    if [ ${export_owner} = 'db_bas' ];
    then
    password=${db_bas_password}
    fi
    if [ ${export_owner} = 'db_edw' ];
    then
    password=${db_edw_password}
    fi
    if [ ${export_owner} = 'dsjz_573' ];
    then
    password=${dsjz_573_password}
    fi
    if [ ${export_owner} = 'db_app' ];
    then
    password=${db_app_password}
    fi
    if [ ${export_owner} = 'db_dm' ];
    then
    password=${db_dm_password}
    fi
   #对己经备份的进行删除操作
   if [ -e ${export_directory} ]; then
   {
     echo "备份的月目录己经存在"
   };
   else
   {
   #创建备份月目录
   mkdir ${export_directory}
   };
   fi
   cd ${export_directory}
   #创建备份表目录,如果有先删除然后再创建
   if [ -d ${export_store_directory} ]; then
   {
     rm -rf ${export_store_directory}
   };
   fi
   mkdir ${export_store_directory}
  #在备份表目录下生成执行脚本
  cd ${export_store_directory}
  #拼接导出命令的sql
  echo ${export_tab}
      sSQL="select 'nohup exp '||t.table_owner||'/'||'${password}'||'@bidb LOG='||t.partition_name||'.log TABLES=/('||t.table_name||':'||t.partition_name||'/) FILE='||t.partition_name||'.dmp  ROWS=y '||chr(13)||'
nohup compress '||t.partition_name||'.dmp &' from all_tab_partitions t where t.table_owner=upper('${export_owner}') and t.table_name=upper('${export_tab}') and t.partition_name like '%'||to_char(to_date('${backup_str}','yyyymmdd'),'yyyymmdd')||'%'; ";  
  #生成命令脚本
echo ${sSQL}
    sqlplus -S sys/hljedw2010@bidb as sysdba<<EOF
    set echo off;
    set feedback off;
    set heading off;
    set pagesize 0;
    set linesize 800;
    set termout off;
    set trimout on;
    set trimspool on;
    set newpage 0;
    set space 0;
    set verify off;
    set markup html off spool off;
    set long 2048576;
    spool sTmpFile.lst;
    ${sSQL}
    spool off;
    exit;
EOF
    #进入备份表目录
    cd ${export_store_directory}
    #给生成的临时执行脚本赋执行权限
    chmod +x sTmpFile.lst
    sh sTmpFile.lst
done < ${partition_tab_cfg_file}
#生成成功标识
    cd ${export_directory}
    touch $backup_mon
}
#主函数调用
export_patition_tab_db
f.partition_tab_cfg_file.cfg
db_bas tp_serv_day /etl/dbbackup/db/
db_bas tp_acct_item_day /etl/dbbackup/db/
g.exp_user_backup.sh
#!/bin/ksh
##################################################################
#
#程序功能:用户级进行全备份,db_app,etl,reportalhlj
#
##################################################################
#环境变量
#ORACLE_BASE=/oracle; export ORACLE_BASE
#ORACLE_HOME=$ORACLE_BASE/product/9.2.0; export ORACLE_HOME
#ORACLE_SID=BIDW2; export ORACLE_SID
#ORACLE_TERM=vt100; export ORACLE_TERM
#TNS_ADMIN=$ORACLE_HOME/network/admin;export TNS_ADMIN
##NLS_LANG=american_america.zhs16cgb231280; export NLS_LANG
#NLS_LANG=AMERICAN_AMERICA.ZHS16GBK; export NLS_LANG
#ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data; export ORA_NLS33
#LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib; export LD_LIBRARY_PATH
#LIBPATH=$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib ;export LIBPATH
#ORA_DB=$ORACLE_HOME/dbs;export ORA_DB
#CLASSPATH=$ORACLE_HOME/JRE/lib:$ORACLE_HOME/JRE/lib/rt.jar:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
##PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:/usr/bin:.:$PATH; export PATH
#PATH=$ORACLE_HOME/bin:/oratmp/parameter/OPatch:/usr/bin:.:$PATH; export PATH
#export EDITOR=/usr/bin/vi
#EPC_DISABLED=TRUE;export EPC_DISABLED
#umask 022
#ulimit -c 0
#
. /home/etl/.profile
###############################################################
##存放db_app,etl,reportalhlj用户及密码
###############################################################
db_app_password='app100813hljedw'
etl_password='hljetl123'
portalhlj_password='edw100813hlj'
########################################################
#函数名:export_db
#入口参数:
########################################################
export_user_db()
{
day_str=`date +%d`
date_str=`date +%Y%m%d`
mon_sts=`date +%Y%m`
#备份目录及脚本目录及生成的临时脚本文件(执行),run_scripts是运行时生成的
scripts_dir='/etl/dbbackup/script'
backup_dir='/etl/dbbackup/db'
user_cfg_file=${scripts_dir}/user_cfg_file.cfg
cd ${scripts_dir}
file_exist=`ls ${user_cfg_file} 2>/dev/null |wc -l`;
if [ ${file_exist} = 0 ];
then
    echo 'Error the user_cfg_file not exist!'
    exit;
fi
cd ${backup_dir}
while read tmplistline
do
    export_owner=`echo "${tmplistline}" | awk '{printf "%s",$1}'`
    export_store_directory="`echo "${tmplistline}" | awk '{printf "%s",$2}'`/${mon_sts}" 
    if [ ${export_owner} = 'db_app' ];
    then
    password=${db_app_password}
    fi
    if [ ${export_owner} = 'etl' ];
    then
    password=${etl_password}
    fi
    if [ ${export_owner} = 'reportalhlj' ];
    then
    password=${reportalhlj_password}
    fi
#对己经备份的进行删除操作
   if [ -d ${export_store_directory} ]; then
     rm -fr ${export_store_directory}
   fi
#创建备份目录
   mkdir ${export_store_directory}
   cd ${export_store_directory}
#执行备份操作
   nohup exp ${export_owner}/${password}@bidb grants=y feedback=10000 file=${export_owner}_${mon_sts}.dmp owner=${export_owner}
   nohup compress ${export_store_directory}/${export_owner}_${mon_sts}.dmp &
   sleep 1800
done < ${user_cfg_file}
}
#主函数调用
export_user_db
h.user_cfg_file.cfg

db_app /etl/dbbackup/db/db_app
etl /etl/dbbackup/db/etl

说明:红色字体为脚本名称,这里只是思路,如果要改成自己的脚本我估计要一天时间。

你可能感兴趣的:(oracle,数据库,Date,File,脚本,library)