所有的DBA都应当知道如何备份数据库。更重要的是,你必须能够恢复数据库。当出现 media failure,每个人都指望 DBA 来成功地恢复数据库。有2种备份和恢复方法:
. The user-managed approach
. The Oracle Recovery Manager (RMAN) approach
User-managed backups 这样叫,是因为你是手动执行所有相关步骤的。user-managed backups 又分为2种类型:cold backups、hot backups。
Cold backups 有时也叫作 offline backups,因为在备份过程中,数据库是关掉的。
Hot backups 也叫作 online backups,因为在备份过程中,数据库是可用的。
RMAN 是 Oracle 的 flagship B&R tool。它自动化了以及管理了B&R 的大多数方面。对于Oracle的备份与恢复,你应当用RMAN。但为什么还要学习 User-managed B&R 呢,有如下几点原因:
. 你仍然会遇到一些公司还在用此技术。因此,你当然要知道。
. 手动执行一个 user-managed backup,restore,and recovery能够加强你对Oracle B&R 架构的理解。这对你诊断任何B&R工具遇到的问题都是帮助极大的,并且为关键的Oracle工具如RMAN以及Data Guard铺垫了核心知识的基础。
. 你将更欣赏 RMAN 以及它的特性的价值。
1、为一个 NoarchivelogMode 数据库实现一个 Cold-Backup Strategy
就是在数据库被关掉以后复制一些文件。做 cold backup 时,数据库可以是 noarchivelog mode 或 archivelog mode。
由于一些原因,许多DBA趋向于认为 cold backup 和 数据库处理 noarchivelog mode 是同义词。这是不对的。许多公司也会在数据库处于 archivelog mode 时执行一个 cold backup。
noarchivelog mode 以及 archivelog mode 这两种 cold backup 的区别在下面的小结中会介绍。
1.1、Noarchivelog-Mode 数据库 Cold Backup
可以将数据库恢复到过去的某个时间点。当你不需要恢复那些在备份之后发生的事务时就应该用此方法。只有当你的业务要求允许一些数据丢失以及停机时才可以接受此种B&R策略。
话虽如此,还是有一些不错的原因要这么做。一个比较常见的用例就是对 开发/测试/培训数据库做cold backup,并且阶段性地 reset the database back to the baseline。这样你就可以在每次性能测试以及培训课程中使用的是相同的数据库快照。
【考虑用 Flashback Database feature 将数据库设置到过去的某个时间点。】
本节的例子向你展示了如何对数据库中的每一个重要文件做一个备份(所有的 controll files、datafiles、temporary datafiles,以及 online-redo files)。这种方法的主要优势就是概念简单容易实现。
下面就是具体步骤:
【步骤一:决定往哪复制备份文件,以及需要多少空间】
Ideally, the backup location should be on a separate set of disks from your live datafiles location。然而,在许多公司,你可能是没有选择余地的,它会告诉你应该用哪些挂载点。这个例子中,备份的位置是 /oradump/cbackup/O11R2。要大致了解需要多少空间来存储一份备份,你可以执行这个查询:
select sum(sum_bytes)/1024/1024 m_bytes
from(
select sum(bytes) sum_bytes from v$datafile
union
select sum(bytes) sum_bytes from v$tempfile
union
select (sum(bytes) * members) sum_bytes from v$log
group by members);
【步骤二:决定要被复制的文件的位置和名字】
运行下面的查询就能够列出 noarchivelog mode database的cold backup中包含的文件的名称和路径:
select name from v$datafile
union
select name from v$controlfile
union
select name from v$tempfile
union
select member from v$logfile;
需要备份 online-redo logs? 任何类型的备份都不需要备份 online-redo logs。那么,为什么一些DBA在cold backups中备份了online-redo logs了呢?有一个原因就是noarchivelog mode scenario的恢复过程稍微简单了。打开一个数据库就需要用到online-redo logs。如果你备份了所有的文件(包括 online-redo logs),之后将数据库恢复到备份的那个时间点,你就恢复了所有的文件(包括 online-redo logs) and start up your database。
【步骤三:关闭数据库】
作为 SYS(或 SYSDBA权限用户)连接到你的数据库,利用 IMMEDIATE、TRANSACTIONAL,或 NORMAL 来关闭数据库,倾向于用 IMMEDIATE。 此时会断开用户连接、回滚未完成的事务,并关掉数据库。
$ sqlplus / as sysdba
$ shutdown immediate
【步骤四:创建这些文件的备份副本】
将步骤2中确认的那些文件复制到步骤1中确定的备份目录中。在这个例子中,所有的 datafiles、control files、temporary database files,以及 online-redo logs 都在同一个目录中。在产品环境中,这些文件很可能会放在不同的目录中。
$ cp /ora01/dbfile/O11R2/*.* /oradump/cbackup/O11R2
【步骤五:重启数据库】
$ sqlplus / as sysdba
SQL> startup;
。。。。。。。。。。。。。。。。。。。。。。。。。未完。