oracle数据库自动备份系统

oracle数据库自动备份系统,第1张

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。下面我为大家分享一下oracle数据库自动备份系统的 方法 ,有需要的可以参考一下!

oracle数据库自动备份系统

实现过程:

1 建立文件 backupbat (自定义文件名bat)

@echo off

REM ###########################################################

REM # Windows Server 2003下Oracle数据库自动备份批处理脚本

REM ###########################################################

REM 取当前系统时间,可能因 *** 作系统 不同而取值不一样

set CURDATE=%date:~0,4%%date:~5,2%%date:~8,2%

set CURMON=%date:~0,4%%date:~5,2%

set CURTIME=%time:~0,2%

REM 小时数如果小于10,则在前面补0

if "%CURTIME%"==" 0" set CURTIME=00

if "%CURTIME%"==" 1" set CURTIME=01

if "%CURTIME%"==" 2" set CURTIME=02

if "%CURTIME%"==" 3" set CURTIME=03

if "%CURTIME%"==" 4" set CURTIME=04

if "%CURTIME%"==" 5" set CURTIME=05

if "%CURTIME%"==" 6" set CURTIME=06

if "%CURTIME%"==" 7" set CURTIME=07

if "%CURTIME%"==" 8" set CURTIME=08

if "%CURTIME%"==" 9" set CURTIME=09

set CURTIME=%CURTIME%%time:~3,2%%time:~6,2%

REM 设置所有者、用户名和密码

set OWNER=orcl

set USER=bktcgl

set PASSWORD=bktcgl

REM 创建备份用目录,目录结构为oraclebak/YYYYMMDD/

if not exist "oraclebak" mkdir oraclebak

cd oraclebak

if not exist "%CURMON%" mkdir %CURMON%

set FILENAME=%CURMON%/%OWNER%_%CURDATE%_%CURTIME%DMP

set EXPLOG=%CURMON%/%OWNER%_%CURDATE%_%CURTIME%_loglog

REM 调用ORACLE的exp命令导出用户数据

exp %USER%/%PASSWORD%@%OWNER% file=%FILENAME% log=%EXPLOG% owner=%USER% grants=n

exit

注:

1bat文件可双击或直接在命令行执行,检查正确与否

2检查时可注释掉exit

3以上文件实现按月份创建文件夹,按时间生成备份文件

2建立windows任务

步骤:

开始 -> 所有程序 -> 附件 -> 系统工具 -> 任务计划程序 -> *** 作 -> 创建基本任务

-> 任务名输入"oracle_backup"(自定义任务名),执行这个任务选择每天,下一步

-> 起始时间下午12:00,起始日期2012-7-11,下一步 ->(启动程序)下一步

->在 浏览 中查找刚刚写好的 backupbat 文件 >下一步 > 完成

注:

1在任务计划栏目下新增一个名为"oracle_backup"的任务计划,表明已经配置完毕。

2不同系统的任务计划略有不同,但基本换汤不换药,不做一一例举

问题:系统警告"已创建新任务,但可能不能运行,因为无法设置账户信息。指定的错误是:Ox80041315:任务计划程序服务没有运行"

原因:电脑的任务计划程序服务没有启动起来。

解决:开始 > 所有程序 > 管理工具 > 服务,找到"Task Scheduler"服务,发现启动类型为"已禁用",

右键单击更改为"自动",并把它启动起来,然后重新添加一次任务计划就可以了。

3简单解释

1 bat:是dos下的批处理文件。批处理文件是无格式的文本文件,它包含一条或多条命令。在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用 Cmdexe按照该文件中各个命令出现的顺序来逐个运行它们。

2 Echo 命令:打开回显或关闭请求回显功能,或显示消息。

3 @ 命令:表示不显示@后面的命令

4 Rem 命令:注释命令

5 If命令:if表示将判断是否符合规定的条件,从而决定执行不同的命令。

6 exit :退出命令行

7 GRANTS: 是权限的意思,在你导出的目标数据库中可能会有一些表的如select 权限等赋给了别的用户。

GRANTS=Y导出的时候将这些权限导出,导入的时候将这些权限导入。

GRANTS=N权限不被导入。

写个批处理backup_ora_dbbat:
@echo off
@exp user/pwd@ora_conn_string file=d:\db_backup_ora_db_%date%dmp full=y buffer=1024000
@找个dos版的rar,可以再把dmp文件压缩了
@move d:\db_backup_ora_db_%date%dmp e:\db_backup\
@exit
做个计划任务,定期加载这个backup_ora_dbebat。
批处理中的路径请您自己改,还有那个压缩的命令行如果需要您就网上找一下,空间有的是就去掉也行。
希望对您有帮助。

相信为数不少的系统管理员每天都在做着同一样的工作——对数据进行备份 一旦哪一天疏忽了 而这一天系统又恰恰发生了故障 需要进行数据恢复 那么此时就无能为力了 假如每天设定一个固定的时间 系统自动进行备份 那该多好啊!下面笔者结合实践经验 谈一谈UNIX环境下Oracle数据库的自动备份 以起到抛砖引玉的作用 我们计划让数据库在晚上 点做export导出备份 在凌晨 点将备份文件拷贝到磁带上 在凌晨 点将备份文件拷贝到另一台UNIX机器上 为此我们可进行如下 *** 作 一 导出数据库 export命令将数据库中的数据备份成一个二进制文件 它通常有三种模式 用户模式 表模式和整个数据库模式 本文拟采用用户模式 备份之前 应先建立一个备份目录 以容纳备份文件 比如可建一个/backup目录 接着我们可在UNIX的Oracle目录下(也可以是其它目录)分别建立两个文件ora—backup tar—backup 需要说明的是 前一个文件需要对Oracle的参数进行初始化 为了方便起见 我们不妨将初始化命令放到一个文件中(文件名姑且定为ora—env) 再由第一个文件调用它 ora—env文件对Oracle的参数进行初始化 其内容如下 ORACLE—HOME=$ORACLE—HOME;export ORACLE—HOMEORACLE—SID=ora ;export ORACLE—SIDORACLE—TERM=sun;export ORACLE—TERMLD—LIBRARY—PATH=$ORACLE—HOME/lib;export LD—LIBRARY—PATHORA—NLS =$ORACLE—HOME/omon/nls/admin/data;export ORA—NLSPATH= :/usr/ccs/bin:/usr/ucb:$ORACLE—HOME/bin:$PATH;export PATHDISPLAY=host : ;export DISPLAYNLS—LANG=american—america zhs cgb ;export NLS—LANG ora—backup文件对数据库做export导出 导出的文件名可以任意定 本文定为字母 xx 加当天日期 即假如当天日期是 月 号 则导出的文件名为 xx dmp 以区别于其它日期的备份文件 ora—backup文件内容 /oracle/ora—env#初始化Oracle数据库rq=′date +″%m%d″ ′#把当天日期赋予变量rqrm /backup/# 清空 /backup目录exp test/test file=/backup/xx$rq dmp log=/backup/xx$rq log本命令用于在$提示符下 导出test用户的数据(其口令亦为test) 导出文件及日志均放在/backup目录下 二 磁带备份 tar—backup文件将用export命令导出的数据文件拷贝到磁带上 tar—backup文件内容 tar rvf /dev/rmt/ n/backup/本命令可将/backup目录下当天产生的文件备份到磁带上 本文件中 tar命令使用了三个参数 其中r选项表示向磁带上拷入文件而不破坏磁带原来内容 v选项表示在拷贝过程中显示文件信息 f选项后面加上磁带设备名 指定文件向何处拷贝 n选项表示磁带机不倒带 /dev/rmt/ 表示UNIX主机第一个磁带驱动器 同理 /dev/rmt/ 则表示UNIX主机第二个磁带驱动器 依此类推 ora—env ora—backup tar—backup文件编写完成后 分别使用下述命令 chmod ora—envchmod ora—backupchmod tar—backup这样 三个文件就都变成了可执行文件 三 异地备份 我们知道 通常可用FTP命令在两台主机间传输数据 但一般是通过交互方式实现的 即需要手工输入目标主机的IP地址 用户名 口令等 显然 这不符合自动备份的要求 所幸的是 我们可以通过编写一rc的文件来达到目标 这一文件必须命名rc 且必须存放在启动FTP命令的机器上的用户注册目录中 该文件的权限应禁止组内或其它用户进行读访问 这样 当用户使用FTP命令的时候 系统将会在该用户的注册目录中寻rc文件 如果能够寻找到 将会首先执行该文件 否则 会交互式地提示用户输入用户名 口令等 在使用FTP命令之前 应先在另一台作备份用的UNIX机器上建一目录 以容纳备份文件 本文建的目录是/pub 需要指出的是 为了加快备份速度 两台主机之间的传输速率应尽可能的高 最好位于同一局域网上rc文件内容如下 machine host # host 为作备份用的主机名login oracle#oracle为备份主机上的一个用户password oracle#oracle用户的口令为oraclemacdef init#定义一个名为init的宏 它将在自动注册进程的最后被执行bin#文件的传输方式设为二进制lcd /backup# 进入本地工作目录/backupcd /pub# 进入备份主机目录/pubmput # 将/backup目录下的所有文件传输至备份主机bye#退出FTP会话进程 rc文件编写完成后 使用下述命令 chmod rc这样rc文件就只能被该用户所访问 四 启动备份进程 Cron是一个永久进程 它由/etc/rc local启动执行 Cron检查/var/spool/cron/crontabs/目录中的文件 找到所要执行的任务和执行任务的时间 Crontab文件的每一行由六个域(minutes hours day of month month day of week mand)组成 域之间用空格或Tab分开 其中 minutes 分钟域 值的范围是 到 hours 小时域 值的范围是 到 day of month 日期 值的范围是 到 month 月份 值的范围是 到 day of week 星期 值的范围是 到 星期日值为 mand 所要运行的命令如果一个域是 表明命令可以在该域所有可能的取值范围内执行 如果一个域是由连字符隔开的两个数字 表明命令可以在两个数字之间的范围内执行(包括两个数字本身) 如果一个域是由逗号隔开的一系列值组成的 表明命令可以在这些值组成的范围内执行 如果日期域和星期域都有值 则这两个域都有效 现在 我们编写一个文件 用以启动自动备份进程 值得注意的是 该文件只能在Oracle用户名下用crontab -e 命令来编辑 否则将不会被定时执行 文件名定为Oracle 文件将放在/var/spool/cron/crontabs 目录下 编辑完成后 可以在Oracle的$提示符下 用crontab -l命令来查看 Oracle文件内容    /oracle/ora—backup# 每天 点对数据库执行备份    /oracle/tar—backup# 每天 点将文件备份到磁带上    ftp -i host # 每天 点将文件备份到另一台主机上经过以上的 *** 作后 系统每天晚上将自动产生一个备份 并且自动将备份文件分别拷贝到磁带上和另一台主机上 系统管理员需要做的是 隔几天换一盘磁带(更换磁带的周期取决于备份文件的大小和磁带的容量)和清理备份目录 这样 他们就可以从备份数据的繁琐中解脱出来 去做其它更有意义的工作 而数据库既实现了磁带备份 又实现了异地备份 相应的安全性也大大提高了 lishixinzhi/Article/program/Oracle/201311/18204

自己的备份语句,拿来分享一下
SET hour=%time:~0,2%
SET hour=%hour: =%
SET DATE=%date:~0,10%_%hour%_%time:~3,2%_%time:~6,2%
SET ZIP_CMD=e:\backup_command\7-zip\7zexe
SET BACKUP_ROOT=E:\databackup
SET USER=%1
SET PASSWORD=%2
mkdir %BACKUP_ROOT%\%USER%_%DATE%
exp USERID=%USER%/%PASSWORD%@orcl file=%BACKUP_ROOT%\%USER%_%DATE%\oracle_%REPO_NAME%-%USER%-%date%dmp OWNER=(%USER%) DIRECT=Y BUFFER=10241024
%ZIP_CMD% a -tzip %BACKUP_ROOT%\%USER%_%DATE%zip %BACKUP_ROOT%\%USER%_%DATE%
del %BACKUP_ROOT%\%USER%_%DATE%/Q /S
move %BACKUP_ROOT%\%USER%_%DATE%zip %BACKUP_ROOT%\%USER%_%DATE%
exit
把语句存为批处理,有两个参数,%1和%2,分别是用户名和密码

oracle 10备份大概有以下几种常用的:
用Exp/imp 进行备份与恢复
通过RMAN 写脚本进行备份与恢复
使用Oracle闪回区和RMAN进行同步连续备份与恢复
使用第三方备份软件进行备份与恢复(个人目前使用多备份这个工具,自动增量备份省事)

首先需要编写一个批处理文件,用于实现数据库的备份功能,可以命名为BAT(后缀名修改为 BAT): @echo off color 0b mode con cols=80 lines=25 echo 正在备份数据库,请稍后�1�76�1�77�1�76�1�77 echo -------------------------------------- echo 指定数据库用户(在“=”后面写入你需要备份的数据库登 录用户名) set yh=information echo 指定数据库密码(在“=”后面写入你需要备份的数据库登 录密码) set mm=information echo 指定数据库服务名(在“=”后面写入你需要备份的数据库 服务名) set fwm=CS echo 指定备份目录(指定备份的文件夹,以“\”结束) set ml=e:\lkdata\ echo ---------------------------------------------- echo 开始计算日期和时间,用于备份文件的名称(由于是自动备 份,备份的文件名我们定义为数据库登录名+系统时间—精确到 秒) set hh=%time:~0,2% echo 如果小时是一位的,那么在前面补零 if /i %hh% LSS 10 (set hh=0%time:~1,1%) set rq=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2% set sj=%hh%%TIME:~3,2%%TIME:~6,2% set wjm=%yh%%rq%%sj% echo ---------------------------------------------- echo 请核对以下数据是否正确 echo 用户名:%yh% echo 密码:%mm% echo 服务名:%fwm% echo 备份目录:%ml% echo 备份文件名:%wjm% echo ---------------------------------------------- echo 开始备份数据库 echo --------------------------------------------- exp %yh%/%mm%@%fwm% file=%ml%%wjm%dmp log=%ml%%wjm%log owner=%yh% echo 数据库备份完成 echo ---------------------------------------------- 以上就是我们自动备份的代码,其中echo 后面的文本都是说明文 字,大家可以删除,将以上代码复制到文本文件,重命名为BAT (尽量不要把备份文件放在桌面或者系统盘下,避免系统损坏以 后丢失备份文件),保存以后,我们可以双击执行,当执行完成以 后,在备份目录下会备份文件,如下图 1、 自动备份实现 以上我们已经实现了数据库的备份脚本,那么如何实现自动定时 备份呢?这就要利用WINDOW *** 作系统提供的计划任务功能了, 我们通过开始---控制面板,打开控制面板,双击执行计划任务 打开计划任务功能,然后双击添加计划任务打开计划任务向导,点击下一步 选择浏览,找到我们在第二步建立的备份脚本文件,点击打开, 进入下一步 在这一步我们输入备份计划的名称,方便以后区分,同时选择备 份的频率,这里以一天为准 在这一步需要输入每天备份启动的时间(这根据每一个项目来自 行设定,建议将备份放在数据库 *** 作较少的时段),一般建议在中 午考试空闲时段。 在这一步需要输入登录 *** 作系统的用户和密码,如系统默认的用 户 Administrator 没有设置密码,可以另外建立一个带密码的用 户。 确认以上 *** 作无误后,点击完成 这样我们就可以在计划任务列表中看到当前的计划任务 以上我们就实现了ORACLE数据库的自动备份功能,当然,如果 有数据库需要多个时间段备份,我们只需要重复上面的 *** 作即可。 二:设置自动删除以前的备份。 我们实现了ORACLE 数据库的自动备份功能,但每次备份都会创 建一个新备份文件,一定时间后占用的硬盘空间将非常大,还需 要创建批处理文件,用于实现删除之前的备份文件功能,粘贴如 下代码到文本文档中,重新命名为BAT(后缀名修改为BAT): del e:\lkdata\ 删除指定备份目录下所有备份文件,这里的待删除备份文件地址 要和之前的备份目录地址对应,然后添加计划任务让其定时运行, 建议清理计划运行的时间以1 周2 次的频率为佳,该计划运行的时间 在备份计划之间 1 个小时之前,这样就能达到先删除之前旧备份,1 个小时后自动新的备份建立。

写一个批处理文件(bat),内容为exp导出命令,相信你可以自己来写,然后把它添加到windows计划任务里去,指定在你需要的时间执行,就会生成一个oracle备份文件(dmp)。我司一直应用此方案,在windows下都可用此方案。

备份脚本应该对Log重定向并保存 以便在出错的查找有用信息

与RMAN备份有关的优化

备份 *** 作主要是完成以下三个步骤

从磁盘上读取数据

在内存中处理数据块

写入数据到磁盘或磁带

以上的读写 *** 作可以同步或异步的完成 在同步I/O *** 作中 一个时间只允许有一个IO *** 作 但是在异步I/O *** 作中 一个时间允许有多个IO *** 作 因此 备份与恢复的调优主要集中在以下几个方面

提高同步或异步I/O *** 作能力

在支持异步 *** 作的 *** 作系统上 可以通过设置TAPE_AYSNCH_IO DISK_ASYNCH_IO和BACKUP_TYPE_IO_SLAVES来支持异步 *** 作 提高写的能力

提高磁盘读能力

可以在backup命令后通过设置DISKRATIO来保证从多个磁盘上读取数据 保证连续的数据流

正确设置缓冲区与参数值

设置LARGE_POOL_SIZE 使备份可以使用连续的缓冲池 通过设置DB_FIL_DIRECT_IO_COUNT可以提高缓冲区的利用 如果使用磁带备份 还可以设置BACKUP_TYPE_IO_SLAVES来提高磁带的写能力

采用并行备份

开辟多个通道 可以实现并行备份与恢复

备份RMAN数据库

RMAN自己的数据库也需要备份 但是本身很小 而且不是经常发生变化 所以在每次RMAN备份完成后 都可以用如下脚本对RMAN数据库备份

     EXP pafile =exprman sql

exprman sql为

USERID=RMAN/RMAN

BUFFER=

OWNER=RMAN

FILE=RMAN DMP

ROWS=Y

GRANTS=Y

PRESS=Y

CONSISTENT=Y

使自动备份数据库

自动备份数据库不外乎以下三种方式

WINDOWS下的任务计划(At命令)

UNIX下的Crontab

第三方工具如Viritas

在以上三种方式中Viritas属于第三方工具 很多人可能都没有接触 主要说一下windows的任务计划与unix的cron

生成脚本文件 如backup rcv

假定文件内容如下

     $NewsContent$gt;cat backup rcv

connect target sys/password rcvcat rman/rman@localname;

run{

allocate channel c type disk;

allocate channel c type disk;

allocate channel c type disk;

backup fileaperset format /u /oradata/backup/arch%u_%s_%p

archivelog all delete input;

release channel c ;

release channel c ;

release channel c ;

}

生成执行文件

在windows上生成backup_archive bat 内容包括

rman cmdfile = backup rcv

在unix下生成 backup_archive sh 内容包括

/oracle/ramn/rman cmdfile = backup rcv

加入调度

在windows中用任务计划向导即可 或使用at命令

在unix中 在目标机器上编写一个文件 用以启动自动备份进程 假定文件名为ORACLE 文件将放在/var/spool/cron/crontabs目录下

$NewsContent$gt;cat oracle

backup_archive sh

#表示星期天 点对数据库备份

backup_archive sh

#表示每天 点 点备份

Crontab文件的每一行由六个域(minutes hours day of month month day of week mand)组成 域之间用空格或Tab分隔开来

五 常见误区

使用EXP/IMP备份

EXP/IMP不是一个良好的备份工具 在以后的发展之中 ORACLE对EXP/IMP用于备份的支持会越来越低 ORACLE只是把EXP/IMP当作一个好的工具而不是备份工具 在对于大型数据库 如TB级数据库或数据仓库 EXP/IMP肯定会力不从心

在应用程序中备份数据库

在论坛上 有很多这样的要求 我怎么在程序中备份与恢复数据库 首先说 这个并不是不可以实现 但是实现的过程会很复杂而且意外会很多 就我的感觉 提出这样问题的人 首先一点就是对ORACLE或DBA的不了解 如果ORACLE可以这么轻松的实现备份与恢复 那么我可以说 就不需要DBA了

冷备份比热备份更容易 效果会更好

有人认为 冷备份是关闭数据库进行的一致性备份 肯定比热备份要好 使用也容易 其实不尽然 在热备份中 一样可以实现数据库的全备份 而且不会影响到数据库的运行 建议所有的生产机 都运行在归档方式下 采用热备份方式

六 常见问题

我导出的数据为什么不能导入 提示不支持的字符集转换

答 参考上面的字符集原则 导出数据时客户端与数据库字符集一致 导入时修改为与目标数据库字符集一致

我的归档日志越来越多 我什么时候可以删除归档日志

答 在每一次全备份(如OS全冷备份或全热备份)或基于全备份的增量备份(如RMAN基于 级备份上的增量备份)后都可以删除该备份点之前的归档日志 建议在磁带上保留一年

全备份时一定需要备份所有数据文件吗

答 不需要 起码有两类数据文件可以不备份 一类就是临时数据文件 如果丢失 可以删除后重建;一类是只读表空间数据文件 如果上次备份以来 没有修改过表空间的只读属性 就可以不需要备份

联机日志需要备份吗

答 如果是归档方式热备份 就没有必要备份联机日志 但是对于冷备份 可以备份联机日志 特别是不归档状态 备份过联机日志后的冷备份 因为数据库是一致的 可以恢复到该备份点

七 小结

什么是数据库备份 数据库备份就是把数据库复制到转储设备的过程

数据库的运行方式 可以分为归档方式和非归档方式 建议运行在归档方式下运行热备份

了解了数据库的备份方式 逻辑备份 冷备份 热备份

了解数据库的备份工具 EXP/IMP执行逻辑备份 OS脚本可以执行冷备份或热备份 RMAN也可以执行冷备份或热备份

了解ORACLE的备份策略 并怎样选择最佳的备份策略

lishixinzhi/Article/program/Oracle/201311/18107


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13384443.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-25
下一篇 2023-07-25

发表评论

登录后才能评论

评论列表(0条)

保存