oracle备份小常识

备份

1.一致性备份(冷备,关闭实例下的备份)
2.不一致性备份(热备,不用关闭实例下得备份)

冷备与热备的区别

冷备就是可以保证控制文件与数据文件的SCN号相同,冷备就是用操作系统命令将所有的控制文件、数据文件、参数文件、密码文件都复制一份,如果有损坏的文件就删除原来的文件将备份的文件复制到原路径
热备不能保证备份时刻控制文件与数据文件的SCN号一样,如果损坏要恢复必须借助日志,所以一定要做归档

备份的类型:

完整备份(备份所有数据库块即所有的数据文件,至少一个控制文件,参数文件和密码文件)
部分备份(备份部分表空间或者部分表)
完全备份(备份所有数据文件的块,即备份所有数据文件)
增量备份(备份变化的数据块)
增量备份两种类型
0级备份(跟完全备份一样)、1级备份【累积型(与上一次的0级备份做比较,备份改变的数据块)、差异型(与前一次的增量备份做比较,备份改变的块)】
RMAN不能管理磁带 必须配介质管理库MML 数据库模式必须为归档模式 archive log list;查看是否归档

手工对表空间做备份时 无法保证没有用户使用当前备份的表空间 所以必须设置为备份模式
alter tablespace tt begin backup
!cp /u01/tt.dbf /tmp 使用操作系统命令复制tt表空间的数据文件到tmp目录下
alter tablespace tt end backup

RMAN备份

RMAN做备份的时候,有两种备份形式
1.镜像备份(image copies) 就是全部copy一份
2.备份集(backup set) 只备份存了数据的块,占用空间少,但是恢复速度没有镜像备份快

默认RMAN备份是放入到闪回区的 如果不想放入闪回去就使用format ‘路径’ 例如:backup database format ‘/u01’ 使用select * from v$flash_recovery_area_usage;可以查看闪回区的使用情况
释放闪回恢复区空间

1、备份数据库后删除过期归档日志
2、在rman环境删除控制文件总的归档信息

RMAN>crosscheck archivelog all;
RMAN>delete expired archivelog all;

一定要添加关键字expired,不然会将所有归档日志信息都删除

如果不做第二步,闪回恢复区的空间也能释放,数据库不会挂起,但v$flash_recovery_area_usage中的信息不会被更新
清空内存中的数据alter system flush buffer_cache;

problem

数据库启动如果数据文件损坏如果有备份如何解决?

只要不是系统数据文件先把损坏的数据文件离线alter tablespace datafile 6 offline;然后把数据库从mount状态启动到open状态,然后把损坏数据文件的备份复制回原来的路径下,然后recover datafile6即重新应用日志文件,然后再把该数据文件上线alter tablespace datafile 6 online;

RMAN中如果有备份的数据文件坏掉了如何恢复?

首先关闭数据库用shutdown abort
启动数据库到mount状态
进入RMAN 使用命令restore database; 恢复tt.dbf
然后执行命令recover database;
再打开数据库alter database open;

EM中可以设置每个备份片大小,这是因为操作系统上存储的单个文件大小是有限制的
启用块跟踪 在制定目录下系统会自动给你生成一个二进制文件,记录已经变化的数据块,如果数据发生变化就把块的地址写到这个文件中去

用命令对某表空间做增量备份的0级备份

backup incremental level 0 cumulative device type disk‘%TAG’tablespace tt;
backup device tupe disk tag‘%TAG’archivelog all not backed up;

可以把控制文件放入trace文件中 如果你的所有控制文件全丢了 还是可以用trace启动数据库
命令alter database backup controlfile to trace;
步骤:
1 想备份控制文件到跟踪文件
2 复制从startup nomount
到alter database open
保存为文件/u01/cbak.txt
vim 跟踪文件
:sp /u01/cbak.txt
ctrl +w 可以在两窗口中移动光标
在跟踪文件中 :set nu 设置行号 选择从startup nomount 到alter databae open
定位到startup noumount 45yy
ctrl+w 到新的窗口 p粘贴 :wq保存
测试:
正常没法关闭数据库
强制关闭:shutdown abort
数据一定关闭

sqlplus / as sysdba
start /u01/cbak.txt

使用RMAN恢复必须保证数据库在mount状态下,如果数据库没有mount,那么就登陆到RMAN上然后手动指定数据库dbid号,命令set dbid=XXXX

备份方式

整库的备份

backup database
backup database format ‘/u01/backup/bak_%u’ 表示是备份集
查看创建的全库备份
list backup of database

表空间的备份

backup tablespace users;
list backup of tablespace users;
删除备份: delete backupset 10;

数据文件备份

可以对名称也可以对file_id
select file_id,file_name from dba_data_files;
backup datafile 4;
查看数据文件备份
list backup of datafile n
如果要查看多个文件 n=多个序号,并用逗号隔开

控制文件的备份

a.手动执行备份
backup current controlfile;
b.执行backup命令时指定include current controlfile;
backup database include current contorlfile;
c.备份系统表空间会触发备份控制文件
backup datafile 1;
d.通过configure命令将controlfileautobackup设置为on
configure controlfile autobackup on;
查看list backup of controlfile;

归档文件备份

a.利用backup archivelog命令
backuo archivelog all;
all指备份当前所有可访问到的归档日志文件
until,scn,time,sequence

b.执行backup命令时,指定plus archivelog
backup current controlfile plus archivelog;
在备份控制文件之前,先对所有归档文件进行备份

backup ….. plus archivelog命令执行的操作
a.运行alter system archive log current(命令作用是对当前的redolog进行归档,并且切换redolog)
b.执行backup archivelog all 命令
c.执行backup …..命令指定项进行备份
d.再次运行alter system archive log current对当前redolog进行归档
e.对新生成的尚未备份的归档进行备份

查看已备份的归档日志片段

list backup of archivelog;

初始化参数文件的备份

RMAN自动备份服务器的初始化参数文件,并放于控制文件的备份片段中,极少需要对spfile文件备份
备份命令:backup spfile;

对备份集做备份

对备份集做备份只能放到磁带中,命令:
backup backupset all;
备份指定的备份集
backup backupset n;(n表示备份集ID,可以指定多个)

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
1 显示RMAN默认配置:show
show all;
\#default 表示初始化默认值
2 列出备份信息–list命令
查看备份集、备份镜像、归档文件等
a.列出所有备份信息
list backup ;
b. 列出所有备份控制文件信息
list backup of controlfile ;
c.列出指定数据文件的备份
list backup of datafile 4;
d.列出所有备份归档文件信息
list backup of archivelog all;
e.列出表空间备份信息
list copy of tablespace ‘users’
f.列出当前的所有归档
list archivelog all
g.列出所有无效备份
list expired backup;(无效备份指备份信息中还存在但是在操作系统中被删除的备份)
删除备份—delete 命令
a.删除过期备份,RMAN根据备份冗余策略确定备份是否过期
delete obsolete ;
b.删除无效备份:首先执行crosscheck 命令核对备份集,如果发现备份无效,RMAN会对该备份集标记为expired
删除 delete expired backup ;
c.删除expired 副本
delete expired copy;
d.删除指定的备份集
delete backupset 1;
f.删除指定备份片
delete backuppiece ‘/u01/aa.bak’
g.删除特定映像副本
delete datafile copy ‘/u01/a.bak’
f.删除所有映像副本
delete copy;
g.在备份后删除输入对象
backup archivelog all delete (all) input; 备份所有的归档日志文件并且删除(所有)归档日志文件
backup backupset 11 format ‘/u01/%u.bak’ delete input;
4 报表显示—report 命令
a.查看7天前的数据库模式
report schema at time ‘sysdate-7’;
b.查看所有需要备份的文件
report need backup ;
c.查看指定表空间是否需要备份
report need bakcup tablespace system
d.查看过期备份
report obsolete ;
5 执行检查—crosscheck 命令
用来检查备份或归档的物理文件的状态,如果物理文件存在,并且控制文件或恢复目录中匹配则标记为available 如果物理文件已经不存在则标记为expired 无效。
要手工删除expired记录
检查所有归档文件
crosscheck archivelog all;
检查所有的备份集
crosscheck backup;
6 修改状态 —change命令
修改备份文件或归档文件的状态,在控制文件或恢复目录中,记录状态为:available 可用 和 unavailable 不可用。
修改指定备份集为unavailable (注意不能修改闪回区的备份集)
change backupset 35 unavailable;(如果设置某个备份集的状态为unavailable,那么使用备份集恢复的时候系统会自动跳过该备份集)
修改表空间的备份集为unavailable;
change backup of tablespace users unavailable;
修改指定归档文件状态为unavailable
change archivelog logseq=n unavailable ;
n为归档文件序号,可用通过list archivielog all 或者查询v$archived_log获得
change 命令附带delete 子句
change archivelog logseq=n delete
修改记录状态同时,直接删除物理文件。