第二组命令总结来了,rman的命令那么多,实用的很多,不常用的也很多,不如先来个鸡肋。比如检查语法
[oracle@hdp 2017_08_11]$ rman CHECKSYNTAX @rman.sh Recovery Manager: Release 11.2.0.4.0 - Production on Fri Aug 11 08:27:36 2017 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. RMAN> run{ 2> allocate channel c1 type disk; 3> allocate channel c2 type disk; 4> allocate channel c3 type disk; 5> allocate channel c4 type disk; 6> allocate channel c5 type disk; 7> allocate channel c6 type disk; 8> backup as compressed backupset database plus archivelog; 9> release channel c1; 10> release channel c2; 11> release channel c3; 12> release channel c4; 13> release channel c5; 14> release channel c6; 15> } 16> **The cmdfile has no syntax errors** Recovery Manager complete. [oracle@hdp 2017_08_11]$ 故意让其报错 13> release channel c5; 14> release channe RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-00558: error encountered while parsing input commands RMAN-01009: syntax error: found "identifier": expecting one of: "channel" RMAN-01008: the bad identifier was: channe RMAN-01007: at line 14 column 9 file: rman.sh就连rman的登录,也可以有好几种玩法:
[oracle@hdp 2017_08_11]$ rman target/ Recovery Manager: Release 11.2.0.4.0 - Production on Fri Aug 11 08:36:08 2017 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: ORCL (DBID=1477533441) RMAN> exit Recovery Manager complete. [oracle@hdp 2017_08_11]$ rman Recovery Manager: Release 11.2.0.4.0 - Production on Fri Aug 11 08:36:14 2017 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. RMAN> connect target/ connected to target database: ORCL (DBID=1477533441) [oracle@hdp 2017_08_11]$ rman target sys/ Recovery Manager: Release 11.2.0.4.0 - Production on Fri Aug 11 08:39:30 2017 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. target database Password: connected to target database: ORCL (DBID=1477533441) RMAN>好了 就这么多,oralce做事情也是够开放的,能够提供接口的就一定会提供给DBA。这样好的 开放性,也保证了数据库在出问题的时候,不会让用户抓瞎。就像sqlserver那样。(我这样黑人家是不对的!!!)
什么?鸡肋不好吃,那上硬菜呗,洒家这里有平时用的rman 每日全备份的脚本,也是我平时工作中用到的,也是真正的好用不贵。
#!/bin/sh export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 export ORACLE_SID=orcl export PATH=$ORACLE_HOME/bin:$PATH export BKDIR="/u01/backup/rmanbackup" export LOGDIR="/u01/backup/scripts/rmanlogs" export DATE=`date +%Y%m%d` mkdir -p ${BKDIR}/${DATE} export JOB_BEGIN=`date +"%Y%m%d_%H%M"` LOGFILE=${LOGDIR}/${JOB_BEGIN}_rman_level0.log RMANLOGFILE=${LOGDIR}/${JOB_BEGIN}_rman_level0.log echo "${JOB_BEGIN} Rman Backup Start" >> $LOGFILE echo "" >> $LOGFILE $ORACLE_HOME/bin/rman target / nocatalog msglog=${RMANLOGFILE} <<EOF run{ allocate channel d1 type disk; allocate channel d2 type disk; allocate channel d3 type disk; allocate channel d4 type disk; allocate channel d5 type disk; allocate channel d6 type disk; backup as compressed backupset incremental level 0 database format '${BKDIR}/${DATE}/PROD_db_full_%d_%T_%s_%U'; sql 'alter system archive log current'; backup as compressed backupset format '${BKDIR}/${DATE}/PROD_arch_%d_%T_%s_%U' archivelog all delete input; backup as copy current controlfile format '${BKDIR}/${DATE}/PROD_ctl_%d_%T_%s_%U'; release channel d1; release channel d2; release channel d3; release channel d4; release channel d5; release channel d6; } exit EOF echo " Done @`date +%Y%m%d_%H%M`" >> $LOGFILE echo " " >> $LOGFILE每日都会生成数据库的level0 级别的备份哦!
其实上面备份脚本的意思,也大致是这样吧:
RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 6 BACKUP TYPE TO BACKUPSET 2> ; new RMAN configuration parameters: CONFIGURE DEVICE TYPE DISK PARALLELISM 6 BACKUP TYPE TO BACKUPSET; new RMAN configuration parameters are successfully stored released channel: ORA_DISK_1 RMAN> backup as compressed backupset incremental level 0 database; 当然可能要加上: CONFIGURE CONTROLFILE AUTOBACKUP ON; oracle很友好的为我建好了如下目录: /u02/backup/ORCL/autobackup/2017_08_11 前提是我修改了一个参数的值: SQL> show parameter db_recovery NAME TYPE VALUE ------------------------------------ --------------------------------- ------------------------------ db_recovery_file_dest string /u02/backup db_recovery_file_dest_size big integer 4182M SQL>因为db_recovery_file_dest 最好还是不要放在dbs目录下。我不想再查看alert.log日志时看到一堆备份文件。何况还有那么多转存文件
备份归档日志:
RMAN> backup archivelog all delete input; 删除原有日子,只保留归档。 或者单纯的备份归档日志 RMAN> backup archivelog all
不过我们在工作中,不可能这么随意,而且给予备份各种标记,本座一般这样玩:
RMAN> backup archivelog all format'/u02/backup/ORCL/backupset/2017_08_11/hdp_arch_%d_%T_%s_%U.ctl'; 检查备份的文件名称: /u02/backup/ORCL/backupset/2017_08_11/hdp_arch_ORCL_20170811_45_1dsbkf9k_1_1.ctl hdp_arch_%d_%T_%s_%U.ctl'; %d database name %T date %s 备份集的号 %U 这是唯一的文件号这里为大家列举一下常用的格式字符串
%c 备份片的拷贝数 %d 数据库名称 %D 位于该月中的第几天 (DD) %M 位于该年中的第几月 (MM) %F 一个基于DBID唯一的名称,这个格式的形式为c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII为该数据库的DBID,YYYYMMDD为日期,QQ是一个1-256的序列 %n 数据库名称,向右填补到最大八个字符 %u 一个八个字符的名称代表备份集与创建时间 %p 该备份集中的备份片号,从1开始到创建的文件数 %U 一个唯一的文件名,代表%u_%p_%c %s 备份集的号 %t 备份集时间戳 %T 年月日格式(YYYYMMDD)