扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
在本页阅读全文(共3页)
5、创建归档日志备份包括恢复目录内务
归档日志每天都要备份,我们已经叙述过正常情况下每周执行一次0级备份,因为这个备份天天都要发生,这一步我们执行我们的RMAN恢复目录维护,脚本叫做DBNAME_arc_only_disk.rcv。
代码清单8:
#************* Configure controls for Recovery Manager ************
#************* in case they have been changed *********************
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk
to 'X:\rman\CFILE_%F.bks';
configure retention policy to recovery window of 34 days;
#************* Perform nightly RMAN Archivelog Backup *************
backup archivelog all format 'X:\rman\ARC_%d_%U_%T_%s.bks';
#************* Maintenance Step to remove old Archivelogs *********
delete noprompt archivelog until time 'SYSDATE - 3';
#************* Maintenance Steps to clean Recovery Catalog ********
report obsolete device type disk;
crosscheck backup completed before 'sysdate-34';
delete noprompt obsolete recovery window of 34 days device type disk;
delete noprompt expired backup device type disk;
#************* Show all controls configured for this **************
#************* Database in RMAN ***********************************
show all;
#************* List all RMAN disk backups *************************
list backup of database device type disk;
最前面的两行命令配置RMAN自动备份控制文件和spfile,第一个命令开启它,因此运行备份命令时控制文件和spfile就被备份了;第二个命令告诉RMAN如何用指定的格式命名文件,在本例中,备份到磁盘上叫做‘X:\rman\CFILE_F%.bks’的文件;第三行告诉恢复目录目标数据库的备份保留34天;第四行才真正地执行备份,它告诉RMAN用指定的格式备份磁盘上的所有归档日志;接下来移除所有超过3天的旧归档日志,我们想在磁盘上保持归档日志3天;接下来我们就进入恢复目录维护小节了,目录维护非常重要,如果这些文件被删除维护步骤不能执行,那么恢复目录将不再包含关于备份的有效信息,紧接着报告备份作废,使磁盘满足我们的保留34天的策略,任何被认为是作废的旧的备份可以被删除,交叉检查命令将向你报告是否有文件丢失了,如果发现了丢失的文件,它们将被标记为过期的,接下来的两个删除命令从目录中移除作废的和过期的信息,记住,我们每7天从磁盘删除所有的RMAN备份文件,我们的保留策略设置为34天,因为我们的现场磁带保留策略也是这样,如果需要,我们可以在一个服务器上恢复RMAN文件到34天前,我们可以恢复文件到数据库吗?是的,我们可以!怎么做呢?因为我们有一个34天保留策略以及我们所有关于那些备份的RMAN信息都还在恢复目录中!下面的show all命令给出了我们在RMAN中配置参数,list命令显示了所有仍然保留在恢复目录中的磁盘备份。
提示:显然,恢复目录很重要所以它也需要备份,它也很容易恢复,如果你丢失了恢复目录而且处于紧要关头,你只需要导入恢复目录方案到任何数据库即可!你就得到一个新的恢复目录
。
这个脚本的批处理文件很简单,批处理文件叫做DBNAME_arc_only_disk.bat。
代码清单9:
set NLS_DATE_FORMAT=DD-MON-YYYY HH24:MI:SS
set NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252
set CURDIR=D:\oracle\admin\common\backup
cd %CURDIR%
rman target ID/pword@DBname catalog rcatID/rcatpword@rcatname log=logs\
DBNAME_arc_only_disk.log @DBNAME_arc_only_disk.rcv
page_on_backup.vbs DBNAME_arc_only_disk.log page_DBNAME_arc_only.log DBNAME
最前面两行设置你的环境变量,第三和第四行用于任务计划,很重要,windows需要直接指定RMAN脚本的位置,因此设置好目录后将脚本移动到该目录中,接下来调用RMAN,需要登陆到target和catalog,在当前目录下的子目录logs中会生成一个单独的日志文件,然后调用清单9中的代码,如果出现任何错误哦,一个VB脚本会呼叫支持人员,如果没有错误就发送一封日志文件电子邮件,在第9小节有更详细的介绍。
6、删除数据泵导出文件
每次运行数据泵时它需要为数据泵文件取一个新名字,与导出不同,它不会覆盖旧的数据泵文件,因此以前在夜间调度执行的数据泵导出文件需要被移除,下面是批处理文件:
代码清单10:
set CURDIR=D:\oracle\admin\common\batch
cd %CURDIR%
set logfile=logs\delete_Xdrive_expdp_files.log
echo 'logfile = ' %logfile% >%logfile%
echo . >>%logfile%
echo . >>%logfile%
echo '******************************************************' >>%logfile%
echo '* The following files will be deleted. *' >>%logfile%
echo '******************************************************' >>%logfile%
echo . >>%logfile%
echo . >>%logfile%
FORFILES /p X:\data_pump\DMPs /m *.dmp /d -0 /c "CMD /C echo
@PATH\@FILE @FDATE.@FTIME" >>%logfile%
echo . >>%logfile%
echo . >>%logfile%
echo '******************************************************' >>%logfile%
echo '* Starting deletes now ... *' >>%logfile%
echo '******************************************************' >>%logfile%
echo . >>%logfile%
echo . >>%logfile%
FORFILES /p X:\data_pump\DMPs /d -0 /c "CMD /C del *.dmp" >>%logfile%
echo . >>%logfile%
echo . >>%logfile%
这里和我们在其他批处理脚本中看到的一样,首先我们设置好目录然后将脚本放进去,我们也设置了日志文件为一个变量,因为我们将经常使用它,实际上,第一条进入日志文件的条目是日志文件名,使用点的echo命令只是为了让日志可读性更佳,实际上这里只有两条有效的命令,第一条简单地列出即将删除的文件,第二条命令真正地执行删除操作。
7、执行数据泵导出
作为我们工作中附加的一种安全保护措施,我们也执行了夜间数据泵导出,作为一个额外的优点,当我们需要恢复一到两个表时,它比RMAN更容易。
我们使用par文件保存我们的数据泵命令,与导出非常类似,我们在数据库中设置了一些变量,你可以在par文件中看到,下面是创建它们的SQL语句:
代码清单11:
create directory x_dp_dumps as 'X:\data_pump\DMPs';
create directory x_dp_logs as 'X:\data_pump\logs';
这些信号指定数据泵发送导出文件和日志文件的位置,下面是par文件的内容:
代码清单12:
content = all
dumpfile = x_dp_dumps:DBNAME_FULL_%U.dmp
estimate = statistics
full = y
job_name = DBNAME_FULL
logfile = x_dp_logs:DBNAME_FULL.log
filesize = 2G
content=all意味着我们想导出所有的数据或没有例外,dumpfile参数要求我们指定文件存放位置和文件名,文件文章是一个变量,文件名使用了替换变量U%,U%将被一个两位数的整数(从01开始)替换,可以创建一个或多个文件,依赖于数据库的大小,estimate给你提供了一个数据泵文件可能的大小的主意,block是默认值,但我们使用了statistics,full指定你是否想导出一个完整的数据库,job_name是可选的,实际中你可以给它取一个你喜欢的名字,logfile与dump file的设置类似,logfile要求你指定文件位置和文件名,文件位置和文件名都可以给定一个变量,filesize也是可选的,我们想让文件大小保持为2G或更小,当复制或压缩时,它会更容易和更快地移动或压缩(10个文件比1个大文件要快)。
我们调用数据泵作为一个计划任务,但是我们的设置有一点不同,我们为每个数据库准备有一个特殊的par文件和执行它的一个命令批处理文件,下面是计划任务中使用到的命令:
代码清单13:
D:\oracle\admin\common\expdp\expdp_DATABASE.bat DBNAME
实际上它是用于调用数据泵par文件的批处理文件。
代码清单14:
set DATABASE=%1
set ORACLE_HOME=D:\oracle\product\10.2.0\db_1
%ORACLE_HOME%\bin\expdp ID/pword@%DATABASE% parfile=D:\oracle\a
dmin\common\expdp\expdp_%DATABASE%.par
需要传递给批处理文件的唯一参数是数据库名,它成了%DATABASE%,照这样执行数据泵导出给我们带来了很好的效果。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者