oracle备份与恢复课程指南.docx
《oracle备份与恢复课程指南.docx》由会员分享,可在线阅读,更多相关《oracle备份与恢复课程指南.docx(31页珍藏版)》请在冰点文库上搜索。
oracle备份与恢复课程指南
备份与恢复课程指南
一第二课
1LARGE_POOL_SIZE
由参数文件中LARGE_POOL_SIZE指定主要用在以下三个方面:
1)I/Oslaves:
DBWR_IO_SLAVES
2)BACKUP_TAPE_IO_SLAVES
3)Sessionmemoryforthemulti-threadedservers
该内存从SAG中分配,如果在参数文件中没有指定,那么ORACLE服务器从共享池中分配。
如果LARGE_POOL_SIZE设定了,但不够大那么在进行一些操作时会报错。
DBWR_IO_SLAVES:
该参数为一个整数值,一般用来模拟异步IO如果该操作系统的异步IO已经打开,也可以设置该参数,那么这时I/Oslaves将使用异步IO。
如果DBWR_IO_SLAVES设定为一个非零值那么ARCnprocess,LGWRprocess,andRecoveryManager的辅助进程会自动设为4。
BACKUP_TAPE_IO_SLAVES:
该参数为一个布尔值(TRUE|FALSE)如果设为TRUE在使用RecoveryManager备份、拷贝、恢复到磁带时使用。
2检查点
检查点是ORACLE数据库中一个非常重要的概念。
检查点的作用:
将数据缓存中所有改变的数据块写入数据文件(不管事物是否提交),将数据库文件的头部标为一致,并且在在控制文件当中记录检查点序号。
检查点检查点的特点:
1)检查点进程始终有效
2)检查点完成时更改文件头。
3)频繁的检查点可以减少实例恢复的时间,但是会影响性能。
检查点发生的时间及原因
1)每一次日志切换时
2)fast-startcheckpointing被设置用来减少恢复时间(实例失败)
如fast_startio_target参数被设置,fast_start_io_target:
一个动态参数用来控制实例恢复时数据块的IO读写数量。
其它影响redolog目标位置的参数:
检查点位置不能超过最小日志文件的90%。
3)当实例恢复时将有超过LOG_CHECKPOINT_INTERVAL动态参数的日志块数(即操作系统块通常为512字节)被读时。
4)当从上一次检查点发生后写日志块超过了LOG_CHECKPOINT_TIMEOUT动态参数指定的时间(以秒为单位)
5)数据库关闭时发生(SHUTDOWNABORT除外)
6)当数据库管理员使用以下命令时:
altersystemcheckpoint
7)当一个表空间被离线(OFFLINE)时或者在线备份开始时(注意只读数据文件是一个例外,它们的文件头的检查点号被冻结不会改变,所以不会与控制文件的检查点号保持一致。
)
8)在ORACLE8中提供了另外一个参数DB_BLOCK_MAX_DIRTY_TARGET
它限制了数据缓存当中最大的脏块数,一旦达到该数量就会触发一次检查点操作。
但是该参数对实例恢复时间的控制不如fast_start_io_target参数好。
所以ORACLE8I推荐使用fast_start_io_target参数。
检查点到来时所进行的工作:
1)每当检查点发生,控制文件和数据库文件(日志、数据)头部的检查点号都将被更新。
(只读数据文件和离线数据文件除外)
2)控制、日志、数据文件的检查点号一致时被称为一致性数据库。
3)数据库打开时会比较控制文件的检查点号与各数据库(日志、数据)文件的检查点号是否一致,如果有不一致的情况数据库无法正常打开(只读数据文件除外)。
4)实例恢复时检查点标记前的日志记录不会重做(前滚)。
3数据库常见错误分析:
略
4fast_start_parallel_rollback参数说明:
ORACLE7后提供了一个功能,数据库在实例失败再启动时先做一些前滚工作,然后在数据库开启时再进行相应的回滚工作。
如果一个并行操作时实例失败,那么数据库启动后要发许多时间进行回滚(常规下回滚预定义为一个串行操作)。
为了解决这个问题ORACLE提供了调节一个并行回滚的动态参数,它允许SMON进程使用并行查询辅助进程来完成回滚操作。
如果一个事务涉及的回滚块超过100,那么并行回滚自动开启。
它是一个动态参数主要有三个值:
FALSE无并行回滚进程
LOW:
CPU个数的两倍(缺省)
HIGH:
CPU个数的四倍。
监视并行回滚的视图:
V$FAST_START_SERVERS,V$FAST_START_TRANSACTIONS
二第三课备份与恢复配置
1归档和非归档方式
2几个重要参数
LOG_ARCHIVE_DEST指定路径,不能是裸设备。
LOG_ARCHIVE_FORMAT=extension
LOG_ARCHIVE_DUPLEX_DEST归档的第二个路径主要是为了归档日志的安全性。
可动态修改。
%sor%S:
在文件名中要包含日志序列号
%tor%T:
在文件名中要包含线程号
%S:
日志序列号长度一致,左边加零补齐。
3LOG_ARCHIVE_DEST_N
log_archive_dest_1="location=D:
\Oracle\oradata\ora816\archive"
动态参数指定了归档路径最多可五个,可动态设定如
altersystemsetlog_archive_dest_1='location=d:
\oracle';
与LOG_ARCHIVE_DEST冲突,推荐使用LOG_ARCHIVE_DEST_N
4几个可选参数
MANDATORY:
表示只有该路径的归档成功后,日志文件才可重用。
OPTIONAL:
与MANDATORY相反,即使该路径归档没有成功,日志文件也可重用。
缺省是OPTIONAL但是至少有一个路径是MANDATORY
对于LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST而言,前者是MANDATORY而后者是OPTIONAL
REOPEN:
归档失败后,再次尝试的间隔,以秒为单位。
缺省为300秒。
5log_archive_min_succeed_dest参数
指定了一个日志文件可重用前必须归档成功的路径个数它与MANDATORY参数共同作用,只有带MANDATORY参数的路径归档成功了并且归档成功的路径个数大于log_archive_min_succeed_dest时日志文件才可重用。
6LOG_ARCHIVE_DEST_STATE_n参数
log_archive_dest_state_2=DEFER|ENABLE
该参数是一个动态参数,如果设为DEFER那么表示log_archive_dest_2路径即使设为MANDATORY,也可以不往该路径下归档缺省为ENABLE。
实验方法如下:
实验有问题。
如果是动态设定log_archive_dest_state_2路径,那么实验不成功,但是如果在参数文件中指定则可以生效可用下面命令屏蔽一个路径。
altersystemsetlog_archive_dest_state_2=defer;
log_archive_dest_state_3这种参数的设定用动态参数修改好象并不起作用,还是在初始化文件当中设定起作用。
7非归档和归档的转化
1)正常关闭数据库
2)STARTUPMOUNT
3)ALTERDATABASEARCHIVELOG(ALTERDATABASENOARCHIVELOG)
4)ALTERDATABASEOPEN
5)SHUTDOWNIMMEDIATE
6)FULLBACKUP
8归档进程的控制
LOG_ARCHIVE_MAX_PROCESSES:
该参数决定了最多可使用的归档进程数
最多可指定10个。
这是一个动态参数。
可用以下命令修改
altersystemsetlog_archive_max_processes=3;
9自动归档
log_archive_start=TRUE
手工归档的命令
ALTERSYSTEMARCHIVELOGSTARTTO‘?
/dbs/arch’;
手工停止的命令
ALTERSYSTEMARCHIVELOGSTOP;
手工归档某一个日志文件
ALTERSYSTEMARCHIVELOGSEQUENCE052;
10显示归档信息的命令
archiveloglist
三第四课不用RMAN的物理备份
1非归档备份
冷备份:
先把数据库正常关闭(SHUTDOWNABORT除外),然后将控制文件,日志文件和数据文件进行备份。
2归档备份
热备份:
在数据库打开的状态下备份
命令:
altertablespaceuser_databeginbackup;
cp
altertablespaceuser_dataendbackup;
查阅备份信息的动态视图:
V$BACKUP、V$DATAFILE_HEADER
3备份控制文件
alterdatabasebackupcontrolfileto‘control1.bkp`;(二进制文件)
或者
alterdatabasebackupcontrolfiletotrace;(在TRACE文件中可以看到相关信息)
4只读数据文件
只读数据文件只要做一次备份即可。
四第五课不用RMAN的完全恢复
1非归档模式
把冷备份拷贝回来,如果原路径不能使用可以改名恢复。
对控制文件只要在参数文件中指向新的路径即可
对日志和数据文件可以用以下方法:
startupmount
alterdatabaserenamefile‘/disk1/data/user_01.dbf’to‘/disk2/data/user_01.dbf’;
alterdatabaseopen;
2归档模式
归档模式有以下四种方法:
1)由于丢失的数据文件属于系统表空间所以数据库原始状态是关闭的,并且没有办法先把数据库打开再恢复。
所以只能在数据库MOUNT状态进行恢复。
步骤如下:
A拷贝备份文件到正确路径
BMOUNT数据库
C使用如下命令:
recoverdatafile‘/disk2/data/df2.dbf‘;
DALTERDATABASEOPEN
注意:
如果恢复时要多个归档文件那么需要使用AUTOMATIC选项
或者在SQLPLUS中先SETAUTORECOVERYON
所有需要的归档文件拷回LOG_ARCHIVE_DEST
2)数据库某个文件损坏但是数据库依然打开,在数据库打开时进行恢复。
步骤如下:
A一旦某个文件损坏那么该文件自动变成离线状态,找到该文件,然后把该文件的备份拷回到正确路径
B使用以下命令:
recoverdatafile‘/disk2/backup/df2.dbf‘;
或者recovertablespaceUSER_DATA;
Calterdatabasedatafile‘/disk2/data/df2.dbf‘online;
或者altertablespaceUSER_DATAonline;
3)数据库某个文件损坏导致数据库关闭(但该文件不属于系统表空间并且不包含回滚段),先想办法把数据库打开再进行恢复操作。
A先MOUNT数据库STARTUPMOUNT
B找到损坏的文件,查看它的状态,如果状态不是离线需要把它变为离线状态并把它的备份文件拷回。
C打开数据库ALTERDATABASEOPEN
Drecoverdatafile‘/disk3/data/df2.dbf‘;、
或者recovertablespaceUSER_DATA;
Ealterdatabasedatafile‘/disk3/data/df2.dbf‘online;
或者altertablespaceUSER_DATAonline;
4)丢失的数据文件没有备份的恢复方法(不能属于系统表空间或包含回滚段)
A先把丢失的数据文件离线然后想办法打开数据库
Balterdatabasecreatedatafile‘/disk2/DATA/df7.dbf’2as‘/disk1/DATA/df7.dbf‘;
CrecovertablespaceTABLE_DATA;
DaltertablespaceTABLE_DATAonline;
3在备份过程中出现文件丢失错误怎么办?
1)找到备份文件select*fromv$backup;
2)结束备份状态alterdatabasedatafile2endbackup;
3)打开数据库
4)用上面讨论过的方法恢复
4日志文件丢失或有冲突怎么办?
1)清除冲突日志文件(该文件为当前组,数据库只有两组文件)
ASQL>alterdatabaseclearunarchivedlogfilegroup1;
注意:
如果采用该命令没有产生归档文件那么完全恢复不可能实现,执行该命令后请做一个备份。
BSQL>alterdatabaseclearunarchivedlogfilegroup1unrecoverabledatafile;
该命令比较罕见,它会清除一个日志文件即使有OFFLINE的数据文件需要该日志文件恢复,一旦使用该命令会产生两个结果:
·RESTORE所有的数据文件并执行不完全恢复
·删除包含离线数据文件的表空间
注意:
需要该日志文件来恢复的离线文件会不可用
该日志文件不会归档
执行该命令后马上做一个备份
2)如果丢失的日志文件不是当前日志文件
A先增加一组新的日志文件,再删除有问题的日志文件组,如果日志文件组有三组以上那么可以直接删除有问题的日志文件组
B如果一个日志组丢失,而另一个日志组更丢失的日志组大小一样,可以把另一个日志组的日志文件拷贝到丢失日志组位置然后执行以下命令
hostcp/disk1/DATA/log2a.rdo/disk1/DATA/log1a.rdo
alterdatabaseclearlogfile‘/disk1/DATA/log1a.rdo‘;
5查看恢复信息的视图
V$RECOVERY_FILE_STATUS、V$RECOVERY_STATUS
五第六课归档模式下的不完全恢复
1只能实现不完全恢复的原因
1)用户原因
·用户错误删除了一个重要的表
·用户插入了错误的数据并且已经提交
2)某些需要用到的归档文件丢失
3)所有的控制文件丢失
4)丢失了所有非归档的在线日志文件和一个数据文件
2不完全恢复的类型
不完全恢复与完全恢复差别很大,完全恢复是把某一个数据文件或某一个表空间离线恢复后再使之在线。
1)Time-basedrecovery
可以通过LOGMINER工具来找到错误操作发生的时间,这样可以更精确的进行基于时间的不完全恢复
recover[AUTOMATIC]databaseuntiltime‘1999-03-04:
14:
22:
03’;
恢复步骤如下:
·Shutdownandbackupthedatabase.(做一个完全的冷备份)
·Restorealldatafiles.
·Donotrestorethecontrolfile,redologs,passwordfiles,orparameterfiles.
·Mountthedatabaseandrecoverthedatafilesbeforethetimeoffailure.
·OpenthedatabasewithRESETLOGS.
·Performacloseddatabasebackup.
2)Cancel-basedrecovery
当前在线日志文件丢失或者某些归档文件丢失时可以采用这种方式
recoverdatabaseuntilcancel;
恢复步骤:
·Shutdownthedatabase.
·Youalreadyhaveavalidbackup,somounttheinstance.
·Restorealldatafilesfromthemostrecentbackup.
·recoverdatabaseuntilcancel
·OpenthedatabasebyusingtheRESETLOGSoption.
3)Recoveryusingabackupcontrolfile
所有的控制文件丢失只有一个二进制备份时采用这种方式,或者用户在进行一个基于时间点的恢复而该时间点和现在数据库的结构不一样了。
这时也必须使用备份控制文件。
如果用户BACKUPTOTRACE保存了一条CREATECONTROLFILE语句时可以避免。
recoverdatabaseuntiltime‘1999-03-04:
14:
22:
03’usingbackupcontrolfile;
EXAMPLE:
用户在某一个时间点错误地删除了一个表空间droptablespaceemp_tsincludingcontents;
恢复步骤如下:
·Shutdownthedatabase,backupcontrolfiles,thenrestorealldatafilesandcontrolfilesforthedatabaseatatimewhenthetablespaceexisted.
·因为控制文件和日志文件不同步所有无法正常打开数据库。
用户需要执行以下命令:
select*fromv$recover_file;
alterdatabasedatafile4online;(必须要让所有的数据文件在线)
recoverdatabaseuntiltime’1999-03-09:
11:
44:
00’usingbackupcontrolfile;
alterdatabaseopenresetlogs;
4)Change-basedrecovery
与基于时间点的恢复类似,这种方式恢复需要提供一个SCN号。
3当前在线日志文件丢失的方法:
当前在线日志文件丢失后数据库有可能处于两种状态
1)数据库依然打开但是HANG住,但是还能进行一些管理操作。
用以下方法恢复
清除日志文件组alterdatabaseclearunarchivedlogfilegroup1;
2)数据库关闭
用以下方法恢复
ASTARTUPMOUNT
Balterdatabaseclearunarchivedlogfilegroup2;
Crecoverdatabaseuntilcancel;
DALTERDATABASEOPENRESETLOGS
4数据库恢复后以RESETLOGS方式打开后再出现问题的恢复方法
所有的归档日志均存在,OPENRESETLOGS前后的控制文件都存在。
OPENRESETLOGS之前的备份存在,之后无备份
恢复步骤如下:
1)拷贝现在的控制文件到别的位置
Copythecurrentdatabasecontrolfilestoanotherlocation.
2)把OPENRESETLOGS之前的备份拷回来
RestorethedatafilesandcontrolfilesfromabackupbeforethelastRESETLOGSoperation.
3)Mountthedatabase.
4)从警告日志文件当中找到OPENRESETLOGS的SCN号
IncompleterecoverydoneUNTILCHANGE309121
MediaRecoveryComplete
5)recoverdatabaseuntilchange309121usingbackupcontrolfile;
6)Shutdownthedatabaseusingthe“normal”option.
7)Restorethecurrentcontrolfilesfromthelocationspecifiedinstep1.
8)Mountthedatabase.
9)RecoverthedatabaseusingtheappropriateoptioninRECOVERDATABASEcommand.
10)Openthedatabase.
六第七课EXPORT和IMPORT使用指南
1EXP的各个参数我们在DBA那么课程中已经讲得很详细,现在来讨论完全、增量和累积备份
这三种备份的前提是做一个全库备份即FULL=Y
1)增量备份increament
增量备份只备份上一次备份(可以是完全、增量或累积备份)后改变的对象
增量备份在数据库有许多被修改的小表时使用,如果数据库中只有几个大表则不太合适。
EXAMPLE:
expsystem/managerFULL=yinctype=Incrementalfile=expinc1.dmp累积备份
累积备份只备份上一次备份(完全或累积备份)后改变的对象。
EXAMPLE:
cumulative
expsystem/managerFULL=yinctype=cumulativefile=expcum1.dmp
2针对增量备份和累积备份的导入操作(IMP)。
Performthefollowingstepsintheordergiven:
1)RuntheimportoptionwithFULL=YandINCTYPE=systemon
themostrecentdatabaseexport.
2)RunimportagainwithFULL=YandINCTYPE=restoreusing
themostrecentcompleteexport.
3)Runallcumulativeexportsinorderstartingwiththe
firstcumulativeexportafterthemostrecentcompleteexport.
4)Runallincrementalexportsinorde