Linux下通过脚本自动备份Oracle数据库并删除指定天数前的备份

以下是详细讲解“Linux下通过脚本自动备份Oracle数据库并删除指定天数前的备份”的完整攻略:

步骤一:安装必要软件

为了自动备份Oracle数据库,我们需要安装以下两个软件:
- Oracle Instant Client: 可以在不安装完整版Oracle数据库的情况下,连接Oracle数据库服务;
- Oracle SQLcl: 是一款命令行工具,可以在Linux终端上与Oracle数据库进行交互。

我们可以使用以下命令进行安装:

# 安装 Oracle Instant Client
sudo yum install oracle-instantclient18.5-basic.x86_64 oracle-instantclient18.5-sqlplus.x86_64

# 安装 Oracle SQLcl
sudo yum -y install oracle-sqlcl

步骤二:编写备份脚本

备份脚本的主要作用是连接Oracle数据库,执行备份命令,并删除过期备份。下面是一个示例脚本:

#!/bin/bash

# 设置环境变量
export ORACLE_HOME=/usr/lib/oracle/18.5/client64
export PATH=$PATH:$ORACLE_HOME/bin

# 备份目录
BACKUP_DIR=/tmp/backup

# MySQL登陆信息
USER=myuser
PASSWORD=mypassword
HOST=192.168.1.10
PORT=1521
SID=orcl

# 备份文件命名规则
DATE=`date +%Y%m%d%H%M%S`
BACKUP_FILE=${BACKUP_DIR}/${SID}_${DATE}.dmp

# 备份数据库
sqlcl -S ${USER}/${PASSWORD}@${HOST}:${PORT}/${SID} @backup.sql ${BACKUP_FILE}

# 删除过期备份
find ${BACKUP_DIR} -type f -name "${SID}*.dmp" -mtime +7 -delete

其中,backup.sql 文件中存放了备份的具体命令,示例内容如下:

-- backup.sql
DECLARE
  jobno NUMBER;
BEGIN
  dbms_scheduler.create_job(job_name => 'backup_job',
                            job_type => 'EXPORT',
                            job_action => 'expdp scott/tiger@orcl directory=DATA_PUMP_DIR dumpfile=${BACKUP_FILE} logfile=${BACKUP_DIR}/backup.log',
                            repeat_interval => 'FREQ=DAILY;BYHOUR=1;BYMINUTE=0;',
                            enabled => FALSE);
  dbms_scheduler.set_attribute(name => 'backup_job',
                               attribute => 'logging_level',
                               value => DBMS_SCHEDULER.LOGGING_OFF);
  dbms_scheduler.enable(name => 'backup_job');
  SELECT job_name, state FROM user_scheduler_jobs WHERE job_name='backup_job';
END;

步骤三:设置计划任务

为了自动执行备份脚本,我们需要设置计划任务。可以使用以下命令进行设置:

crontab -e

在打开的文件中添加以下内容(每天凌晨 2 点自动执行):

0 2 * * * /path/to/backup.sh

示例说明

示例一

假设我们需要备份名为 orcl 的Oracle数据库,备份文件保存在 /data/backup 目录中。我们可以按照以下步骤操作:

  1. 在Oracle数据库中创建一个用户 myuser,并授予其备份权限:
CREATE USER myuser IDENTIFIED BY mypassword;

GRANT CREATE SESSION TO myuser;
GRANT DBA TO myuser;
  1. 创建备份脚本 backup.sh
#!/bin/bash

# 设置环境变量
export ORACLE_HOME=/usr/lib/oracle/18.5/client64
export PATH=$PATH:$ORACLE_HOME/bin

# 备份目录
BACKUP_DIR=/data/backup

# MySQL登陆信息
USER=myuser
PASSWORD=mypassword
HOST=192.168.1.10
PORT=1521
SID=orcl

# 备份文件命名规则
DATE=`date +%Y%m%d%H%M%S`
BACKUP_FILE=${BACKUP_DIR}/${SID}_${DATE}.dmp

# 备份数据库
sqlcl -S ${USER}/${PASSWORD}@${HOST}:${PORT}/${SID} @backup.sql ${BACKUP_FILE}

# 删除过期备份
find ${BACKUP_DIR} -type f -name "${SID}*.dmp" -mtime +7 -delete

其中,BACKUP_DIR 变量指定了备份文件保存的路径,USERPASSWORDHOSTPORTSID 分别指定了连接Oracle数据库的参数。

  1. 创建备份命令脚本 backup.sql
-- backup.sql
DECLARE
  jobno NUMBER;
BEGIN
  dbms_scheduler.create_job(job_name => 'backup_job',
                            job_type => 'EXPORT',
                            job_action => 'expdp ${USER}/${PASSWORD}@${SID} directory=DATA_PUMP_DIR dumpfile=${BACKUP_FILE} logfile=${BACKUP_DIR}/backup.log',
                            repeat_interval => 'FREQ=DAILY;BYHOUR=1;BYMINUTE=0;',
                            enabled => FALSE);
  dbms_scheduler.set_attribute(name => 'backup_job',
                               attribute => 'logging_level',
                               value => DBMS_SCHEDULER.LOGGING_OFF);
  dbms_scheduler.enable(name => 'backup_job');
  SELECT job_name, state FROM user_scheduler_jobs WHERE job_name='backup_job';
END;

其中,job_action 参数指定了备份命令,repeat_interval 参数指定了任务运行的时间间隔。

  1. 设置计划任务,每天凌晨 2 点自动执行:
crontab -e

在打开的文件中添加以下内容:

0 2 * * * /path/to/backup.sh

示例二

假设我们需要备份多个Oracle数据库,并将备份文件分类保存。我们可以按照以下步骤操作:

  1. 在Oracle数据库中分别创建用户,并授予备份权限:
CREATE USER user1 IDENTIFIED BY password1;

GRANT CREATE SESSION TO user1;
GRANT DBA TO user1;

CREATE USER user2 IDENTIFIED BY password2;

GRANT CREATE SESSION TO user2;
GRANT DBA TO user2;
  1. 创建备份脚本 backup.sh
#!/bin/bash

# 设置环境变量
export ORACLE_HOME=/usr/lib/oracle/18.5/client64
export PATH=$PATH:$ORACLE_HOME/bin

# 备份目录
BACKUP_DIR=/data/backup

# 备份文件命名规则
DATE=`date +%Y-%m-%d`
FILE_PREFIX=${BACKUP_DIR}/${DATE}

# 备份 user1 数据库
USER=user1
PASSWORD=password1
HOST=192.168.1.10
PORT=1521
SID=orcl1
BACKUP_FILE=${FILE_PREFIX}_${SID}.dmp
sqlcl -S ${USER}/${PASSWORD}@${HOST}:${PORT}/${SID} @backup.sql ${BACKUP_FILE}
find ${BACKUP_DIR} -type f -name "${SID}*.dmp" -mtime +7 -delete

# 备份 user2 数据库
USER=user2
PASSWORD=password2
HOST=192.168.1.20
PORT=1521
SID=orcl2
BACKUP_FILE=${FILE_PREFIX}_${SID}.dmp
sqlcl -S ${USER}/${PASSWORD}@${HOST}:${PORT}/${SID} @backup.sql ${BACKUP_FILE}
find ${BACKUP_DIR} -type f -name "${SID}*.dmp" -mtime +7 -delete

其中,通过 ${DATE} 变量实现备份文件分类保存,每个备份文件名称由 ${FILE_PREFIX}${SID} 组成。USERPASSWORDHOSTPORTSID 分别指定了连接Oracle数据库的参数。

  1. 创建备份命令脚本 backup.sql:与示例一相同。

  2. 设置计划任务,每天凌晨 2 点自动执行:

crontab -e

在打开的文件中添加以下内容:

0 2 * * * /path/to/backup.sh

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Linux下通过脚本自动备份Oracle数据库并删除指定天数前的备份 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • Java Apache Shiro安全框架快速开发详解流程

    Java Apache Shiro安全框架快速开发详解流程 什么是Apache Shiro Apache Shiro是一个跨应用程序、支持单点登录、支持身份验证和访问控制框架,可以解决应用程序的安全问题。Shiro的核心是将应用程序的用户身份、安全验证、访问控制等功能组合起来实现一个完整的安全框架。使用Shiro开发的应用程序能够快速、安全地集成身份验证、安…

    database 2023年5月22日
    00
  • day02-Redis命令

    Redis命令 1.Redis数据结构介绍 Redis是一个key-value的数据库,key一般是String类型,value的类型多种多样,value常见的八种类型: Redis支持五种基本的数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set,有序集合)。 各个数据类型应用场景: 类型 简…

    2023年4月16日
    00
  • 为什么ASP中执行动态SQL总报错误信息?提示语句语法错误

    出现提示语句语法错误的情况可能有多种原因,下面我将为你讲解ASP中执行动态SQL总报错误信息和解决措施的完整攻略。 问题分析 在ASP中,如果动态SQL语句拼接不符合SQL语法规范,就会出现提示语句语法错误的情况。主要有以下几个原因: SQL语句拼接不规范,缺少关键字或者各个部分没有正确连接。 对动态SQL语句中的关键字使用错误,如将AND写成了ADN。 参…

    database 2023年5月21日
    00
  • Jedis连接工具 和 SpringBoot整合Redis

    引用学习:https://space.bilibili.com/95256449/ Jedis连接工具 什么是Jedis? 它是官方推荐的Java连接开发工具!使用Java操作 Redis中间件!如果你使用java操作 Redis ,那么要对 jedis 十分的熟悉! 测试 在本地主机进行测试 1、打开 Redis 服务 2、新建maven项目,导入依赖 &…

    Redis 2023年4月13日
    00
  • PHP如何初始化PDO及原始SQL语句操作

    下面是PHP如何初始化PDO及原始SQL语句操作的完整攻略以及两个示例说明。 初始化PDO 使用PDO连接MySQL需要以下步骤: 首先创建一个PDO对象,并传入数据库连接信息。 try { $pdo = new PDO(‘mysql:host=localhost;dbname=mydatabase;charset=utf8’, ‘username’, ‘p…

    database 2023年5月21日
    00
  • 详解SQL Server中的事务与锁问题

    SQL Server中的事务与锁问题 什么是事务? 事务(Transaction)是指作为单个逻辑工作单元执行的一系列操作,这一系列操作必须同时全部成功或全部失败。 在SQL Server中,可以使用BEGIN TRANSACTION、COMMIT TRANSACTION和ROLLBACK TRANSACTION三个语句来控制事务的开始、提交和回滚。 事务的…

    database 2023年5月21日
    00
  • minio安装部署及使用的详细过程

    下面我就来给您介绍一下“minio安装部署及使用的详细过程”的完整攻略: 一、安装minio 1.获取并解压minio二进制文件 wget https://dl.minio.io/server/minio/release/linux-amd64/minio chmod +x minio 2.运行minio ./minio server /data 二、使用m…

    database 2023年5月22日
    00
  • MySQL中datetime时间字段的四舍五入操作

    为了进行MySQL中datetime时间字段的四舍五入操作,需要使用到MySQL中的日期和时间函数。以下是完成此操作的完整攻略: 1. 确定需要进行四舍五入的时间字段 首先,确认需要进行四舍五入的时间字段的名称和类型。在MySQL中,使用DATETIME类型来存储日期和时间值。例如,我们假设需要对一个名为“orders”的表中的“order_date”字段执…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部