查看: 831|回复: 0

[oracle] oracle第三方工具rman备份和恢复(非catalog和catalog方式下)

 关闭 [复制链接]

该用户从未签到

发表于 2016-2-22 15:13:08 | 显示全部楼层 |阅读模式
catalog方式:
全量备份
0级增量备份
1级增量备份


在非catalog方式下备份,备份过程中所产生的信息存储在控制文件当中,控制文件是二进制文件,所以要看可以使用strings查看,如:srtings control01.ctl


第一:rman可能会有两个,一个是系统的本身的;另一个是db2数据库的,所以需要确保环境变量的第一个地址是db2的。

Echo $PATH


第二:开启归档模式
Shutdown immediate
Startup mount
Alter database archivelog
Alter database open


第三:rman使用 (直接敲rman,回车即可,如果不确定是否是以nocatalog方式的,可以:rman nocatalog,回车)


第四:连接目标数据库
Connect target /

List backupset (显示之前所有备份)


第五:全备份
backup database


第六:零级增量备份
backup incremental level=0 database    (和全量备份一样,备份的是所有的数据)
零级增量备份与全备区别:在做一级增量备份的时候要依据零级增量备份才可备份,而全备则不行


第七:一级增量备份
backup incremental level 1 database     (这次备份的数据会很小,但是备份时间还是很长,因为要比较零级增量备份数据和现在数据库的差异。)仅备份改变的数据


第八:以上方式备份的数据仅仅包含:数据文件(datafile)、控制文件(controlfile)、参数文件(spfile

除了这些文件还有口令文件、重做日志文件、归档日志文件

口令文件备份没有意义,无需备份;而重做日志文件无法备份,所以这里还需备份归档日志文件


第九:备份归档日志文件
backup database plus archivelog deleteinput              (备份数据的同时备份归档日志,备份完成之后,把归档日志删除)


第十:备份表空间
backup tablespace 表空间名称

如果我们不知道表空间名称,可以使用report schema来查看


第十一:也可以单独备份控制文件
backup current controlfile
backup database include current controlfile


第十二:rman备份有两种方式
1、备份集     backupset (即以上备份方式)
2、镜像备份  image copies

copy datafile … to …

不知道有哪些datafile,同样也可以使用report schema来查看
例子:copydatafile (数据文件的id或者数据文件名称)to ‘备份路径/备份文件名称

此时用listbackupset是查看不到备份的文件的,这里使用list copy来查看


第十三:删除备份的物理文件
删除之后,在 rman下使用list backupset还会显示备份信息。如果不想显示可以操作如下:
crosscheck backup;
delete noprompt expired backup;
执行上面两条命令就行了
注:实在rman中执行的,而非在sql命令下

注:以上都是单命令方式执行备份的



批命令备份数据:
run {
allocate channel cha1 type disk;           (通道的作用:定义进程数备份数据(备份时间长短),还可以并行备份,多个备份等等)
backup
format “/data/rmanbak/full_%t”                  (指定备份路径以及文件格式)
tag full-backup                                          (指定标签名)
database;
release channel cha1;
}





恢复操作
第一:备份数据时,自动备份控制文件
configure controlfileautobackup on

第二:密码文件丢失解决办法:
orapwd file=orapworclpassword=oracle entries=5      (生成密码文件,orapworcl文件在$ORACLE_HOME/dbs下)

第三:参数文件(spfile)丢失:(数据库启动需要spfile
解决方法:
1shutdownimmediate
2startupnomount
3setdbid 相应的值
4restorespfile from autobackup (从自动备份的路径里面找spfile,以达到恢复spfile,到这里有可能恢复失败,还是找不到spfile,那就跟路径有关系了。)执行下面的:
restore spfile from ‘保存spfile文件的路径
之后在测试能否启动数据库
5shutdownimmediate
6startup      (如果启动不成功,执行下面语句:设置dbid,如果成功,跳过一下步骤)
7setdbid 相应的值
8startup
模拟:mv $ORACLE_HOME/dbs/spfileorcl.ora sporcl.ora

第四:控制文件丢失(controlfile
导致关闭数据库无法关闭,rman连接不上
rman target /   (失败,无法连接)
sqlplus /nolog
shutdown immediate (关闭失败)
1、  直接使用shutdownabort (粗暴的方式关闭实例)
2、  startup nomount
3、  restore controlfile from autobackup;      (autobackup是为on状态的,可以自动搜索到的)
4、  alter database mount              (下面执行alter database open resetlogs是不行的,先得恢复数据库)
5、  recover database;
6、  alter database open resetlogs;  (因为控制文件已经恢复,这是一个新的控制文件,所以重做日志文件需要重置)

第五:redolog file 丢失      (以下是在sqlplus中执行的,不是在rman下)
1、  shutdown immediate
2、  startup mount          (需要在mount状态进行恢复,和spfile还有controlfile不一样,这一点)
3、  recover database until cancel;
4、  alter database open resetlogs;

第六:datafile 丢失
1reportschema;         (查看丢失的datafile所对应的File对应的值)
2sql“alter database datafile File对应的值 offline”;
3restoredatafile File对应的值;               (恢复的是之前备份的数据)
4recoverdatafile File对应的值;              (恢复的是备份之后到现在变化的数据,通过重做日志来恢复,重做日志记录增删改(即变化的数据))
5sql“alter database datafile File对应的值 online”;
6reportschema;         (查看数据恢复了没有)

第七:表空间恢复
1reportschema;         (查看丢失的表空间名称)
2sql“alter tablespace 表空间名称offline”;     (这里会出错,提示:找不到相应的表空间名称,必须强制offline,执行以下语句)
3sql“alter tablespace 表空间名称offline immediate”;
4restoretablespace 表空间名称;
5recovertablespace 表空间名称;
6sql“alter tablespace 表空间名称 online”;
7reportschema;         (查看数据恢复了没有)

第八:数据库实例下所有数据都丢失(包括:控制文件、重做日志文件、数据文件)
1shutdownabort        (在sqlplus下执行)
以下是在rman下执行操作:
2rmantarget /
3startupnomount
4restorecontrolfile from autobackup;              (找不到文件,手动指定路径)
5alterdatabase mount;
6restoredatabase;              
7recoverdatabase                     (在sqlplus下执行,会出错,恢复数据(变化的数据)依赖重做日志文件,重做日志文件里面保存着增删改的操作信息,直接跳到下一步)
原因:部分数据丢失,重做日志文件又不在,不允许你recover
8createpfile from spfile           (spfile中创建一个新的pfile,在sqlplus下执行)
9startuppfile=$ORACLE_HOME/dbs/initorcl.ora mount
10alterdatabase open resetlogs;

第九:基于时间点的恢复
run{
set until time “to_date(‘07/01/0215:00:00’,’mm/dd/yy hh24:mi:ss’)”
restore database;
recover database;
alter database openresetlogs;
}
之前数据修改过,只要带resetlogs,修改过的数据就不能恢复,部分数据丢失

第十:基于SCN的恢复
startup mount;
restore database untilscn 10000;                 scn值,可以通过listbackup来查看)
recover database untilscn 10000;
alter database openresetlogs;

第十一:基于日志序列的恢复
startup mount;
restore database untilsequence 100 thread 1;              sequence的值和thread的值,可以通过这条语句:select * from v$log,在sqlplus下执行这条查询语句)
recover database untilsequence 100 thread 1;
alter database openresetlogs;



catalog下备份和恢复
1、  create tablespace rman_ts datafile ‘/$ORACLE_HOME/orcl/rmants.dbfsize 20m;     (创建表空间)
2、  create user rman identified by rman defaulttablespace quota unlimited on rman_ts;   (创建一个用户在该表空间上未限制使用大小)
3、  grant recovery_catalog_owner to rman;        (给予该用户(rman)授权,授予recovery_catalog_owner权限,recovery_catalog_owner权限包含connect和resource权限)
4、  rman catalog rman/rman               (使用rman用户登录,并以catalog方式)
5、  create catalog tablespace rman_ts;         (创建catalog在表空间rman_ts上)
6、  connect target /                     (连接目标数据库)
7、  register database;            (在recovery catalog上注册数据库)
8、  rman target / catalog rman/rman     (退出,并用rman连接目标和catalog数据库,以rman用户和catalog方式)
9、  备份数据库和恢复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

站长推荐上一条 /1 下一条