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

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

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

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

docker ps

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

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 </ 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

Oracle 备份与恢复 (Docker部署版)
#如果没有就执行安装命令
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…个小时要执行,其馀类推
*    *    *    *    *
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- &#x661F;&#x671F;&#x4E2D;&#x661F;&#x671F;&#x51E0; (0 - 6) (&#x661F;&#x671F;&#x5929; &#x4E3A;0)
|    |    |    +---------- &#x6708;&#x4EFD; (1 - 12)
|    |    +--------------- &#x4E00;&#x4E2A;&#x6708;&#x4E2D;&#x7684;&#x7B2C;&#x51E0;&#x5929; (1 - 31)
|    +-------------------- &#x5C0F;&#x65F6; (0 - 23)
+------------------------- &#x5206;&#x949F; (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

Oracle 备份与恢复 (Docker部署版)
#如果没有authorized_keys就新建一个
touch authorized_keys

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

#查询密钥
cat id_rsa.pub

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

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

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

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

ssh root@

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

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

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

设置定时任务

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

三,数据恢复

1.首先安装Oracle (教程)

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

#&#x8FDB;&#x5165;&#x5B89;&#x88C5;oracle&#x7684;&#x670D;&#x52A1;&#x5668;
docker exec -it -u root <服务名> bash
#&#x8FDB;&#x5165;&#x5BB9;&#x5668;&#x540E;&#x5207;&#x6362;oracle&#x7528;&#x6237;
su - oracle
#&#x8FDB;&#x5165;oracle
sqlplus / as sysdba
</服务名>

Oracle 备份与恢复 (Docker部署版)
#&#x521B;&#x5EFA;&#x8868;&#x7A7A;&#x95F4;
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);
#&#x521B;&#x5EFA;&#x7528;&#x6237;&#x5E76;&#x5206;&#x914D;&#x8868;&#x7A7A;&#x95F4;
create user <用户名> identified by <密码> default tablespace <表空间名> temporary tablespace TEMP;
#&#x7ED9;&#x7528;&#x6237;&#x8D4B;&#x6743;
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= touser= file=/home/exp_xxx.dmp log=imp.log ignore=y

rm -f /home/exp_xxx.dmp

Original: https://www.cnblogs.com/blogof-fusu/p/16596306.html
Author: 山有扶苏QWQ
Title: Oracle 备份与恢复 (Docker部署版)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/598810/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java面向对象(下)作业

    首先我把题目先列到这里,可以仔细看一下题。 (1)设计一个名为Geometric的几何图形的抽象类,该类包括: ①两个名为color、filled属性分别表示图形颜色和是否填充。 …

    数据库 2023年6月11日
    0138
  • 工具 | 常用 PostgreSQL 预防数据丢失方案

    作者:张连壮 PostgreSQL 研发负责人从事多年 PostgreSQL 数据库内核开发,对 Citus 有非常深入的研究。 PostgreSQL 本身不具备数据闪回和数据误删…

    数据库 2023年5月24日
    081
  • 解决执行npm run dev 后报错 Mix: not found的问题

    开发环境:homestead 宿主机环境:windows10 在homestead虚拟机内运行npm run dev时出现错误信息:mix: not found (此时打开lara…

    数据库 2023年6月14日
    087
  • Java学习-第一部分-第二阶段-项目实战:坦克大战【1】

    坦克大战【1】 笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html) 坦克大战游戏 为什么写这个项目✔好玩✔涉及到ja…

    数据库 2023年6月11日
    078
  • 多版本并发控制 MVCC

    介绍多版本并发控制 多版本并发控制技术(Multiversion Concurrency Control,MVCC) 技术是为了解决问题而生的,通过 MVCC 我们可以解决以下几个…

    数据库 2023年6月11日
    0135
  • linux下centos7.2下安装redis 4.0.6

    一、安装 redis 第一步:下载 redis 安装包 wget http://download.redis.io/releases/redis-4.0.6.tar.gz [roo…

    数据库 2023年6月14日
    074
  • SQL语句的整合

    基础语法 https://blog.csdn.net/m0_37989980/article/details/103413942 CRUD 提供给数据库管理员的基本操作,CRUD(…

    数据库 2023年5月24日
    097
  • 并发事务问题与事务隔离级别

    1.并发事务问题 1)脏读:一个事物读到另一个事务还没有提交的数据。 2)不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。 3)幻读:一个事务按照条…

    数据库 2023年5月24日
    086
  • redis简述

    redis是什么? Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、…

    数据库 2023年6月14日
    067
  • Office直通车

    数据库篇 数据库架构 为什么要使用索引? 对于数据量较大的表,建立索引避免全表扫描,能够提高查询速度,提高效率 什么样的信息能成为索引? 主键、唯一键、普通键 索引数据结构? 主流…

    数据库 2023年6月6日
    0281
  • Spring中常见的注解

    1.组件注解 @Controller @Service @Repository @Component —标注一个类为Spring容器的Bean @Configratio…

    数据库 2023年6月11日
    081
  • NO.4 计算机组成原理-笔记

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月14日
    091
  • Mysql终端Terminal操作

    datebase管理 1.创建数据库-create 语法:create database 数据库名 character set 编码 注意:默认会存在四个数据库,其数据库中存储的是…

    数据库 2023年6月14日
    065
  • Javaweb-Ajax详解

    一、概念 Ajax = Asynchronous JavaScript and XML(异步的JavaScript和XML) Ajax不是一种新的编程语言,而是一种用于创建更好更快…

    数据库 2023年6月16日
    079
  • B树-删除

    B树系列文章 1. B树-介绍 2. B树-查找 3. B树-插入 4. B树-删除 删除 根据B树的以下两个特性 每一个非叶子结点(除根结点)最少有 ⌈ m/2⌉ 个子结点 有k…

    数据库 2023年6月14日
    071
  • 从生命周期的角度看线程和进程之间的异同

    概述 进程与线程想必都不陌生,两者有诸多相同点,甚至可以这样说,线程就是”轻量级的进程”。而且两者基本的五个状态也几乎一样,但进程和线程在状态切换时的触发条…

    数据库 2023年6月11日
    080
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球