1-备份恢复概念
逻辑备份和物理备份
逻辑备份:数据迁移、逻辑备份(只能解决逻辑错误)
传统导入导出:IMP/EXP
数据泵导入导出:IMPDP/EXPDP
但是需要注意一点:逻辑备份是没有恢复recover概念的。(注意如果数据库是非归档模式,也没有恢复recover这个概念)
物理备份:几乎可以用于所有场景(包括逻辑错误和物理错误)
User-managed backup 基于用户管理的备份,手工备份
Recovery-manager 基于恢复管理器备份,RMAN备份,自动备份与恢复,通过Oracle提供的一个RMAN工具进行备份,还
原恢复过程都是自动完成。
物理备份从方式上可以分为:冷备和热备
冷备:一致性备份、脱机备份、离线备份
热备:非一致性备份、联机备份、在线备份
2-用户管理备份(手工冷备)
手工冷备的过程:
1.获取数据库运行所需的物理文件
2.关闭数据库
3.把所要备份的物理文件拷贝出来
4.打开数据库
查看数据文件
SQL> select name from v$datafile;
查看控制文件
SQL> select name from v$controlfile;
查看日志文件
SQL> select member from v$logfile;
干净一致的关闭数据库
SQL> shutdown immediate;
拷贝文件
[oracle@Jay-19C soft]$ mkdir cdb
[oracle@Jay-19C soft]$ mkdir pdbseed
[oracle@Jay-19C soft]$ mkdir erp
[oracle@Jay-19C erp]$ cp * /soft/erp/
[oracle@Jay-19C pdbseed]$ cp * /soft/pdbseed/
打开数据库
SQL> startup
3-用户管理备份(手工热备)
必须在归档模式下运行
对于只读表空间不可以进行热备;
对于临时表空间不能热备;
非归档模式也无法热备。
热备是有流程的:
备份前需要进入 backup mode 模式,执行:begin backup
备份完成之后要 end backup
针对整个数据库做热备,这种方式不建议,不实用
Alter database begin backup;
之后底层开始copy文件,等待copy完成之后
Alter database end backup;
针对表空间做热备
SQL> alter tablespace users begin backup;
SQL> select * from v$backup where con_id=1;热备监控
之后底层开始copy文件,等待copy完成之后
SQL> alter tablespace users end backup;
4-用户管理的完全恢复
完全恢复:恢复到最后一次commit状态。
完全恢复的步骤:
restore:还原,OS底层拷贝命令复制所有的或部分的数据文件,这个过程叫restore
recover:恢复,通过sql*plus工具命令行,利用归档和当前的redolog做日志恢复(恢复到最后一次commit)
恢复的三个级别:
Recover database 数据库级别:一般用于包括关键表空间system损坏,或大部分datafile丢失损坏,一般是在
mount状态(加载控制文件)下完成。
Recover tablespace 表空间级别:一般用于非关键表空间损坏,表空间下某些数据文件不能访问,一般是在
open状态下。
Recover datafile 数据文件级别:单一数据文件或者少量的数据文件损坏,可以在mount或者open状态下完
成。
关键文件:system01.dbf/ undo01.dbf /controlfile /currentlog
恢复的相关试图
查看需要恢复的数据文件(mount状态查看)
SQL> select * from v$recover_file;
实验一:关键系统表空间损坏
实验过程中,为了方便,只关注根容器,需要把其他PDB进行关闭
SQL> ---alter pluggable database erp close;
0.关闭整个数据库
1.首先自己做一份数据库的全备(手工冷备)
2.在跟容器里面做测试数据
SQL> create table abc(id number); 默认创建在system表空间
Table created.
SQL> show user
USER is "SYS"
SQL> insert into abc values(1);
1 row created.
SQL> insert into abc values(2);
1 row created.
SQL> insert into abc values(3);
1 row created.
SQL> commit;
Commit complete.
SQL> insert into abc values(4);
1 row created.
SQL> insert into abc values(5);
1 row created.
SQL> !rm -rf /u01/app/oracle/oradata/CDB19C/system01.dbf
SQL> insert into abc values(6);
1 row created.
SQL> insert into abc values(7);
1 row created.
SQL> alter system checkpoint; 正常情况下,报错
alter system checkpoint
3.还原所有数据文件
底层cp
[oracle@Jay-19C CDB19C]$ cp /soft/cdb/*.dbf .
4.恢复数据库
SQL> select * from v$recover_file;
SQL> recover database;
Media recovery complete.
SQL> alter database open;
4.恢复数据库
SQL> recover database;
Media recovery complete.
SQL> alter database open;
5.查数据
实验二:非关键数据文件损坏
步骤:脱机、还原、恢复、联机
SQL> create table users_abc(id number) tablespace users;
Table created.
SQL> insert into users_abc values(1);
1 row created.
SQL> insert into users_abc values(2);
1 row created.
SQL> commit;
Commit complete.
SQL> !rm -rf /u01/app/oracle/oradata/CDB19C/users01.dbf
SQL> insert into users_abc values(3);
1 row created.
SQL> insert into users_abc values(4);
1 row created.
SQL> commit;
Commit complete.
SQL> insert into users_abc values(5);
1 row created.
SQL> alter system switch logfile;
System altered.
SQL> /
System altered.
SQL> /
alter system switch logfile
SQL> select file#,CHECKPOINT_CHANGE# from v$datafile_header where con_id=1;
FILE# CHECKPOINT_CHANGE#
SQL> alter database datafile 7 offline;
SQL> alter database open;
回头处理7号文件
[oracle@Jay-19C CDB19C]$ cp /soft/cdb/users01.dbf .
SQL> select * from v$recover_file;
SQL> select file#,CHECKPOINT_CHANGE# from v$datafile_header where con_id=1;
SQL> select file#,CHECKPOINT_CHANGE# from v$datafile_header where con_id=1;
SQL> alter database datafile 7 online;
SQL> select * from users_abc;