ORACLE数据库学习之备份与恢复(二)

2014-11-24 17:07:30 · 作者: · 浏览: 1
;

语句已处理。

[oracle|17:01:53|/u3/oradata/lyj]$cp *.dbf /mnt/backup_wy/

SVRMGR> alter tablespacesystem end backup ;

语句已处理。

SVRMGR> alter tablespacetools end backup ;

语句已处理。

SVRMGR> alter tablespaceusers end backup ;

语句已处理。

SVRMGR> alter tablespacetemp end backup ;

语句已处理。

SVRMGR> alter tablespaceindx end backup ;

语句已处理。

SVRMGR> alter tablespacerbs end backup ;

语句已处理。

l 归档当前的联机redo日志文件:

备份完所有的数据文件后,需要归档当前的联机redo日志文件,因为恢复时需要它们。归档她们时允许和所有其他的归档日志文件一起进行备份。

SVRMGR> alter systemarchive log current;

语句已处理。

这条命令导致Oracle转换到一个新的日志文件。然后Oracle归档所有未被归档的日志文件,还可以使用另外两条命令达到相同的效果:

SVRMGR> alter systemswitch logfile ;

语句强制转换日志。

SVRMGR> alter systemarchive log all ;

语句导致Oracle所有已写满但仍未归档的redo日志文件归档。

l 备份归档日志文件

一旦已经归档了当前联机的日志文件,最后一步就是备份所有归档日志文件到/mnt/backup_wy/目录下,因为还原数据库时需要它们

[oracle|17:42:46|/u2/oratest/admin/lyj/arch]$ cp arch_*.*/mnt/backup_wy/

导出数据库作备份

数据库导出可以被看作备份的一种形式。Oracle实用工具Export利用SQL语句读出数据库数据,并在操作系统层将数据和定义存入二进制文件。导出对于还原一个意外删除的对象或还原这个对象的定义来说是很好的,因为脱机备份不能只还原一个对象,而联机备份还原一个对象必须得还原该对象存在的数据文件,相对于导出这种备份形式来说要繁琐很多,但是从导出中还原时,仅能得到导出文件中的内容,不能从中向前回滚,所以导出数据库这种备份方式只能作为联机备份和脱机备份的一种补充。

第二部分:数据库的恢复

请求恢复

数据库的恢复一般分为NOARCHIVELOG模式和ARCHIVELOG模式,实际情况中很少会丢失整个一个oracle数据库,通常只是一个驱动器损坏,使得仅仅丢失该驱动器上的文件。如何从这样的损失中恢复很大程度上取决于数据库是否正运行在ARCHIVELOG模式下。如果没有运行在ARCHIVELOG模式下而丢失了一个数据库文件,就只能从最近的一次备份中恢复整个数据库,备份之后的所有变化都丢失,而且在数据库被恢复时,必须关闭数据库。由于在一个产品中丢失数据或将数据库关闭一段时间是不可取的,所以大多数oracle产品数据库都运行在ARCHIVELOG模式下。

在oracle中,恢复指的是从归档和联机redo日志文件中读取redo日志记录并将这些变化应用到数据文件中并将其更新到最近状态的过程。

从备份中还原一个文件时,文件代表了数据库被备份时而不是丢失时的状态,通常情况下希望恢复过渡期即文件备份和文件丢失之间发生的所有变化,由于所有变化都被写入日志文件中,所以能够通过读取日志文件并且再次将这些变化应用于所还原的文件中。

还原NOARCHIVELOG模式下的数据库

还原一个运行于NOARCHIVELOG模式下的数据库代表了最简单的情况,由于不存在归档日志文件,也就不可能有介质恢复,全部的操作仅仅是操作系统级的复制过程。还原一个NOARCHIVELOG模式下运行的数据库由下列几步组成:

如果实例正在运行,关闭数据库;shutdown

从最近备份中还原控制文件和数据文件;

指定是否移动任何一个文件

在启动数据库时,oracle将根据参数文件指定的路径寻找这些文件。如果一个磁盘的丢失迫使将文件放回到与最初不同的位置,需要告诉oracle,否则,就会出现出错信息。

可以有两种方法告诉oracle已移动了一个数据库文件:

使用alterdatabase rename file‘original_filename’ to ‘new_filename’命令,其中,‘original_filename’是当前使用的完整的路径和文件名,而‘new_filename’是文件当前的路径和文件名。

为了改变数据库文件的名字,数据库必须被安装但没有打开,因为变化要在控制文件中被记录。

e.g: connectinternal;

startup mount;

alter database rename file ‘/u3/oradata/lyj/system01.dbf’to ‘/mnt/backup_wy/system01.dbf’ ;

如果正在移动全部或大部分的数据文件,重建控制文件会相对简单一些。而如果在备份控制文件时使用了alter database backup controlfile totrace这条语句,就会在admin/udump目录下找到重建控制文件的跟踪语句,该语句包括必须的create controlfile等命令,将该文件中的改变了的文件名代替原有的文件名和位置。

重新打开数据库

应该使用resetlogs选项打开数据库,这样复位日志文件是为了保证在新的记录和那些从先前的数据库中留下的记录之间不会产生任何冲突。

e.g:用备份的控制文件替换控制文件:

SVRMGR>connectinternal

SVRMGR>alter database backup controlfile to '/mnt/backup_wy/control.ctl' ;

Statementprocessed.

SVRMGR>alter database backup controlfile to trace ;

SVRMGR>exit

[oracle|15:41:32|/u3/oradata/lyj]$cp /mnt/backup_wy/control.ctl control01.ctl

[oracle|15:41:32|/u3/oradata/lyj]$cp /mnt/backup_wy/control.ctl control02.ctl

[oracle|15:41:32|/u3/oradata/lyj]$cp /mnt/backup_wy/control.ctl control03.ctl

SVRMGR>connectinternal

SVRMGR>startupmount

SVRMGR>alterdatabase open resetlogs;

请求介质恢复

介质恢复是指这样一种过程:从redo日志文件中读取变化并把这些变化应用于从备份中还原的一个或多个数据库文件中,最终结果是数据库文件被更新到当前日期并且它们反应了备份后所做的所有变化,因此进行介质恢复必须把redo日志放在第一位。

在ARCHIVELOG模式下运行数据库时,oracle在每个redo日志文