Oracle 备份与恢复 (Docker部署版)
一,宿主机设置定时备份脚本
1.检查Oracle容器是否正常运行
2.进入容器,创建shell脚本
- #oracle11g 是容器名
- docker exec -it oracle11g bash
- #创建数据库dump的目录
- mkdir -p /home/oracle/dump/
- cd /home/oracle/dump/
- #编写脚本并插入如下内容
- vi dump.sh
复制代码- #!/bin/bash
- whoami
- su - oracle <<!
- whoami
- cd /home/oracle/dump
- exp CQDX_JXGLXX/unicorn owner=CQDX_JXGLXX file=exp_xxx.dmp log=exp_xxx.log buffer=6000000
复制代码 3.在宿主机创建定时任务执行容器内脚本并拷贝至宿主机
- #脚本保存后赋予可执行权限
- chmod 777 dump.sh
复制代码- #首先退出制宿主机,然后创建保存目录
- mkdir -p /home/oracle/
- cd /home/oracle/
- #创建shell脚本
- vi oracle.sh
- #添加如下内容
复制代码 备注:bash -c 后面是需要在oracle容器内部执行的指令。分别指,是进入到脚本所在的目录,执行脚本。
4.设置定时任务
- #!/bin/bash
- docker exec -u 0 oracle11g bash -c "cd /home/oracle/;./dump.sh"
- docker cp oracle11g:/home/oracle/dump /home/oracle/
复制代码- #首先查看是否安装crontab
- service crond status
复制代码 crontab的其他命令- #如果没有就执行安装命令
- yum install cronie
- #启动服务
- service crond start
复制代码 确定已经启动crontab后就创建定时任务- #重启服务
- service crond restart
- #关闭服务
- service crond stop
- #重新加载服务
- service crond reload
- #查看状态
- service crond status
复制代码 备注:时间格式如下- #执行后会出现一个可编辑的界面
- crontab -e
- #末尾添加定时任务指令,可以按需求调整执行时间
- 30 18 * * 5 bash /home/oracle/oracle.sh
- #查看是否设置成功
- crontab -l
复制代码
- 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
- 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
- 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
- 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
- 当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其馀类推
例:
周五每天下午 5:00执行脚本- * * * * *
- - - - - -
- | | | | |
- | | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
- | | | +---------- 月份 (1 - 12)
- | | +--------------- 一个月中的第几天 (1 - 31)
- | +-------------------- 小时 (0 - 23)
- +------------------------- 分钟 (0 - 59)
复制代码 二,拷贝到目标服务器
1.配置ssh免密
- 0 17 * * 5 bash /home/oracle/oracle.sh
复制代码- #首先在安装Oracle的服务器上
- cd /root/.ssh/
- #如果没有该目录则执行
- ssh-keygen -t rsa
- #然后一直回车,重新进入该目录
- cd /root/.ssh/
- ll
复制代码 切换到目标服务器,同样如果没有.ssh目录就执行ssh-keygen -t rsa,然后进入.ssh目录- #如果没有authorized_keys就新建一个
- touch authorized_keys
复制代码
然后复制此处查询出的密钥,继续回到安装Oracle的服务器回到目标服务器测试能否远程登录- #编辑authorized_keys,把刚才的密钥复制进去,然后保存
- vi authorized_keys
复制代码
2.继续在目标服务器编写定时任务
- #新建备份文件夹
- mkdir -p /home/oracle/
- vi scp.sh
- #脚本内添加
复制代码 设置定时任务- #!/bin/bash
- scp -r root@<Oracle宿主机IP>:/home/oracle/dump /home/test/oracle/
复制代码 三,数据恢复
1.首先安装Oracle(教程)
2.创建Oracle表空间和用户,导入表结构
- crontab -e
- #因为Oracle宿主机的备份任务是设置到星期五的晚上六点半,为防止数据库过大,所以scp的任务间隔时间要长一点
- 30 20 * * 5 bash /home/oracle/scp.sh
- #查看是否设置成功
- crontab -l
复制代码- #进入安装oracle的服务器
- docker exec -it -u root <服务名> bsah
- #进入容器后切换oracle用户
- su - oracle
- #进入oracle
- sqlplus / as sysdba
复制代码
3.导入流程
首先把备份的数据库文件exp_xxx.dmp上传到新库服务器- #创建表空间
- create tablespace YG_JXGLXX datafile '/home/oracle/app/oracle/oradata/helowin/tets02.dbf' size 1G reuse autoextend on next 50M maxsize unlimited default storage(initial 128k next 128k minextents 2 maxextents unlimited);
- #创建用户并分配表空间
- create user CQDX_JXGLXX identified by unicorn default tablespace YG_JXGLXX temporary tablespace TEMP;
- #给用户赋权
- grant connect,dba,exp_full_database,imp_full_database to CQDX_JXGLXX with admin option;
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |