LINUX下ORACLE定时备份数据,使用的expdp。
1、root账户登陆,切换到ORACLE用户。
su - oracle
2、创建一个名为te.sh的脚本,并授权可执行。
mkdir /home/oracle/te/test.sh
chomod 775 /home/oracle/te/test.sh
3、vi 编辑te.sh,添加如下脚本。
if [ -f ~/.bash_profile ];
then
. ~/.bash_profile
fi
export ORACLE_HOME=/data1/oracle/app/oracle/product/11.2.0/db_1
export ORACLE_SID=实例名
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export DATA_DIR=已经授权导出用户expdp的路径
export oldFileName=`date -d “1 hours ago” +%Y%m%d%H`
export nowFileName=`date +%Y%m%d%H`
echo “start……”
expdp 用户名/密码 tables=数据表 dumpfile=$nowFileName.dmp DIRECTORY=DMPDIR log=$nowFileName.log
echo “Delete the file bakup before hours…”
rm -rf $DATA_DIR/$oldFileName.dmp
rm -rf $DATA_DIR/$oldFileName.log
echo “finished…..”
4、脚本解释。
(1)为单个用户每次登陆设置一次环境变量,一定要有这一段,否者定时无效。
if [ -f ~/.bash_profile ];
then
. ~/.bash_profile
fi
(2)导入环境变量和者定义变量。
export ……
(3)、date 用来处理shell脚本的时间,具体可以查看对应的文档。
`date -d “1 hours ago” +%Y%m%d%H` —一个小时之前,格式为:年月日时
`date +%Y%m%d%H` —当前时间,格式为:年月日时
(4)、删除一小时前的文件。
rm -rf $DATA_DIR/$oldFileName.dmp
rm -rf $DATA_DIR/$oldFileName.log
5、oracle的定时任务。现在是在oracle用户下使用,默认对oracle用户操作,如果用的root的需要指定对哪个用户操作,有一定风险。
crontab -e
crontab -r : 删除当前的定时
crontab -l : 列出当前的定时
crontab -e : 编辑文件
6、crontab -e 定时参数。
5 * * * * /home/oracle/te/te.sh —每个小时5分钟执行
格式:[分][时][月][年][周][脚本的路径]
如果出现
[oracle@oracle-rac01 backup]$ expdp parfile=expdp.par
Export: Release 11.2.0.4.0 - Production on Mon Sep 4 09:20:59 2017
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-29283: invalid file operation
ORA-06512: at “SYS.UTL_FILE”, line 536
ORA-29283: invalid file operation
解决:重新创建备份目录
1.1先删除原先创建的备份目录
SQL> drop directory kmdata_exp ;
1.2 重新创建新的备份目录
SQL> create or replace directory kmdata_exp as ‘/u01/app/oracle/backup ‘;
Directory created.
SQL> grant read,write on directory kmdata_exp to public ;
1.3 修改备份目录的属主和属组
[root@oracle-rac01 ~]# mkdir /u01/app/backup/
[root@oracle-rac01 ~]# chown -R oracle:oinstall /u01/app/oracle/backup/
导出数据命令
按用户导
1)expdp system/manager schemas=scott DIRECTORY=dpdata dumpfile=expdp.dmp ;
2)并行进程parallel
expdp system/manager directory=dpdata dumpfile=scott3.dmp parallel=40 job\_name=scott3
3)按表名导
expdp system/manager TABLES=emp,dept directory=dpdata dumpfile=expdp.dmp;
4)按查询条件导
expdp system/manager directory=dpdata dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20';
5)按表空间导
expdp system/manager DIRECTORY=dpdata DUMPFILE=tablespace.dmp TABLESPACES=temp,example;
6)导整个数据库
expdp system/manager DIRECTORY=dpdata DUMPFILE=full.dmp FULL=y;
导入数据命令
1)导到指定用户下
impdp system/manager DIRECTORY=dpdata DUMPFILE=expdp.dmp SCHEMAS=scott;
2)改变表的owner
impdp system/manager DIRECTORY=dpdata DUMPFILE=expdp.dmp TABLES=scott.dept REMAP\_SCHEMA=scott:system;
3)导入表空间
impdp system/manager DIRECTORY=dpdata DUMPFILE=tablespace.dmp TABLESPACES=example;
4)导入数据库
impdp system/manager DIRECTORY=dpdata DUMPFILE=full.dmp FULL=y;
5)追加数据
impdp system/manager DIRECTORY=dpdata DUMPFILE=expdp.dmp SCHEMAS=system TABLE\_EXISTS\_ACTION=append;
6)并行命令
从oss_scap_83(db_link名)导出scap用户,然后导入到本地数据库上scap用户上
4.以用户名身份导出所有数据
创建一个虚拟路径:SQL> create directory dpdata as ‘/home/oracle/dpdump/‘; 该句在SQL中执行
将schemas=appserver 的数据库导出如下:expdp sys/123456 schemas=appserver DIRECTORY=dpdata dumpfile=appserver.dmp;该句命令执行需退出SQL,及执行 exit 命令后执行
成功执行后在 /home/oracle/dpdump/路径下如下图所示:
还没有评论,来说两句吧...