RMAN

冷备份

非归档模式下rman可以备份mout状态的数据库

1
2
3
4
5
6
7
8
9
10
11
#非归档 open 状态下 备份提示报错
RMAN-03009: backup 命令 (ORA_DISK_1 通道上, 在 08/18/2023 11:51:56 上) 失败
ORA-19602: 无法按 NOARCHIVELOG 模式备份或复制活动文件
SQL> alter database noarchivelog;
SQL> archive log list;
数据库日志模式 非存档模式
SQL> shutdown immediate
SQL> startup mount
RMAN> restore database;
RMAN> alter database mount;
RMAN> alter database open;

热备份

归档模式下 rman可以在线备份数据库。在进行恢复时,通过备份的数据文件及归档日志等文件,数据库就可以完全恢复,恢复到一致进行到最后一个归档模式。当然,如果是为了恢复某些用户错误,热备份的恢复完全可以在某一个时间点上停止恢复,也就是不完全恢复。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
rman target / 
rman target / log D:\db\rman\logsD:\db\rman\logs\test.log
backup database;
backup database format "D:\db\rman\backup\%U";
##format格式
%a:Oracle数据库的activation ID即RESETLOG_ID。
%c:备份片段的复制数(从1开始编号,最大不超过256)。
%d:Oracle数据库名称。
%D:当前时间中的日,格式为DD。
%e:归档序号。
%f:绝对文件编号。
%F:基于"DBID+时间"确定的唯一名称,格式的形式为c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII 为该数据库的DBID,YYYYMMDD为日期,QQ是一个1~256的序列。
%h:归档日志线程号。
%I:Oracle数据库的DBID。
%M:当前时间中的月,格式为MM。
%N:表空间名称。
%n:数据库名称,并且会在右侧用x字符进行填充,使其保持长度为8。比如数据库名JSSBOOK,则生成的名称则是JSSBOOKx。
%p:备份集中备份片段的编号,从1开始。
%s:备份集号。
%t:备份集时间戳。
%T:当前时间的年月日格式(YYYYMMDD)。
%u:是一个由备份集编号和建立时间压缩后组成的8字符名称。利用%u可以为每个备份集生成一个唯一的名称。
%U:默认是%u_%p_%c的简写形式,利用它可以为每一个备份片段(即磁盘文件)生成一个唯一名称,这是最常用的命名方式,执行不同备份操作时,生成的规则也不同,如下所示:
生成备份片段时,%U=%u_%p_%c;
生成数据文件镜像复制时,%U=data-D-%d_id-%I_TS-%N_FNO-%f_%u;
生成归档文件镜像复制时,%U=arch-D_%d-id-%I_S-%e_T-%h_A-%a_%u;
生成控制文件镜像复制时,%U=cf-D_%d-id-%I_%u。
%Y:当前时间中的年,格式为YYYY。
注:如果在BACKUP命令中没有指定FORMAT选项,则RMAN默认使用%U为备份片段命名。
#查看file_id
Select file_name, file_id, tablespace_name from dba_data_files where file_id in
(select distinct file_id from dba_extents where segment_name='表名')
backup datafile 7,2 format "D:\db\rman\backup\%u";
list backup;
delete backup;
delete backupset 2;
delete backuppiece "D:\DB\RMAN\BACKUP\0923SCHL_1_1";
show all;
backup database format 'D:\db\rman\backup\whole_%d_%U'; --备份整个数据库
backup as compressed backupset database format 'D:\db\rman\backup\whole_%d_%U'; --备份整个数据库并压缩备份集
run{
allocate channel ch1 type disk
maxpiecesize=100m;
backup as compressed backupset
format 'D:\db\rman\backup\whole_%d_%U' filesperset=3
database;
release channel ch1;
}
configure controlfile autobackup on;-自动备份控制文件置为on状态,将自动备份控制文件和参数文件,在备份system01.dbf或system表空间时将会自动备份控制 文件和参数文件,即使自动备份控制文件参数为off
backup current controlfile; --单独备份控制文件及参数文件
sql "alter database backup controlfile to ''D:\DB\RMAN\BACKUP\ctrlfile''";
backup spfile format 'D:\DB\RMAN\BACKUP\sp_%d_%U';
backup format 'D:\DB\RMAN\BACKUP\lf_%d_%U' archivelog all delete input;
backup archivelog sequence between 50 and 120 thread 1 delete input;
backup archivelog from time "sysdate-15" until time "sysdate-7";
backup database plus archivelog format 'D:\DB\RMAN\BACKUP\lg_%d_%U' delete input;
##plus archivelog时备份数据库完成的动作
1.首先执行alter system archive log current 命令(对当前日志归档)
2.执行backup archivelog all 命令(对所有归档日志进行备份)
3.执行backup database命令中指定的数据文件、表空间等
4.再次执行alter system archive log current
5.备份在备份操作期间产生的新的归档日志
backup recovery area;
backup recovery files;
#手动并发
run {
allocate channel ch1 device type disk;
allocate channel ch2 device type disk;
allocate channel ch3 device type disk;
backup incremental level=0
format 'D:\DB\RMAN\BACKUP\df_%d_%U'
(datafile 1 channel ch1 tag='sys')
(datafile 3 channel ch2 tag='aux')
(datafile 2,4 channel ch3 tag='other');
sql 'alter system archive log current';
release channel ch1;
release channel ch2;
release channel ch3;
}
#自动并发
configure device type disk parallelism 3 backup type to backupset;
v$backup
#备份 incremental level 0
在differential(差异)模式下(缺省)
level 0 -全量备份
level 1 -从上次 0、1备份到今增量
level 2 -从上次任意备份到今增量
在cumulative(累积的)模式下,
level 0 -全量备份
level 1 -从上次全量备份到今增量
level 2 -从上次0、1备份到今增量
delete noprompt archivelog all completed before 'sysdate-1';
list archivelog all;

恢复数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#全库恢复
db处于mount状态
RMAN> restore database;文件还原
RMAN> recover database;执行恢复,redo 归档应用到db
alter database open

#恢复控制文件
db处于nomount状态
RMAN> restore controlfile from autobackup;文件还原到应存放位置;
RMAN-06172: 没有找到 AUTOBACKUP, 或者指定的句柄不是有效副本或片段,如下指定备份文件恢复
RMAN> restore controlfile from 'D:\db\rman\backup\WHOLE_NIUEY_1Q24266R_1_1';
RMAN> alter database mount;
RMAN> recover database;
RMAN> alter database open resetlogs;

##问题处理 没备份的情况下执行了 recover
SQL> recover database using backup controlfile;
SQL> recover database using backup controlfile;
ORA-00279: 更改 6442920 (在 08/18/2023 09:43:33 生成) 对于线程 1 是必需的
ORA-00289: 建议:
D:\DB\NIUEY\FLASH_RECOVERY_AREA\NIUEY\ARCHIVELOG\2023_08_18\O1_MF_1_2_%U_.ARC
ORA-00280: 更改 6442920 (用于线程 1) 在序列 #2 中
此时输入redo log
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
D:\db\niuey\oradata\niuey\REDO01.LOG
ORA-00310: 归档日志包含序列 1; 要求序列 2
D:\db\niuey\oradata\niuey\REDO02.LOG
alter database open resetlogs;
#常见命令
recover database #控制文件不能旧于数据文件,完全恢复
recover database until cancel #控制文件不能旧于数据文件,不是完全恢复,常用于current/active redo丢失时
recover database using backup controlfile #控制文件可以旧于数据文件,是完全恢复