小白求教,心血来潮想入手一款性价比高的入耳式耳机机,求

oracle_关于RMAN备份和恢复的10个实践
关于备份和恢复的 10 个最佳实践。
本文档假设您正在执行基本的备份和恢复
- 在 Archivelog 模式下运行
- 多路镜像控制文件
- 定期执行备份
- 周期性执行全库恢复测试
1. 开启块检查。
这样做的目标是尽早发现数据库中的坏块。这只会占用很少的性能开销,但却可以让 Oracle 尽早检测出由底层磁盘、存储系统、或 I/O
系统问题导致的坏块。
SQL& alter system set
db_block_checking = true scope=
2. 使用 RMAN 增量备份时开启块更改跟踪(Block Change
Tracking)功能(10g 及更高版本)。
更改跟踪文件包含了可以使 RMAN
增量备份进程避免读取自上次备份以来未修改的数据所需要的信息。如果不使用块更改跟踪功能,则必须读取所有块来确定自上次备份以来是否对其进行了修改。
SQL& alter database enable
block change tracking using file
'/u01/oradata/ora1/change_tracking.f';
3. 镜像 重做日志组和成员,并将归档日志存放在多个目标位置。
通过在多个位置存放多个副本,当某个归档日志损坏或丢失时,其他日志仍然存在并可以使用。
如果某个在线日志被删除或损坏,在需要时还可以使用其他成员进行恢复。
SQL& alter system set
log_archive_dest_2='location=/new/location/archive2'
SQL& alter database add logfile member
'/new/location/redo21.log' to group 1;
4. 使用 RMAN 备份数据库时使用 CHECK LOGICAL
这可以使 RMAN 对数据块除了进行常规的校验和验证之外,还检查块内的逻辑损坏。这是确保您获得完好备份的最佳方法。
RMAN& backup check logical
database plus arc
5. 测试备份。
这将执行除实际回复(restore)数据库之外的所有操作。要确定在出现问题(此时备份非常重要)之前备份是否完好以及可用,这是最好的办法。
如果使用 RMAN,可以使用以下命令执行此操作:
RMAN& restore validate
6. 使用 RMAN 时,将每个数据文件存放在单独的备份片(backup
piece)中。
执行部分恢复时,RMAN
必须读取完整的备份片以获取需要的数据文件/归档日志。因此,备份片越小,恢复完成的速度越快。这尤其适用于对大型数据库进行的磁带备份或仅对单个/少数几个文件进行的恢复。
然而,如果 filesperset
的值很小,也会导致创建更多的备份片,因而会降低备份性能并增加维护操作时间。因此必须根据所需的恢复时间要求对这些因素加以权衡。
RMAN& backup database
filesperset 1 plus arc
7. 维护 RMAN 目录(catalog)/控制文件
认真选择保留策略(retention policy)。确保它可以满足磁带保留策略以及备份恢复策略的要求。如果未使用目录,确保
CONTROL_FILE_RECORD_KEEP_TIME 参数与保留策略匹配。
SQL& alter system set
control_file_record_keep_time=21 scope=
这会将备份记录在控制文件中保留 21 天。
请参阅以下文档了解更多详细信息:
How to ensure that backup metadata is retained in
the controlfile when setting a retention policy and an RMAN catalog
is NOTused.
定期运行以下目录维护命令。
原因:Delete obsolete 将删除保留策略以外的备份。
如果过期的备份未删除,则目录将不断增长,直至出现性能问题。
原因:crosschecking 将检查目录/控制文件是否与物理备份匹配。
如果某个备份丢失,此命令会将该备份片
设为“EXPIRED”,在开始恢复时,将不使用这个备份,而使用更早的备份。要删除目录/控制文件中已过期的备份,请使用 delete
expired 命令。
RMAN& crosscheck
8. 为控制文件丢失做准备。
这将确保您始终能够拥有最新的控制文件,控制文件备份在当前备份结束时执行,而不是在备份期间。
RMAN& configure controlfile
保留备份日志
原因:备份日志包含了磁带存取的参数、控制文件备份的位置,如果所有文件都丢失了,则可以利用该日志。
9. 测试恢复
原因:在需要执行恢复的时候,您可以不实际执行恢复就知道恢复流程是如何操作的,并可避免再次回复数据文件。
SQL& recover database
10. 使用RMAN 备份时,在备份归档日志时不要指定“delete all
原因:“delete all
input”在备份一个归档目录下的归档日志后,会删除该归档日志在不同归档目录下的所有副本,而“delete
input”在备份一个归档目录下的归档日志后,仅删除该目录下的归档日志,下一次备份将备份归档目录 2 下的日志以及归档目录 1
的新日志,然后删除所有备份过的日志。这意味着您将保留自最后一次备份以来在归档目录2
下可用的归档日志(包括曾备份的日志)以及上次备份之前备份的两份副本。
Managing multiple archive log destinations with
来了解更多信息。
References
- How to ensure that backup metadata is retained in the controlfile
when setting a retention policy and an RMAN catalog is
- Managing multiple archive log destinations with
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。查看: 6611|回复: 20
RMAN全备份前的归档日志还需要备份或者保留吗?
论坛徽章:55
1、备份全库,不备份归档日志文件
RUN{BACKUP DATABASE INCLUDE CURRENTCONTROLFILE;}&&---备份集A
2、成功备份后,归档当前日志文件
SQL& ALTER SYSTEM ARCHIVE LOG CURRENT;& &---归档日志文件B。
假如,此时数据库不幸宕机,应用备份集A+归档日志文件B及其之后的归档日志文件+当前联机日志文件即可修复数据库。
问题:①为什么我们通常备份的时候还备份了归档日志文件B之前产生的归档日志文件。如下命令:
& && && && &RUN{BACKUP DATABASE INCLUDE CURRENT CONTROLFILE PLUS ARCHIVE LOG;}
& && && &②有些puber的不但对归档日志文件进行备份,而且还存储到另一台服务器上,为什么要这样做?
论坛徽章:0
这个 “PLUS ARCHIVE LOG” 应该是当前的 ARCHIVE LOG不是备份之前的
论坛徽章:10
有可能需要几天前的全备份来做不完全恢复,所以需要几天前全备份后产生的归档日志. 所以plus archive log. 防止服务器坏了启动不了,所以迁移到别的存储上。
论坛徽章:6
不完全恢复啊
论坛徽章:26
归档日志也没了那??怎么去做恢复,是直接恢复到你备份的时候吗?
论坛徽章:3
cqsnail 发表于
这个 “PLUS ARCHIVE LOG” 应该是当前的 ARCHIVE LOG不是备份之前的
备份的是所有有效的归档日志,从最后一次resetlogs之后到目前为止的所有归档。备份时产生的日志也会归档。
求职 : 论坛徽章:10
backup database include current controlfile plus archive log
这个过程是先归档,然后备份archive,备份数据文件和控制文件,再次归档当前日志,备份备份期间的归档日志,其实这里个人也有点疑惑,所备份的控制文件并没有备份最后的归档的归档日志,所以恢复时并不能用最后的一个archive,所以自己一般在最后又再次备份了控制文件,希望大牛给俺们见解下
论坛徽章:3
yongzhuhe99 发表于
不完全恢复啊
做了全备份,没法执行不完全备份,恢复到备份之前的状态啊?
23:32:29 SQL& create table emp1 as select *
表已创建。
23:32:39 SQL& select count(*) from emp1;
&&COUNT(*)
----------
& && &&&14
backup database include current control
SQL& shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL& host del D:\oracle\product\10.2.0\oradata\orcl\USERS01.DBF
{startup mount
sql &alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''&;
recover datafile 4 until time ' 23:32:20';
sql 'alter database open resetlogs';
启动 recover 于 19-4月 -12
使用通道 ORA_DISK_1
RMAN-00571: ========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ============
RMAN-00571: ========================================================
RMAN-03002: recover 命令 (在 04/19/:25 上) 失败
RMAN-06555: 数据文件 4 必须从 19-4月 -12 之前创建的备份复原
论坛徽章:5
owen00sun 发表于
做了全备份,没法执行不完全备份,恢复到备份之前的状态啊?
23:32:29 SQL& create table emp1 as sel ...
删除了数据文件, 要先resore, 再recover ...
论坛徽章:5
LZ:如果 第一个问题解决了,那第二个也就应该能解决。& &
& &再加一个: 为什么最后要归档一下呢??
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号使用RMAN备份时应如何处置归档日志文件 - 数据库综合 - 次元立方网 - 电脑知识与技术互动交流平台
使用RMAN备份时应如何处置归档日志文件
昨天去某客户部署RMAN备份,在跑shell脚本的时候,提示找不到归档日志,因为客户那里之前只对数据库做EXPDP逻辑导出备份,并且每天都自动删除前一天的归档,每个归档的生成量大概在200M左右,因为考虑磁盘空间比较紧张,不得已而为之。
在我的脚本中,是采用backup database format 'xxx' plus archivelog format 'xxx'的方式进行备份的,在执行RMAN脚本时,由于是先对归档日志进行备份,再对数据库进行备份的,在脚本的输出日志中,提示找不到35xxx的归档日志,而现在最旧的还物理存在的归档日志已经到36xxx了,也就是说,这1000多个日志其实是已经被OS脚本从物理上删除了,后来检验了一下确实如此,每天生成的归档数量大约为40个左右,那么一天的归档日志就是800M左右
于是进入RMAN对归档日志进行crosscheck,发现有7000多个归档日志检查结果是“failed”的(物理上已被删除),命令如下:
RMAN& cross
再对这些expired的归档,从控制文件信息删除掉
RMAN& delete noprompt ex
然后再继续跑脚本,之后的备份就很顺利,先把归档日志备份完毕,接着是备份数据库,最后是控制文件和spfile
回来之后,我自己又做了一个测试,发现即便是当归档日志文件未failted的时候,备份还是顺利地进行下去了,下面看我自己的测试:
1. 先把归档日志移动到别的目录(模拟日志被物理删除)
[oracle@ora10g ~]$ cd $ORACLE_BASE/flash_recovery_area/ORA10G/archivelog
[oracle@ora10g archivelog]$ ll
drwxr-x--- 2 oracle oinstall 4096 Sep 24 11:46
[oracle@ora10g archivelog]$ mv /* .
[oracle@ora10g archivelog]$ ll
total 6636
drwxr-x--- 2 oracle oinstall
4096 Sep 24 11:59
-rw-r----- 1 oracle oinstall
597504 Sep 24 11:46 o1_mf_1_10_b24ho39f_.arc
-rw-r----- 1 oracle oinstall 5473792 Sep 24 11:35 o1_mf_1_3_b24gz52r_.arc
-rw-r----- 1 oracle oinstall
373248 Sep 24 11:35 o1_mf_1_4_b24gz81d_.arc
-rw-r----- 1 oracle oinstall
180224 Sep 24 11:35 o1_mf_1_5_b24gzbb6_.arc
-rw-r----- 1 oracle oinstall
33792 Sep 24 11:35 o1_mf_1_6_b24gzd6y_.arc
-rw-r----- 1 oracle oinstall
26624 Sep 24 11:35 o1_mf_1_7_b24gzky8_.arc
-rw-r----- 1 oracle oinstall
1536 Sep 24 11:35 o1_mf_1_8_b24gzqnt_.arc
-rw-r----- 1 oracle oinstall
57344 Sep 24 11:44 o1_mf_1_9_b24hjflc_.arc
这里共有8个归档日志文件被“删除”
2. 进入RMAN,对归档日志进行交叉校验
[oracle@ora10g archivelog]$ exit
host command complete
RMAN& cross
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=145 devtype=DISK
validation failed for
archived log
archive log filename=/u01/app/oracle/flash_recovery_area/ORA10G/archivelog//o1_mf_1_3_b24gz52r_.arc recid=208 stamp=
validation failed for archived log
archive log filename=/u01/app/oracle/flash_recovery_area/ORA10G/archivelog//o1_mf_1_4_b24gz81d_.arc recid=209 stamp=
validation failed for archived log
archive log filename=/u01/app/oracle/flash_recovery_area/ORA10G/archivelog//o1_mf_1_5_b24gzbb6_.arc recid=210 stamp=
validation failed for archived log
archive log filename=/u01/app/oracle/flash_recovery_area/ORA10G/archivelog//o1_mf_1_6_b24gzd6y_.arc recid=211 stamp=
validation failed for archived log
archive log filename=/u01/app/oracle/flash_recovery_area/ORA10G/archivelog//o1_mf_1_7_b24gzky8_.arc recid=212 stamp=
validation failed for archived log
archive log filename=/u01/app/oracle/flash_recovery_area/ORA10G/archivelog//o1_mf_1_8_b24gzqnt_.arc recid=213 stamp=
validation failed for archived log
archive log filename=/u01/app/oracle/flash_recovery_area/ORA10G/archivelog//o1_mf_1_9_b24hjflc_.arc recid=214 stamp=
validation failed for archived log
archive log filename=/u01/app/oracle/flash_recovery_area/ORA10G/archivelog//o1_mf_1_10_b24ho39f_.arc recid=215 stamp=
Crosschecked 8 objects
3. 不删除expired的归档,直接跑RMAN备份脚本
这次并没有报错并提示xxx归档找不到,而是直接就完成了备份,生成了备份集297,与在客户那里碰到的情况有出入
--备份完成后,查看生成的备份集
[oracle@ora10g ~]$ cd /u01/orabackup/backupsets/
[oracle@ora10g backupsets]$ ll -lrth
total 1.6G
......其他备份集(略)
-rw-r----- 1 oracle oinstall 606K Sep 24 12:00 ora10g-_.arc
-rw-r----- 1 oracle oinstall 166M Sep 24 12:02 ora10g-_.db
-rw-r----- 1 oracle oinstall 610K Sep 24 12:02 ora10g-_.arc
-rw-r----- 1 oracle oinstall 7.3M Sep 24 12:02 ora10g-c--.ctl
可以看到,备份全部完成了,共生成了2个归档日志备份集(arc),1个数据库备份集(db)以及控制文件备份集(ctl),这里有个细节要注意,由于我在脚本中写入了%s参数,从上面生成备份集生成的时间以及顺序可以发现RMAN备份这样一个顺序:
1. 对现有可以备份的数据库归档日志文件做一个备份
2. 对数据库进行备份
3. 切换一下日志,对完成全库备份后的归档日志再做一个备份(即使你没有通过RMAN& sql &alter system archive log current&;来手动切)
4. 对控制文件备份(包括spfile,生成在同一个备份集)
我们可以看一下详细的日志输出,来对这个顺序有更深刻的了解:
Starting backup at 24-914
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting compressed archive log backupset
channel ORA_DISK_1: specifying archive log(s) in backup set
input archive log thread=1 sequence=11 recid=216 stamp=
channel ORA_DISK_1: starting piece 1 at 24-914
channel ORA_DISK_1: finished piece 1 at 24-914
piece handle=/u01/orabackup/backupsets/ora10g-_.arc tag=ARC_BAK
comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03
Finished backup at 24-914
Starting backup at 24-914
using channel ORA_DISK_1
channel ORA_DISK_1: starting compressed full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00001 name=/u01/app/oracle/oradata/ora10g/system01.dbf
input datafile fno=00003 name=/u01/app/oracle/oradata/ora10g/sysaux01.dbf
input datafile fno=00002 name=/u01/app/oracle/oradata/ora10g/undotbs01.dbf
input datafile fno=00005 name=/u01/app/oracle/oradata/ora10g/example01.dbf
input datafile fno=00006 name=/u01/app/oracle/oradata/ora10g/zlm01.dbf
input datafile fno=00004 name=/u01/app/oracle/oradata/ora10g/users01.dbf
channel ORA_DISK_1: starting piece 1 at 24-914
channel ORA_DISK_1: finished piece 1 at 24-914
piece handle=/u01/orabackup/backupsets/ora10g-_.db tag=DB_BAK
comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:02:16
Finished backup at 24-914
Starting backup at 24-914
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting compressed archive log backupset
channel ORA_DISK_1: specifying archive log(s) in backup set
input archive log thread=1 sequence=12 recid=217 stamp=
channel ORA_DISK_1: starting piece 1 at 24-914
channel ORA_DISK_1: finished piece 1 at 24-914
piece handle=/u01/orabackup/backupsets/ora10g-_.arc tag=ARC_BAK
comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02
Finished backup at 24-914
Starting Control File and SPFILE Autobackup at 24-914
piece handle=/u01/orabackup/backupsets/ora10g-c--.ctl comment=NONE
Finished Control File and SPFILE Autobackup at 24-914
顺序执行的4个部分,分别生成了4个备份集,虽然从日志来看,并没有发现备份完数据库以后,RMAN对归档日志进行了切换,但实际上确实是如此的,因为此刻我并没有对数据库进行切换归档操作。其实在RMAN对数据库备份之后对日志切换后再把归档日志备份一遍,是为了能让尽可能多的数据库改动都被写入磁盘,方便将来用备份集恢复。
对数据库的DML操作是通过写入online redo logfile来保证其一致性的,即使是undo中的数据,也会写入redo日志,我们称之为undo的redo,undo的redo向量与redo的redo向量合并为一条redo记录,被写入online redo logfile,而归档日志的作用,就是当online redo logfile要被刷新时,先对这些要刷新的内容进行归档,那么既然redo内容包含了所以的数据库的更改,恢复时也必须要使用归档日志来进行recover,把数据库推进到一致性状态。
RMAN是属于非一致性的备份,可以在数据库open状态下对数据库进行备份,要使不一致性备份的数据库达到一致性状态,那么就只有靠归档日志来实现了。那么,当RMAN切换日志的那一刻,可以保证数据库的最新更改内容被写到这个归档日志中,并对其备份,那么备份时间点之前的那些归档,就不再需要了。
考虑到备份全部归档会浪费大量磁盘空间,也没有这个必要,我们可以在RMAN备份前,先删除一部分归档,使归档备份集可以小一点,在磁盘空间比较紧张的情况下尤为需要注意,删除归档,可以使用以下的命令:
--删除7天前归档
RMAN& delete noprompt archivelog all completed before 'sysdate-7';
RMAN& delete noprompt archivelog until time 'sysdate-7';
--删除7小时前归档
RMAN& delete noprompt archivelog all completed
before 'sysdate-7/24';
RMAN& delete noprompt archivelog until time 'sysdate-7/24';
注意语法区别,前者有all关键字,而后者没有,不能互换使用,否则会报错:
RMAN& delete noprompt archivelog all until time 'sysdate-7';
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00558: error encountered while parsing input commands
RMAN-01009: syntax error: found &until&: expecting one of: &backed, completed, device, like, ;, tag&
RMAN-01007: at line 1 column 32 file: standard input
RMAN& delete noprompt archivelog completed before 'sysdate-7/24';
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00558: error encountered while parsing input commands
RMAN-01009: syntax error: found &completed&: expecting one of: &all, double-quoted-string, from, high, integer, like, logseq, low, scn, sequence, single-quoted-string, time, until&
RMAN-01007: at line 1 column 28 file: standard input
删除完以后,记得crosscheck一下,再把失效的归档日志记录从控制文件中去掉
RMAN& cros
RMAN& delete noprompt ex
备份的时候还可以再利用压缩特性(RMAN& backup as compressed backupset ...),使备份集更加小,但可能带来的副作用是备份和恢复时间会适当久一些,看磁盘空间和时间哪个更重要了。这样,我们的备份集才是最精简的。
延伸阅读:
上一篇讲解了如何在ABP中使用RedisCache,虽然能够正...
本教程为 李华明 编著的iOS-Cocos2d游戏开发系列教程:教程涵盖关于i......
专题主要学习DirectX的初级编程入门学习,对Directx11的入门及初学者有......
&面向对象的JavaScript&这一说法多少有些冗余,因为JavaScript 语言本......
Windows7系统专题 无论是升级操作系统、资料备份、加强资料的安全及管......}

我要回帖

更多关于 性价比高的入耳式耳机 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信