小弟接触这玩意刚不久,有错的地方帮忙点出来,不胜感激
一、 配置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;
注:1、used表示已经使用的空间占用闪回恢复区总大小的百分比;
2、reclaimable表示通过删除不需要的备份文件所能回收的空间的百分比;
3、表示文件的总个数;
2、配置rman相关的参数
一般情况下应尽量避免使用sys用户来完成ramn的管理工作;
所以我们事先在目标数据库中创建了一个专门供rman连接的用户;
Create user rmanadm identified by oracle;
Grant sysdba to rmanadm;
2、1使用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进行备份,这样操作过于复杂;
一般情况下,我们使用expdp、impdp的命令,对于恢复目录进行相关的备份和恢复操作;
二、使用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 ,在备份归档日志完毕后,即可删除;
未完----------(待续)