系统win11,oracle11g,因为业务需求,每周备份一次全量,每天一次增量。
有两种实现方式,一种是exp,一种是expdp数据泵。
目录
1:expdp数据泵的使用。
先说下expdp数据泵备份的优缺点,此方法只能全量备份,不能备份增量。
- 首先使用sqlplus登录数据库。如使用sys登录遇见问题可见下方连接。
sqlplus sys as sysdba
ORA-28009:connection as SYS should be as SYSDBA OR SYSOPER解决方法
- 创建directory。
- as后面的位置可根据自己情况更改。
create or replace directory dumpdir as 'D:\container';
- 给用户赋予使用该目录的权限
- on directory dumpdir中的dumpdir是你创建的directory名称,to后是赋予给那个用户。
grant read,write on directory dumpdir to SYSTEM;
- 可以查看下创建的目录位置
select * from dba_directories;
- 然后就可以开始备份数据库了。
- --expdp SYSTEM/hms@hms SYSTEM是你的用户名,hms是你创建的密码,@后面是你的实例名。
- --%date:~6,4%_%date:~0,2%_%date:~3,2%这个是给文件名称加个当前的日期时间,详细的可以百度。
- 如果遇见12154,或12560报错肯定是oracle监听服务有问题,这个需要百度自己一个一个去排查。
--全库备份
expdp SYSTEM/hms@hms directory=dumpdir dumpfile='date_full_%date:~6,4%_%date:~0,2%_%date:~3,2%.dmp' logfile='date_full_%date:~6,4%_%date:~0,2%_%date:~3,2%.log' full=y;
- 备份成功后,可以再你设置好的路径里查看是否生成了相对应的文件。一定要有DMP和log两个文件都有才算成功。
- 然后去数据库删点表,测试导入之前备份好的全量数据。
--恢复备份
impdp SYSTEM/hms directory=dumpdir dumpfile=DATE_FULL_2024_17_01.DMP logfile=date_full_2024_17_01.log
到此步就是使用数据泵全量备份的全过程。
2:exp进行全量、增量备份及恢复。
exp相比较expdp数据泵来说对数据库操作较小,无需对数据库做任何操作。
并且可以做全量、增量、累计备份。
首先将全量增量的路径创建好。可以根据自己项目情况设置。
D
-container
--full 全量备份存储文件夹
--increment 增量备份存储文件夹
- 全量备份
- full.bat
@echo off
D: 因为需要通过windows任务管理器定时执行所以要进入到指定盘和文件夹
cd D:\container\full
exp system/hms full=y file=date_full_%date:~6,4%_%date:~0,2%_%date:~3,2%.dmp log=date_full_%date:~6,4%_%date:~0,2%_%date:~3,2%.log
- increment.bat
- 增量备份,注意执行前需要先进行一次全量备份,才能执行增量备份。
- 其次是如果一个表中新增了数据,增量备份时会把整个表备份出来,所以并不是只备份新增的数据。
@echo off
D: 因为需要通过windows任务管理器定时执行所以要进入到指定盘和文件夹
cd container
cd increment
exp system/hms inctype=incremental file=date_increment_%date:~6,4%_%date:~0,2%_%date:~3,2%.dmp log=date_increment_%date:~6,4%_%date:~0,2%_%date:~3,2%.log
- 恢复备份语句
恢复全量备份
imp system/hms full=y file=full.dmp buffer=1048576
恢复增量备份
imp system/hms inctype=RESTORE full=y file=increment.dmp buffer=1048576
- delete.bat
- 因为我的项目需求还有一个自动删除七天前的备份,所以还要加个删除的bat文件。
调试了下,这个方式能在windowsserver服务器上执行
D:
cd D:\container\full
forfiles /p "D:\container\full" /s /m *.* /d -7 /c "cmd /c del @path"
D:
cd D:\container\increment
forfiles /p "D:\container\increment" /s /m *.* /d -7 /c "cmd /c del @path"
剩余就是通过windows计划任务里设置执行时间,这个百度一下有很多,不赘述了。
恢复备份需要确认下之前服务器的字符集编码,要确认下是否一直,如果不一致imp有可能会失败
查询当前数据库字符集编码
SELECT * FROM V$NLS_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET';
NLS_CHARACTERSET ZHS16GBK
- 修改字符集编码
# 关闭数据库
shutdown immediate;
# 以mount打开
startup mount;
# 设置session
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
#启动数据库
SQL>alter database open;
# 修改字符集
ALTER DATABASE CHARACTER SET ZHS16GBK;
# 关闭
shutdown immediate;
# 重启查看即可
startup;