oracle几十T的数据如何备份,Oracle数据库备份与恢复(II)

RMAN(备份与恢复管理器)

RMAN是ORACLE提供的一个备份与恢复的工具,可以用来备份和还原数据库文件、归档日志和控制文件。它也可以用来执行完成或不完成的数据库恢复。

1.RMAN的组件、概念

1.1 RMAN 命令管理器

RMAN命令管理器提供对RMAN使用程序的访问,它允许DBA输入执行备份和恢复操作所需的命令。

启动RMAN最简单的方法是从操作系统中运行RMAN,不为其提供连接的请求参数。

步骤:

(1)命令行输入:rman target system/nocatalog

(2)出现“RMAN”提示符,输入:SHOW ALL命令,由RMAN连接到一个目标数据库,可以查看RMAN的配置。

1.2 目标数据库

目标数据库也就是要执行备份,转储和恢复的数据库。RMAN将使用的目标数据库的控制文件来收集关于

数据库的相关操作,并使用控制文件来储存相关的RMAN操作信息。

1.3 RMAN恢复目录

恢复目录是RMAN在数据库上建立的一种存储对象,它由RMAN自动维护。

1.4 介质管理子系统

主要有第三方提供的介质管理软件和储存设备组成,Rman可以利用介质管理系统软件将数据库备份带类似磁盘的储存设备中。

1.5 备份数据库

备份数据库是目标数据库的一个精确复制,通过不断地对应用目标数据库生成归档重做日志,可以保持它与目标数据库的同步。

1.6恢复目录数据库

用来保存RMAN恢复目录的数据库,他是一个独立于目标数据库的ORACLE数据库。

1.7备份集合

备份集合的特性:包括一个或多个数据文件或归档日志,以oracle 专有的格式保存,有一个完全的所有的备份片集合构成,构成一个完全备 份或增量备份。

1.8备份片

一个备份集由若干个备份片组成。每个备份片是一个单独的输出文件。一个备份片的大小是有限制的;如果没有大小的限制, 备份集就只由一个备份片构成。备份片的大小不能大于使用的文件系统所支持的文件长度的最大值。

2.RMAN通道

一个通道是RMAN 和目标数据库之间的一个连接,"allocate channel"命令在目标数据库

启动一个服务器进程,同时必须定义服务器进程执行备份或者恢复操作使用的I/O类型。

通道控制命令可以用来:

控制RMAN 使用的O/S资源,影响并行度

指定I/O带宽的限制值(设置limit read rate 参数)

定义备份片大小的限制(设置limit kbytes)

指定当前打开文件的限制值(设置limit maxopenfiles

2.1 手动分配通道:

手动分配通道必须使用RUN 命令。

RUN{命令}

例如:手动分配一个名为ch_1的通道,要求利用这个通道对表空间system、user、tbsp_1andts_1进行备份:

RMAN>run{

2>allocate channel ch_1 devicetypedisk

3>format= 'D:\oraclebf\%u_%c.bak'

4>backup tablespace system,user,tbsp_1,ts_1 channel ch_1;

5>}

2.2 自动分配通道:

在下列两种情况,RMAN将设置自动分配通道。

2.2.1 在RUN命令块外部使用BACKUP、RESTORE、DELETE命令

2.22 在RUN命令块内部执行BACKUP等命令之前,未使用ALLOCATE CHANNEL命令手动分配通道。

例如:

RMAN>backup tablespace users;

2>run{restore tablespace examples;}

3.RMAN命令

3.1连接到目标数据库

RMAN未使用恢复目录,可以使用如下命令形式之一:

$ rman nocatalog

$ rman target sys/nocatalog

$ rman target / connect target sys/password@网络连接串

注意:目标数据库与RAMN不同在一台服务器上时,必须使用'@连接串'的方法

如果RMAN创建了恢复目录,则可以按如下几种方法连接目标数据库:

$ rman target / catalog rman/rman@man

$ rman target sys/changge_on_install catalog rman/rman connect catalog sys/password@网络连接串

举个例子:

首先创建恢复目录,使用RMAN连接数据库,最后注册数据库。

(1)在SQL——PLUS环境下:

SQL>connect system/1qaz2wsx

已连接

SQL>create tablespace rman_tbsp datafile='D:oracleFiles\Recover\rman_tbsp.dbf' size2G;

表空间已创建

(2)在SQL_PLUS环境下创建RMAN用户权限:

SQL>create user rman_user identified by mrsoft default tablespace ramn_tbsp temprorary tablespace temp;

用户已创建

SQL>grant connect,recobery_catalog_owner,resource to rman_user;

(3)在CMD命令行模式下,打开恢复管理器

C:\>RMAN catalog rman_user/mrsoft target orcl;

(4)在RMAN模式下,创建恢复目录:

RMAN>create catalog tablespace rman_tbsp;

(5)在RMAN模式下,用REGISTER命令注册数据库:

RMAN>register database;

3.2启动与关闭目标数据库

RMAN>shutdown immediate;

RMAN>startup;

RAMN>startup mount;

RMAN>startup pfile='F:\app\oraclw\product\initora11g.ora';

RMAN>alter database open;

4.使用RMAN工具备份

4.1使用RMAN备份数据库文件和归档日志

可以使用RMAN BACKUP命令备份以下对象:

归档重做日志

数据文件

数据库

表空间

控制文件

备份集

4.2非归档模式下的BACKUP 备份与恢复

恢复目录: 打开

目标数据库:例程启动,数据库加载,mount 不能open

因为目标数据库不在归档模式下,所以当进行备份/恢复操作的时候数据库无法打

开。目标数据库只能在MOUNT状态不能Open,所以属于脱机备份。

非归档模式不备份redo 日志,只有完全备份和readonly/offline 表空间和数据文件

备份是有意义的,所以非归档模式最好不用RMAN 进行备份,备份语法与归档模式相同,所以这里只做简单介绍。

(1)全库备份

例: 使用默认的设置脱机全备份的语句

RMAN>shutdown immediate;

RMAN>startup mount;

RMAN>backup database;

RMAN>startup;

例:不使用默认的设置执行脱机备份操作,在备份命令中指定备份选项

RMAN>shutdown immediate;

RMAN>startup mount;

RMAN>run {

allocate channel c1typedisk format'/xxx/ming_%U';

allocate channel c2typedisk format'/xxx/ming_%U';

backup full tag full_db_backup format"/backups/db_t%t_s%s_p%p" (database);

backup current controlfile;

release channel c1;

release channel c2;

}

在这个例子中,我们分配了两个通道,备份位置是在/xxx。默认情况下,如果备份数据文件1(SYSTEM 表空间),控制文件和参数文件 也会备份。

可以通过下面的命令显示恢复目录中记载的备份集信息:

RMAN>list backupsetofdatabase;

全库备份的恢复

$ rman target /

RMAN>startup mount

RMAN>restore database;

RMAN>recover database;

RMAN>alter database open resetlogs;

(2)表空间备份

只有readonly/offline 表空间的备份才有意义。

RMAN>run {

2>allocate channel dev1typedisk;

3>backup

4>tag tbs_users_read_only

5>format"/oracle/backups/tbs_users_t%t_s%s"

6> (tablespace users);

7>}

使用下列命令来显示恢复目录中该表的备份信息:

RMAN>list backupsetoftablespace users;

表空间备份的恢复

RMAN>RUN{

sql"alter tablespace xx offline immediate;"

restore tablespace xx;

recover tablespace xx;

sql"alter tablespace xx online;"

(3)备份控制文件

RMAN>run {

2>allocate channel dev1type "SBT_TAPE";

3>backup

4>format"cf_t%t_s%s_p%p"

5>tag cf_monday_night

6> (current controlfile);

7>release channel dev1;

8>}

注:数据库完全备份将自动备份控制文件。(或者备份时加include current controlfile)

4.3归档模式下的BACKUP备份与完全恢复

要用RMAN 进行联机备份操作,数据库就必须位于ARCHIVELOG 模式。恢复

目录必须打开,目标数据库例程必须启动,数据库加载或者打开。

(1)整库备份与恢复

备份命令:

只备份数据文件(如果configure controlfile autobackup on;将自动包括控件文件,SPFILE):

RMAN>backup database;

同时备份归档日志,然后将备份后的归档日志删除

RMAN>backup database plus archivelog delete input;

明确指定同时备份控件文件:

RMAN>run{

allocate channel c1typedisk;

sql'alter system archive log current';

backup full databaseincludecurrent controlfile tag'dbfull'

format'/u06/oracle/rmanback/full_%u_%s_%p';

sql'alter system archive log current';

release channel c1;

}

可以用RMAN 的plus archvielog选项简化数据库备份:

RMAN>run {

2>backup database

3>format'/xxfull%d_%T_%s'

4>plus archivelog

5>format'/xx/arch_%d_%T_%s'

6>delete all input;

7>}

完全恢复:

目标数据库必须是mount 状态

$ rman target /

RMAN>startup mount

RMAN>restore database;

RMAN>recover database;

RMAN>alter database open;

(2)表空间的备份与恢复

备份命令:

RMAN>backup tablespace users;

RMAN>RUN{

allocate channel c1typedisk;

backup tablespace users tag'ts_users'format'/oracle/rmanback/ts_%u_%s_%p' ;

release channel c1;

}

恢复:

如果我们只丢失了特定的表空间的数据文件,那么我们可以选择只恢复这个表空间,而

不是恢复整个数据库。表空间恢复可以在不关闭数据库的情况下进行,只需要将需要恢复的表空间offline。

RMAN>RUN{

sql"alter tablespace xx offline immediate;"

restore tablespace xx;

recover tablespace xx;

sql"alter tablespace xx online;"

}

恢复到一个不同的位置:

RMAN>RUN{

sql"alter tablespace xx offline immediate;"

SET NEWNAMEfordatafile 1 to'/xx';

restore tablespace xx;

switch datafile 1;

recover tablespace xx;

sql"alter tablespace tbs1 online;"

}

(3)数据文件的备份与恢复

备份命令:

RMAN>backup datafile 3;

RMAN>backup datafile'D:\ORACLE\ORADATA\TEST\TEST.DB';

恢复命令:

数据文件恢复与表空间恢复类似。假设数据文件号为5 的文件丢失,文件名是:

'E:\ORACLE\ORADATA\USERS.DBF', 那么我们恢复的时候可以指定文件号,也可以指定文件名。

RMAN>run {

2>allocate channel dev1typedisk;

3>sql"alter tablespace users offline immediate";

4>restore datafile 4; --或者restore'E:\ORACLE\ORADATA\USERS.DBF'

5>recover datafile 4;

6>sql"alter tablespace users online";

7>release channel dev1;

8>}

恢复到一个不同的位置:

$ rman target /

RMAN>startup mount

RMAN>RUN{

sql"alter tablespace users offline immediate";

SET NEWNAMEfordatafile 9 to'/xx/user01.dbf';

restore datafile 9;

switch datafile all;

recover datafile 9;

sql"alter tablespace users online";

}

(4)归档重做日志的备份与恢复

备份命令:

整库备份的同时,备份所有归档(以及联机日志):

RMAN>backup database plus archivelog;

备份所有归档:

RMAN>backup archivelog all;

备份两天来的归档:

RMAN>backup archivelog from time='sysdate-2' [to time=’xxx’] ;

备份从sequence 1 开始的归档:

RMAN>backup archivelog from sequence 1[to sequence=’n];

备份没有三次备份的归档:

RMAN>backup archivelognotbacked up 3 times;

备份所有归档,然后删除归档:

RMAN>backup archivelog all delete input;

恢复:

显示恢复目录中的归档日志:

RMAN>list backupsetofarchivelog all;

一般情况下,在RMAN 的普通恢复过程中,不必恢复归档的重做日志。不过偶尔也需

要恢复重做日志,例如我们用Log Miner 来从归档中查找一些东西。

RMAN命令举例:

RMAN>RESTORE ARCHIVELOG ALL;

RMAN>RESTORE ARCHIVELOG FROM LOGSEQ=1 UNTIL LOGSEQ=20;

RMAN>RESTORE ARCHIVELOG FROM LOGSEQ=1;

可以用SET 命令来指定归档日志的还原位置,例如:

RMAN>run{

set archivelog destination to"d:\temp";

restore archivelog all;

}

需要注意的是,即使新的归档日志目录不同于默认的归档日志目录,如果Oracle 判定日志已存在,也不会恢复该归档日志文件。

联机日志的备份

联机日志不能用RMAN 来备份,可以先将其归档,再备份。为了实现这点,必须在RMAN中执行归档命令语句:

RMAN>run {

2>allocate channel dev1typedisk;

3>sql"alter system archive log current";

4>backup(archivelog from time"sysdate-1"all delete input)

5> "format "/oracle/backups/log_t%t_s%s_p%p";

6> release channel dev1;

7> }

上面的脚本可以在执行完一个完整的联机数据库备份后执行,确保所有的重做日志可以将数据库恢复到一个一致性的状态。

当然,也可以在全库备份时使用plus archvielog 选项,将自动完成联机日志的备份。

(5)控制文件和服务器参数文件的备份与恢复

备份:

// 设置文件名格式

RMAN> set controlfile autobackup format for device type disk to 'ctl_%F';

1. RMAN> configure controlfile autobackup on; // backup database时将自动备份

2. RMAN> backup current controlfile;

3. RMAN> backup .... include control file;

4. RMAN> backup file 1; // system datafile 自动备份

SPFILE(PFILE)的丢失/损坏,对数据库不会产生致命影响,可以从其他方式恢复。

不过既然RMAN 的备份计划中包括了SPFILE 的备份,那么就可以使用RMAN 来还原SPFILE 了。

$ rman target / catalog "rman/rman@db"

RMAN> set dbid=153910023 // SET DBID 这个步骤是不能省略的,否则会报错。

RMAN> restore spfile from autobackup [MAXDAYS 100]; // 或者restore spfile;

RMAN> startup force

或者从某个备份集恢复:

RMAN> restore spfile from backupset bs_num命令。

使用 dbms_backup_restore 包恢复服务器参数文件:

在一些不常见的情况下,我们可能需要直接使用dbms_backup_restore 包来恢复spfile。当然这个包也可以用来恢复其它数据,是常规办法都没有用的时候的一个利器。

这个包可以在数据库NOMOUNT 状态下使用。假设我们有一个自动备份文件C-2600315304-20060829-02,我们需要从这里恢复据那么可以通过执行下面的脚本:

SQL>

DECLARE

DEVTYPE VARCHAR2(256);

DONE BOOLEAN;

BEGIN

DEVTYPE:=DBMS_BACKUP_RESTORE.deviceallocate(NULL);

DBMS_BACKUP_RESTORE.restoresetdatafile;

DBMS_BACKUP_RESTORE.restorespfileto('/back/SPFILE.ORA');

DBMS_BACKUP_RESTORE.restorebackuppiece(

'/back/C-2600315304-20060829-02',DONE=>done);

DBMS_BACKUP_RESTORE.devicedeallocate(NULL);

END;

恢复控制文件:

RMAN> startup nomount;

RMAN> set dbid=153910023

RMAN> restore controlfile from autobackup

RMAN> restore controlfile from '/arch/ct_c-2347671489-20060630-00';

联机状态:目标数据库MOUNT或OPEN

RMAN> restore controlfile to 'd:\temp\control01.ctl';

然后再执行恢复数据库的其他步骤:

RMAN> restore database;

RMAN> recover database;

RMAN> alter database open resetlogs;

使用 dbms_backup_restore包恢复控制文件:

SQL>

DECLARE

DEVTYPE VARCHAR2(256);

DONE BOOLEAN;

BEGIN

DEVTYPE:=DBMS_BACKUP_RESTORE.deviceallocate(NULL);

DBMS_BACKUP_RESTORE.restoresetdatafile;

DBMS_BACKUP_RESTORE.restorecontrolfileto('/back/CONTROL01.CTL');

DBMS_BACKUP_RESTORE.restorebackuppiece

('/back/C-2600315304-20060829-00',DONE=>done);

DBMS_BACKUP_RESTORE.devicedeallocate(NULL);

END;

(6)备份集的备份的备份与恢复

备份:

备份所有备份集:

RMAN> backup backupset all;

备份指定备份集:

RMAN> backup backupset bs_num;

恢复:(这种备份只是增加一个镜像,不用恢复)

主要用于改变备份集的位置,或者创建多个镜像备份,比如将备份集从硬盘备份到磁

4.4基于SCN 的恢复

如果知道数据库出错前的SCN,可以将数据库还原到指定SCN 状态。

$ startup mount;

RMAN> run{

allocate channel d1 type disk;

restore database until scn 1317011; --或者set until scn 1317011

recover database until scn 1317011;

sql 'alter database open resetlogs';

release channel d1;

}

4.5基于时间的恢复

下面使用set until time 命令为2005 年8 月1 日下午 1点的恢复目标:

$ startup mount;

RMAN> run{

set until time "to_date('2005/08/01 13:00:00','yyyy/mm/dd hh24:mi:ss')

restore database;

recover database;

alter database open resetlogs;

}

执行上面的命令时, RMAN 会查找与恢复目标时间最近、但是不包含恢复目标时间及以后时间的备份集,并且从这个备份中还原数据库。如果数据库非归档模式,那么恢作会在备份集的时间点停止;否则RECOVER 命令会应用恢复目标之前的归档重做日志或需要的增量备份。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值