RMAN备份整理

备份脚本整理:

每小时归档日志:arch.log

每天增量备份日志:level1.log

每周全备份:level0.log

arch.script

run
{
        allocate channel t1 type 'sbt_tape' parms 'ENV=(TDPO_OPTFILE=/opt/tivoli/tsm/client/oracle/bin64/tdpo.opt)';
        sql 'alter system archive log  current';


        backup filesperset 10 MAXSETSIZE 10G format 'arch_%t_%s_%c_%p.arc'
        skip inaccessible
        archivelog  all delete input;
        backup current controlfile format 'control_%t_%s_%c_%p.ctl';
        crosscheck archivelog all;
        release channel t1;

#       allocate channel d1 type disk;
#       copy current controlfile to '/db/backup/control/control.ctl';
#       release channel d1;
}

arch.sh

CMDFILE=/db/backup/arch.script
LOGFILE=/db/backup/arch.log
su - oracle -c "rman target rman/********* cmdfile $CMDFILE msglog $LOGFILE"

level1.script

run{
        allocate channel t1 type 'sbt_tape' parms 'ENV=(TDPO_OPTFILE=/opt/tivoli/tsm/client/oracle/bin64/tdpo.opt)';
        allocate channel t2 type 'sbt_tape' parms 'ENV=(TDPO_OPTFILE=/opt/tivoli/tsm/client/oracle/bin64/tdpo.opt)';
        BACKUP INCREMENTAL LEVEL 1 CUMULATIVE section size 100G FORMAT 'df_%t_%s_%c_%p' DATABASE;
#       sql 'alter system archive log current';
        crosscheck archivelog all;
        backup filesperset 10 MAXSETSIZE 10G format 'arch_%t_%s_%c_%p.arc'
        skip inaccessible
        archivelog  all delete input;
        backup current controlfile format 'control_%t_%s_%c_%p.ctl';
        release channel t1;
        release channel t2;

#        allocate channel d1 type disk;
#        copy current controlfile to '/db/backup/control/control.ctl';
#        release channel d1;
}

level1.sh

CMDFILE=/db/backup/level1.script
LOGFILE=/db/backup/level1.log
su - oracle -c "rman target rman/Rman2014 cmdfile $CMDFILE msglog $LOGFILE"

level0.script

run
{
        configure retention policy to recovery window of 90 days;
        allocate channel t1 type 'sbt_tape' parms 'ENV=(TDPO_OPTFILE=/opt/tivoli/tsm/client/oracle/bin64/tdpo.opt)';
        allocate channel t2 type 'sbt_tape' parms 'ENV=(TDPO_OPTFILE=/opt/tivoli/tsm/client/oracle/bin64/tdpo.opt)';
        backup incremental level 0 section size 100G format 'df_%t_%s_%c_%p' database;
#       sql 'alter system archive log current';
        backup filesperset 10 MAXSETSIZE 10G format 'arch_%t_%s_%c_%p.arc' skip inaccessible archivelog  all delete input;
        backup current controlfile format 'control_%t_%s_%c_%p.ctl';
        crosscheck backup;
        crosscheck archivelog all;
#       delete noprompt expired backup;
#       delete noprompt expired archivelog all;
#       delete noprompt obsolete;
        release channel t1;
        release channel t2;

#        allocate channel d1 type disk;
#        copy current controlfile to '/db/backup/control/control.ctl';
#        release channel d1;
}

level0.sh

CMDFILE=/db/backup/level0.script
LOGFILE=/db/backup/level0.log
su - oracle -c "rman target rman/Rman2014 cmdfile $CMDFILE msglog $LOGFILE"

执行策略

30 03 * * 0 /db/backup/level0.sh
30 03 * * 1,2,3,4,5,6  /db/backup/level1.sh
00 01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23 * * * /db/backup/arch.sh

其他资料

/**  -- 查看每天产生归档日志的数据量  */
select trunc(completion_time) as ARC_DATE,
       count(*) as COUNT,
       round((sum(blocks * block_size) / 1024 / 1024/1024), 2) as ARC_GB
  from v$archived_log
 group by trunc(completion_time)
 order by trunc(completion_time);

/**  统计某个时间段的归档日志大小  */
select a.first_time,blocks*block_size/1024/1024 MB, blocks,block_size from v$archived_log a where a.first_time >=to_date('2019/07/06 00:00:00','yyyy-mm-dd hh24:mi:ss') 
and a.first_time<=to_date('2019/07/07 23:59:59','yyyy-mm-dd hh24:mi:ss')
order by a.first_time DESC;


select s.status as 备份状态,
       trunc((s.END_TIME-s.START_TIME)*24*60,0) "备份用时(分钟)",
       to_char(s.START_TIME, 'yyyy-mm-dd hh24:mi:ss') as 开始备份时间,
       to_char(s.END_TIME, 'yyyy-mm-dd hh24:mi:ss') as 结束备份时间,
       s.OPERATION as 命令,
       trunc(s.INPUT_BYTES/1024/1024,2) as "INPUT/M",
       trunc(s.OUTPUT_BYTES/1024/1024,2) as "OUTPUT/M",
       s.OBJECT_TYPE as "对象类型",
       s.MBYTES_PROCESSED as 百分比,
       s.OUTPUT_DEVICE_TYPE as "设备类型"
  from v$rman_status s
  where to_char(s.START_TIME, 'yyyy-mm-dd hh24:mi:ss') > to_char(to_date('20190814','yyyymmdd'),'yyyy-mm-dd hh24:mi:ss')
  order by  s.START_TIME desc ;

SELECT sid, spid, client_info 
 FROM v$process p, v$session s 
 WHERE p.addr = s.paddr
 AND client_info LIKE '%rman%';

SELECT t.COMMAND_ID                   as "备份名",
       t.STATUS                       as "状态",
       to_char(t.START_TIME, 'yyyy-mm-dd hh24:mi:ss') as 开始备份时间,
       to_char(t.END_TIME, 'yyyy-mm-dd hh24:mi:ss') as 结束备份时间,
       t.TIME_TAKEN_DISPLAY           as "所用时间",
       t.INPUT_TYPE                   as "类型",
       t.OUTPUT_DEVICE_TYPE           as "输出设备",
       t.INPUT_BYTES_DISPLAY          as "输入大小",
       t.OUTPUT_BYTES_DISPLAY         as "输出大小",
       t.OUTPUT_BYTES_PER_SEC_DISPLAY as "输出速率(每秒)"
  FROM V$RMAN_BACKUP_JOB_DETAILS t
 where START_TIME >= trunc(sysdate) - 7
 ORDER BY START_TIME DESC;

报错解决:

问题分析:

由于是数据库是RACA集群,因此控制文件不能放在本地,应该放在共享目录或者ASM上。

解决办法:

将控制文件备份到ASM上,执行命令如下:

su - oracle 
rman  target/
RMAN>CONFIGURE SNAPSHOT CONTROLFILE NAME TO '+DATADG/CNOOCMDM/CONTROLFILE/snapcf_ccdd.f';

<think> 我们正在处理用户关于Oracle RMAN备份还原操作步骤的查询。根据提供的引用内容,我们可以整理RMAN备份和还原的基本步骤。需要特别注意的是,引用中包含了备份配置、备份执行、恢复命令等关键信息。 首先,备份步骤: 1. 配置备份参数(如备份文件存储路径,引用[4]中展示了配置备份目录的命令): ``` RMAN> configure channel device type disk format '/home/oracle/backup/data_%d_%M_%U'; ``` 这里的格式字符串中`%d`表示数据库名,`%M`表示月份,`%U`是系统生成的唯一标识符。 2. 执行备份(引用[5]中提到备份整个数据库): 全量备份整个数据库的命令可能是: ``` RMAN> backup database; ``` 同时,备份归档日志也是重要的,通常会在备份数据库备份归档日志: ``` RMAN> backup archivelog all; ``` 3. 删除过期或陈旧的备份(引用[5]中展示了删除命令): ``` RMAN> delete obsolete; RMAN> delete expired backup; ``` 其次,还原步骤(以控制文件为例,引用[2]): 1. 如果控制文件丢失,可以从备份集中还原控制文件: ``` RMAN> restore controlfile from '/home/oracle/backup/rman_backup/rman_backup/Lv0_ORCL2_20251013_0d465mcm_1_1_control.bak'; ``` 但用户询问的是完整的备份还原操作步骤,因此我们需要更全面的步骤,包括数据库还原和恢复。 完整的还原与恢复步骤(假设整个数据库需要恢复): 1. 启动数据库到mount状态(因为open状态无法还原控制文件和数据文件): ``` SQL> startup mount; ``` 或者从RMAN中: ``` RMAN> startup mount; ``` 2. 还原数据库: ``` RMAN> restore database; ``` 3. 恢复数据库(应用归档日志和重做日志以将数据库恢复到最新状态): ``` RMAN> recover database; ``` 4. 打开数据库: ``` RMAN> alter database open; ``` 注意:如果控制文件全部丢失,则需要先还原控制文件(因为控制文件记录了备份的信息),然后再还原数据库。 完整的控制文件丢失恢复步骤: 1. 启动实例但不加载控制文件(nomount状态): ``` RMAN> startup nomount; ``` 2. 还原控制文件(如引用[2]所示,从备份集中还原): ``` RMAN> restore controlfile from '<备份片路径>'; ``` 3. 加载数据库(mount状态): ``` RMAN> alter database mount; ``` 4. 还原和恢复数据库: ``` RMAN> restore database; RMAN> recover database; ``` 5. 打开数据库(由于控制文件是还原的,可能需要用resetlogs方式打开): ``` RMAN> alter database open resetlogs; ``` 另外,引用[1]提到备份策略和优化,引用[3]虽然讲的是MySQL,但无关,引用[5]提供了删除备份的命令。 因此,我们可以将步骤总结为: ### Oracle RMAN备份操作步骤 1. 配置RMAN备份参数(如备份路径等)。 2. 执行备份命令(全备、增量备份归档日志备份等)。 3. (可选)维护备份,删除过期备份。 ### Oracle RMAN还原操作步骤 1. 启动数据库到合适的状态(nomount/mount)。 2. 还原必要的文件(控制文件、数据文件等)。 3. 恢复数据库(应用重做日志归档日志)。 4. 打开数据库。 注意:具体步骤可能因备份类型和恢复场景(如完全恢复、不完全恢复)而有所不同。 根据以上信息,我们给出详细的备份还原步骤: </think>### Oracle RMAN备份还原操作步骤详解 #### **一、备份操作步骤** 1. **配置备份参数** 设置备份文件存储路径(引用[4]): ```sql RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/data_%d_%M_%U'; ``` 2. **执行全量备份** 备份整个数据库(含控制文件、数据文件): ```sql RMAN> BACKUP DATABASE PLUS ARCHIVELOG; ``` 3. **备份控制文件** 单独备份控制文件(便于灾难恢复): ```sql RMAN> BACKUP CURRENT CONTROLFILE; ``` 4. **备份归档日志** 确保事务完整性: ```sql RMAN> BACKUP ARCHIVELOG ALL DELETE INPUT; ``` 5. **维护备份集** 删除过期备份(引用[5]): ```sql RMAN> DELETE OBSOLETE; RMAN> DELETE EXPIRED BACKUP; ``` --- #### **二、还原操作步骤** 1. **启动到mount状态** ```sql RMAN> STARTUP MOUNT; ``` 2. **还原控制文件** 从备份集恢复(引用[2]): ```sql RMAN> RESTORE CONTROLFILE FROM '/backup/Lv0_ORCL2_20251013_0d465mcm_1_1_control.bak'; ``` 3. **加载控制文件** ```sql RMAN> ALTER DATABASE MOUNT; ``` 4. **还原数据文件** 恢复整个数据库: ```sql RMAN> RESTORE DATABASE; ``` 5. **应用重做日志** 完成事务恢复: ```sql RMAN> RECOVER DATABASE; ``` 6. **打开数据库** ```sql RMAN> ALTER DATABASE OPEN RESETLOGS; ``` --- #### **三、关键注意事项** 1. **备份验证** 定期执行 `RMAN> VALIDATE BACKUPSET` 检测备份完整性[^1]。 2. **恢复目录** 使用恢复目录存储元数据提升管理效率: ```sql RMAN> CONNECT CATALOG rman_user/password@rcat ``` 3. **增量备份策略** 推荐每周全备 + 每日增量备份(Lv1)降低存储压力[^5]。 > **示例:灾难恢复场景** > 当控制文件和数据文件全部丢失时: > ```sql > STARTUP NOMOUNT; > RESTORE CONTROLFILE FROM AUTOBACKUP; --自动恢复最新控制文件 > ALTER DATABASE MOUNT; > RESTORE DATABASE; > RECOVER DATABASE; > ALTER DATABASE OPEN RESETLOGS; > ``` [^1]: RMAN高级操作需结合业务需求设计备份策略,如保留窗口、冗余度等配置 [^2]: 还原控制文件时需确保备份路径正确,否则报错RMAN-06023 [^5]: DELETE OBSOLETE命令依赖CONFIGURE RETENTION POLICY配置
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值