数据库的备份和恢复

时间:2022-03-20 09:48:02

数据库的备份和恢复

摘要:本文从Oracle的体系结构开始,由原理到实践,论述了Oracle数据库备份的方式和策略。包括IMP/EXP, RMAN,OS备份等。

Abstract: Starting from the architecture of ORACLE, this paper discusses the backup method and strategy of database Oracle, including IMP/EXP, PMAN and OS theoretically and practically.

关键字:Oracle, 备份, 恢复, RMAN

Keywords: Oracle; Backup; Restoration; RMAN

概述

在大型软件运行系统中,存在着很多备份策略,如RAID技术,CLUSTER技术等等。很多时候,这些系统的备份就能够解决数据库备份的问题。但是,这种备份成本很高。同时,硬件的备份有时根本满足不了现实的需要,如果用户不小心误删了一个表,又想恢复的时候,数据库的备份就变的重要了。

Introduction: In the running system of some big software, there exist many backup strategies such as RAID technology and CLUSTER technology etc. In most cases, these system backup strategies can fulfill the database backup. However the cost is rather high. At the same time, hardware backup sometimes is far from the actual requirement. The database backup becomes very important when a table is deleted by accident and needs to be restored.

Oracle的运行方式

Oracle数据库有两种运行方式:一是归档方式(ARCHIVELOG),归档方式的目的是当数据库发生故障时最大限度恢复数据库,可以保证不丢失任何已提交的数据;二是不归档方式(NOARCHIVELOG),只能恢复数据库到最近的回收点(冷备份或是逻辑备份)。根据数据库的高可用性和用户可承受丢失的工作量的多少,对于实时性要求高的数据库,强烈要求采用为归档方式;不归档方式只用在那些开发和调试的数据库等。

如何改变数据库的运行方式,在创建数据库时,作为创建数据库的一部分,就决定了数据库初始的存档方式。一般情况下为NOARCHIVELOG方式。当数据库创建好以后,根据我们的需要把需要运行在归档方式的数据库改成ARCHIVELOG方式。 操作如下。

1. 关闭数据库,备份已有的数据,改变数据库的运行方式是对数据库的重要改动,所以要对数据库做备份,对可能出现的问题作出保护。

2. 修改初试化参数,使能自动存档。

修改(添加)初始化文件init[SID].ora参数:

log_archive_start=true #启动自动归档

log_archive_format=ARC%T%S.arc #归档文件格式

log_archive_dest=/archdir/arch #归档路径

在8i中,可以最多有五个归档路径,并可以归档到其它服务器,如备用数据库(standby database)服务器。

3. 启动Instance到Mount状态,即加载数据库但不打开数据库。

$> svrmgrl

SVRMGRL> connect internal

SVRMGRL> startup mount

SVRMGRL> alter database archivelog; // 使数据库运行在归档方式

SVRMGRL> alter database open;

Oracle的备份方案

按照备份的方式,可以分为逻辑备份、冷备份(脱机备份)、热备份(联机备份),其中冷备份与热备份又可以合称为物理备份。按照备份的工具,可以分为EXP/IMP备份、操作系统备份、RMAN、第三方工具备份,如VERITAS等。下面分别介绍Oracle本身提供的几种备份工具和操作。

1. EXP/IMP备份(逻辑备份)

EXP/IMP属于逻辑备份的范畴,逻辑备份是指只备份数据库中的数据但不记录数据物理位置的一种备份。导出为数据库作一个二进制的备份,并且这个备份只能由其姊妹程序imp(import)来读取。具体的使用方法如下。(因为EXP和IMP使用上参数基本相同,所以只以EXP为例。)

EXP的命令格式和参数

格式:KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)

例程: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)

USERID 必须是命令行中的第一个参数

关键字 说明(默认) 关键字 说明(默认)

USERID 用户名/口令 FULL 导出整个文件 (N)

BUFFER 数据缓冲区的大小 OWNER 所有者用户名列表

FILE 输出文件 (EXPDAT.DMP) TABLES 表名列表

COMPRESS 导入一个范围 (Y) RECORDLENGTH IO记录的长度

GRANTS 导出权限 (Y) INCTYPE 增量导出类型

INDEXES 导出索引 (Y) RECORD 跟踪增量导出 (Y)

ROWS 导出数据行(Y) PARFILE 参数文件名

CONSTRAINTS 导出限制 (Y) CONSISTENT 交叉表一致性

LOG 屏幕输出的日志文件 STATISTICS 分析对象 (ESTIMATE)

DIRECT 直接路径 (N) TRIGGERS 导出触发器 (Y)

FEEDBACK 显示每 x 行 (0) 的进度 FILESIZE 各转储文件的最大尺寸

QUERY 选定导出表子集的子句

注:可以通过exp -help命令查看exp的使用方法;imp -help命令查看imp的使用方法.

2. 操作系统备份(冷备份和热备份)

操作系统备份有两类,冷备份(Cold backup)和热备份(Hot backup)。操作系统备份和上面的逻辑备份有本质的区别,它将拷贝整个的数据文件。

 冷备份

在文件级备份开始前数据库必须彻底关闭。关闭操作必须用带有normal、immediate、transaction选项的shutdown来执行。

数据库使用的每个文件都被备份下来,这些文件包括: 所有数据文件、所有控制文件、所有联机重做日志文件和INIT.ORA文件(建议)。

作冷备份一般步骤是:

1) 正常关闭要备份的实例(instance);

2) 备份整个数据库到一个目录

3) 启动数据库

即:

SVRMGRL>connect internal

SVRMGRL >shutdown i

mmediate

SVRMGRL >!cp

or

SVRMGRL >!tar cvf /dbbak/fullbk.tar /u01/oracle/oradata/dbname

SVRMGRL >startup

 热备份

热备份是当数据库打开时的操作系统备份。热备份只能用于ARCHIVELOG方式的数据库。热备份没有必要备份联机日志,但必须是归档状态,在实例恢复的时候,可能需要用到归档日志。当前联机日志一定要保护好或是处于镜相状态,当前联机日志的损坏,对于数据库的损坏是巨大的,只能以数据的丢失来进行数据库的恢复工作。对于临时表空间,存放的是临时信息,在热备份是也可以考虑不用备份,如果临时文件发生故障,可以删除该数据文件与表空间,重建一个临时表空间。

热备份备份的内容和冷备份备份的内容一样,操作一般步骤是:

1) 备份的表空间通过使用ALTER TABLESPACE …… BEGIN BACKUP使表空间进入热备份方式。

2) 用类似冷备份的操作系统命令对组成表空间的数据文件进行拷贝。

3) 使用ALTER TABLESPACE …… END BACKUP命令使表空间脱离热备份方式。

4) 使用ALTER DATABSE …… BACKUP CONTROLFILE命令备份控制文件。

即:

SVRMGRL>connect internal;

SVRMGRL>alter tablespace User begin backup;

SVRMGRL>!cp /u01/oradata/dbname/user01.ora /dbbak/user01.ora

SVRMGRL>alter tablespace User end backup;

SVRMGRL>alter database backup controlfile to ;

or

SVRMGRL>alter database backup controlfile to trace;

注意:因为热备份的时候,用户还在操作数据库,所以最好是让每个表空间处于备份状态的时间最短,这样就要求一个表空间一个表空间的备份,不要一起使表空间处于备份状态而同时拷贝数据文件。

3. RMAN

Recovery Manager(RMAN)是一个使DBA能很方便地对数据库执行备份和恢复任务的Oracle应用工具,能够提供DBA对企业数据库备份与恢复操作的集中控制。RMAN只能用于ORACLE8或更高的版本中。它能够备份整个数据库或数据库部件,其中包括表空间、数据文件,控制文件和归档文件。RMAN可以按要求存取和执行备份和恢复。

RMAN支持六种不通的类型的备份,经常用到的有两种:

FULL 数据库全备份,包括所有的数据块。

INCREMENTAL 增量备份,是指只备份在同级别或更低级别上进行的前一次备份之后的作过改动的那些数据块。这其中需要一个0级的增量作为增量的基础,它备份包括全部曾经被数据库使用过的数据块(但不是完全数据库备份)。RMAN共可以支持7级增量。

BACKUP,RESTORE,RECOVER是RMAN最基本的三个命令,分别可以进行数据库的备份,复原以及恢复操作。 restore命令用于恢复来自备份集或映像拷贝的数据文件、控制文件或归档重做日志。recovery命令用于进行介质恢复应用重做日志文件。

RMAN的备份信息一般保存在恢复目录中,恢复目录也是一个数据库,只不过这个数据库用来保存备份信息,一个恢复目录可以用来保存多个数据库的备份信息。 RMAN也可以在没有恢复目录(NOCATALOG)下运行,这个时候备份信息保存在控制文件。这种情况比较危险,因为一旦控制文件被破坏,将导致所有数据库备份信息的丢失和恢复的失败,而且,没有恢复目录,很多RMAN的命令将不被支持。所以对于重要的数据库,建议创建恢复目录。

创建恢复目录一般有以下步骤。(例子数据库为db)

1) 为目录创建一个单独的表空间

SQL>create tablespace tsrman datafile ’/dbbak/rman/rsrman.dbf’ size 50M;

2) 创建RMAN用户

SQL>create user rman identified by rman default tablespace rsrman temporary tablespace temp;

3) 给RMAN授予权限

SQL>grant connect, resource, recovery_catalog_owner to rman;

4) 打开RMAN

$rman

5) 连接恢复目录数据库

RMAN>connect catalog rman/rman@db

6) 创建恢复目录

RMAN>create catalog tablespace tsrman

在对某个数据库进行备份之前,必须先在恢复目录上注册该数据库,这一过程操作如下(假定目标数据库连接字符串为db100)。

1) 连接到恢复目录数据库

$rman rman/rman@db

2) 在RMAN中连接到目标数据库(即要进行备份的数据库)

RMAN>connect target sys/change_on_install@db100

3) 注册数据库

RMAN>register database;

注册完数据库后,就可以进行数据库的备份了。有完全数据库备份、表空间备份、控制文件备份、和归档日志备份等。操作分别如下。

1) 完全数据库备份

要求:ARCHIVELOG模式,在DB OPEN的情况下进行数据库完全备份。

RMAN>run{

allocate channel c1 type=disk;

backup database;

release channel c1;

}

2) 表空间备份

要求:ARCHIVELOG模式

RMAN>run{

allocate channel c1 type=disk;

backup tablespace “ts_users” filesperset 3 format ‘aatst_%t%s.%p’;

release channel c1;

}

3) 控制文件备份

RMAN>run{

allocate channel c1 type=disk;

backup current controlfile tag=weekly_sat_backup;

release channel c1;

}

在对数据库进行完全备份时,控制文件自动包含其中。也可以在表空间或数据文件的备份中包含一个控制文件。

RMAN>run{

allocate channel c1 type=disk;

backup tablespace “ts_users”

filesperset 3 format ‘aatst_%t%s.%p’;

include current controlfile;

release channel c1;

}

4) 归档日志备份

通过查询数据字典表V$ARCHIVED_LOG获取要备份的日志序列号,然后执行命令:

RMAN>run{

allocate channel c1 type=disk;

backup archivelog low logseq 3 high logseq 10 thread 1;

release channel c1;

}

Oracle的备份策略

正确的备份策略不仅能保证数据库服务器的24*7的高性能的运行,还能保证备份与恢复的快速性与可靠性。我们将以RMAN的多级增量备份作为一个备份策略的例子来讨论。采用多级备份就是为了减少每天备份所需要的时间,而又保证系统有良好的恢复性。恢复时间与备份时间要有一个权衡。比如只要进行一个数据库的全备份,然后就只备份归档也可以保证能把数据库恢复到最新的状态,但是这样的恢复时间将是不可容忍的。多级备份也正是为了解决这种问题,结合某些应用的特点,可以采用如下的备份策略:

 每个月做一个数据库的全备份(包括所有的数据和只读表空间);

 每个星期一做一次零级备份(不包含只读表空间);

 每个星期三做一次一级备份;

 每天做一次二级备份。

 每天做一次恢复目录的热备份。

 任何数据库的更改需要重新同步CATALOG目录并重新备份(如添加数据文件)或重新备份(如修改表空间为只读)。

 每次备份后都可以备份归档日志或定期备份归档日志。如果可能,可以直接备份到磁带上。

Oracle的恢复

下面的操作约定恢复目录存储在db118中,目标数据库是db100。

1. 数据库恢复

1) 启动SQL*PLUS,使用正确的init.ora文件,使用NOMOUNT选项启动目标数据库实例。

2) 启动RMAN并连接到恢复目录,如下:

$rman catalog rman/rman@db118

恢复管理器: Release 9.2.0.1.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.

连接到恢复目录数据库

RMAN>

3) 连接到目标数据库

RMAN>connect target internal/oracle@db100

连接到目标数据库: db (DBID=1142471523)

4) 一旦连接到目标数据库,执行restore命令执行全数据库恢复

RMAN>run{

2>allocate channel c1 type disk;

3>restore database;

4>release channel c1;

}

2. 表空间和数据文件恢复

要执行表空间或数据文件恢复,数据库必须以ARCHIVELOG模式运行,并且用户需要拥有介质恢复所需的归档重做日志文件。在试图恢复表空间之前,必须保证表空间已脱机。RMAN命令如下:

run{

allocate channel c1 type disk;

sql “alter tablespace users_data offline immediate”;

restore tablespace users_data;

recover tablespace users_data;

sql “alter tablespace users_data online”;

}

上面的脚本执行了以下的工作:

1) RMAN分配通道从c1用于恢复操作。

2) 将表空间users_data脱机

3) RMAN从备份集中恢复属于表空间的数据文件

4) 通过介质恢复提供所需的归档日志文件,恢复属于表空间users_data的数据文件。

5) RMAN将表空间联机。

在脚本执行期间,如果不能把数据文件恢复到指定位置,在执行restore命令前使用set newname命令。

3. 控制文件恢复

1) 启动SQL*PLUS,使用正确的init.ora文件,使用NOMOUNT选项启动目标数据库实例。

2) 启动RMAN并连接到恢复目录,如下:

$rman catalog rman/rman@ora8i.oracle

恢复管理器: Release 9.2.0.1.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.

连接到恢复目录数据库

RMAN>

3) 连接到目标数据库

RMAN>connect target internal/oracle@demo.oracle

连接到目标数据库: db (DBID=1142471523)

4) 一旦连接到目标数据库,执行restore命令恢复控制文件

RMAN>run{

2>allocate channel c1 type disk;

3>restore controlfile;

4>}

小结

保证Oracle数据库的安全是系统安全的重要组成部分,必须要设计完善的数据库备份和恢复方案。Oracle提供的各种工具结合起来使用能够使数据库的备份和恢复变得简单。在实际的Oracle数据库的备份和恢复中,会有许多不通的和复杂的情况出现,针对不同的情况,要本着使数据具有最大的可恢复性和恢复时间最短的原则去进行数据库的恢复,这需要大量的实践和经验积累。

参考文献

[1] Oracle8i Backup and Recovery Guide Oracle Document

[2] Oracle8i Recovery Manager User’s Guide and Reference Oracle Document

[3] Oracle9i:A Beginner’s Guide (美) Michael Abbey Michael Corey Ian Abramson 2002.3 机械工业出版社

[4] Oracle8i备份与恢复手册 (美)Rama Velpuri Anand Adkoli 蒋蕊 王磊等译 2001.9 机械工业出版社

上一篇:征集文献资料,建立特色书库——廊坊市图书馆... 下一篇:依托多媒体 上好音乐课