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日

相关文章

  • 数据库:socketserver模块、MySQL(一)

    一、socketserver实现并发 基于tcp的套接字,关键就是两个循环,一个链接循环,一个通信循环。 socketserver模块中分两大类:server类(解决链接问题)和request类(解决通信问题) server类: request类: 继承关系:   以下述代码为例,分析socketserver源码: ftpserver=socketserve…

    MySQL 2023年4月13日
    00
  • 最详细的SQL注入相关的命令整理 (转)第1/2页

    首先,SQL注入是一种利用未经过滤的用户输入,通过注入恶意的SQL语句来实现对数据库的攻击。而“最详细的SQL注入相关的命令整理”是一篇文章,总结了常用的SQL注入命令,并提供了一些具体的实例说明。 文章中提到的SQL注入命令主要包括以下几种: UNION SELECT:通过拼接多个SELECT语句,将不同表的数据合并在一起。例如,可以通过以下语句获取所有用…

    database 2023年5月21日
    00
  • MySQL 如何实现数据插入

    使用MySQL插入数据时,可以根据需求场景选择合适的插入语句,例如当数据重复时如何插入数据,如何从另一个表导入数据,如何批量插入数据等场景。本文通过给出每个使用场景下的实例来说明数据插入的实现过程和方法。 使用MySQL插入数据时,可以根据需求场景选择合适的插入语句,例如当数据重复时如何插入数据,如何从另一个表导入数据,如何批量插入数据等场景。本文通过给出每…

    MySQL 2023年4月12日
    00
  • mysql的sql语句特殊处理语句总结(必看)

    mysql的sql语句特殊处理语句总结(必看) 在mysql中,我们常常需要对查询结果进行特殊处理,比如去重、排序、分组、计数等等,这时候就需要用到一些特殊处理语句。本文总结了mysql的常见特殊处理语句及其用法,希望能够帮助大家更好地处理数据。 去重 去重是经常需要用到的操作,mysql中可以通过DISTINCT关键字进行去重。例如,以下SQL语句可以从u…

    database 2023年5月21日
    00
  • mysql数据库查询优化 mysql效率第3/3页

    下面是“mysql数据库查询优化 mysql效率第3/3页”的完整攻略: 1. 概述 在MySQL数据库中,查询优化是提高查询效率和性能的重要手段。通过对查询语句的优化,可以优化数据库响应速度,提高数据检索的效率。本篇攻略主要涉及MySQL数据库查询优化的相关原则和技巧。 2. 优化原则 2.1 索引优化 索引是提高查询效率的重要手段,可以大幅度减少查询数据…

    database 2023年5月19日
    00
  • MySQL创建新用户、增加账户的2种方法及使用实例

    MySQL是一款流行的关系型数据库管理系统,它允许用户创建多个账户以访问和管理数据库。本篇攻略将详细讲解如何通过两种不同的方式创建新用户和增加账户。 方法一:使用GRANT语句创建新用户 GRANT语句是MySQL中一个非常强大的命令,它可以让我们授予数据库用户的许可权限,并将其关联到一个或多个数据库对象上。在使用这个命令来创建用户时,我们需要先了解一些基本…

    database 2023年5月22日
    00
  • prometheus系列监控:jvm,mongodb,mysql,redis,consul

    jvm: maven添加dependence <!– https://mvnrepository.com/artifact/io.micrometer/micrometer-registry-prometheus –> <dependency> <groupId>io.micrometer</groupId&gt…

    MySQL 2023年4月13日
    00
  • SQL Server”错误 21002: [SQL-DMO]用户 * 已经存在问题解决

    SQL Server错误21002是一个常见问题,通常会发生在创建一个新用户时。该错误消息的文本是 “[SQL-DMO]用户 * 已经存在”。它的意思是,你正在尝试创建一个已经存在的用户。以下是解决该问题的步骤: 1. 确认用户名是否存在 首先,你需要确认该用户名是否已经存在于已经存在的用户列表中。你可以使用下面的SQL查询来检查: sp_helpuser …

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