Solaris定时导出和导入数据

Solaris 定时导出导入数据


目的

       编写shell脚本,凌晨定时执行导出数据,通过SCP命令拷贝dump文件到其他服务器
       源数据库 Solaris 11 Oracle RAC 11.2.0.4
       目标数据库  Solaris 11 Oracle RAC  11.1.0.7

步骤

      1. 建立SSH等价关系
      2. 导出脚本
      3. 导入脚本
      4. 建立定时任务

建立SSH等价关系

       参考文档http://docs.oracle.com/cd/E11882_01/install.112/e41961/manpreins.htm#CWLIN408
       源数据库节点oltpnode1
       目标数据库racnode1 172.31.178.130
       oracle用户建立等价关系。
  
       由于oracle用户在安装RAC时,已经生成公钥和私钥,因此只要将其已经生成的公钥拷贝到authorized_keys文件即可。
       源数据库oltpnode1节点的操作如下,将其公钥拷贝至目标数据库节点racnode1。/etc/hosts文件内定义racnode1。

点击(此处)折叠或打开

  1. cd /export/home/oracle/.ssh
  2. scp id_rsa.pub oracle@racnode1:/u01/backup
      
        目标数据库racnode1节点,将其oltpnode1的公钥拷贝至authorized_keys

点击(此处)折叠或打开

  1. cd /export/home/oracle/.ssh
  2. cat /u01/backup/id_rsa.pub >>authorized_keys
      
        目标数据库racnode1节点执行如下操作,将其公钥拷贝到源数据库节点oltpnode1。/etc/hosts文件内定义oltpnode1。

点击(此处)折叠或打开

  1. cd /export/home/oracle/.ssh
  2. scp id_rsa.pub oracle@oltpnode1:/u01/
   
        源数据库oltpnode1执行如下操作

点击(此处)折叠或打开

  1. cd /export/home/oracle/.ssh
  2. cat /u01/backup/id_rsa.pub >>authorized_keys
  
        两个节点分别执行:
        ssh oltpnode1 date
        ssh racnode1 date
 
        第一次运行命令,系统提示数据密码,第二次运行之后,应该免密,如下所示。
       


导出脚本

        创建数据库目录,创建脚本,确保脚本具有执行权限。
        导出脚本较简单如下所示:

点击(此处)折叠或打开

  1. #!/bin/bash

  2. set -x

  3. . /export/home/oracle/.bash_profile

  4. DUMPFILEPRE=njexpschema
  5. DUMPFILE=`date +%Y%m%d`
  6. FILE=`date +%Y%m%d%H%M`
  7. SHELLLOGFILE=/u02/acfsmounts/expdp/shell_info.log
  8. DUMPDIR=/u02/acfsmounts/expdp

  9. REMOTEHOST="172.31.178.130"
  10. REMOTEDIR=/racbackup

  11. echo "=======================================================================================================" >>$SHELLLOGFILE
  12. echo "= =" >> $SHELLLOGFILE
  13. echo "= backup_day_expdp.sh =" >>$SHELLLOGFILE
  14. echo "= =" >> $SHELLLOGFILE
  15. echo "=======================================================================================================" >>$SHELLLOGFILE
  16. echo "[`date`] [INFO] shell script start............ " >>$SHELLLOGFILE

  17. USERNAME="SDP_PM,SDP_SMECD,SDPNSI,SDPRPI,SDPSDI,sdp_usp,sdp_usm,sdp_miss"
  18. #USERNAME="SDPRPI,SDPNSI"

  19. echo "[`date`] [INFO] expdp start............. " >>$SHELLLOGFILE

  20. expdp \'/ as sysdba\' directory=EXPDP SCHEMAS=$USERNAME dumpfile=$DUMPFILEPRE$DUMPFILE-%U.dump logfile=$DUMPFILEPRE$DUMPFILE.log COMPRESSION=all PARALLEL=4 VERSION=11.1
  21. if [ $? -eq 0 ];then
  22. echo "[`date`] [INFO] expdp success" >>$SHELLLOGFILE


  23. echo "[`date`] [INFO] scp start" >>$SHELLLOGFILE
  24. scp $DUMPDIR/$DUMPFILEPRE$DUMPFILE-*.dump oracle@$REMOTEHOST:$REMOTEDIR >>$SHELLLOGFILE
  25. echo "[`date`] [INFO] scp end" >>$SHELLLOGFILE

  26. echo "[`date`] [INFO] shell script success" >>$SHELLLOGFILE
  27. else
  28. echo "[`date`] [ERROR] expdp failture!!!!!!!!!!!!!!" >>$SHELLLOGFILE
  29. echo "[`date`] [ERROR] shell script failture!!!!!!!!!!!!!!" >>$SHELLLOGFILE
  30. fi

  31. find $DUMPDIR -name "${DUMPFILEPRE}*.dump" -mtime +1 -exec rm {} \;
  32. find $DUMPDIR -name "${DUMPFILEPRE}*.log" -mtime +30 -exec rm {} \;

  33. echo " " >>$SHELLLOGFILE
  34. echo " " >>$SHELLLOGFILE
         注意:version参数,由于目标数据库为11.1,低于源数据库,因此必须加此参数,否则导入数据会失败。错误提示如下:

点击(此处)折叠或打开

  1. bash3.00$ impdp ''\''/' as 'sysdba'\''' directory=DATA_IMPDP SCHEMAS=SDPNSI,SDPRPI dumpfile=njexpschema20160718-%U.dump logfile=njexpschema20160718.imp.log PARALLEL=8 cluster=N

  2. Import: Release 11.1.0.7.0 - 64bit Production on Monday, 18 July, 2016 13:49:07

  3. Copyright (c) 2003, 2007, Oracle. All rights reserved.

  4. Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
  5. With the Partitioning, Real Application Clusters, OLAP, Data Mining
  6. and Real Application Testing options
  7. ORA-39001: invalid argument value
  8. ORA-39000: bad dump file specification
  9. ORA-39142: incompatible version number 3.1 in dump file "/u01/backup/njexpschema20160718-01.dump"

导入脚本

      源数据库为RAC,只有一个鉴权系统使用此数据库,因此导入脚本中没有使用kill session命令,而是直接停止实例,断开所有AMSP用户会话。重新启动实例时使用限制模式,避免新的连接。导入完成之后,取消限制模式。
      脚本如下:

点击(此处)折叠或打开

  1. #!/bin/bash

  2. . /export/home/oracle/.profile

  3. set -x

  4. echo " "
  5. echo "==========================================================================================================="
  6. echo "= ="
  7. echo "=`date` script run ="
  8. echo "= ="
  9. echo "==========================================================================================================="

  10. FILE=`date +%Y%m%d`
  11. DUMP=/racbackup

  12. #KILLSESSION=/racbackup/impdp/killsql$FILE.sql

  13. SHELLLOGFILE=/racbackup/impdp/shell_info.log

  14. srvctl stop service -d orcl -s amsp
  15. srvctl stop listener -n racnode1
  16. srvctl stop listener -n racnode2

  17. srvctl stop instance -d orcl -i orcl1,orcl2

  18. sqlplus / as sysdba << EOF
  19. STARTUP RESTRICT;
  20. exec dbms_lock.sleep(10);
  21. drop user SDP_PM cascade;
  22. drop user SDP_SMECD cascade;
  23. drop user sdp_usm cascade;
  24. drop user sdp_usp cascade;
  25. drop user sdp_miss cascade;
  26. drop user SDPNSI cascade;
  27. drop user SDPRPI cascade;
  28. drop user SDPSDI cascade;
  29. exit
  30. EOF


  31. impdp \'/ as sysdba\' directory=DATA_IMPDP SCHEMAS=SDP_PM,SDP_SMECD,sdp_usm,sdp_usp,sdp_miss,SDPNSI,SDPRPI,SDPSDI dumpfile=njexpschema$FILE-%U.dump logfile=njexpschema$FILE.log PARALLEL=4 cluster=N

  32. #impdp \'/ as sysdba\' directory=DATA_IMPDP SCHEMAS=SDPNSI,SDPRPI dumpfile=njexpschema$FILE-%U.dump logfile=njexpschema$FILE.imp.log PARALLEL=2 cluster=N

  33. sqlplus / as sysdba << EOF
  34. grant dba to SDP_PM;
  35. grant dba to SDP_SMECD;
  36. grant dba to sdp_usm;
  37. grant dba to sdp_usp;
  38. grant dba to sdp_miss;
  39. grant dba to SDPNSI;
  40. grant dba to SDPRPI;
  41. grant dba to SDPSDI;

  42. ALTER SYSTEM DISABLE RESTRICTED SESSION;

  43. alter system register;

  44. exec dbms_utility.compile_schema('SDP_PM');
  45. exec dbms_utility.compile_schema('SDP_SMECD');

  46. exit
  47. EOF

  48. sqlplus sdp_pm/sdp_pm <<eof< eof</eof<>
  49. @/racbackup/impdp/cr_index.sql
  50. exit
  51. EOF


  52. srvctl start instance -d orcl -i orcl2

  53. srvctl start listener -n racnode1
  54. srvctl start listener -n racnode2
  55. srvctl start service -d orcl -s amsp

  56. #find $DUMP -name "njexpschema*dump" -exec rm {} \;

  57. /u01/backup/cleararchivelog.sh
          要点
          a. 关于dbms_utility.compile_schema,编译无效对象。手工导入时发现,有较多无效对象,故运行此过程来解决。
          b. cr_index.sql脚本。由于11.2导入11.1时,全文索引报错  ORA-39083,ORA-06550,PLS-00306,ORA-06550,故执行此脚本重新创建全文索引。参见 MOS文档 ID 1574526.1
          c. amsp为应用的服务名
          d. 导入时,仅仅只能启动一个实例。否则报ORA-31693和ORA-29913错误如下:
        


定时任务

      oracle用户在源数据库执行如下命令
      crontab -e
      编辑如下,添加最后一行,每天凌晨1点运行
     
      oracle用户在目标数据库执行如下命令
      crontab -e
      编辑,添加最后一行。每天凌晨2点30执行

     


     要点
     a. cron日志保存在/var/cron/log文件中
     b. 用户使用crontab的权限。需要将用户加入到/etc/cron.d/cron.allow中
     c. 定时服务是否启动。svcs | grep cron。未启动,执行svcadm enable svc:/system/cron:default

参考文档

       1. ORA-39083, PLS-00306 while impdp creates Text index 文档 ID 1574526.1
       2. Solaris10 添加定时任务 http://blog.itpub.net/228190/viewspace-497984/








  


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31142205/viewspace-2122364/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31142205/viewspace-2122364/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值