欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

oracle学习笔记之rman备份 - 西湖中的一颗浮萍

更新时间: 2015-05-04 00:00:00 责任编辑: Author_N17

 

 

 

1. 在linux. Find  / -name rman显示:

/home/oracle/product/10.20/sysman/admin/scripts/db/rman
/home/oracle/product/10.20/bin/rman
/home/oracle/product/10.20/oc4j/j2ee/oc4j_applications/applications/em/em/WEB-INF/perl/db/rman
/home/oracle/product/10.20/oc4j/j2ee/oc4j_applications/applications/em/em/database/rman
/usr/X11R6/bin/rman

 

其中/u/usr/X11R6/bin/rman不是我们需要的rman,我们需要的rman是/home/oracle/product/10.20/bin/rman

 

2.切换到oracle用户,修改.bash_profile文件,使文件中的PATH变量修改为 PATH=$ORACLE_HOME/bin:$PATH,这样在命令行中直接输入rman,响应的就是我们需要的rman程序

 

3. sqlplus /nolog

    conn /as sysdba

    archive log list (查看数据库是否处于归档模式中)

    如果 Database log mode              NoArchive Mode
            Automatic archival                Disabled

   则需要修改数据库位归档模式,修改数据库归档模式。

   先startup mount , alter database archivelog ,alter database open

 

4.在[oracle@localhost]中,直接输入:rman 就切换到rman程序中,这个时候rman运行在 NOCATALOG mode中(没有catalog数据库,也可是使用 rman nocatalog命令)

 

5.连接到target数据库,用命令 connect target  / (connect target system/oracle@ora10g,如果数据库没有起来,也可要直接在rman命令下用startup进行启动数据库)    可以连接到target database.(rman 一边连接到target数据库,另外一边连接到control file(nocatalog mode),control file 中存储rman 的备份信息)

 

6.用list backupset 命令查看有没有备份的东西

 

======================对整个数据库进行备份====================================

1.对整个数据库进行全备份(full backup)。只要输入命令: backup database;

 

2.list backupset 查看备份的具体信息

 

List of Backup Sets
===================

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
1       Full    6.80M      DISK        00:00:02     06-DEC-08     
        BP Key: 1   Status: AVAILABLE  Compressed: NO  Tag: TAG20081206T201041
        Piece Name: /home/oracle/flash_recovery_area/ORA10G/backupset/2008_12_06/o1_mf_ncsnf_TAG20081206T201041_4mntz78s_.bkp
  Control File Included: Ckp SCN: 782019       Ckp time: 06-DEC-08
  SPFILE Included: Modification time: 06-DEC-08

BS(backupset),piece是一个文件,一个BS包含多个piece.

 

3.rman中缺省的参数,可以通过 show all ;来进行查看(RMAN configuration parameters),我们在使用backup database命令中,可以把这些default value 用固定的值来进行替代.由于刚学习期间,就用缺省命令,等熟悉了,在进一步学习

 

4.我们可以把备份的文件才备份的目录中拷贝到磁带上,然后删除备份目录下面的备份文件,如果下次需要恢复的话,只要把文件重新拷回到用来的备份目录就可以了

 

5.查看control file 文件中的备份信息(因为我们做的备份是在nocatalog模式下),control file 在/u01/oracle/oradata/ora10g目录下,由于control file 是个二进制文件,要查看control file 文件中的内容,用strings control03.ctl,发现control03.ctl中有rman备份的信息了

 

========================0级增量备份========================================

概念:全备份和0级增量备份。全备份和0级增量备份几乎是一样的。唯一的区别,0级增量备份能作为增量备份的基础,而全备份不能作为增量备份的基础。其它方面完全一致

 

1.backup incremental level=0(leve 0) database;(增量为0的备份)

 

2.backup incremental level   1(level=1) database;(增量为1的备份)

 

 

在上面的备份中,我们备份了datafile,controlfile和parameter file.没有备份的文件有归档日志,重做日志和口令文件没有备份.口令文件不需要备份,我们用orapw来创建一个新的口令文件.rman 在nocatalog模式下,不能够对redo log file 进行备份

 

=============================备份archivelog 在nocatalog模式下====================

 

命令:backup database plus archivelog delete input(delete input的意思在备份完成后,删除 archivelog文件,这个选项可要可不要,这个命令也可以用 backup incremental level=0(1,2...)来进行备份)

 

=============================备份表空间====================================

backup tablespace tablespacename

如果我们不知道tablespace的名字,在rman中,可要通过report schema命令,来查看表空间的名字

 

MAN> report schema;

Report of database schema

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    480      SYSTEM               ***     /home/oracle/oradata/ora10g/system01.dbf
2    25       UNDOTBS1             ***     /home/oracle/oradata/ora10g/undotbs01.dbf
3    250      SYSAUX               ***     /home/oracle/oradata/ora10g/sysaux01.dbf
4    5        USERS                ***     /home/oracle/oradata/ora10g/users01.dbf
5    200      PERFSTAT             ***     /home/oracle/oradata/ora10g/perfstat.dbf

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    20       TEMP                 32767       /home/oracle/oradata/ora10g/temp01.dbf

=============================备份控制文件=================================

backup current controlfile

backup database include current controlfile

=============================备份镜像=====================================

 

在rman的备份中有两种方式:备份集(backupset)和备份镜像(image copies).镜像备份主要是文件的拷贝:copy datafile ... to ...

 

我们在rman>report schema;MAN> report schema;

Report of database schema

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    480      SYSTEM               ***     /home/oracle/oradata/ora10g/system01.dbf
2    25       UNDOTBS1             ***     /home/oracle/oradata/ora10g/undotbs01.dbf
3    250      SYSAUX               ***     /home/oracle/oradata/ora10g/sysaux01.dbf
4    5        USERS                ***     /home/oracle/oradata/ora10g/users01.dbf
5    200      PERFSTAT             ***     /home/oracle/oradata/ora10g/perfstat.dbf

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    20       TEMP                 32767       /home/oracle/oradata/ora10g/temp01.dbf

 

rman>copy datafile 5 to '/u01/rmanbak/tbso1bak.dbf';

 

它会把tbs作为一个拷贝。我们用list backupset来看,不能够查看我们刚备份的 tbs01bak.dbf',因为它不是backupset. 我们用list copy 就能够查看我们刚才刚刚备份的文件

 

============================单命令与批命令==================================

单命令: backup database;

批命令:

rman> run{

 2> allocate channel cha1 type disk;

 3> backup

 4> format '/u01/rmanbak/full_%t'

 5> tag full-backup //标签可以顺便起,没关系

 6> database;

 7> release channel cha1;

 8>}

这个run中有3条命令,分别用分号来进行分割.

 

format:

%c:备份片的拷贝数(从1开始编号);

%d:数据库名称;

%D:位于该月中的天数(DD);

%M:位于该年中的月份(MM);

%F:一个基于DBID唯一的名称,这个格式的形式为c-xxx-YYYYMMDD-QQ,其中xxx位该数据库的DBID,YYYYMMDD为日期,QQ是一个1-256的序列;

%n:数据库名称,并且会在右侧用x字符进行填充,使其保持长度为8;

%u:是一个由备份集编号和建立时间压缩后组成的8字符名称。利用%u可以为每个备份集产生一个唯一的名称;

%p:表示备份集中的备份片的编号,从1开始编号;

%U:是%u_%p_%c的简写形式,利用它可以为每一个备份片段(既磁盘文件)生成一个唯一的名称,这是最常用的命名方式;

%t:备份集时间戳;

%T:年月日格式(YYYYMMDD);

 

 

channel的概念:一个channel是rman于目标数据库之间的一个连接,"allocate channel"命令在目标数据库启动一个服务器进程,同时必须定义服务器进程执行备份和恢复操作使用的I/O类型

 

通道控制命令可以用来:

      控制rman使用的OS资源

      影响并行度

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

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

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

 

=================================RMAN一周典型备份方案============================

 

1.星期天晚上      -level 0 backup performed(全备份)

2.星期一晚上      -level 2 backup performed

3.星期二晚上      -level 2 backup performed

4.星期三晚上      -level 1 backup performed

5.星期四晚上      -level 2 backup performed

6.星期五晚上      -level 2 backup performed

7.星期六晚上      -level 2 backup performed

 

如果星期二需要恢复的话,只需要1+2,

如果星期四需要恢复的话,只需要1+4,

如果星期五需要恢复的话,只需要1+4+5,

如果星期六需要恢复的话,只需要1+4+5+6.

 

自动备份:备份脚本+crontab

 bakl0

 bakl1

 bakl2

执行脚本:

rman target / msglog=bakl0.log cmdfile=bakl0 (/表示需要连接的目标数据库,msglog表示日志文件,cmdfile表示的是脚本文件)

rman target / msglog=bakl1.log cmdfile=bakl1

rman target / msglog=bakl2.log cmdfile=bakl2

实例:rman target system/oracle@ora10g(/) msglog=/u01/rmanbak/bakl1.log cmdfile=/u01/rmanbak/bakl0

 

完整的命令:/u01/oracle/product/10.2.0/bin/rman target system/oracle@ora10g(/) msglog=/u01/rmanbak/bakl1.log cmdfile=/u01/rmanbak/bakl0

 

把备份脚本放到/u01/rmanbak/script目录下面,vi bakl0,bakl0的内容为:

run{

    allocate channel cha1 type disk;

    backup

    incremental level  0

    format '/u01/rmanbak/inc0_%u_%T'(u表示唯一的ID,大T是日期,小t是时间)

    tag monday_inc0 //标签可以顺便起,没关系

    database;

    release channel cha1;

    }

,类似就可以写出bakl1,bakl2相应的脚本.

 

自动备份

crontab

 

crontab -e -u oracle(改命令的意思是编辑oracle用户的定时执行(-e,edit -u oracle,oracle用户))

 

分  时  日 月 星期(0代表星期天)

 

45 23  *  *    0    rman target / msglog=bakl0.log cmdfile=bakl0(星期天的23:45会以oracle用户的身份来执行命令)

45 23  *  *    1    rman target / msglog=bakl2.log cmdfile=bakl2

45 23  *  *    2    rman target / msglog=bakl2.log cmdfile=bakl2

45 23  *  *    3    rman target / msglog=bakl1.log cmdfile=bakl1

45 23  *  *    4    rman target / msglog=bakl2.log cmdfile=bakl2

45 23  *  *    5    rman target / msglog=bakl2.log cmdfile=bakl2

45 23  *  *    6    rman target / msglog=bakl2.log cmdfile=bakl2

 

然后启动crontab ,启动crontab的命令:

root> service crond restart

 

 

 

================================RMAN恢复=================================

在非catalog模式下,备份的信息存储在controlfile文件中,如果controlfile文件发生毁坏,那么就不能能够进行恢复,使用在备份的时候需要把controlfile也进行自动备份

 

Dbid=?

. configure controlfile autobackup on;

. Backup database plus archivelog delete input;

 

Dbid表示database的一个ID,将来用于恢复spfile和controlfile时候要用到.


RMAN> connect target /

connected to target database: ORA10G (DBID=3988862108)

这个Dbid=3988862108

 

RMAN>show all;来查看参数

 

using target database control file instead of recovery catalog
RMAN configuration parameters are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/home/oracle/product/10.20/dbs/snapcf_ora10g.f'; # default

 

其中CONFIGURE CONTROLFILE AUTOBACKUP OFF; 没有对controlfile进行 autobackup,使用我们需要运行下面命令来对controlfile进行自动备份

 

RMAN> configure controlfile autobackup on;

RMAN> show all; //这样就能够发现controlfile 能够进行自动备份

 

RMAN> list backup;查看以前备份的信息

 

RMAN> delete backupset 24;//24代表backupset 的编号

 

RMAN>backup format '/u01/rmanbak/full_%T_%u.bak' database plus archivelog;(进行一次全备份)

 

口令文件丢失(不属于rman备份的范畴),我们只需要用一个命令来重建这个文件就可以了:

orapw file=orapwsid password=pass entries=5;  //口令文件的路径:/u01/oracle/product/10.20/db_1/dbs目录下

oracle> cd /u01/oracle/product/10.20/db_1/dbs

oracle> rm orapwora10g;(文件删除,模拟丢失)

oracle> orapwd file=orapwora10g password=oracle entries=5;(重新建立一个文件),entries的意思(DBA的用户最多有5个)

 

 

SPFILE丢失:

 

startup nomount;

set dbid 3988862108;

restore spfile from autobackup;

shutdown immediate;

set dbid 3988862108;

startup;

 

模拟操作:

oracle> mv spfileora10g.ora spora10g.ora

oracle>rman target /;

rman> shutdown immediate;

rman> startup nomount;


startup failed: ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/home/oracle/product/10.20/dbs/initora10g.ora'

 

rman>set dbid 3988862108;

rman>restore spfile from autobackup;

执行该命令,如果没有找到的话,那可能是文件的路径发生错误.可以通过直接赋予它的文件

rman>restore spfile from '/u01/oracle/flash_recovery_area/ORA10G/autobackup/2008_12_09/o1_mf_s_673025706_4mw7xc79_.bkp

 

在dbs/目录下产生spfileora10g.ora文件。证明spfile 已经恢复好

 

rman> shutdown immediate;

 

rman> startup ;(如果该命令不能够启动数据库,那么需要set dbid 3988862108)

 

controlfile 丢失:

startup nomount;

restore controlfile from autobackup;

alter database mount;

recover database;

alter database open resetlogs;

注意:在做了alter database open resetlogs;会把online redelog file清空,数据文件丢失.所以这个时候要做一个全备份。

oracle>rm *.ctl

oracle>rman target / ;//不能够连接到rman ,因为controlfile丢失

oracle>sqlplus /nolog;

 

SQL>shutdown immediate; //因为controlfile丢失,不能够正常shutdown

SQL>shutdown abort;

 

oracle>rman target /;

 

rman>startup nomount;

rman>restore controlfile from autobackup;\

rman>alter database mount;

rman>alter database open resetlogs;


RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of alter db command at 12/09/2008 16:21:13
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/home/oracle/oradata/ora10g/system01.dbf

//出错, redo log的scn记录在controlfile里面的,因为我们有新的controlfile,所以需要resetlogs;

 

/*

resetlogs命令表示一个数据库逻辑生存期的结束和另一个数据库逻辑生存期的开始,每次使用resetlogs命令的时候,SCN不会被重置,不过oracle会重置日志序列号,而且会重置联机重做日志内容.
这样做是为了防止不完全恢复后日志序列会发生冲突(因为现有日志和数据文件间有了时间差)。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2015-05-04 00:00:00
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/1975343/
本文WWW.DOC100.NET DOC100.NET版权所有。