神器-----Rman(适合于初学者)

论坛 期权论坛 脚本     
匿名技术用户   2021-1-4 07:20   382   0

小弟接触这玩意刚不久,有错的地方帮忙点出来,不胜感激

一、 配置rman工具

首先:rman只能使用专用连接方式连接到目标数据库,而不能使用共享连接的方式;

1、闪回恢复区(10g中,rman生成备份文件的默认的存放目录)

1.1查看闪回恢复区的位置和大小

Show user

Show parameter db_recovery

注意:1.db_recovery_file_dest,闪回恢复区默认的位置;

2. Db_recovery_file_dest_size,闪回恢复区默认的大小,2G

如果要修改这两个参数,必须先设置该区的大小,然后在设置其位置:

例:alter system set db_recovery_file_dest_size = 10g;

Alter system setdb_recovery_file_dest = '/u01/bk_roger';

Show parameter db_recovery

注:该区的大小虽未10gb,但是其空间不是马上分配的,指的是最多可用空间为10g,超过则会报错!

1.2闪回恢复区的使用情况;

这块宝地(闪回恢复区)不仅可以存放rman生成的备份,还可以存放控制文件,联机日志文件,归档日志文件及数据库日志文件等。

例 可通过v$flash_recovery_area_usage查看该区域的使用情况;

Select file_type,percent_space_used used,percent_space_reclaimable,number_of_files numfile from v$flash_recovery_area_usage;

注:1used表示已经使用的空间占用闪回恢复区总大小的百分比;

2reclaimable表示通过删除不需要的备份文件所能回收的空间的百分比;

3、表示文件的总个数;

2、配置rman相关的参数

一般情况下应尽量避免使用sys用户来完成ramn的管理工作;

所以我们事先在目标数据库中创建了一个专门供rman连接的用户;

Create user rmanadm identified by oracle;

Grant sysdba to rmanadm;

21使用rmanadm连接到目标库;

$Export oracle_sid=orcl

$rman target rmanadm/oracle

注意:export 命令用于指定连接的目标数据库的名字;

使用rmanadm用户连接目标数据库;如果使用rman target / 表示以sys用户连接数据库;

Dbid为目标数据库的编号,在多数据库的服务器中,此编号唯一;

Select dbid,name from v$database;

Rman后面还可以跟很多参数 $rman help(自己看去)

rman的相关日志文件;

$rman target rmanadm/oracle log=/uo1/bk_roger/rman.log append

Rman所有的输出信息不会在屏幕上显示,而是全部输出到rman.log文件中;

Append表示日志信息会追加到日志文件中,而不进行覆盖;

通常对于日常的夜间备份会采用此方式,然后将生成的日志信息再做处理即可;

2.2 修改rman的参数配置

$rman target rmanadm/oracle

Rman> show all;(关于这条命令的显示结果就不过多解释了)

要求

1、控制文件的自动备份开启;

2、备份的冗余度为2

Rman>configure retention policy to redundancy 2;

Rman>configure controlfile autobackup on;

要把对应的参数修改为默认值后后面的#default也不会出现;

但是使用clear命令则可以实现例;

Rman>Configure retention policy clear;

Rman>configure controlfile autobackup clear;

3、配置回复目录(catalog)

Why?

答:1、在目标数据库中,关于rman生成备份信息的说明信息会保存到控制文件中,但是默认情况下在控制文件中保存7天;

2、如果将此参数变大,可以,但是记录的信息会增多,则会影响数据库的性能;

3、如果将此参数变小,也可以,但是备份的频度会增多,备份占的存储区也会增多。

Show parameter control

注意:1 恢复目录使用自身schema下的表、视图及存储过程等,来保存目标数据库的控制信息;

2 但是由于控制信息不在目标数据库,所以参数control_file_record_keep_time对恢复目录中的信息没有影响;

优点:1 可以将rman的备份信息永久存放于恢复目录中:

2 在进行目标数据库恢复时,指定读取恢复目录中的控制文件进行相关回复即可;

3.1在恢复目录所在的数据库中创建表空间,用于存放恢复目录所包含的表

Create tablespace rman_tbs01 datafile '/u01/rmantbs01.dbf' size 20m;

3.2创建一个用户,用于管理恢复目录中的所有对象;

Create user rman_owner identified by oracle default tablespace rman_tb01 temporary tablespace temp;

授予该用户相应的权限:

3.3Grant recover_catalog_owner to rman_owner;

Grant connect,resource to rman_owner;

3.4使用rman的命令创建恢复目录;

$rman catalog rman_owner/oracle

Rman>create catalog tablespace rman_tbs01;

Rman>exit

3.5 使用rman连接到目标数据库和恢复目录之后,将目标数据库注册到恢复目录;

$rman target sys/oracle catalog rman_owner/oracle

Rman>register database;

一个恢复目录中可以注册多个数据库的信息,只需完成3.5即可。

注意:当备份数据库或者数据库中的数据文件时,rman会把发生变化的控制文件的信息同步到恢复目录中,但这只是部分同步;

如果想把控制文件总中的所有信息同步到恢复目录中,需要完全同步;

Rman>resync catalog;

注意:1、通常我们修改了数据库的结构,例如 添加或删除了表空间等操作后,应该进行一次完全同步;

2、在使用恢复目录的时候,以前所写的rman的相关的备份命令没有任何区别;

3、如果我们对目标数据库进行了不完全恢复,并以resetlogs方式打开数据库后,在使用恢复目录的情况下,应该使用以下命令来保证恢复目录的有效性;

Rman>reset database;

使用恢复目录的的一个好处就是,可以将经常使用的备份恢复命令,以脚本的形式保存于恢复目录;

例 保存相关脚本rman>create script_bk_level0{

Backup as backupset incremental level 0 format '/u01/%d_%s_%p' database;

Sql 'alter system archive log current';

}

如果需要修改此脚本Rman>replace script bk_level0{

Backup as backupset incremental level 0 format '/u01/%d_%s_%p' database;

Sql 'alter system archive log current';

}

如果要运行此脚本,则:rman>run{

Execute script bk_level0;

}

如果想看此脚本的信息

Rman>print script bk_level0;

删除此脚本

Delete script bk_level0;

对于恢复目录,不建议再次使用rman进行备份,这样操作过于复杂;

一般情况下,我们使用expdpimpdp的命令,对于恢复目录进行相关的备份和恢复操作;

二、使用rman工具

提示:rman的备份相关的命令默认是基于归档模式的;

1、非归档模式下,备份数据文件

(此操作类似于冷备,但是需将数据库启动到mount状态,因为rman的相关命令执行时需要读取控制文件的相关信息;)

Rman>run{

Shutdown immediate;

Startup mount;

Backup as backupset database format '/u01/roger_bf/all_db_%U';

Alter database open;

}

注意(1)、进行备份时,需分配相关的通道;如果没有,则是用数据库默认的磁盘通道;

(2)、非归档模式下使用rman进行数据库的备份会造成数据库重新启动,不推荐;

2、归档模式下,数据库的相关备份

提示:此处采用批处理模式,即run{}

注意:无论是备份数据库,还是备份表空间,还是备份数据文件,最终的对象还是数据文件;

2.1

备份表空间users,生成备份集

Rman>run{

Allocate channel d1 type disk;

Backup tablespace users;

}

备份表空间users,生成压缩备份集;

Rman>run{

Allocate channel d2 type disk;

Backup as compressed backupset tablespace users;

}

备份表空间users,生成镜像拷贝;

Rman>run{

Allocate channel d3 type disk;

Backup as copy tablespace users;

}

备份表空间users下的数据文件,生成备份集

>Select t.ts#,t.name name_ts,d.file#,d.name name_db from v$tablespace t,v$datafile d where t.ts#=d.ts#;

Rman>run{

Allocate channel d3 type disk;

Backup datafile 4;

}

把数据问件备份成压缩备份集和镜像拷贝参考上面命令即可

如果想把备份生成到磁带上需要建立磁带通道;磁带不能存镜像拷贝!

手工创建的通道优先级高于rman的默认参数设定的优先级;

磁盘通道类型为disk,磁带通道类型为sbt或者sbt_tape;

2.2备份多个数据文件

可以开启多个通道进行多个数据文件的备份,提高备份效率;

rman>run{

Sql 'alter system switch logfile';

Sql 'alter system checkpoint';

Allocate channel d11 type disk;

Allocate channel d12 type disk;

Allocate channel d13 type disk;

Backup format '/u01/roger_bf/df_%d_%s_%p.bak'

(datafile 1,2 channel d11)

(datafile 3,4 channel d12)

(datafile 5 channel d13);

Sql 'alter system switch logfile';

}

注:在备份之前执行alter system switch logfiel的目的是将redo log信息向archive log中归档;

执行alter system checkpoint 的目的是将缓存中的脏数据写入数据文件,避免丢失;

在终了时执行alter system switch logfile的目的是为保证下次备份的可靠性;

2.3备份归档日志

提示:online redo log 在数据库运行期间,不能进行备份,需要将其归档至archive log 之后,备份相关的归档日志即可;

在使用rman备份归档日志时,会自动发生一次日志切换,然后才进行归档;

例 备份3天以来所有归档日志文件

Rman>backup archivelog from time 'sysdate - 3';

备份日志序号大于5的归档日志文件

Sql>Alter system switch logfile;

Sql>Alter system checkpoint;

Rman>backup archivelog from sequence 5;

备份所有归档日志文件

Rman>Backup archivelog all;

rman成功备份完所有的归档日志文件之后,删除相关的归档日志文件,只保留此备份;(占磁盘空间啊啊!)

Rman>backup archivelog all delete input;

备份数据库和归档日志

Rman>backup database plus archivelog;

备份表空间和归档日志

Rman>backup tablespace users plus archivelog;

如果在备份期间,删除了某些未归档的归档日志,会造成备份失败;

此时切换一下日志,但是日志会不连续;alter system switch logfile;

再备份归档时: rman> archivelog all skip inaccessible;

当在后面加上delete input ,在备份归档日志完毕后,即可删除;

未完----------(待续)

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP