使用expdp完成自动备份数据库案例以及遇到的问题

本文详细对比了Oracle数据库中exp与expdp、imp与impdp命令的区别,包括使用场景、权限要求及常见问题解决。并通过实例展示了如何在Windows环境下使用expdp进行数据库备份,包括脚本编写、定时任务配置及常见错误处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

zero、exp与expdp命令区别说明

1、exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。
2、expdp和impdp是服务端的工具程序,他们只能在oracle服务端使用,不能在客户端使用。
3、imp只适用于exp导出的文件,不适用于expdp导出文件;impdp只适用于expdp导出的文件,而不适用于exp导出文件。
4、对于10g以上的服务器,使用exp通常不能导出0行数据的空表,而此时必须使用expdp导出。

one、准备工作

1、创建逻辑目录,该命令不会在操作系统创建真正的目录(请先创建真正的目录),最好以system等管理员创建逻辑目录。

SQL>conn system/manger@orcl as sysdba
SQL>create directory dump_dir as 'E:\temp';

1.1.修改已经创建的逻辑目录

create or replace directory dumpdir as '/home/dumpfiles'; --修改

2、查看管理员目录(同时查看操作系统是否存在,因为oracle并不关心该目录是否存在,假如不存在,则出错)

SQL>select * from dba_directories;

在这里插入图片描述
2.1 验证实际目录是否存在
在这里插入图片描述
3、给infa用户赋予在指定目录的操作权限,最好以system等管理员赋予。

SQL>grant read,write on directory dumpdir to infa;

two、编写数据库备份的bat脚本,并自动删除7天前的备份文件。

2.1编写说明:只是一个简单的直接备份infa用户下面的数据,并删除七天前的备份文件,在编写的过程中最好每一步都单独测试成功,再整个成一个脚本文件,便于将问题细分化。(大事化小小事化了)

@echo off   
echo ================================================   
echo  Windows环境下Oracle数据库的自动备份脚本  
echo  1. 使用当前日期命名备份文件。  
echo  2. 自动删除7天前的备份。  
echo ================================================ 
::以“YYYYMMDD”格式取出当前时间。  
set BACKUPDATE=%date:~0,4%%date:~5,2%%date:~8,2%
::设置导出的路径
set DATADIR=E:\temp
del /F /S /Q %DATADIR%\%BACKUPDATE%.dmp
expdp  infa/密码@ORCL  directory=dumpdir dumpfile=%BACKUPDATE%.dmp schemas=infa
echo 备份已完成

echo :开始删除7天前的备份,如果没有七天前的文件则删除失败(没有找到文件)。 
::开始删除7天前的备份 
forfiles /p %DATADIR% /s /m *.DMP /d -7 /c "cmd /c del @path"
pause # 执行完之后不自动退出
# exit  # 自动退出

2.2 脚本说明,部分已经有备注,先说一下删除前七天的备份,后面有expdp命令使用汇总

FORFILES [/P pathname] [/M searchmask] [/S]  [/C command] [/D [+ | -] {yyyy-MM-dd | dd}]
/p 指的是要删除的备份文件路径
/m 指的是要匹配的字符,通配符为*号,后缀名可以根据实际情况修改。
-d 指的是日期,“-d -7”指的是从但前日期当前日期往前减7天。
/c 指的是执行命令
@path 返回文件完整路径

2.3 测试脚本是否有效,将上面内容修改成自己所需信息,保存成bat文件之后双击即可。为了测试删除备份文件我将 forfiles /p %DATADIR% /s /m *.DMP /d -7 /c "cmd /c del @path" 里面的7改为0,删除刚刚备份的文件,执行效果图如下。
在这里插入图片描述
删除文件,没有报错误,表示已经删除。
在这里插入图片描述
生成的文件,如下所示。这个日志的文件名可以指定通过logfile 例如 logfile=infaexp.log
在这里插入图片描述

three、配置在windows每天定时执行这个bat脚本

3.1 Windows键+R 调出此窗口,输入compmgmt.msc (调用的是计算机管理)
cmd
3.2.点击下面的框,创建一个基本任务
创建任务
3.3 开始配置任务,一路配置之后【下一步
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.4 定时任务已经完成,双击可以修改任务信息。
在这里插入图片描述

four 、用expdp导出数据的命令汇总

1)导出用户

expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp directory=dump_dir;

2)导出表

expdp scott/tiger@orcl tables=emp,dept dumpfile=expdp.dmp directory=dump_dir;

3)按查询条件导

expdp scott/tiger@orcl directory=dump_dir dumpfile=expdp.dmp tables=empquery='where deptno=20';

4)按表空间导

expdp system/manager@orcl directory=dump_dir dumpfile=tablespace.dmptablespaces=temp,example;

5)导整个数据库

expdp system/manager@orcl directory=dump_dir dumpfile=full.dmp full=y;

five 、用impdp导入数据的命令汇总

1)导入用户(从用户scott导入到用户scott)

impdp scott/tiger@orcl directory=dump_dir dumpfile=expdp.dmp schemas=scott;

2)导入表(从scott用户中把表dept和emp导入到system用户中)

impdp system/manager@orcl directory=dump_dir dumpfile=expdp.dmptables=scott.dept,scott.emp remap_schema=scott:system;

3)导入表空间

impdp system/manager@orcl directory=dump_dir dumpfile=tablespace.dmp tablespaces=example;

4)导入数据库

impdb system/manager@orcl directory=dump_dir dumpfile=full.dmp full=y;

5)追加数据

impdp system/manager@orcl directory=dump_dir dumpfile=expdp.dmp schemas=systemtable_exists_action

six 、问题汇总

问题1
1.0.cmd窗口里面expdp命令不能使用报:“expdp不是内部或外部指令,也不是可运行的程序”
expdp命令不能使用
1.1 原因:没有配置环境变量。
1.2 解决方案
将Oracle安装目录中的Bin目录设置到path中,或者直接到Oracle的bin目录下执行expdp命令。配置环境变量如下图。
配置环境变量
问题2
2.0 ora-01031:insufficient privileges (权限不足)
在这里插入图片描述
2.1 原因:在Oracle数据库中执行创建逻辑目录命令 create directory dumpdir as 'E:\temp'; ,执行该命令的用户没有相应的权限。
2.2 解决方案
首先查看创建路及目录需要什么命令,在有dba权限的用户下面。

select distinct privilege from dba_sys_privs where privilege like '%DIRECTORY%';--在dba用户下面,查看需要的权限

查看所需权限
2.3.知道需要的权限之后,就赋予该用户权限,infa 表示该用户
grant CREATE ANY DIRECTORY to infa; --赋权

2.4.测试,尝试在普通用户(infa)下创建DIRECTORY数据库对象,并在dba用户下面查看是否已存在。如果出现下面红框框里面的内容,表示此时在infa用户下创建DIRECTORY对象成功,问题已解决!

create directory dumpdir as 'E:\temp';--创建
select * from dba_directories; --查找全部

在这里插入图片描述
问题3
3.0 ORA-39002、ORA-39070 操作无效
在这里插入图片描述
3.1 描述
在使用expdp命令将infa用户下面的数据备份expdp infa/密码@ORCL directory=dumpdir dumpfile=infa.dmp schemas=infa,因为create directory dumpdir as 'E:\temp'这条语句创建的只是逻辑目录,‘E:\temp’目录在实际中不存在。
3.2 解决方案
在E盘创建temp目录。ctrl+shift+n 快捷在Wind下创建文件夹。
在这里插入图片描述
创建之后再次执行上面命令。出现下面内容表示已经成功。
在这里插入图片描述
在这里插入图片描述
扩展,如果infa用户(备份的用户)没有对逻辑目录中读写的操作,执行下面命令

grant read,write on directory DUMPDIR to infa;--赋权文件

seven、参考

https://blog.youkuaiyun.com/liu050604/article/details/82590504
https://blog.youkuaiyun.com/dbdeep/article/details/79146320
https://blog.youkuaiyun.com/gty931008/article/details/86160808

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

脸ル粉嘟嘟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值