2015年4月10日星期五

rman复习3

使用catalog来管理备份meta。catalog的database最好独立于target(放到targetdb里面,如果targetdb完蛋了哦,catalogdb也就完蛋了),磁盘占用很少,一个catalog db可以管理多个target db。

1。先在catalog db里面创建表空间,创建catalog的用户,分派权限
CREATE TABLESPACE rmancat DATAFILE '/ORADATA/app/oradata/orcl11g2/rmancat01.dbf' SIZE 15M

CREATE USER rcadmin IDENTIFIED BY rcadmin
DEFAULT TABLESPACE rmancat
QUOTA UNLIMITED ON rmancat;

GRANT recovery_catalog_owner TO rcadmin;

2。然后连接上catalog db创建 catalog
rman catalog rcadmin/rcadmin@orcl11g2
create catalog;
可以用drop catalog删除

3。然后同时连接上target和catalog,注册
rman target / catalog rcadmin/rcadmin@orcl11g2
register database;
可以用unregister database来注销登录
注册后,会同步目前的控制文件里面的backup meta到catalog db里

虽然有了catalog db,但是控制文件的backup meta还是会写,catalogdbl只是为了更长期的保存。默认情况下,控制文件里面的bacup meta保存7天(CONTROL_FILE_RECORD_KEEP_TIME),有了catalog,就可以一直保存了。
一直保存,用backup keep forever database。使用bacup keep指令后的备份,不在retention policy的管理范围。一般情况下,对特殊的日子,进行backup keep指令,比如设置保存1年。
backup keep until time 'sysdate+365' database;

如果catalogdb坏掉了,可以重新创建catalogdb,毕竟catalogdb不是很重要,但是控制文件里的信息只有7天,其他的不再控制文件的管理范围,这时,可以执行
CATALOG START WITH '/ORADATA/app/flash_recovery_area/ORCL11G';来将其他文件也加到catalog里。
catalog recovery area [noprompt]将flash领域的都给catalog化

如果出现不同步是,执行RESYNC CATALOG再次同步。

有了catalogdb,就可以将常用的rman命令,写成script存起来了,script分两种,global的可以给所有target用,local的只能给固定的targetdb用。
比如
create [global] script inc0{
  backup
  incremental level 0 database
  format '/ORADATA/backup/orcl11g/db0_%d_%s_%p_%t'
  tag = 'level_0';
}
也可以从文件创建
create [global] script inc1 from file '/tmp/rman_script_inc1.txt'
[oracle@NKV2DEVDB_O tmp]$ cat /tmp/rman_script_inc1.txt
{
backup incremental level 1 cumulative database format '/bakup/rman/backup/orcl/db1_%d_%s_%p_%t' tag='level_1';
}
执行script
run {
  execute [global] script inc0;
}
删除script
delete [global] script inc0;
显示script内容
print [global] script inc0;
print [global] script inc0 to file '/tmp/rman_script_inc0.txt'
查看script 的 list
list [global] script names;
更新script
replace [global] script inc0 {
  backup
  incremental level 0 database
  format '/ORADATA/backup/orcl11g/db0_%d_%s_%p_%t'
  tag = 'level_0';
}
另外,操作global的时候,rman只连接上catalogdb就可以。local的,需要同时连接上targetdb和catallogdb


既然一个catalogdb可以register多个targetdb,如果只用一个db用户(比如rcadmin)连接进来,岂不是大家都可以看到别的targetdb的内容了,为了隔离,oracle给大家想了一个vpc(virtual private catalog),方法如下
1。仍然需要创建database
2。仍然需要创建一个老大用户,比如rcadmin
3。给rcadmin赋予recovery_catalog_owner权限
4。rman连进catalogdb,create catalog,到此,创建了catalog,也就创建了东西。
现在要创建各自的用户
5。创建新用户 rcvpc
6。GRANT recovery_catalog_owner TO rcvpc到这里和创建rcadmin是一样的。
7。rman用rcadmin连接catalogdb进行权限分配
GRANT REGISTER DATABASE TO rcvpc让rcvpc可以reister,如果给了这个权限,就是注册register,并且是自己register targetdb的老大。
GRANT CATALOG FOR DATABASE orcl11g TO rcvpc;指定可以访问指定catalog。
这里说的访问,是指list incarnation是否看得见等。
8。先rman用rcvpc连接进catalogdb,然后create virutal catalog创建私有的catalogdb。
9。如果给了register database权限,那么可以同时连接上targetdb和catalogdb,进行register。
10。如果只给了catalog for database xxx的权限,那么只能看了。当然这两个权限是可以同时给一个人的。

同样,在rman里给出去的权限可以收回来
revoke register database from rcvpc
revoke catalog for database nkv2ddb from rcvpc
revoke all privileges from rcvpc
另外,rman的这个权限和oracle的权限有些不一样,不跟session走,是立刻反应的。
比如
有register权限rcvpc先连上了,然后register一个db,当然马上list incarnation看得见,不退出rman,
在另外一边取消掉rcvpc的权限,revoke catalog for database nkv2ddb from rcvpc后,前面的rcvpc就立刻看不久list incarnation并且也无法unregister自己register的database了。





没有评论:

发表评论