高效存储,安心备份──Oracle数据库的定时备份方法 (oracle定时备份数据库)

随着信息技术的飞速发展,数据成为企业最重要的资产之一,Oracle数据库成为数据存储和管理的重要工具。但随之而来的数据丢失、破坏等风险也开始变得越来越严重,因此备份Oracle数据库在数据安全方面至关重要。本文将介绍一个高效存储,安心备份的方法——Oracle数据库的定时备份方法。

一、为何要备份?

备份是指在计算机系统崩溃或数据遭到破坏时,将存储在计算机中的数据复制到其他存储设备中的一项技术。数据备份是数据安全和业务连续性保证的重要手段。如果数据库出现了故障或者数据被误删除或破坏,备份可以快速恢复原始数据,确保业务的继续开展。

二、备份的方式

1.完全备份

完全备份即复制所有数据文件的副本,通常在Oracle数据库安装之后或者版本升级之后,之一次的备份需要采用完全备份模式,而之后的备份可以采用增量备份或日志备份来完成。

2.增量备份

增量备份即只备份上一次备份以后修改的数据文件,可以加快备份速度,但容易造成备份不完整。

3.日志备份

在增量备份不完整的情况下,可以通过日志备份来保证数据完整性。日志备份也叫做不完全备份,只备份上一次全量备份以后的事务日志,以此来保证数据的完整性。

三、定时备份方案

1.准备工作

①规划备份路径:在备份之前必须要规划好存放备份文件的路径和名称,以便于进行管理。

②备份计划:规定好备份的时间、周期和方式,更好保证备份与业务开展时间不重叠。

③备份选项:确定要备份的文件、方式、是否压缩等参数。

2.定时备份脚本

采用shell脚本来完成定时备份,由于Oracle客户端中已经内置了备份命令,通过shell脚本实现调度实际上就是调度Oracle自带命令的执行。

#!/bin/bash

# Oracle数据库登录名及口令

ORACLE_USER=system

ORACLE_PASSWORD=system

# 数据库实例名

ORACLE_SID=orcl

# 备份文件存放目录

BACKUP_DIR=/u01/backup/oracle

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1

# 格式化日期,作为备份文件名的一部分

BACKUP_TIME=`date +%Y-%m-%d`

#备份前先停止实例下所有应用

sqlplus /nolog <!

connect / as sysdba

shutdown immediate;

exit;

!

#开启备份

rman target / <!

run {

backup database plus archivelog;

}

!

#备份完毕后启动实例下的应用

sqlplus /nolog <!

connect / as sysdba

startup;

exit;

!

# 将备份文件压缩成zip格式

cd $BACKUP_DIR

tar -zcvf $BACKUP_TIME\_oracle.tar.gz $BACKUP_DIR

# 删除7天前的备份文件,只保留最近7天的备份文件

find $BACKUP_DIR -type f -mtime +7 -exec rm {} \;

3.执行备份脚本

将定制的备份脚本保存至一文件中,并赋予可执行权限和定时任务cron,即可按预定时间进行自动备份,后续可以根据实际情况改进。

# 赋予可执行权限

chmod +x oracle_backup.sh

# 添加到crontab计划任务

crontab -e

# 添加如下语句:

0 0 * * * /u01/backup/oracle_backup.sh > /dev/null

四、

为保障数据的安全,定期备份一份Oracle数据库绝对是很有必要的。备份日常的定时化、自动化,不仅数据管理者可以得到保障,更可以让日常管理变得更高效,助力企业高效运营。定时备份不但需要合理性规划, 而且需要不断的测量和分析,从而得出更优化的解决方案。通过本文所介绍的方式,可以实现高效存储,安心备份Oracle数据库,保证企业数据安全。

相关问题拓展阅读:

Oracle中通过命令行实现定时操作详解

Oracle中通轮乎过命令行实现定时操作详解 Oracle中通过命令行实现定时操作详解 Oracle基础

  众所周知 一般操作系统会提供定时执行任务的方法 例如 Unix平台上提供了让系统定时执行任务的命令Crontab 但是 对于某些需求 例如 一些对数据库表的操作 最为典型的是证券交易所每日收盘后的结算 它涉及大量的数据库表操作 如果仍然利用操作系统去定时执行 不仅需要大量的编程工作 而且还会出现用户不一致等运行错误 甚至导致程序无法执行

  一 分析问题

  事实上 对于以上需求 我们可以利用数据库本身拥虚桐袜有的功能Job Queue(任务队列管理器)去实现 任务队列管理器允许用户提前调度和安排某一任务 使其能在指定的时间点或时间段内自动执行一次或多次 由于任务在数据库中被执行 所以执行效率很高

  任务队列管理器允许我们定制任务的执行时间 并提供了灵活的处理方式 还可以通过配置 安排任务在系统用户访问量少的时段内执行 极大地提高了工作效率 例如 对于数据库日常的备份 更新 删除和复制等耗时长 重复性强的工作 我们就可以利用任务队列管理器去自动执行以减差激少工作量

  目前 拥有此项功能的数据库有许多 最有代表性的是SQL Server Oracle 等 但是 要让任务队列管理器工作 还需要我们加以配置才能实现 SQL Server的功能配置是在一个图形化界面(GUI)中实现的 非常简单 利用OEM客户端管理工具 Oracle的配置也可以在一个图形界面中完成 然而大多数的用户更习惯于命令行的方式去操纵数据库 本文介绍如何通过命令行实现这种配置

  二 实现步骤

   .确保Oracle的工作模式允许启动任务队列管理器

  Oracle定时执行 Job Queue 的后台程序是SNP进程 而要启动SNP进程 首先要确保整个系统的模式是可以启动SNP进程的 这需要以DBA的身份去执行如下命令

  svrmgrl> alter system enable restricted session;   或sql> alter system disenable restricted session; 

  利用如上命令更改系统的会话方式为disenable restricted 为SNP的启动创造条件

   .确保Oracle的系统已经配置了任务队列管理器的启动参数

  SNP的启动参数位于Oracle的初始化文件中 该文件放在$ORACLE_HOME/dbs路径下 如果Oracle的SID是myora 的话 则初始化文件就是initmyora ora 在文件中对SNP启动参数的描述部分如下

  job_queue_process=n   job_queue_interval=N 

  之一行定义SNP进程的启动个数为n 系统缺省值为 正常定义范围为 ~ 根据任务的多少 可以配置不同的数值

  第二行定义系统每隔N秒唤醒该进程一次 系统缺省值为 秒 正常范围为 ~ 秒 事实上 该进程执行完当前任务后 就进入睡眠状态 睡眠一段时间后 由系统的总控负责将其唤醒

  如果该文件中没有上面两行 请按照如上配置添加 配置完成后 需要重新启动数据库 使其生效 注意 如果任务要求执行的间隔很短的话 N的配置也要相应地小一点

   .将任务加入到数据库的任务队列中

  调用Oracle的dbms_job包中的存储过程 将任务加入到任务队列中

  dbms_job submit( job out binary_integer   whatin   archar   next_date     in   date   interval     in   varchar   no_parse     in   boolean) 

  其中

  ●job 输出变量 是此任务在任务队列中的编号

  ●what 执行的任务的名称及其输入参数

  ●next_date 任务执行的时间

  ●interval 任务执行的时间间隔 下面详细讨论一下dbms_job submit中的参数interval 严格地讲 interval是指上一次执行结束到下一次开始执行的时间间隔 当interval设置为null时 该job执行结束后 就被从队列中删除 假如我们需要该job周期性地执行 则要用 sysdate+m 表示

  将任务加入到任务队列之前 要确定执行任务的数据库用户 若用户是scott 则需要确保该用户拥有执行包dbms_job的权限 若没有 需要以DBA的身份将权利授予scott用户

  svrmgrl> grant execute on dbms_job to scott; 

   .将要执行的任务写成存储过程或其他的数据库可执行的pl/sql程序段

  例如 我们已经建立了一个存储过程 其名称为my_job 在sql/plus中以scott用户身份登录 执行如下命令

  sql> variable n number;   sql> begin   dbms_job submit(:n my_job; sysdate    sysdate+ / );   mit;   end;   / 

  系统提示执行成功

  Sql> print :n; 

  系统打印此任务的编号 例如结果为

  如上 我们创建了一个每隔 分钟执行一次的任务号为 的任务 可以通过Oracle提供的数据字典user_jobs察看该任务的执行情况

  sql> select job next_date next_sec failures broken from user_jobs; 

  执行结果如下

  job next_date next_sec failures broken / / : : N 

  这表示任务号为 的任务 下一次将在 / / : : 执行 此任务的执行失败记录为 次 注意 当执行job出现错误时 Oracle将其记录在日志里 失败次数每次自动加 当执行失败次数达到 时 Oracle就将该job标志为broken 此后 Oracle不再继续执行它 直到用户调用过程dbms_job broken 重新设置为not broken 或强制调用dbms_job run来重新执行它

lishixinzhi/Article/program/Oracle/202311/17096

设置oracle11g定时自动备份,为什么没有备份?请大神们帮我看看为啥!

%date:~0,10% 这个应该有问题,你要看启腊你机器上的时间格式,有的机器上用悉空这个获取的时间格式是2023/03/04,有的是,第睁旁瞎一种是成了目录格式,前几天刚遇到的这个

时间参数的问题,你把时间参数去掉,看备份能成功不

好像要把时间参数写到文件名里,挺繁琐的

我空间有个日志

你看能用到你这里不,也是设陵渣轮置日期为文件名的

—–补充-

测试了一下,这个可用

你还有问题,应该是你备份的语句有毛病,看看尺信你的路径是否都建立了

这个你只需要改最后一行就行了,我是在我本机测试的,用的路径也都是我本地的,oracle也用的我本地的梁缺

regedit /e “%temp%\bak.reg” “HKEY_CURRENT_USER\Control Panel\International”

>01.reg echo Windows Registry Editor Version 5.00

>>01.reg echo.

>>01.reg echo

>>01.reg echo “sShortDate”=”yyyy-MM-dd”

>>01.reg echo “sDate”=”-“

>>01.reg echo “sTimeFormat”=”HH:mm:ss”

regedit /s 01.reg&del 01.reg

>tmp.vbs echo Wscript.echo FormatDateTime (DateAdd(“d”, -1 ,Date),2)

for /f “delims=” %%i in (‘cscript.exe //nologo tmp.vbs’) do set aDate=%%i&del tmp.vbs

set fn=%adate:~0,4%%adate:~5,2%%adate:~8,2%

exp 用户名/密码@sytv file=f:/bak/nstc_dpms_%fn%.dmp log=f:/log/nstc_dpms_%fn%.log owner=’scott’

我曾爱过的所有遗迹

浮向深湖底有一星期之久。

一封惟一知姿桥的短信。

和它们那朦胧的搭猛塔影。

房间——一片混乱。那些还未卖出去的东西,

oracle怎么用rman脚本进行备份

Oracle数据库中rman备份脚本非常实用

  查询字符集

  SQL> select * from nls_database_parameters;

  NLS_CHARACTERSET

  AL32UTF8

  备份时字符集很重要,不然会出乱码

  一、0级备份(全备)红色是要修改的,根据个人的存放位置。

  $ cat db_bak0.rman

  run

  {

  configure retention policy to recovery window of 8 days;

  configure controlfile autobackup on;

  configure controlfile autobackup format for device type disk to ‘/home/oracle/rmanbak/%F’;

  allocate channel ch1 device type disk format ‘/home/oracle/rmanbak/inc0_%d_%s_%p_%u_%T’;

  backup incremental level 0 tag=’level 0′ database skip inaccessible filesperset 10 plus archivelog filesperset 20;

  release channel ch1;

  }

  allocate channel for maintenance device type disk;

  crosscheck backup;

  delete noprompt expired backup;

  delete noprompt obsolete;

  delete noprompt archivelog until time ‘sysdate-30’;

  0级运行脚本

  $ cat exec_0_level.sh

  ORACLE_HOSTNAME=oracle122; export ORACLE_HOSTNAME

  ORACLE_BASE=/u01/app; export ORACLE_BASE

  ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1; export ORACLE_HOME

  派激ORACLE_SID=orcl; export ORACLE_SID

  ORACLE_TERM=xterm; export ORACLE_TERM

  PATH=/usr/派敏in:$PATH; export PATH

  PATH=$ORACLE_HOME/bin:$PATH; export PATH

  export DATE=$(date +%Y_%m_%d)

 尘羡袜 export NLS_LANG=”Simplified Chinese_china”.AL32UTF8

  /u01/app/oracle/product/11.2.0/dbhome_1/bin/rman target sys/sys_admin cmdfile /home/oracle/rmanbak/script/db_bak0.rman log /home/oracle/rmanbak/script/log/rman_$DATE.log append

  二、1级备份(增量)

  $ cat db_bak1.rman

  run

  {

  configure retention policy to recovery window of 8 days;

  configure controlfile autobackup on;

  configure controlfile autobackup format for device type disk to ‘/home/oracle/rmanbak/%F’;

  allocate channel ch1 device type disk format ‘/home/oracle/rmanbak/inc1_%d_%s_%p_%u_%T’;

  backup incremental level 1 tag=’level 1′ database skip inaccessible filesperset 10 plus archivelog filesperset 20;

  release channel ch1;

  }

  allocate channel for maintenance device type disk;

  crosscheck backup;

  delete noprompt expired backup;

  delete noprompt obsolete;

  delete noprompt archivelog until time ‘sysdate-30’;

  1级运行脚本

  $ cat exec_1_level.sh

  ORACLE_HOSTNAME=oracle122; export ORACLE_HOSTNAME

  ORACLE_BASE=/u01/app; export ORACLE_BASE

  ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1; export ORACLE_HOME

  ORACLE_SID=orcl; export ORACLE_SID

  ORACLE_TERM=xterm; export ORACLE_TERM

  PATH=/usr/in:$PATH; export PATH

  PATH=$ORACLE_HOME/bin:$PATH; export PATH

  export DATE=$(date +%Y_%m_%d)

  export NLS_LANG=”Simplified Chinese_china”.AL32UTF8

  /u01/app/oracle/product/11.2.0/dbhome_1/bin/rman target sys/sys_admin cmdfile /home/oracle/rmanbak/script/db_bak1.rman log /home/oracle/rmanbak/script/log/rman_$DATE.log append

  三、2级备份(从0级追加到现在的备份)

  $ cat db_bak2.rman

  run

  {

  configure retention policy to recovery window of 8 days;

  configure controlfile autobackup on;

  configure controlfile autobackup format for device type disk to ‘/home/oracle/rmanbak/%F’;

  allocate channel ch1 device type disk format ‘/home/oracle/rmanbak/inc2_%d_%s_%p_%u_%T’;

  backup incremental level 2 tag=’level 2′ database skip inaccessible filesperset 10 plus archivelog filesperset 20 delete all input;

  release channel ch1;

  }

  allocate channel for maintenance device type disk;

  crosscheck backup;

  delete noprompt expired backup;

  delete noprompt obsolete;

  2级运行脚本

  $ cat exec_2_level.sh

  ORACLE_HOSTNAME=oracle122; export ORACLE_HOSTNAME

  ORACLE_BASE=/u01/app; export ORACLE_BASE

  ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1; export ORACLE_HOME

  ORACLE_SID=orcl; export ORACLE_SID

  ORACLE_TERM=xterm; export ORACLE_TERM

  PATH=/usr/in:$PATH; export PATH

  PATH=$ORACLE_HOME/bin:$PATH; export PATH

  export DATE=$(date +%Y_%m_%d)

  export NLS_LANG=”Simplified Chinese_china”.AL32UTF8

  /u01/app/oracle/product/11.2.0/dbhome_1/bin/rman target sys/sys_admin cmdfile /home/oracle/rmanbak/script/db_bak2.rman log /home/oracle/rmanbak/script/log/rman_$DATE.log append

  定时备份星期天为0级全备,星期三为2级备份,星期一,星期二,星期四,星期五,星期六为1级增量备份晚上11点开始备份

  $ crontab -l

  * 23 * * 0 /home/oracle/rmanbak/script/exec_0_level.sh

  * 23 * * 1 /home/oracle/rmanbak/script/exec_1_level.sh

  * 23 * * 2 /home/oracle/rmanbak/script/exec_1_level.sh

  * 23 * * 3 /home/oracle/rmanbak/script/exec_2_level.sh

  * 23 * * 4 /home/oracle/rmanbak/script/exec_1_level.sh

  * 23 * * 5 /home/oracle/rmanbak/script/exec_1_level.sh

关于oracle定时备份数据库的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 高效存储,安心备份──Oracle数据库的定时备份方法 (oracle定时备份数据库)