Oracle逻辑备份脚本【生产环境适用】

news2024/9/25 7:10:20

1 说明

从Oracle10g开始,引入了数据泵(Data Pump),是一种高效的数据传输工具,它通过导出(Export)和导入(Import)的方式帮助用户迁移数据。

在Oracle的产品设计中,数据泵(Data Pump)主要用于数据迁移。尽管它可以用于恢复特定时间点的数据库状态,但它并不提供在指定时间段内的灵活恢复点选择功能。因此,从严格意义上讲,数据泵备份并不是一种全面的数据保护解决方案,而更多地被视为一种临时性的最低限度保护措施。为了达到更好的数据保护效果,建议将数据泵与RMAN(Recovery Manager)结合使用。

下面介绍生产中一个常用的逻辑备份脚本。

2 准备工作

准备工作主要有备份空间分配、脚本路径创建等。

2.1 备份空间分配

数据泵主要在Server端工作,导出的文件需要写入到Server端本地目录,需要在数据库中创建一个DIRECTORY,对应的是Server端的路径。

逻辑备份由于是生成在本地,在生产环境中,建议DIRECTORY创建在非数据路径下,最好使用一个独立的磁盘挂载,可以保障当磁盘发生故障时,数据文件和备份文件不会同时损坏。

最保险的方式是,将备份文件拷贝到网络盘中,相当于异机备份

2.1.1 创建备份目录

[root@oracle11g ~]# mkdir /expdp
[root@oracle11g ~]# chown oracle:oinstall /expdp/
[root@oracle11g ~]# ll / | grep expdp
drwxr-xr-x 2 oracle oinstall 4096 Sep 25 00:07 expdp

路径需要预留足够大的空间。

2.1.2 创建一个DIRECTORY

登录数据库创建:

SQL> create or replace directory expdp as '/expdp';

Directory created.

查看创建结果:

SQL> 
set lines 200
col DIRECTORY_PATH for a70
select * from dba_directories where directory_name = 'EXPDP';

OWNER                          DIRECTORY_NAME                 DIRECTORY_PATH
------------------------------ ------------------------------ ----------------------------------------------------------------------
SYS                            EXPDP                          /expdp

2.2 脚本路径创建

使用oracle用户创建:

[oracle@oracle11g ~]$ cd /home/oracle
[oracle@oracle11g ~]$ mkdir -p scripts/src
[oracle@oracle11g ~]$ mkdir -p scripts/log/expdp
[oracle@oracle11g ~]$ tree scripts
scripts
|-- log
|   `-- expdp
`-- src
3 directories, 0 files

src目录用于存放备份脚本,log目录用于存放备份日志。

3 脚本部署

3.1 说明

  • 此脚主要用于导出schemas参数指定的模式,本例中为LU9UP、SCOTT;
  • 备份文件和日志临时存放至 D M P B A S E / {DMP_BASE}/ DMPBASE/{DATE}目录;
  • 备份文件和备份过程日志最终打包存放至仓库EXPDP目录/expdp下;
  • 压缩后删除临时目录${DATE};
  • 最后清理七天前的压缩文件。

长期保存的日志路径位于/home/oracle/scripts/log/expdp/。

3.2 部署脚本

oracle用户进入/home/oracle/scripts/src目录,编辑脚本:

$ cd /home/oracle/scripts/src
$ vi expdp_schemas.sh

脚本内容如下,请根据实际情况修改参数值:

#!/bin/bash

#environment variables

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'

DBNAME=orcl
SCP_BASE=/home/oracle/scripts
LOG_BASE=/home/oracle/scripts/log
DMP_LOGDIR=${LOG_BASE}/expdp
DMP_BASE=/expdp

if [ -f $HOME/.bash_profile ];
then
    export ORAENV_ASK=NO
    . $HOME/.bash_profile
fi

# command

DATE=`date +'%Y%m%d%H'`

cd $DMP_BASE
RUN_LOG=${DATE}_${DBNAME}_SCHEMAS.log

expdp "'/ as sysdba'" \
 directory=EXPDP \
 dumpfile=${DATE}_SCHEMAS%U.dmp \
 schemas=LU9UP,SCOTT \
 parallel=4 \
 logfile=${RUN_LOG} \
 flashback_time=\"to_timestamp\(to_char\(sysdate, \'yyyy-mm-dd hh24:mi:ss\'\),\'yyyy-mm-dd hh24:mi:ss\'\)\"

# compress

CURENTDIR=${DMP_BASE}/${DATE}

if [ ! -d  ${CURENTDIR} ];
then
    mkdir ${CURENTDIR}
fi

cd ${DMP_BASE}
mv ${DATE}_SCHEMAS*.dmp ${DATE}
cp ${RUN_LOG} ${DMP_LOGDIR}
mv ${RUN_LOG} ${DATE}
tar -zcvf ${DATE}.tar.gz ${DATE}
rm -rf ${DATE}

# deleted 7 days ago files

find /expdp -type f -name "*.tar.gz" -mtime +7 -exec rm -f {} \;

保存并退出,赋执行权限:

$ chmod +x expdp_schemas.sh

4 脚本试运行

4.1 执行脚本

$ cd /home/oracle/scripts/src
$ ./expdp_schemas.sh

image.png

4.2 检查备份日志

$ tail -20 /home/oracle/scripts/log/expdp/2024092502_orcl_SCHEMAS.log

image.png

4.3 查看备份文件

$ ll /expdp
total 3116
-rw-r--r-- 1 oracle oinstall 3186906 Sep 25 02:47 2024092502.tar.gz

5 配置定时任务

添加如下任务:

[oracle@oracle11g ~]$ crontab -l
#DB Logical Backup
0 1 * * * sh /home/oracle/scripts/src/expdp_schemas.sh >/dev/null 2>&1

每天凌晨1点执行一次。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2162871.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IntraWeb开发Web网站时对数据库“增、删、改、查”的操作

delphi源代码:示例两列布局带顶部汉堡菜单,对数据库“增、删、改、查”的操作(兼容电脑与手机) 功能:交互式网页,两列布局,顶部汉堡菜单,点击汉堡图标关闭左侧栏,这里演示…

责任链模式优化 文章发布的接口(长度验证,敏感词验证,图片验证等环节) 代码,示例

需求:后端需要提供一个文章发布的接口,接口中需要先对文章内容进行如下校验,校验通过后才能发布 1. 文章长度不能超过1万个字符 2. 不能有敏感词 3. 文章中图片需要合规 责任链相当于一个链条一样,链条上有很多节点,节…

Flask学习之项目搭建

一、项目基本结构 1、 exts.py 存在的目的:在Python中,如果两个或更多模块(文件)相互导入对方,就会形成导入循环。例如,模块A导入了模块B,同时模块B又导入了模块A,这就会导致导入循环。 比如在这个项目中…

拦截器filter

使用拦截器对请求进行拦截,查看请求头是否携带token 可以看到,拦截器引入了web的依赖 前端的请求会经过网关(gateway),网关用的是netty服务器,会和web默认的tomcat服务器冲突,但是前端过来的请求…

SMTP/IMAP服务发在线邮件时要用到

SMTP/IMAP服务 require PHPMailerAutoload.php; // 或 require class.phpmailer.php;// 创建实例 $mail new PHPMailer();// 设定邮件服务器 $mail->isSMTP(); $mail->Host smtp.example.com; // 邮件服务器地址 $mail->SMTPAuth true; $mail->Username your…

Golang | Leetcode Golang题解之第434题字符串中的单词数

题目: 题解: func countSegments(s string) (ans int) {for i, ch : range s {if (i 0 || s[i-1] ) && ch ! {ans}}return }

Redis面试笔记

1.什么是Redis 简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持…

如何在算家云搭建DiffSynth-Kolors-Painter(图像生成)

一、DiffSynth-Kolors-Painter简介 DiffSynth 画板提供了 Prompt 分区控制技术,可以通过创建图层、调整不同的提示(Prompt)精细地控制画面的每一部分,影响画面的特定区域,从而实现对画面的精细操控,实现了…

LobeChat:使用服务端数据库部署 - Docker+NextAuth(github)+腾讯云

总流程 Docker部署 身份验证服务-NextAuth github S3存储服务 腾讯云COS 1. 安装Docker brew install docker --cask2. 创建pgvector容器(PostgresSQL) docker run --name [myPgvector] -p 5432:5432 -e POSTGRES_PASSWORD[pwd] -d -e POSTGRES_USER[username] pgvector/…

MySQL—存储过程详解

基本介绍 存储过程和函数是数据库中预先编译并存储的一组SQL语句集合。它们的主要目的是提高代码的复用性、减少数据传输、简化业务逻辑处理,并且一旦编译成功,可以永久有效。 存储过程和函数的好处 提高代码的复用性:存储过程和函数可以在…

【NPL】daydayup基本概念,词嵌入

NLP基础 基本概念 NLP,自然语言处理,目标是让计算机能够理解、解释、生成人类语言的数据。包括语言理解,语言生成,机器翻译,情感分享,语音识别,语音合成等 应用方向 自然语言理解 情感分析&a…

Python办公自动化案例:实现XMind文件转换成Excel文件

案例:实现XMind文件转换成Excel文件 将XMind文件转换为Excel文件的过程可以通过几个步骤来实现,主要涉及到读取XMind文件,解析其内容,然后创建一个Excel文件并将解析的内容写入。以下是一个简化的Python脚本,展示了如何使用xmindparser库来解析XMind文件,并使用pandas库…

搜索引擎简介

搜索引擎架构 整个搜索引擎分为三个系统 爬虫系统 索引系统 线上搜素服务 爬虫系统 爬虫分为两个阶段: 第一阶段:根据目标网站的列表页,爬对应的文档 URL 第二阶段:根据文档 URL,下载文档内容 触发器&#xff1…

多级目录SQL分层查询

需求&#xff1a;有多级目录&#xff0c;而目录的层级是不固定的&#xff0c;如下图所示&#xff1a; 数据结构&#xff1a; sql语句&#xff1a; <select id"getList" resultType"com.hikvision.idatafusion.dhidata.bean.vo.knowledgebase.KnowledgeBaseT…

基于SSM的“银发在线教育云平台”的设计与实现(源码+数据库+文档)

基于SSM的“银发在线教育云平台”的设计与实现&#xff08;源码数据库文档) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 首页页面图 健身养生详情页面 在线课堂界面 …

C++ | Leetcode C++题解之第434题字符串中的单词数

题目&#xff1a; 题解&#xff1a; class Solution { public:int countSegments(string s) {int segmentCount 0;for (int i 0; i < s.size(); i) {if ((i 0 || s[i - 1] ) && s[i] ! ) {segmentCount;}}return segmentCount;} };

一种单目标A*算法设计与实现

一种单目标A*算法设计与实现 作者&#xff1a;吴屏珊 最近在学习简单的单目标A*算法&#xff0c;其中在CSDN上阅读到的一篇博文给了我很大启发&#xff0c;于是在该博文的基础上&#xff0c;笔者记录了一点自己对于A*算法的体会和感悟。原文链接 目录 文章目录 一种单目标A*…

如何破解西门子博途V19里的密码设置

现在使用TIA Portal V19的工程师是越来越多了&#xff0c;V19有个显著的变化就是访问密码的设置&#xff0c;很多小伙伴忽然发现已经用了很多年的功能&#xff0c;在改动以后都不会设置了&#xff0c;那我们今天就带着您看一下如何才能在 V19 中正确的设置 S7-1500 访问密码。 …

论文笔记(四十六)RobotGPT: Robot Manipulation Learning From ChatGPT

xx RobotGPT: Robot Manipulation Learning From ChatGPT 文章概括摘要I. 介绍II. 相关工作III. 方法论A. ChatGPT 提示机器人操作B. 机器人学习 IV. 实验A. 衡量标准B. 实验设置C. 模拟实验D. 真实机器人实验E. AB测试 V. 结论 文章概括 引用&#xff1a; article{jin2024r…

【算法】模拟:(leetcode)6.Z 字形变换(medium)

目录 题目链接 题目介绍 解法 1、模拟&#xff1a; 2、找矩阵中的规律&#xff1a; 公差 第一行和最后一行 中间行 代码 题目链接 6. Z 字形变换 - 力扣&#xff08;LeetCode&#xff09; 题目介绍 解法 1、模拟&#xff1a; 采用模拟的思想&#xff0c;按照Z字形&…