oracle12c定期备份数据库

本文详细介绍了如何在Windows环境下使用Oracle12c命令行工具进行数据库的定期备份和恢复操作,包括创建备份目录、赋权、导出与导入数据,以及通过批处理脚本设置定时任务。同时,文章提到了字符编码问题及其解决办法。

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

用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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

山月神话

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

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

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

打赏作者

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

抵扣说明:

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

余额充值