LINUX下ORACLE定时备份数据,使用的expdp。

左手的ㄟ右手 2024-04-17 19:40 88阅读 0赞

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. 1)expdp system/manager schemas=scott DIRECTORY=dpdata dumpfile=expdp.dmp ;
  2. 2)并行进程parallel
  3. expdp system/manager directory=dpdata dumpfile=scott3.dmp parallel=40 job\_name=scott3
  4. 3)按表名导
  5. expdp system/manager TABLES=emp,dept directory=dpdata dumpfile=expdp.dmp;
  6. 4)按查询条件导
  7. expdp system/manager directory=dpdata dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20';
  8. 5)按表空间导
  9. expdp system/manager DIRECTORY=dpdata DUMPFILE=tablespace.dmp TABLESPACES=temp,example;
  10. 6)导整个数据库
  11. expdp system/manager DIRECTORY=dpdata DUMPFILE=full.dmp FULL=y;

导入数据命令

  1. 1)导到指定用户下
  2. impdp system/manager DIRECTORY=dpdata DUMPFILE=expdp.dmp SCHEMAS=scott;
  3. 2)改变表的owner
  4. impdp system/manager DIRECTORY=dpdata DUMPFILE=expdp.dmp TABLES=scott.dept REMAP\_SCHEMA=scott:system;
  5. 3)导入表空间
  6. impdp system/manager DIRECTORY=dpdata DUMPFILE=tablespace.dmp TABLESPACES=example;
  7. 4)导入数据库
  8. impdp system/manager DIRECTORY=dpdata DUMPFILE=full.dmp FULL=y;
  9. 5)追加数据
  10. impdp system/manager DIRECTORY=dpdata DUMPFILE=expdp.dmp SCHEMAS=system TABLE\_EXISTS\_ACTION=append;
  11. 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/路径下如下图所示:

20190830173627785.png

发表评论

表情:
评论列表 (有 0 条评论,88人围观)

还没有评论,来说两句吧...

相关阅读