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)

大家都在看

  • MySQL数据库-数据表(下)

    SELECT定义: SQL的SELECT语句可以实现对表的选择、投影及连接操作。即SELECT语句可以从一个或多个表中根据用户的需要从数据库中选出匹配的行和列,结果通常是生成一个临…

    数据库 2023年6月11日
    0101
  • 建造者设计模式

    可以看到这个学生类的属性是非常多的,所以构造方法不是一般的长,如果我们现在直接通过new的方式去创建: 可以看到,我们光是填参数就麻烦,我们还得一个一个对应着去填,一不小心可能就把…

    数据库 2023年6月14日
    099
  • html学习笔记

    学完html基本以后,现在对html知识做以下总结: 以上内容来源于bilibiliup狂神说 html html,即超文本标记语言(Hyper Text Markup Langu…

    数据库 2023年6月14日
    0114
  • 什么是字节

    字节(byte):是计算机中数据处理的基本单位,用大写的B表示 Original: https://www.cnblogs.com/Icy01/p/16311502.htmlAut…

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

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

    数据库 2023年6月11日
    093
  • MySQL中读页缓冲区buffer pool

    Buffer pool 我们都知道我们读取页面是需要将其从磁盘中读到内存中,然后等待CPU对数据进行处理。我们直到从磁盘中读取数据到内存的过程是十分慢的,所以我们读取的页面需要将其…

    数据库 2023年5月24日
    0129
  • asp.net(C#)接MYSQL8.0版本报错的处理方法

    由于新的操作系统没有安装mysql,项目中需要使用到,于是安装了最新版本的mysql8.0.28(我安装的是社区版),如果你的项目是老项目,使用的mysql插件是比较老的版本,安装…

    数据库 2023年5月24日
    0226
  • Consul 入门-初识

    背景 现状:单体架构逐渐被微服务架构所替代,原本两个功能模被拆分成了两个服务。原本两个模块块间的通信只需要 &#x51FD;&#x6570;&#x8C03;…

    数据库 2023年6月6日
    0124
  • windows环境下nacos集群启动报错-无法启动内嵌的tomcat

    解决办法:使用64位jdk切记不要使用32位。切记不要使用32位。切记不要使用32位。 Original: https://www.cnblogs.com/journeyhch/p…

    数据库 2023年6月11日
    0105
  • List集合分页处理的方法

    参考https://www.cnblogs.com/cmz-32000/p/12186362.html 解决了数组越界问题 参数页码大于总页码时返回null(可根据自己业务调整为返…

    数据库 2023年6月11日
    0107
  • leetcode 538. Convert BST to Greater Tree 把二叉搜索树转换为累加树(简单)

    一、题目大意 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node…

    数据库 2023年6月16日
    0105
  • 解决 IDEA 2021.2.3 新建maven项目只有两个archetype项目模板的问题

    最近把我的 IDEA 版本更新到 2021.2.3 了,发生了一个比较有意思的问题,做个小小的记录 思路分析 在新的 IDEA 中配置完Maven之后,想要创建Maven项目的时候…

    数据库 2023年6月11日
    0100
  • 2022-08-19 PreparedStatement

    PreparedStatement接口是 Statement的子接口,它表示一条预编译过的SQL语句 什么是SQL注入 SQL注入是利用某些系统没有对用户输入的数据进行充分的检查,…

    数据库 2023年6月14日
    0104
  • mysqldump 在 StoneDB 中的使用注意事项

    此场景是利用mysqldump从InnoDB导出,然后再导入StoneDB,在导入StoneDB前,需要对导出文件做如下修改。1)修改存储引擎 CREATE TABLE t_use…

    数据库 2023年5月24日
    0119
  • 1_Html

    一. 引言 1.1 HTML概念 网页, 是网站中的一个页面, 是构成网站的基本元素, 是承载各种网站应用的平台. 通俗的说, 网站就是由网页组成的, 通常我们看到的网页都是以ht…

    数据库 2023年6月11日
    0106
  • windows安装mysql8.0.29(ZIP解压安装版本)

    一. 下载mysql 8.0.29软件包 二. 解压,初始化安装 1,打开下载后文件所在目录,使用解压软件解压,打开文件夹!(如图,文件路径不要出现中文!) 2,创建my.ini文…

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