Oracle数据库实现自动逻辑备份指导方案

本文详细介绍了Oracle数据库的逻辑备份方法,包括使用exp/imp客户端工具和expdp/impdp服务端工具。数据泵技术提供更快的备份和恢复速度,推荐用于逻辑备份。此外,文章还阐述了如何利用Unix的Crontab设置自动备份任务,确保数据库的定期备份与维护。

一、 exp/imp客户端备份工具介绍
导入(imp)/导出(exp)是oracle幸存的最古老的两个操作系统命令行工具,exp/imp是一个好的转储工具,特别是在小型数据库的转储,表空间的迁移,表的抽取,检测逻辑和物理冲突等中有不小的功劳。它作为小型数据库的物理备份后的一个逻辑辅助备份,也是不错的手段。
exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。该工具用于在数据库之间传递数据,存放于/ORACLE_HOME/bin。export导出工具将数据库中的数据备份压缩成一个二进制系统文件(dump文件),import则从dump文件中导入数据到数据库中。
使用数据泵导入导出,可以完成如下任务:
◇两个数据库之间传送数据(同版本/不同版本oracle server之间、同种/不同种操作系统之间);
◇用于数据库的备份和恢复;
◇从一个用户传送到另一个用户;
◇从一个表空间传送到另一个表空间。
exp/imp有三种主要的方式:完全(导出/导入数据库中所有对象)、用户模式(导出/导入用户所有对象以及对象中的数据)、表模式(导出/导入用户所有表或者指定的表)。使用exp/imp进行导入导出的语法如下:
exp/impuser/id file=[backupfile] owner=[username] tables=[(tablename)] logs=[logname]…
若使用全导入/导出,可添加参数“Full=Y”;还可使用buffer参数定义每一次读取文件的数据量。
二、 expdp/impdp服务端备份工具介绍
oracle database 10g引入了数据泵技术,使用DBA或开发人员可以快速地对数据进行逻辑备份和迁移。使用数据泵导入导出,可以完成如下任务:
◇实现逻辑备份和逻辑恢复。
◇在数据库用户之间移动对象。
◇在数据库之间移动对象。
◇实现表空间搬移。
较之于传统的imp和exp,数据泵导出和导入速度更快,因此建议使用数据泵进行逻辑备份和恢复。expdp和impdp是服务端的工具程序,他们只能在oracle服务端使用,不能在客户端使用,并且它们只能访问Directory对象指定的目录。imp只适用于exp导出的文件,不适用于expdp导出文件;impdp只适用于expdp导出的文件,而不适用于exp导出文件。
使用exp/imp进行导入导出的步骤:
(1)创建逻辑目录(存放转储文件和日志文件的目录),该命令不会在操作系统创建真正的目录,最好以system等管理员创建。
create directory directorynameas位置;
(2)查看管理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错)
select *from dba_directories;
(3)给要执行导出/导入操作的用户赋予在指定目录的操作权限,最好以system等管理员赋予。
grant read,write on directory directoryname to user;
(4)启动expdp/impdp程序进行备份/恢复
expdp/impdpuser/id@orcle_sid directory=[directoryname] dumpfile=[backupfile] logfile=[logname](schemas=[username] tables=[tablename] tablespace=[tablespacename]…)
使用schemas参数设定导出的用户或要导入到的指定用户;tables参数设定导出/导入的表名;tablespace参数设定导出/导入的表空间;参数full=Y设定导出/导入整个数据库;query参数设定按查询条件进行导出/导入;parallel参数设定并行进程数;
impdp可使用remap_schema参数改变表的拥有者,remap_schema=[fromuser]:[touser];使用table_exists_action实现在原表中加入数据。
三、 unix的自动调度任务Crontab介绍

  1. Crontab简介
    Crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“Crontab”文件中,以供之后读取和执行。
    Crontab文件包含送交cron守护进程的一系列作业和指令。每个用户可以拥有自己的Crontab文件;同时,操作系统保存一个针对整个系统的Crontab文件,该文件通常存放于/etc或者/etc之下的子目录中,而这个文件只能由系统管理员来修改。
    Crontab是UNIX系统下的定时任务触发器,其使用者的权限记载在下列两个文件中:
    /usr/var/adm/cron/cron.deny:该文件中所列的用户不允许使用Crontab命令;
    /usr/var/adm/cron/cron.allow:该文件中所列的用户允许使用Crontab命令;
  2. 设置方法介绍
    (1)、crontab定时任务设置
    crontab -l 显示现在有的任务
    crontab -e编辑修改crontab文件
    crontab -e 创建任务
    crontab -r 删除任务
    crontab的格式:
    基本格式 :
    *  *  *  *  *  command
    分 时 日 月 周 命令
    第1列表示分钟1~59每分钟用*或者 */1表示
    第2列表示小时1~23(0表示0点)
    第3列表示日期1~31
    第4列表示月份1~12
    第5列标识号星期0~6(0表示星期天)
    第6列要运行的命令
    *表示包含所有逗号分隔表示第几分(分时),第几(分,时)…各执行一次
    /分隔表示每隔多长时间执行一次
    (2)、crontab输出脚本设置
    Crontab中经常配置运行脚本输出为:>/dev/null 2>&1,来避免Crontab运行中有内容输出。shell命令的结果可以通过‘> ’的形式来定义输出。
    输出参数解释:
    /dev/null 代表空设备文件;

代表重定向到哪里,例如:echo “123” > /home/123.txt;
1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null";
2 表示stderr标准错误;
&表示等同于的意思,2>&1,表示2的输出重定向等同于1。
(3)注意事项
a、在使用Crontab的时候,要特别注意的是运行脚本中能够访问到的环境变量和当前测试环境中环境变量未必一致,所以建议在运行的脚本程序中自行设置环境变量。
b、使用cron服务前,用server crond status查看cron服务状态,如果没有启动则service crond start启动它。
四、 自动备份实现步骤

  1. 编写oracle备份脚本
     假设数据库的拥有者为oracle,数据库的用户为system,其口令为11091706,Oracle数据库的参数ORACLEHOME为/oracle,ORACLE_HOME为/oracle,ORACLEHOME/oracleORACLE_SID为easdb,则实现步骤如下:
      (1)、需要先在oracle数据库中创建一个目录,并给相应用于授予该目录的操作权限,才能实现备份,此操作完成一次即可。
    用sys用户登陆数据库创建数据库虚目录backdir(备份文件存放在如:/oracle/backup 目录下,注意该目录必须是实际已经存在的目录且该目录有足够的权限),并给虚目录进行赋权:
    sql>create directory backdir as ‘/oracle/backup’;
    sql>grant read,write on directory backdir to system;
    (2)、建立实现备份的shell(在/oracle中用vi命令建立文件backup.sh)
    #!/bin/sh

Oracle环境变量设置,以当前环境为准

ORACLE_BASE=/oracle;
export ORACLE_BASE;
ORACLE_HOME=ORACLEBASE/app/11203/dbhome1;exportORACLEHOME;PATH=ORACLE_BASE/app/11203/dbhome_1; export ORACLE_HOME; PATH=ORACLEBASE/app/11203/dbhome1;exportORACLEHOME;PATH=ORACLE_HOME/bin:KaTeX parse error: Expected 'EOF', got '#' at position 20: …; export PATH; #̲定义导出的备份文件名称以及日志…(date +%Y%m%d).dmp;
LOG_FILE=PH_KaTeX parse error: Expected 'EOF', got '#' at position 21: … +%Y%m%d).log; #̲导出特定账户下的数据,数据库用…easdb schemas=heng directory=backdir DUMPFILE=DMPFILElogfile=DMP_FILE logfile=DMPFILElogfile=LOG_FILE compression=all;
(3)使用chmod命令修改backup.sh的属性为可执行:
   chmod a+x backup.sh
  到此,具有备份功能的可执行文件(shell)backup.sh已经建成。其执行结果是将用户zt所拥有的ORACLE对象备份到/oracle目录下,该dump文件命名为“PH_”+备份日期。
2. 编写维护及删除过期备份脚本
(1)在远程主机上创建存放备份文件的目录/backup/
(2)查找到15天前的备份文件并删除,同时将今天的备份文件传送到远程主机上进行远程备份。在/oracle目录下建立backup_1.sh脚本如下:
#删除15天前的备份文件
find backup -mtime +15 -name “PH_*” -exec rm -f {} ;
#将今天的备份文件传送到远程主机的backup目录下
scp/backup/PH_$(date +%Y%m%d).dmp远程主机IP:/backup/
(3)对脚本赋权限:
chmoda+xbackup_1.sh
3. 测试脚本及检测备份日志
建立完backup.sh之后,切换为oracle用户,进入/oracle目录,在终端输入shbackup.sh执行该脚本进行测试。终端会输出备份信息,如下图,提示成功备份:
在这里插入图片描述

可以看到在directory目录下生成备份文件(dump文件)以及日志文件(log文件)。如下图所示:
在这里插入图片描述

说明脚本backup.sh执行成功。
4. 建立定时任务
(1)查看Crontab的使用权限
  使用超级用户(root)的身份登录,在/etc/下通过vi命令查看cron.deny文件,如果root被列在里面,将其删除即可。
 (2)建立Oracle的Crontab文件
  用oracle用户登录,通过使用命令Crontab–e,开始建立oracle用户的Crontab文件。其内容为:
 00 17 * * 1-5 “/oracle/backup.sh”> /tmp/expdp.log 2>&1
00 18 * * 1-5 “/oracle/backup_1.sh”> /tmp/expdp_1.log 2>&1
存盘退出后,在/var/spool/cron/Crontabs中新增了一个名为oracle文件,其作用是在周一至周五每天的17:00运行“/oracle/backup.sh”和18:00运行“/oracle/backup_1.sh”。
(3)确保cron服务开启
使用cron服务,用 service crond status 查看cron服务状态,如果没有启动则 service crond start启动它。
5. 定期检查备份日志及备份
(1)定期查看备份日志:/tmp/expdp.log和expdp_1.log,了解两个脚本的执行情况。
(2)定期查看数据库备份:如果脚本执行成功,在/oracle/backup/目录下,会有每天的备份文件和备份日志,例如PH_20161212.dmp和PH_20161212.log。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蚁库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值