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

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

1.检查Oracle容器是否正常运行

docker ps

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 <用户名>/<密码> owner=<要导出的表格所属的用户名> file=exp_xxx.dmp log=exp_xxx.log buffer=6000000
!
#脚本保存后赋予可执行权限
chmod 777 dump.sh

3.在宿主机创建定时任务执行容器内脚本并拷贝至宿主机

#首先退出制宿主机,然后创建保存目录
mkdir -p /home/oracle/
cd /home/oracle/
#创建shell脚本
vi oracle.sh
#添加如下内容
#!/bin/bash
docker exec -u 0 oracle11g bash -c "cd /home/oracle/;./dump.sh"
docker cp oracle11g:/home/oracle/dump /home/oracle/

备注:bash -c 后面是需要在oracle容器内部执行的指令。分别指,是进入到脚本所在的目录,执行脚本。

4.设置定时任务

#首先查看是否安装crontab
service crond status

#如果没有就执行安装命令
yum install cronie
#启动服务
service crond start

crontab的其他命令

#重启服务
service crond restart
#关闭服务
service crond stop
#重新加载服务
service crond reload
#查看状态
service crond status

确定已经启动crontab后就创建定时任务

#执行后会出现一个可编辑的界面
crontab -e
#末尾添加定时任务指令,可以按需求调整执行时间
30 18 * * 5 bash /home/oracle/oracle.sh
#查看是否设置成功
crontab -l

备注:时间格式如下

f1 f2 f3 f4 f5 program
  • 其中 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...个小时要执行,其馀类推
*    *    *    *    *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

例:

周五每天下午 5:00执行脚本

0 17 * * 5 bash /home/oracle/oracle.sh

二,拷贝到目标服务器

1.配置ssh免密

#首先在安装Oracle的服务器上
cd /root/.ssh/
#如果没有该目录则执行
ssh-keygen -t rsa
#然后一直回车,重新进入该目录
cd /root/.ssh/
ll

#如果没有authorized_keys就新建一个
touch authorized_keys

切换到目标服务器,同样如果没有.ssh目录就执行ssh-keygen -t rsa,然后进入.ssh目录

#查询密钥
cat id_rsa.pub

然后复制此处查询出的密钥,继续回到安装Oracle的服务器

#编辑authorized_keys,把刚才的密钥复制进去,然后保存
vi authorized_keys

回到目标服务器测试能否远程登录

ssh root@<Oracle服务器Ip>

2.继续在目标服务器编写定时任务

#新建备份文件夹
mkdir -p /home/oracle/
vi scp.sh
#脚本内添加
#!/bin/bash
scp -r root@<Oracle宿主机IP>:/home/oracle/dump /home/test/oracle/

设置定时任务

crontab -e
#因为Oracle宿主机的备份任务是设置到星期五的晚上六点半,为防止数据库过大,所以scp的任务间隔时间要长一点
30 20 * * 5 bash /home/oracle/scp.sh
#查看是否设置成功
crontab -l

三,数据恢复

1.首先安装Oracle(教程)

2.创建Oracle表空间和用户,导入表结构

#进入安装oracle的服务器
docker exec -it -u root <服务名> bash
#进入容器后切换oracle用户
su - oracle
#进入oracle
sqlplus / as sysdba

#创建表空间
create tablespace <表空间名> 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 <用户名> identified by <密码> default tablespace <表空间名> temporary tablespace TEMP;
#给用户赋权
grant connect,dba,exp_full_database,imp_full_database to <用户名> with admin option;

3.导入流程

首先把备份的数据库文件exp_xxx.dmp上传到新库服务器

#然后拷贝到容器内部
docker cp ./exp_xxx.dmp oracle_11g:/home #进入oracle容器
docker exec -it oracle_11g bash # 临时设置环境变量
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2 export ORACLE_SID=helowin export PATH=$ORACLE_HOME/bin:$PATH export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK" cd ~ #需要根据实际调整账号密码 以及fromuser touser
imp <登录数据库的用户名>/<密码> fromuser=<dmp文件导出表格的所属用户名> touser=<需要导入的用户名> file=/home/exp_xxx.dmp log=imp.log ignore=y rm -f /home/exp_xxx.dmp

Oracle 备份与恢复 (Docker部署版)的更多相关文章

  1. 一步步学会用docker部署应用(nodejs版)

    一步步学会用docker部署应用 docker是一种虚拟化技术,可以在内核层隔离资源.因此对于上层应用而言,采用docker技术可以达到类似于虚拟机的沙盒环境.这大大简化了应用部署,让运维人员无需陷入 ...

  2. Oracle Berkeley DB Java 版

    Oracle Berkeley DB Java 版是一个开源的.可嵌入的事务存储引擎,是完全用 Java 编写的.它充分利用 Java 环境来简化开发和部署.Oracle Berkeley DB Ja ...

  3. 搭建基于Docker社区版的Kubernetes本地集群

    Kubernetes的本地集群搭建是一件颇费苦心的活,网上有各种参考资源,由于版本和容器的不断发展,搭建的方式也是各不相同,这里基于Docker CE的18.09.0版本,在Mac OS.Win10下 ...

  4. 二、Docker部署应用

    一.有关Docker的安装请参考docker官网  Docker 提供了两个版本:社区版 (CE) 和企业版 (EE). Docker 社区版 (CE) 是开发人员和小型团队开始使用 Docker 并 ...

  5. 【Docker江湖】之docker部署与理解

    转载请注明出处:http://blog.csdn.net/gamer_gyt 博主微博:http://weibo.com/234654758 Github:https://github.com/thi ...

  6. Docker部署HDFS

    docker部署hadoop只是实验目的,每个服务都是通过手动部署,比如namenode, datanode, journalnode等.如果为了灵活的管理集群,而不使用官方封装好的自动化部署脚本,本 ...

  7. docker(部署常见应用):docker部署mysql

    上节回顾:docker(部署常见应用):docker部署nginx docker部署mysql:5.7.26 # 下载镜像 docker pull mysql: # 查看镜像 docker image ...

  8. docker部署xxl-job 通用反射执行器

    原因 最近在公司写一些job,公司使用的是spring boot提供的注解形式实现的. 这样在自测的时候很麻烦,而且测试提测的时候需要修改cron表达式->提交git->jenkins打包 ...

  9. Windows Docker 部署 Spring Boot 项目

    目录 Docker Configuration Config IDEA Plugin Create Spring Boot Project Containerize It Use Dockerfile ...

  10. 【docker部署】基于linux的centos操作系统部署安装docker容器

    一.docker介绍 容器是轻量级的,包含应用运行所需所有东西(代码.库.运行时环境.系统设置,以及依赖关系)的独立的包.每个容器都部署于它自己的 CPU.内存.块 I/O,以及网络资源上,所有这些都 ...

随机推荐

  1. 【Java EE】Day07 HTML

    一.WEB概念 1.软件架构 C/S:安卓.QQ.迅雷,开发两端 B/S 2.资源分类 静态资源:浏览器内置解析引擎 HTML:展示内容 CSS:页面布局 JavaScript:控制页面元素,产生动态 ...

  2. Backbone 网络-ResNet v2 详解

    目录 目录 目录 前言 摘要 1.介绍 2.深度残差网络的分析 3.On the Importance of Identity Skip Connection 4.On the Usage of Ac ...

  3. 一键部署MySQL8+keepalived双主热备高可用

    概述 本次的文章会格外的长,网上大多的配置流程已经不可使用,本篇文章可以称为保姆级教程,而且通过shell脚本大大减少了部署mysql主从,双主的工作量. 如上图,VIP地址为192.168.10.1 ...

  4. PowerDotNet平台化软件架构设计与实现系列(15):支付平台

    PowerDotNet个人项目中功能全面而强大的一个系统是支付平台.我对PowerDotNet的自信很大程度上来自于经过PowerDotNet重写后的支付.财务.结算.CRM等业务型公共服务系统的稳定 ...

  5. Python如何像awk一样分割字符串

    若你使用过 Shell 中的 awk 工具,会发现用它来分割字符串是非常方便的.特别是多个连续空格会被当做一个处理. [root@localhost ~]# cat demo.txt hello wo ...

  6. Java基础之常用类(String类)

    String 类 定义 String 类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现.我们可以将字符串看作是String, 但是严格意义上 ...

  7. 【转载】EXCEL VBA 同时选择多个工作表的方法

    如果要用VBA同时选择多个工作表,可以利用数组或设置"Select"方法的参数为"False"来扩展所选择的内容,如下面的一些代码:   1.用工作表名称:   ...

  8. BZOJ4919 大根堆(树形dp+线段树合并)

    用 multiset 启发式合并贪心维护 LIS 的做法就不多说了,网上题解一大堆,着重讲一下线段树合并维护 \(dp\). \(O(n^2)\) 的 \(dp\) 非常显然.离散化后,设 \(dp[ ...

  9. R语言|ggplot2| 绘制KEGG气泡图

    在 RStudio 中使用 BiocManager 安装包 install.packages("BiocManager") install.packages("ggplo ...

  10. ★k倍区间【第八届蓝桥杯省赛C++B组,第八届蓝桥杯省赛JAVAB组】

    k倍区间 给定一个长度为 \(N\) 的数列,\(A1,A2,-AN\),如果其中一段连续的子序列 \(Ai,Ai+1,-Aj\) 之和是 \(K\) 的倍数,我们就称这个区间 \([i,j]\)是 ...