Oracle 备份与恢复 (Docker部署版)

打印 上一主题 下一主题

主题 574|帖子 574|积分 1722

Oracle 备份与恢复 (Docker部署版)

一,宿主机设置定时备份脚本

1.检查Oracle容器是否正常运行
  1. docker ps
复制代码

2.进入容器,创建shell脚本
  1. #oracle11g 是容器名
  2. docker exec -it oracle11g bash
  3. #创建数据库dump的目录
  4. mkdir -p /home/oracle/dump/
  5. cd /home/oracle/dump/
  6. #编写脚本并插入如下内容
  7. vi dump.sh
复制代码
  1. #!/bin/bash
  2. whoami
  3. su - oracle <<!
  4. whoami
  5. cd /home/oracle/dump
  6. exp CQDX_JXGLXX/unicorn owner=CQDX_JXGLXX file=exp_xxx.dmp log=exp_xxx.log buffer=6000000
复制代码
3.在宿主机创建定时任务执行容器内脚本并拷贝至宿主机
  1. #脚本保存后赋予可执行权限
  2. chmod 777 dump.sh
复制代码
  1. #首先退出制宿主机,然后创建保存目录
  2. mkdir -p /home/oracle/
  3. cd /home/oracle/
  4. #创建shell脚本
  5. vi oracle.sh
  6. #添加如下内容
复制代码
备注:bash -c 后面是需要在oracle容器内部执行的指令。分别指,是进入到脚本所在的目录,执行脚本。
4.设置定时任务
  1. #!/bin/bash
  2. docker exec -u 0 oracle11g bash -c "cd /home/oracle/;./dump.sh"
  3. docker cp oracle11g:/home/oracle/dump /home/oracle/
复制代码
  1. #首先查看是否安装crontab
  2. service crond status
复制代码
crontab的其他命令
  1. #如果没有就执行安装命令
  2. yum install cronie
  3. #启动服务
  4. service crond start
复制代码
确定已经启动crontab后就创建定时任务
  1. #重启服务
  2. service crond restart
  3. #关闭服务
  4. service crond stop
  5. #重新加载服务
  6. service crond reload
  7. #查看状态
  8. service crond status
复制代码
备注:时间格式如下
  1. #执行后会出现一个可编辑的界面
  2. crontab -e
  3. #末尾添加定时任务指令,可以按需求调整执行时间
  4. 30 18 * * 5 bash /home/oracle/oracle.sh
  5. #查看是否设置成功
  6. 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...个小时要执行,其馀类推
  1. f1 f2 f3 f4 f5 program
复制代码
例:
周五每天下午 5:00执行脚本
  1. *    *    *    *    *
  2. -    -    -    -    -
  3. |    |    |    |    |
  4. |    |    |    |    +----- 星期中星期几 (0 - 6) (星期天 为0)
  5. |    |    |    +---------- 月份 (1 - 12)
  6. |    |    +--------------- 一个月中的第几天 (1 - 31)
  7. |    +-------------------- 小时 (0 - 23)
  8. +------------------------- 分钟 (0 - 59)
复制代码
二,拷贝到目标服务器

1.配置ssh免密
  1. 0 17 * * 5 bash /home/oracle/oracle.sh
复制代码
  1. #首先在安装Oracle的服务器上
  2. cd /root/.ssh/
  3. #如果没有该目录则执行
  4. ssh-keygen -t rsa
  5. #然后一直回车,重新进入该目录
  6. cd /root/.ssh/
  7. ll
复制代码
切换到目标服务器,同样如果没有.ssh目录就执行ssh-keygen -t rsa,然后进入.ssh目录
  1. #如果没有authorized_keys就新建一个
  2. touch authorized_keys
复制代码

然后复制此处查询出的密钥,继续回到安装Oracle的服务器
  1. #查询密钥
  2. cat id_rsa.pub
复制代码
回到目标服务器测试能否远程登录
  1. #编辑authorized_keys,把刚才的密钥复制进去,然后保存
  2. vi authorized_keys
复制代码

2.继续在目标服务器编写定时任务
  1. ssh root@<Oracle服务器Ip>
复制代码
  1. #新建备份文件夹
  2. mkdir -p /home/oracle/
  3. vi scp.sh
  4. #脚本内添加
复制代码
设置定时任务
  1. #!/bin/bash
  2. scp -r root@<Oracle宿主机IP>:/home/oracle/dump /home/test/oracle/
复制代码
三,数据恢复

1.首先安装Oracle(教程)

2.创建Oracle表空间和用户,导入表结构
  1. crontab -e
  2. #因为Oracle宿主机的备份任务是设置到星期五的晚上六点半,为防止数据库过大,所以scp的任务间隔时间要长一点
  3. 30 20 * * 5 bash /home/oracle/scp.sh
  4. #查看是否设置成功
  5. crontab -l
复制代码
  1. #进入安装oracle的服务器
  2. docker exec -it -u root <服务名> bsah
  3. #进入容器后切换oracle用户
  4. su - oracle
  5. #进入oracle
  6. sqlplus / as sysdba
复制代码

3.导入流程

首先把备份的数据库文件exp_xxx.dmp上传到新库服务器
  1. #创建表空间
  2. 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);
  3. #创建用户并分配表空间
  4. create user CQDX_JXGLXX identified by unicorn default tablespace YG_JXGLXX temporary tablespace TEMP;
  5. #给用户赋权
  6. grant connect,dba,exp_full_database,imp_full_database to CQDX_JXGLXX with admin option;
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

笑看天下无敌手

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表