用oracle命令备份数据库,自动导出dmp文件,备份数据库的用户及表数据。
配合widnows的批处理bat命令,实现每天定时备份,项目实际使用的备份方案供项目开发人员、运维人员参考使用。
一、环境
windows系统,oracle12c
二、操作步骤
1、在运行里面打开cmd命令窗口
输入命令:sqlplus system/123456@orcl
(以管理员身份登录输入此命令:sqlplus system/123456@orcl as sysdba)
注:
其中system是登录数据库的用户名
123456是用户名的密码
orcl是数据库实例名称
2、备份数据库
(1)创建oracle的备份目录(登录oracle服务后,在命令行中输入如下命令:)
sql>create directory dpdata2 as 'D:/dbback/dmp';
这仅仅是在oracle服务里新建目录,并没有真正创建目录。
可以通过这句命令查看到这个目录:
(结果:CMD命令行提示"目录已创建")
sql>select * from dba_directories;
(结果:CMD命令行中显示已经新建的目录名称)
(2)赋于要导出数据表的所属用户权限:
sql>grant read,write on directory dpdata2 to 实际的用户名;
示例:sql>grant read,write on directory dpdata2 to myuser;
(结果:CMD命令行中显示“授权成功”)
(3)切换回命令行窗口(不要在上面的SQL命令行中执行),输入命令:
expdp system/123456@orcl directory=dpdata2 dumpfile=自定义名称.dmp logfile=自定义名称.log schemas=实际的用户名
示例:expdp system/123456@orcl directory=dpdata2 dumpfile=xxproject.dmp logfile=xxproject.log schemas=myuser
(此步只是用命令来试一下是否可以成功备份,实际需要做成bat命令定期执行)
(结果:报错ORA-39002:操作无效)
原因是D:/dbback/dmp这个目录不存在,create directory之后并不会自动生成文件夹,要自己在服务器硬盘上手动新建这个文件夹。
新建文件夹后再试一下,备份成功!
3、还原数据库
当你的数据库出现问题了,或者需要还原数据库的时候,就可以利用上面已经备份的数据dmp文件进行还原。
(提醒:为了防止服务器中毒或者出现启动不了的问题,建议将备份的dmp文件拷贝到其它的地方存储。)
(1)使用命令行登录数据库(操作方式同上)
sqlplus system/123456@orcl
(2)删除目标数据库用户
drop user 实际用户名 cascade;
(3)再次创建用户
可以用命令创建,也可以在plsql里创建,这里在plsql创建。
用system登录数据库,然后右键users--新建
然后填写你的账号名称,必须和备份时的用户一致,并赋于相应的权限
最后点击应用按钮,完成用户创建。
(4)返回DOS命令窗口,不再是sql>命令行
输入导入命令:impdp system/数据库管理员密码@orcl directory=目录名 dumpfile=实际备份的文件名.dmp logfile=实际项目名.log schemas=实际用户名
示例:impdp system/123456@orcl directory=dpdata1 dumpfile=xxproject.dmp logfile=xxproject.log schemas=myuser
提示:导入成功!
4、将备份命令做成windows定时任务
(1)新建bat文件,里面是备份数据的命令脚本
echo 开始备份数据库
set var=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
expdp system/123456@orcl directory=dpdata2 dumpfile=xxproject_%var%.dmp logfile=xxporject_%var%.log schemas=myuser
--system为用户名,123456为密码,orcl为数据库名,xxporject为你实际的项目名,myuser为你实际的oracle用户
echo 删除10天前的备份记录
forfiles /p "D:\dbback\dmp" /s /m *.dmp /d -10 /c "cmd /c del @path"
forfiles /p "D:\dbback\dmp" /s /m *.log /d -10 /c "cmd /c del @path"
exit
(2)新建bat命令,调用上面的bat备份数据脚本
@ECHO OFF
schtasks /create /tn 数据库定时备份 /tr "D:\dbback\dmp\oracle_backup_run.bat" /sc daily /st 01:00:00 /ru "system"
PAUSE
EXIT
每天凌晨1点钟执行。(可以设置成你希望的执行时间。)
(3)双击call_orcal_backup.bat,就会在windows添加一个定时任务,每晚1点0分就会自动执行一次oracle_backup_run.bat,进行数据库的自动备份。
5、实际遇到的问题
(1)expdp 错误: ORA-39064: 无法写入日志文件
ORA-29285: 文件写入错误
原因:字符编码问题
解决方案:
运行 --> regedit --> 查找 键值 NLS_LANG 将字符集 SIMPLIFIED CHINESE_CHINA.ZHS16GBK 修改为 AMERICAN_AMERICA.AL32UTF8
注册表路径:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\NLS_LANG