记录数据库事务,最大限度地保证数据的一致性与安全性。
重做日志文件:含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复,一个数据库至少需要两个重做日志文件。
归档日志文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。
RMAN(Recovery Manager)是DBA的一个重要工具,用于备份、还原和恢复数据库,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数据库在正常运行时是不会关注归档日志文件的。
默认为累积增量
[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级备份
增量备份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;
}
增量备份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
[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 \ ;
(完)
模拟误操作删除掉某张表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;
}
[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;
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
在对数据库进行备份时会占用大量的存储空间,因此需要定期删除备份来回收空间
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’;
开始配置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;