数据库 - Oracal的RMAN备份方法

几年前做过一个项目数据需要使用RMAN进行备份,当时记录了一些东西,今天在这里贴出来,记录的比较零散,不过其中还是有些比较实用的方法。Target DB:Recover Catelog DB: wind--------------------1、切换服
摘要由CSDN通过智能技术生成

几年前做过一个项目数据需要使用RMAN进行备份,当时记录了一些东西,今天在这里贴出来,记录的比较零散,不过其中还是有些比较实用的方法。


Target DB:
Recover Catelog DB: wind

--------------------
1、切换服务器归档模式,如果已经是归档模式可跳过此步:
%sqlplus /nolog (启动sqlplus)
SQL> conn / as sysdba (以DBA身份连接数据库)
SQL> shutdown immediate; (立即关闭数据库)
SQL> startup mount (启动实例并加载数据库,但不打开)
SQL> alter database archivelog; (更改数据库为归档模式)
SQL> alter database open; (打开数据库)
SQL> alter system archive log start; (启用自动归档)
SQL> exit (退出)

2、建立recovery catalog db数据库的相关内容

a,建好catalog库并建catalog表空间
  SQL> create tablespace tbs_rman datafile 'd:/oracle/product/10.1.0/oradata/wind/rman.dbf' size 200M;

b,建好管理catalog的rman的user,并给recovery_catalog_owner权限:
SQL>create user rmanuser identified by rmanuser
    temporary tablespace TEMP
    default tablespace tbs_rman
    quota unlimited on tbs_rman;

c,分配权限
SQL> grant recovery_catalog_owner to rmanuser;


3.创建 catalog

#有些时候直接使用rman linux会认为是他本身的命令,所以加入全路径比较保险
>$ORACLE_HOME/bin/rman

RMAN> connect catalog rmanuser/rmanuser@rman_db;

RMAN> create catalog;  ##这句就是把 userrman 的默认表空间分配给 catalog;

RMAN> create catalog tablespace tbs_catalog;##如果user_rman有默认表空间那么就不需要这句

##如果想删除catalog可以使用两边 RMAN>drop catalog;     RMAN>drop catalog;

将目标数据库注册到catalog
RMAN> register database;


4.配置NFS

查看nfs服务是否启动   service nfs status
启动nfs               service nfs start

vim /etc/exports

/oracle/rmanbak 10.1.50.81(rw,no_root_squash)

在target服务器上挂载远程备份目录
关于备份路径的挂载点是有要求的,而且参数上也有要求如下,挂载在 $ORACLE_HOME目录及其父目录下

mount -o rw,bg,intr,hard,timeo=600,wsize=32768,rsize=32768 -t nfs 10.1.50.80:/oracle/rmanbak /home/oracle/rmanbak


5.开始备份

做一个全库备份

run{
allocate channel d1 type disk;
backup as compressed backupset
format='/home/oracle/rmanbak/full_%d_%u_%s_%p'
tag='fullbak'
channel=d1
database plus archivelog delete input;
release channel d1;
}


增量备份 0
run{
allocate channel d1 device type disk;
backup as compressed backupset
incremental level=0
format='/home/oracle/rmanbak/inc0_%d_%u_%s_%p'
tag='inc0'
channel=d1
database plus archivelog delete input;
release channel d1;
}

增量备份 1
run{
allocate channel d1 device type disk;
backup as compressed backupset
incremental level=1
format='/home/oracle/rmanbak/inc1_%d_%u_%s_%p'
tag='inc1'
channel=d1
database plus archivelog delete input;
release channel d1;
}


表空间
run{
allocate channel d1 device type disk;
backup as compressed backupset
format='/home/oracle/rmanbak/tbs_%d_%u_%s_%p'
tag='tbs'
channel=d1
tablespace users;
release channel d1;
}


//


///
crontab



//delete expired copy
//list backup by files;
//umount -l /mnt/rmanbak
//crosscheck backupset
//validate backupset
//delete expixed backupset
//delete backupset of database device type disk completed between 'sysdate-1' and 'sysdate+1
//delete noprompt obsolete recovery window of 0 days
//
set limit channel '' readrate
set limit channel '' kbytes

软连接,逻辑卷
df -lh

chown -R oracle:dba/rmanbak

通用脚本
这里连target有些问题,如果没有密码文件不能使用@nscp网络服务名这种方式,因为sysdba不能远程连接,只能使用 target /
##connect.rcv
connect catalog rmanuser/rmanuser@rman_db
connect target sys/oracle123456@nscp


##global脚本需要连接target
##global_del

replace global script global_del comment "delete the obsolet backup"{
{
allocate channel d1 device type disk;
delete obsolete recovery window of 15 days;
release channel d1;
}

list global script names;
print global script global_del
 
##global_bkarch
replace global script global_bkarch comment "backup archivelog as well as delete input"{
allocate channel d1 device type disk;
sql "alter system archive log current";
set limit channel d1 readrate=10240;
set limit channel d1 kbytes=4096000;
backup as compressed backupset
format='/home/oracle/rmanbak/arch_%d_%u_%s_%p'
tag='bkarch'
channel=d1
archivelog all delete input;
release channel d1;
}


##global_bkctl
replace global script global_bkctl comment "backup control file"{
allocate channel d1 device type disk;
backup as compressed backupset
format'/home/oracle/rmanbak/ctl_%d_%u_%s_%p'
tag='bkctl'
channel=d1
current controlfile reuse;
release channel d1;
}


##inc0
replace global script global_inc0 comment "backup database as incremental level 0"{
execute global script global_del;
allocate channel d1 device type disk;
set limit channel d1 readrate=10240;
set limit channel d1 kbytes=409600;
backup as compressed backupset
incremental level=0
format='/home/oracle/rmanbak/inc0_%d_%u_%s_%p'
tag='inc0'
channel=d1
database;
release channel d1;
execute global script global_bkarch;
execute global script global_bkctl;
}

##inc1
replace global script global_inc1 comment "backup database as incremental level 1"{
execute global script global_del;
allocate channel d1 device type disk;
set limit channel d1 readrate=10240;
set limit channel d1 kbytes=409600;
backup as compressed backupset
incremental level=1
format='/home/oracle/rmanbak/inc1_%d_%u_%s_%p'
tag='inc1'
channel=d1
database;
release channel d1;
execute global script global_bkarch;
execute global script global_bkctl;
}

##inc2
replace global script global_inc2 comment "backup database as incremental level 2"{
execute global script global_del;
allocate channel d1 device type disk;
set limit channel d1 readrate=10240;
set limit channel d1 kbytes=409600;
backup as compressed backupset
incremental level=2
format='/home/oracle/rmanbak/inc2_%d_%u_%s_%p'
tag='inc2'
channel=d1
database;
release channel d1;
execute global script global_bkarch;
execute global script global_bkctl;
}


##


##cmdfile &

---inc0.rcv
@@/home/oracle/script/connect.rcv
run{
execute global script global_inc0;
}
exit

--inc1.rcv
@@/home/oracle/script/connect.rcv
run{
execute global script global_inc1;
}
exit

--inc2.rcv
@@/home/oracle/script/connect.rcv
run{
execute global script global_inc2;
}
exit


##shell,nohup....&后台执行
--inc0.sh
nohup $ORACLE_HOME/bin/rman cmdfile=/rmanbak/script/inc0.rcv log=/rmanbak/script/inc0.log append &

--inc1.sh
nohup $ORACLE_HOME/bin/rman cmdfile=/rmanbak/script/inc1.rcv log=/rmanbak/script/inc1.log append &

--inc2.sh
nohup $ORACLE_HOME/bin/rman cmdfile=/rmanbak/script/inc2.rcv log=/rmanbak/script/inc2.log append &

--定时任务  crontab -e
#min    hour    date    mon    day    command
0       1       *       *      0      /rmanbak/script/inc0.sh


---执行权限
chmod u+x *.sh


experience
--backup controlfile in each script's tail
--delete obsolete backupset in each script's threshold
--switch logfile before backup database
--chmod u+x *.sh


周末全库备份,平时累计型增量备份,若要保证至少恢复最近3天的,
则每次备份完后,执行:

DELETE noprompt  OBSOLETE RECOVERY WINDOW OF 3 DAYS;

记得测试无误后再放在正式环境上使用.


功能:加载指定的文件系统。
语法:mount [-afFhnrvVw] [-L] [-o] [-t] [设备名] [加载点]
用法说明:mount可将指定设备中指定的文件系统加载到Linux目录下(也就是装载点)。可将经常使用的设备写入 文件/etc/fstab,以使系统在每次启动时自动加载。mount加载设备的信息记录在/etc/mtab文件中。使用umount命令卸载设备 时,记录将被清除。


常用参数和选项:
-a 加载文件/etc/fstab中设置的所有设备。
-f 不实际加载设备。可与-v等参数同时使用以查看mount的执行过程。
-F 需与-a参数同时使用。所有在/etc/fstab中设置的设备会被同时加载,可加快执行速度。
-h 显示在线帮助信息。
-L 利用partition的表头名称(Lable)来进行挂载。
-n 不将加载信息记录在/etc/mtab文件中。
-o 指定加载文件系统时的选项。有些选项也可在/etc/fstab中使用。这些选项包括:
async 以非同步的方式执行文件系统的输入输出动作。
atime 每次存取都更新inode的存取时间,默认设置,取消选项为noatime。
auto 必须在/etc/fstab文件中指定此选项。执行-a参数时,会加载设置为auto的设备,取消选取为noauto。
defaults 使用默认的选项。默认选项为rw、suid、dev、exec、anto nouser与async。
dev 可读文件系统上的字符或块设备,取消选项为nodev。
exec 可执行二进制文件,取消选项为noexec。
noatime 每次存取时不更新inode的存取时间。
noauto 无法使用-a参数来加载。
nodev 不读文件系统上的字符或块设备。
noexec 无法执行二进制文件。
nosuid 关闭set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位。
nouser 使一位用户无法执行加载操作,默认设置。
remount 重新加载设备。通常用于改变设备的设置状态。
ro 以只读模式加载。
rw 以可读写模式加载。
suid 启动set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位,取消选项为nosuid。
sync 以同步方式执行文件系统的输入输出动作。
user 可以让一般用户加载设备。
-r 以只读方式加载设备。
-t 指定设备的文件系统类型。常用的选项说明有:
minix Linux最早使用的文件系统。
ext2 Linux目前的常用文件系统。
msdos MS-DOS 的 FAT。
vfat Win85/98 的 VFAT。
nfs 网络文件系统。
iso9660 CD-ROM光盘的标准文件系统。
ntfs Windows NT的文件系统。
hpfs OS/2文件系统。Windows NT 3.51之前版本的文件系统。
auto 自动检测文件系统。
-v 执行时显示详细的信息。
-V 显示版本信息。
-w 以可读写模式加载设备,默认设置。

异地备份,恢复
RMAN
DBMS_backup_restore

删除备份集
change backupset 2578,2579,2679 delete;
change copy ... delete;


查看数据库归档设置
archive log list


查看数据库的datafile
SQL> select file#,name from v$datafile;
查看tablespace
SQL> select TS#,name from v$tablespace;

在RMAN备份时会出现 RMAN-06056: could not access datafile 6 错误,可以使用如上的两个查询查到datafile 相应的tablespace,然后使用 drop tablespace xxxx; 删除有问题的tablespace


mount 经常出现 permission denied 的错误,这个网上说有可能是两台机器的机器名在 /etc/hosts 中设置相同而引起的,我80、81的机器上也发现这个问题,不过没有进行验证。(http://www.linuxforums.org/forum/servers/43039-nfs-permission-denied.html)




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值