DBA最重要的工作是确保数据库不会丢失数据。
1、 备份与恢复问题
备份与恢复需要考虑业务需求、性能以及资金成本,是一个折中方案。
记录这个方案的形式是服务级别协议。
服务级别协议与备份和恢复相关有以下三个方面:
。MTBF(平均恢复时间):指的是数据库出现失败的频繁度。Oracle提供了:RAC和STREAM功能,减少失败,提供容错功能。
。MTTR(平均恢复时间):指的是数据库出现失败后的停机时间。这个需要DBA的实践。这个最能看出DBA的个人能力。这个需要实践、实践、再实践。
。数据的损失最小化。Oracle提供了:DATA GUARD功能。
任何容错系统都特别依赖于硬件冗余。
RAC:由位于多台计算机上的多个实例所打开的一个物理数据库组成。使硬件、OS与软件免遭失败。
STREAM:能够根据需要保持两个数据库实时同步。使磁盘、网络、硬件、OS与软件免遭失败。
DATA GUARD:实践运行的数据库受到一个或多个备用数据库的保护。
2、 失败类别
失败类别需要记录在服务级别协议中。
2.1 语句失败
语句失败的四个常见原因:
。无效数据:由于违反了格式和完整性约束所造成的。
。逻辑错误:编程人员开发的数据库无法运行的代码。比如:死锁。
。空间分配问题:由于表空间已满而无力扩展某个段;耗尽撤销空间;运行使用磁盘排序的查询时临时空间不足;某个用户达到配额;某个对象达到其最大区间限制。
。缺少权限。
2.2 用户进程失败
用户进程失败的原因有:
。用户并非登出的异常退出。
。终端的重新启动。
。导致地址违规的程序。
一般是由oracle的PMON进程来自动解决。
2.3 网络失败
一般需要考虑侦听器、网络接口卡和路由。要做好软件和硬件的容错和负载均衡。
2.4 用户错误
修正用户错误的技术有:
。闪回查询:针对过去某时存在的数据库所运行的查询。
。闪回删除:倒退到了drop table 命令的结果。
。LOG MINER: 是一种从联机和归档的重做日志中抽取信息的高级工具。
。不完全恢复和闪回数据库:会损失事务。
2.5 介质失败
介质失败意味着磁盘的损坏,因此磁盘上的文件会受到损坏。还包括使用操作系统命令rm等删除了数据文件。(rm能不用最好不用,不是个好东西。)
为了应该介质失败,控制文件和联机重做日志必须复用,必须生成控制文件、联机重做日志文件以及归档日志文件的多个副本,此外还必须对控制文件、数据文件以及归档日志文件进行备份。复用并不能保护数据文件,数据文件必须通过硬件冗余进行保护。
2.6 实例失败
实例失败是实例的无序关闭,通常称为崩溃。包括断电、关闭和重启服务器,以及其他硬件问题。
3、 实例恢复
实例恢复是自动的,我们无法随意停止实例恢复过程。
3.1 实例恢复过程
。前滚,将恢复所有变化。前滚结束后,数据库被打开。
。回滚,自动完成未提交事务的回滚操作。(回滚是在数据库打开后进行的)
3.2 实例恢复不可能导致数据库出现讹误
重做流中始终存在足够的信息,从而不仅能够重新构造发生崩溃前进行的所有操作,而且能够重新构造回滚崩溃时正在进行的事务所需的撤销信息。
重做和回滚的这种实例恢复机制能够确保实例恢复不可能导致数据库出现讹误。
3.3 调整实例恢复
实例恢复在数据库打开之前需要耗费大量的时间来完成实例恢复的前滚,这就是得MTTR指标出现下降。
实例恢复的时间取决于:
。需要读取的重做数。
。应用重做时需要在数据文件上完成的I/O操作数。
这两个因素都受检查点的控制。检查点保证了在某个特定的时间,DBWn 进程将构成一个特定系统更改号(SCN)的所有数据变化都已写入数据文件。
检查点位置越近,实例恢复越快。(会加大DBWn 进程写数据的I/O压力)
FAST_START_MTTR_TARGET参数:使得对实例恢复时间的控制变得十分容易。设置的FAST_START_MTTR_TARGET参数值越小,DBWn 进程将会更努力地尝试检查点位置与实际时间之间的间隔。
V$INSTANCE_RECOVERY视图给出了详尽的信息。
3.4 MTTR顾问程序
通过使用FAST_START_MTTR_TARGET参数和V$INSTANCE_RECOVERY视图的接口,可以估计恢复实例时间。
1将fast_start_mttr_target=0,从而禁用检查点调整功能。 sys@ORCL> alter system set fast_start_mttr_target=0; 系统已更改。 sys@ORCL> create table t3 as select * from all_objects where 1=2; 表已创建。 sys@ORCL> insert into t3 select * from all_objects; 已创建45988行。 2查询实例崩溃时恢复实例需要完成的工作。 sys@ORCL> select recovery_estimated_ios, actual_redo_blks, estimated_mttr from v$instance_recovery;
RECOVERY_ESTIMATED_IOS ACTUAL_REDO_BLKS ESTIMATED_MTTR ---------------------- ---------------- -------------- 752 11558 17 3 Commit命令不会对DBWn进程产生影响。 sys@ORCL> commit;
提交完成。
sys@ORCL> select recovery_estimated_ios, actual_redo_blks, estimated_mttr from v$instance_recovery;
RECOVERY_ESTIMATED_IOS ACTUAL_REDO_BLKS ESTIMATED_MTTR ---------------------- ---------------- -------------- 800 11780 17 4 手动执行检查点进程,DBWn进程会将变化的数据写入到数据文件中。estimated_mttr的值不会变小,因为该列的内容不会被实时更新。 sys@ORCL> alter system checkpoint;
系统已更改。
sys@ORCL> select recovery_estimated_ios, actual_redo_blks, estimated_mttr from v$instance_recovery;
RECOVERY_ESTIMATED_IOS ACTUAL_REDO_BLKS ESTIMATED_MTTR ---------------------- ---------------- -------------- 0 0 17 |
4、 配置数据库的可恢复性
为了保证数据库具有最大程度的可恢复性,必须复用控制文件与联机重做日志,必须在archivelog模式中运行数据库,同时也不行复用归档日志文件,此外还必须定期备份数据库。
4.1 保护控制文件
控制文件用于加载数据库,并且在数据库打开时被频繁读取。
控制文件最多有8个被复用的副本。任何一个控制文件副本的损坏都会导致停机。
sys@ORCL> show parameter control_files
NAME TYPE VALUE -------------------- ----------- ------------------------------ control_files string E:\ORACLE\PRODUCT\10.2.0\ORADATA\ ORCL\CONTROLFILE\ O1_MF_7RBDCXXS_.CTL, E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA \ORCL\CONTROLFILE\O1_MF_7RBDCY2G_.CTL
sys@ORCL> host copy E:\ORACLE\PRODUCT\10.2.0\ORADATA\ ORCL\CONTROLFILE\O1_MF_7RBDCXXS_.CTL E:\ORACLE\PRODUCT\10.2.0\ORADATA\ ORCL\CONTROLFILE\O1_MF_7RBDCXXS_1.CTL
已复制 1 个文件。 sys@ORCL> alter system set control_files="E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ CONTROLFILE\O1_MF_7RBDCXXS_.CTL", "E:\ORACLE\PRODUCT\10.2.0\ORADATA\ ORCL\CONTROLFILE\O1_MF_7RBDCXXS_1.CTL", "E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ ORCL\CONTROLFILE\O1_MF_7RBDCY2G_.CTL" scope=spfile; 系统已更改。 sys@ORCL> startup force; ORACLE 例程已经启动。
Total System Global Area 532676608 bytes Fixed Size 1249968 bytes Variable Size 159386960 bytes Database Buffers 364904448 bytes Redo Buffers 7135232 bytes 数据库装载完毕。 数据库已经打开。 sys@ORCL> show parameter control_files;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_files string E:\ORACLE\PRODUCT\10.2.0\ORADATA\ ORCL\CONTROLFILE\O1_MF_7RBDCXXS_.CTL, E:\ORACLE\PRODUCT\10.2.0\ORADATA\ ORCL\CONTROLFILE\O1_MF_7RBDCXXS_1.CTL, E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ ORCL\CONTROLFILE\O1_MF_7RBDCY2G_.CTL |
4.2 保护联机重做日志文件
DBA不允许出现的一件事是丢失当前联机日志文件组的所有日志文件成员。
当前联机日志文件的重要性是跟实例恢复有关的。
如果重做日志文件组的一个成员被损坏或丢失,那么数据库在存在幸存成员的情况下任然会保持打开状态。
使用V$LOG, V$LOGFILE视图查看日志详细信息。
sys@ORCL> select group#, sequence#, members, status from v$log;
GROUP# SEQUENCE# MEMBERS STATUS ---------- ---------- ---------- ---------------- 1 88 2 INACTIVE 2 89 2 CURRENT 3 87 2 INACTIVE sys@ORCL> select group#, status, member from v$logfile;
GROUP# STATUS MEMBER ---------- ------- ------------------------------------------------------------ 1 STALE E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_1_7RBD CY8S_.LOG 1 STALE E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\ O1_MF_1_7RBDCYRW_.LOG 2 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_2_7RBD CZFO_.LOG 2 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\ O1_MF_2_7RBDCZX9_.LOG 3 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_3_7RBD D0Y8_.LOG 3 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\ O1_MF_3_7RBDD21Y_.LOG 已选择6行。 |
其中status 显示stale 表示日志文件成员未被使用(数据库刚被打开并且尚未发生日志切换。
切换日志文件
Alter system switch logfile;
切换检查点
Alter system checkpoint;
4.3 archivelog 模式与归档器进程
在archivelog 模式下,恢复操作可以不丢失直至最近一次提交的数据。
一旦数据库处于archivelog 模式下,就会启动归档器(ARCHn)进程。最多可以启动10个归档进程。
归档器进程会在每次日志切换后将联机重做日志文件复制到一个归档日志文件,从而生成一连串连续的且能用于恢复一个备份的日志文件。
为了安全起见,归档日志文件可以像联机日志文件一样被复用。
数据库只有在关闭后位于加载模式中时才能被转换至archivelog 模式,并且由DBA完成。
归档日志文件名中嵌入唯一值的变量
变量 |
说明
%d
唯一的数据库标志符。
%t
线程号,显示为V$INSTANCE视图的THREAD#列。一般在RAC中使用。
%r
场景号,非常重要。用于不完全恢复。
%s
日志切换序列号。
使用归档日志:重做流通过网络传送至一个远程数据库,这个远程数据库会应用重做流得到实时的备份。
使用DATA GUARD 时, 会得到10个归档目的地。
1 复用重做日志文件 sys@ORCL> ALTER DATABASE ADD LOGFILE MEMBER 'E:\oracle\product\10.2.0\ oradata\redo001b.log' TO GROUP 1;
数据库已更改。 sys@ORCL> select group#, sequence#, members, status from v$log;
GROUP# SEQUENCE# MEMBERS STATUS ---------- ---------- ---------- ---------------- 1 94 3 INACTIVE 2 95 2 CURRENT 3 93 2 INACTIVE sys@ORCL> select group#, status, member from v$logfile;
GROUP# STATUS MEMBER ---------- ------- ------------------------------------------------------------ 1 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_1_7RBD CY8S_.LOG
1 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\ O1_MF_1_7RBDCYRW_.LOG
2 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_2_7RBD CZFO_.LOG
2 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\ O1_MF_2_7RBDCZX9_.LOG
3 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_3_7RBD D0Y8_.LOG
3 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\ O1_MF_3_7RBDD21Y_.LOG
1 INVALID E:\ORACLE\PRODUCT\10.2.0\ORADATA\REDO001B.LOG
已选择7行。 sys@ORCL> alter system switch logfile;
系统已更改。 2 将数据库转换至archivelog 模式 创建目录 sys@ORCL> host md e:\oracle\archive1
sys@ORCL> host md e:\oracle\archive2 设置参数 sys@ORCL> alter system set log_archive_dest_1='location=e:\oracle\archive1' scope=spfile;
系统已更改。
sys@ORCL> alter system set log_archive_dest_2='location=e:\oracle\archive2' scope=spfile;
系统已更改。
sys@ORCL> alter system set log_archive_format='arch_%d_%t_%r_%s.log' scope=spfile;
系统已更改。 sys@ORCL> shutdown immediate; 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 sys@ORCL> startup mount; ORACLE 例程已经启动。
Total System Global Area 532676608 bytes Fixed Size 1249968 bytes Variable Size 163581264 bytes Database Buffers 360710144 bytes Redo Buffers 7135232 bytes 数据库装载完毕。 sys@ORCL> alter database archivelog;
数据库已更改。
sys@ORCL> alter database open;
数据库已更改。 sys@ORCL> select log_mode from v$database;
LOG_MODE ------------ ARCHIVELOG
sys@ORCL> select archiver from v$instance;
ARCHIVE ------- STARTED sys@ORCL> alter system switch logfile;
系统已更改。
sys@ORCL> select name from v$archive_log; select name from v$archive_log * 第 1 行出现错误: ORA-00942: 表或视图不存在
sys@ORCL> select name from v$archived_log;
NAME -------------------- E:\ORACLE\ARCHIVE1\A RCH_4DF83E7D_1_78033 3821_99.LOG
E:\ORACLE\ARCHIVE2\A RCH_4DF83E7D_1_78033 3821_99.LOG |
综上:实例恢复机制确保数据库不会出现讹误;归档机制确保数据库不会丢失数据。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9537053/viewspace-722446/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9537053/viewspace-722446/