您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > oracle数据库的备份与恢复
ORACLE培训教讲义第六章oracle数据库的备份与恢复第一部分:数据库的备份备份的必要性因为各种人为或外界的因素可能会造成数据库中灾难性的数据丢失,为了保证数据库中数据的安全,必须采取备份措施保证RDBMS中包含的数据免遭破坏,而有效的备份是十分简单和普通的,是在数据库处于无法使用状态时用于重建数据库的重要信息拷贝。在重要的修改如删除段或者表空间以前或以后执行适当的备份是相当必要的。备份的种类:冷备份:一种最简单直接的备份方式,也称为脱机备份,但是必须关闭数据库,这对于当前7×24的有效性并不可取;联机热备:正如名称所示,是在数据库打开时执行的备份方式,进行联机备份比进行脱机备份的进程复杂;用导出exp应用程序备份:是对于脱机备份和联机备份类型的补充,因为它无法回滚,所以不能替代数据库文件的备份。各种备份的原理和步骤:冷备份:关闭数据库,采取操作系统拷贝命令来完成对数据库的备份,然后启动数据库。例如:将名为lyj的数据库作一个冷备份,备份的文件放置在/mnt/backup_wy/目录下。ORACLE培训教讲义首先找出控制文件、数据文件和redo日志文件的存储位置SQLselectnamefromv$controlfile;NAME----------------------------------------------------/u3/oradata/lyj/control01.ctl/u3/oradata/lyj/control02.ctl/u3/oradata/lyj/control03.ctlSQLselectstatus,namefromv$datafile;STATUSNAME--------------------------------------------------SYSTEM/u3/oradata/lyj/system01.dbfONLINE/u3/oradata/lyj/tools01.dbfONLINE/u3/oradata/lyj/rbs01.dbfONLINE/u3/oradata/lyj/temp01.dbfONLINE/u3/oradata/lyj/users01.dbfONLINE/u3/oradata/lyj/indx01.dbfSQLselect*fromv$logfile;GROUP#STATUSMEMBER--------------------------------------------------------------------------------1/u3/oradata/lyj/redo01.log2/u3/oradata/lyj/redo02.log3/u3/oradata/lyj/redo03.log关闭数据库:SQLshutdown数据库已经关闭。已经卸载数据库。ORACLE例程已经关闭。将数据文件、控制文件和redo日志文件从上面查找出来的位置拷贝到/mnt/backup_wy/目录下作为备份:[oracle|15:38:09|/u3/oradata/lyj]$cp*.ctl/mnt/backup_wy/[oracle|15:38:29|/u3/oradata/lyj]$cp*.log/mnt/backup_wy/[oracle|15:38:43|/u3/oradata/lyj]$cp*.dbf/mnt/backup_wy/重新开启数据库:startupORACLE培训教讲义热备份在联机状态下执行备份,这时数据库必须运行在ARCHIVELOG模式下,因为在日志书写器进程重新使用它之前,副本是由每一个redo日志文件组成的,日志书写器在循环方式中通过redo日志文件进行循环,只要数据库正在运行,它就写入一个,然后是另一个,依此类推。在ARCHIVELOG模式下运行时,直到redo日志文件的永久拷贝被建立,Oracle才覆盖redo日志文件。在ARCHIVELOG模式中运行数据库时,可以选择当每个redo日志文件写满时手工地生成备份或者启动可选的归档进程进行自动备份。只有通过sys身份或internal登录数据库,就有权利通过sqlplus或svrmgr查看数据库的归档状态;SVRMGRarchiveloglist数据库记录模式存档模式自动存档已启用存档路径/u2/oratest/admin/lyj/arch最旧的联机日志顺序496要存档的下一个记录顺序498当前记录顺序498在这种模式下,数据库运行在ARCHIVELOG模式下,并且能够进行自动归档,此时,可以进行联机备份了。假设数据库运行在非存档模式下,就应该在参数文件中修改log_archive_start=truelog_archive_dest=指定的保存归档日志文件的目录log_archive_format=“制定的归档日志文件的存储格式备份控制文件;备份数据文件;归档当前的联机日志文件;备份归档日志文件。下面以lyj为例说明如何热备一个数据库:备份控制文件:SVRMGRalterdatabasebackupcontrolfileto'/mnt/backup_wy/controlfile';语句已处理。用完整的文件夹路径和文件的名称'/mnt/backup_wy/controlfile'将备份控制文件存储在此。备份数据文件:执行一个数据库的联机备份时,需要一次复制一个表空间的数据文件,在位一个表空间复制文件之前需要执行ALTERTABLESPACEtablespace_nameBEGINBACKUP;为表空间复制完文件时,需要执行下列命令:ALTERTABLESPACEtablespace_nameENDBACKUP;ORACLE培训教讲义使用这些BEGIN和END命令的理由是当它们被复制时,Oracle需要将数据文件头保持连贯状态,发出BEGIN命令时,Oracle停止更新受影响的数据文件的文件头上的检查点,在整个表空间备份模式中,Oracle通过将全部的数据块写入redo日志文件的方式来记录这个表空间中的数据的变化。通过下面语句找出所有表空间的名字:SVRMGRselect*fromv$tablespace;TS#NAME----------------------------------------0SYSTEM1TOOLS2RBS3TEMP4USERS5INDX然后对这些表空间进行备份,将数据文件备份到/mnt/backup_wy/目录下:SVRMGRaltertablespacesystembeginbackup;语句已处理。SVRMGRaltertablespacetoolsbeginbackup;语句已处理。SVRMGRaltertablespacerbsbeginbackup;语句已处理。SVRMGRaltertablespacetempbeginbackup;语句已处理。SVRMGRaltertablespaceusersbeginbackup;语句已处理。SVRMGRaltertablespaceindxbeginbackup;语句已处理。[oracle|17:01:53|/u3/oradata/lyj]$cp*.dbf/mnt/backup_wy/SVRMGRaltertablespacesystemendbackup;语句已处理。SVRMGRaltertablespacetoolsendbackup;语句已处理。SVRMGRaltertablespaceusersendbackup;语句已处理。SVRMGRaltertablespacetempendbackup;语句已处理。SVRMGRaltertablespaceindxendbackup;语句已处理。SVRMGRaltertablespacerbsendbackup;语句已处理。ORACLE培训教讲义归档当前的联机redo日志文件:备份完所有的数据文件后,需要归档当前的联机redo日志文件,因为恢复时需要它们。归档她们时允许和所有其他的归档日志文件一起进行备份。SVRMGRaltersystemarchivelogcurrent;语句已处理。这条命令导致Oracle转换到一个新的日志文件。然后Oracle归档所有未被归档的日志文件,还可以使用另外两条命令达到相同的效果:SVRMGRaltersystemswitchlogfile;语句强制转换日志。SVRMGRaltersystemarchivelogall;语句导致Oracle所有已写满但仍未归档的redo日志文件归档。备份归档日志文件一旦已经归档了当前联机的日志文件,最后一步就是备份所有归档日志文件到/mnt/backup_wy/目录下,因为还原数据库时需要它们[oracle|17:42:46|/u2/oratest/admin/lyj/arch]$cparch_*.*/mnt/backup_wy/导出数据库作备份数据库导出可以被看作备份的一种形式。Oracle实用工具Export利用SQL语句读出数据库数据,并在操作系统层将数据和定义存入二进制文件。导出对于还原一个意外删除的对象或还原这个对象的定义来说是很好的,因为脱机备份不能只还原一个对象,而联机备份还原一个对象必须得还原该对象存在的数据文件,相对于导出这种备份形式来说要繁琐很多,但是从导出中还原时,仅能得到导出文件中的内容,不能从中向前回滚,所以导出数据库这种备份方式只能作为联机备份和脱机备份的一种补充。第二部分:数据库的恢复请求恢复数据库的恢复一般分为NOARCHIVELOG模式和ARCHIVELOG模式,实际情况中很少会丢失整个一个oracle数据库,通常只是一个驱动器损坏,使得仅仅丢失该驱动器上的文件。如何从这样的损失中恢复很大程度上取决于数据库是否正运行在ARCHIVELOG模式下。如果没有运行在ARCHIVELOG模式下而丢失了一个数据库文件,就只能从最近的一次备份中恢复整个数据库,备份之后的所有变化都丢失,而且在数据库被恢复时,必须关闭数据库。由于在一个产品中丢失数据或将数据库关闭一段时间是不可取的,所以大多数oracle产品数据库都运行在ARCHIVELOG模式下。在oracle中,恢复指的是从归档和联机redo日志文件中读取redo日志记录并将这些变化应用到数据文件中并将其更新到最近状态的过程。ORACLE培训教讲义从备份中还原一个文件时,文件代表了数据库被备份时而不是丢失时的状态,通常情况下希望恢复过渡期即文件备份和文件丢失之间发生的所有变化,由于所有变化都被写入日志文件中,所以能够通过读取日志文件并且再次将这些变化应用于所还原的文件中。还原NOARCHIVELOG模式下的数据库还原一个运行于NOARCHIVELOG模式下的数据库代表了最简单的情况,由于不存在归档日志文件,也就不可能有介质恢复,全部的操作仅仅是操作系统级的复制过程。还原一个NOARCHIVELOG模式下运行的数据库由下列几步组成:如果实例正在运行,关闭数据库;shutdown从最近备份中还原控制文件和数据文件;指定是否移动任何一个文件在启动数据库时,oracle将根据参数文件指定的路径寻找这些文件。如果一个磁盘的丢失迫使将文件放回到与最初不同的位置,需要告诉oracle,否则,就会出现出错信息。可以有两种方法告诉oracle已移动了一个数据库文件:1、使用alterdatabaserenamefile‘original_filename’to‘new_filename’命令,其中,‘original_filename’是当前使用的完整的路径和文件名,而‘new_filename’是文件当前的路径和文件名。为了改变数据库文件的名字,数据库必须被安装但没有打开,因为变化要在控制文件中被记录。e.g:connectinternal;startupmount;alterdatabaserenamefile‘/u3/oradata/lyj/syst
本文标题:oracle数据库的备份与恢复
链接地址:https://www.777doc.com/doc-12507 .html