Oracle数据库备份:RMAN增量备份手记

日志的作用是什么?

记录数据库事务,最大限度地保证数据的一致性与安全性。
重做日志文件:含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复,一个数据库至少需要两个重做日志文件。
归档日志文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。

RMAN

RMAN(Recovery Manager)是DBA的一个重要工具,用于备份、还原和恢复数据库,RMAN可以用来备份和恢复数据库文件、归档日志、控制文件、系统参数文件,也可以用来执行完全或不完全的数据库恢复。

RMAN备份

1、备份数据文件、归档日志、控制文件、spfile参数文件
2、自动维护备份相关的元数据,例如备份文件的名称、完成备份的SCN号
3、以数据块为单位进行备份,只备份使用过的数据块。
4、对备份出来的文件进行压缩
5、自动检测数据块是否损坏
6、支持增量备份

先备份数据文件、再备份归档文件。
由Rman生成的备份文件中,备份信息、备份日期、对应时间点的SCN号的信息,统一在控制文件中记录。
Rman恢复时通过控制文件找到数据文件。
备份元数据,不是简单复制,以数据块为大小单位。避免了备份过程中出现块分离现象。并将备份的文件生成一个新的文件,叫备份集,备份集中有备份片,恢复时使用备份片恢复。
数据块头部被初始化过,只备份使用过的数据块。
压缩备份的比例为5:1左右。

切换到归档模式

使用RMAN备份是,需要对Oracle数据库的非归档模式切换到归档模式。

select status from v$instance; #查看数据库实例运行模式(状态)
shutdown immediate;
startup mount; #启动数据库到mount状态
alter database archivelog; #启用归档模式
archive log list; #查看修改后的数据库备份和恢复策略及归档文件的位置
archive log start #开启自动归档
alter database open;

查询以确定数据库是否位于archivelog模式中且归档过程正在运行
select open_mode from v$database;

select log_mode from v$database;

select archiver from v$instance;

show parameter log_archive_start; #查看是否处于自动归档模式
show parameter db_recovery_file_dest; #查看备份文件的目录及其大小

Oracle中 重做日志文件被分为若干组,当一组重做日志被写满,ORACLE就开始写下一组,这叫做日志切换。切换是以循环的方式进行的,即当最后一组写满后又从第一 组开始写。所以如果只有重做日志,即oracle运行在非归档模式下,当遇到数据文件丢失或损坏时,oracle很难保证能够完全恢复数据库,因为可能所 需的重做记录因为因重做日志循环被覆盖掉了。但在归档方式下,归档日志进程会把切换后的重做日志文件复制到归档日志文件,我们可以把归档日志文件看成是重 做日志文件的备份,但归档日志文件是脱机的,即除了在进行复制时,ORACLE数据库在正常运行时是不会关注归档日志文件的。

一、增量备份

默认为累积增量

0级备份(全库)

[oracle@node1 bin]$ vi rman_backup_incr0.sh

#!/bin/bash
source /home/oracle/.bash_profile
/oracle/app/oracle/product/11.2.0/dbhome_1/bin/rman target / nocatalog cmdfile=/home/oracle/bin/rman_cmd_incr0  log=/databak/rman_incr0_`date +%Y%m%d%H%M`.log

cmdfile脚本文件
[oracle@node1 bin]$ vi rman_cmd_incr0

run{
configure retention policy to recovery window of 8 days;
configure controlfile autobackup on;  
configure controlfile autobackup format for device type disk to '/databak/%F';  
allocate channel d1 device type disk;  
allocate channel d2 device type disk;  
backup as incremental level 0 database format '/databak/BAK0_db_%d_%s_%p_%t_%T'
  skip inaccessible  
  plus archivelog filesperset 20  
  delete all input  
  format '/databak/log0_%d_%s_%p_%T';  
release channel d1;  
release channel d2; 
}
allocate channel for maintenance device type disk;
crosscheck backupset;  
delete noprompt obsolete;

1级备份

1级备份
增量备份level1级备份脚本,分为2个,rman_backup_incr1.sh调用rman命令脚本rman_cmd_incr1。

rman_backup_incr1.sh脚本

#!/bin/bash
source /home/oracle/.bash_profile
/oracle/app/oracle/product/11.2.0/dbhome_1/bin/rman target / nocatalog cmdfile=/home/oracle/bin/rman_cmd_incr1  log=/databak/rman_incr1_`date +%Y%m%d%H%M`.log

rman_cmd_incr1脚本

run{
allocate channel d1 device type disk;
backup incremental level 1 database format '/databak/BAK1_db_%d_%s_%p_%t_%T'
  skip inaccessible
  plus archivelog filesperset 10  
  delete all input  
  format '/databak/log_%d_%s_%p_%T';  
release channel d1;  
}

2级备份

增量备份level2级备份脚本,rman_backup_incr2.sh调用rman命令脚本rman_cmd_incr2。

rman_backup_incr2.sh 脚本

#!/bin/bash
source /home/oracle/.bash_profile
/oracle/app/oracle/product/11.2.0/dbhome_1/bin/rman target / nocatalog cmdfile=/home/oracle/bin/rman_cmd_incr2  log=/databak/rman_incr2_`date +%Y%m%d%H%M`.log

rman_cmd_incr2 脚本

run{
allocate channel d1 device type disk;
backup incremental level 2 database format '/databak/BAK2_db_%d_%s_%p_%t_%T'
  skip inaccessible
  plus archivelog filesperset 10  
  delete all input  
  format '/databak/log_%d_%s_%p_%T';  
release channel d1;  
}

日志文件

rman_incr0_201907281143.log #RMAN生成的日志

BAK0_db_ORCL_12_1_1014810204_20190728 #备份的数据文件

c-1541759173-20190728-01 #备份的控制文件
控制文件记录了整个备份集、元数据。备份的归档文件、数据文件能够被控制文件所记录。位置:默认目录为$ORACLE_HOME/dbs/ c-1541759173-20190728-01

log_ORCL_11_1_20190728 备份的归档日志

archived log file(恢复目录)name=/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/arch1_50_1013978441.dbf

创建定时任务

[root@node1 databak]# service crond status

[root@node1 ~]# mkdir /home/oracle/bin

[root@node1 bin]# vi /var/spool/cron/oracle
00 01 * * * /home/oracle/bin/rman_backup.sh
30 00 * * * /home/oracle/bin/shanchu.sh

[root@node1 bin]# chown oracle:oinstall /var/spool/cron/oracle

[root@node1 bin]# su - oracle
[oracle@node1 ~]$ crontab -l 查看定时任务
00 01 * * * /home/oracle/bin/rman_backup.sh
30 00 * * * /home/oracle/bin/shanchu.sh

删除14天之前的备份

[oracle@node1 bin]$ cat shanchu.sh
find /databak -ctime +14 -type f -exec rm -rf {} \ ;

#find指定具体时间参数-newermt
#find /dir1 -type f -newermt '2019-8-26 21:00' ! -newermt '2018-5-26 22:00' -exec cp {} /dir2 \ ; 

(完)

二、RMAN不完全恢复(恢复到某个时间点)

模拟误操作删除掉某张表test之后,首先记住当前操作时间,打印恢复日志恢复到2019-08-06 15:40:00 。
rman_recoverdb.sh脚本

#!/bin/bash
source /home/oracle/.bash_profile
/oracle/app/oracle/product/11.2.0/dbhome_1/bin/rman target / nocatalog cmdfile=/home/oracle/bin/rman_cmd_recoverdb  log=/databak/recover/rman_recover_`date +%Y%m%d%H%M`.log

rman_cmd_recoverdb脚本

run{
allocate channel d1 device type disk;
set until time "to_date('2019-08-06 15:00:00')";
restore database;
recover database;
release channel d1;
alter database open resetlogs;
}

其他

RMAN相关命令

[oracle@node1 bin]$ rman target / nocatalog 使用RMAN命令连接到目标数据库

RMAN> list archivelog all; 查看归档日志

RMAN> show all;
RMAN> list backup; 列出各个备份的信息
RMAN> list backup of database;
RMAN> backup database;
RMAN> configure device type disk parallelism 2; 配置并行度为2
RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO BACKUPSET;
已成功存储新的 RMAN 配置参数

SQL> select dbid from v$database;

停止RMAN进程

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

SID SPID CLIENT_INFO
113 15898 rman channel=ORA_DISK_1
...

[root@node1 ~]# ps -ef | grep beq
[root@ node1 ~]# kill -9 15898

[root@ node1 ~]# ps -ef | grep rman
oracle 15885 15740 1 08:57 pts/2 00:00:02 rman target /
[root@ node1 ~]# kill -9 15885

RMAN备份保留策略

在对数据库进行备份时会占用大量的存储空间,因此需要定期删除备份来回收空间
https://jingyan.baidu.com/article/0aa22375f28865c8cd0d6451.html

RMAN> crosscheck backup;

1.删除过期备份。当使用RMAN命令执行备份操作时,RMAN会根据备份冗余策略确定备份是否过期。
RMAN> delete obsolete;

2.删除无效备份。首先执行CROSSCHECK命令核对备份集,如果发现备份无效(比如备份对应的数据文件损坏或丢失),RMAN会将该备份集标记为 EXPIRED状态。
RMAN> delete expired backup;

4.删除特定备份集:
RMAN> delete backupset 19;

5.删除特定备份片:
RMAN> delete backuppiece ‘d:/backup/demo_19.bak’;

7.删除所有备份集:
rm -rf /databak/*
RMAN> crosscheck backup;
RMAN> delete backup;

三、手动恢复

手动恢复其他备份集文件,把线上文件备份新的,压缩拷贝到独立的服务器上,进行rman全库恢复数据库操作。
RMAN> startup nomount;

RMAN>restore datafile …
RMAN>restore archivelog
RMAN>restore controlfile from ‘/ databack /xxxxxxxxxxxxxxxxxxxxx’;

  1. 初始化参数文件
    restore spfile from ‘/databack/xxxxxx’;

RMAN Duplicate复制数据库(异机在线备份)

开始配置Duplicate Database,步骤如下:
2.1 构建辅助数据库目录结构,配置辅助数据库相关系统参数。
2.2 安装软件并创建数据库。
2.3 开启归档
2.3 创建pfile,并修改
2.4 创建辅助数据库实例口令文件
2.5 配置静态监听
2.6 用pfile文件,将辅助数据库启动到nomount状态
2.7 执行RMAN duplicate命令复制数据库
2.8 创建spfile文件
————————————————
原文链接:https://blog.csdn.net/wuweilong/article/details/46346067

参考文档

Database Backup and Recovery User’s Guide 官网
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/bradv/rman-backup-concepts.html#GUID-B3380142-ABCD-437F-9E06-B219D74E6738

Oracle归档日志使用情况查询
https://blog.csdn.net/zhaoxiaofei0929/article/details/38826921
Oracle数据库几种启动方式及查询当前状态
https://www.cnblogs.com/yihr/p/9538910.html
Oracle-rman备份恢复
https://www.bilibili.com/video/av38664587/?redirectFrom=h5
Linux设置定时任务方法
https://www.cnblogs.com/allenclare/p/8622286.html
删除过期备份
https://blog.csdn.net/lotusfromwater/article/details/82706413
Oracle 12 Rman增量备份
https://www.cnblogs.com/-abm/p/9963917.html

其他

错误:ORA-19602: cannot backup or copy active file in NOARCHIVELOG mode
解决:数据库启动切换到mount状态,并设置为归档模式
https://www.cnblogs.com/nvd11/archive/2013/04/02/2996924.html

错误:Oracle ORA-01033: ORACLE initialization or shutdown in progress
解决:
startup mount
alter database open

alter database open和startup区别?
首先你要明确一个概念,oracle数据库启动分三个步骤 nomount、mount、open
startup是数据库从开始阶段的启动,需要经过这三个步骤
alter database open 是数据库处于mount状态,从mount状态打开数据库的命令

错误:ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
解决:alter system reset log_archive_start scope=spfile;
shutdown immediate;
startup mount;
alter database open;

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值