备份:backup 业务数据的副本(手工或RMAN)
还原:restore 把原来的备份重新覆盖过来(过程)
恢复:recover 利用日志把数据前滚出来(利用归档日志+在线日志过程)
归档日志和在线日志关系
完全恢复:将数据库恢复到宕机前最后一次提交状态
不完全恢复:手工指定数据库恢复到某个时间点
RMAN
Oracle提供了recover manger工具,简称RMAN
Oracle数据库的文件类型:备份数据文件,归档日志,控制文件(记录备份的信息),spfile
自动维护备份相关的元数据,例如备份文件的名称,完成备份的SCN号
以数据块为单位进行备份
自动检测数据块是否损坏
支持增量备份
检查数据库是否开启归档
设置数据库为归档模式,因为非归档模式下无法用rman备份
SQL> show user;
USER 为 "SYS"
SQL>
SQL>
SQL> archive log list;
数据库日志模式 非存档模式
自动存档 禁用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 1
当前日志序列 2
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 1068937216 bytes
Fixed Size 2260048 bytes
Variable Size 679478192 bytes
Database Buffers 381681664 bytes
Redo Buffers 5517312 bytes
数据库装载完毕。
SQL> alter database archivelog;
数据库已更改。
SQL> alter database open;
数据库已更改。
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 1
下一个存档日志序列 2
当前日志序列 2
SQL> archive log all;
ORA-00271: 没有需要归档的日志
备份数据库
C:\Users\fantasy>rman target /
恢复管理器: Release 11.2.0.2.0 - Production on 星期二 4月 27 17:57:31 2021
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
已连接到目标数据库: XE (DBID=2952091588)
RMAN>
SQL> shutdown immediate;
ORA-01149: 无法关闭 - 文件 4 设置了联机备份
ORA-01110: 数据文件 4: 'F:\ORACLESERVICEXE\APP\ORACLE\ORADATA\XE\USERS.DBF'
SQL> alter tablespace users end backup;
表空间已更改。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
RMAN> backup database;
启动 backup 于 27-4月 -21
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=114 设备类型=DISK
RMAN-06554: 警告: 文件 4 处于备份模式
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
输入数据文件: 文件号=00002 名称=F:\ORACLESERVICEXE\APP\ORACLE\ORADATA\XE\SYSAUX.DBF
输入数据文件: 文件号=00003 名称=F:\ORACLESERVICEXE\APP\ORACLE\ORADATA\XE\UNDOTBS1.DBF
输入数据文件: 文件号=00001 名称=F:\ORACLESERVICEXE\APP\ORACLE\ORADATA\XE\SYSTEM.DBF
输入数据文件: 文件号=00004 名称=F:\ORACLESERVICEXE\APP\ORACLE\ORADATA\XE\USERS.DBF
通道 ORA_DISK_1: 正在启动段 1 于 27-4月 -21
通道 ORA_DISK_1: 已完成段 1 于 27-4月 -21
段句柄=F:\ORACLESERVICEXE\APP\ORACLE\FAST_RECOVERY_AREA\XE\BACKUPSET\2021_04_27\O1_MF_NNNDF_TAG20210427T174529_J8HQ9SXM_.BKP 标记=TAG20210427T174529 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:07
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
备份集内包括当前控制文件
备份集内包括当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 27-4月 -21
通道 ORA_DISK_1: 已完成段 1 于 27-4月 -21
段句柄=F:\ORACLESERVICEXE\APP\ORACLE\FAST_RECOVERY_AREA\XE\BACKUPSET\2021_04_27\O1_MF_NCSNF_TAG20210427T174529_J8HQB230_.BKP 标记=TAG20210427T174529 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01
完成 backup 于 27-4月 -21
RMAN> show all;
db_unique_name 为 XE 的数据库的 RMAN 配置参数为:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'F:\ORACLESERVICEXE\APP\ORACLE\PRODUCT\11.2.0\SERVER\DATABASE\SNCFXE.ORA'; # default
备份整个数据库脚本
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
backup database include current controlfile;
release channel c1;
release channel c2;
}
RMAN> run{allocate channel c1 type disk;allocate channel c2 type disk;backup database include current controlfile;release channel c1;release channel c2;}
使用目标数据库控制文件替代恢复目录
分配的通道: c1
通道 c1: SID=135 设备类型=DISK
RMAN-06908: 警告: 操作不能在已分配的通道上并行运行
RMAN-06909: 警告: 并行度适用于企业版
分配的通道: c2
通道 c2: SID=48 设备类型=DISK
启动 backup 于 27-4月 -21
RMAN-06554: 警告: 文件 4 处于备份模式
通道 c1: 正在启动全部数据文件备份集
通道 c1: 正在指定备份集内的数据文件
输入数据文件: 文件号=00002 名称=F:\ORACLESERVICEXE\APP\ORACLE\ORADATA\XE\SYSAUX.DBF
输入数据文件: 文件号=00004 名称=F:\ORACLESERVICEXE\APP\ORACLE\ORADATA\XE\USERS.DBF
通道 c1: 正在启动段 1 于 27-4月 -21
通道 c1: 已完成段 1 于 27-4月 -21
段句柄=F:\ORACLESERVICEXE\APP\ORACLE\FAST_RECOVERY_AREA\XE\BACKUPSET\2021_04_27\O1_MF_NNNDF_TAG20210427T175855_J8HR2ZQZ_.BKP 标记=TAG20210427T175855 注释=NONE
通道 c1: 备份集已完成, 经过时间:00:00:07
通道 c1: 正在启动全部数据文件备份集
通道 c1: 正在指定备份集内的数据文件
输入数据文件: 文件号=00003 名称=F:\ORACLESERVICEXE\APP\ORACLE\ORADATA\XE\UNDOTBS1.DBF
输入数据文件: 文件号=00001 名称=F:\ORACLESERVICEXE\APP\ORACLE\ORADATA\XE\SYSTEM.DBF
通道 c1: 正在启动段 1 于 27-4月 -21
通道 c1: 已完成段 1 于 27-4月 -21
段句柄=F:\ORACLESERVICEXE\APP\ORACLE\FAST_RECOVERY_AREA\XE\BACKUPSET\2021_04_27\O1_MF_NNNDF_TAG20210427T175855_J8HR36W9_.BKP 标记=TAG20210427T175855 注释=NONE
通道 c1: 备份集已完成, 经过时间:00:00:03
通道 c1: 正在启动全部数据文件备份集
通道 c1: 正在指定备份集内的数据文件
备份集内包括当前控制文件
通道 c1: 正在启动段 1 于 27-4月 -21
通道 c1: 已完成段 1 于 27-4月 -21
段句柄=F:\ORACLESERVICEXE\APP\ORACLE\FAST_RECOVERY_AREA\XE\BACKUPSET\2021_04_27\O1_MF_NCNNF_TAG20210427T175855_J8HR3C1L_.BKP 标记=TAG20210427T175855 注释=NONE
通道 c1: 备份集已完成, 经过时间:00:00:01
通道 c1: 正在启动全部数据文件备份集
通道 c1: 正在指定备份集内的数据文件
备份集内包括当前的 SPFILE
通道 c1: 正在启动段 1 于 27-4月 -21
通道 c1: 已完成段 1 于 27-4月 -21
段句柄=F:\ORACLESERVICEXE\APP\ORACLE\FAST_RECOVERY_AREA\XE\BACKUPSET\2021_04_27\O1_MF_NNSNF_TAG20210427T175855_J8HR3D4Q_.BKP 标记=TAG20210427T175855 注释=NONE
通道 c1: 备份集已完成, 经过时间:00:00:01
完成 backup 于 27-4月 -21
释放的通道: c1
释放的通道: c2
备份users表空间
RMAN> run{
2> allocate channel c1 type disk;
3> allocate channel c2 type disk;
4> backup tablespace users;
5> release channel c1;
6> release channel c2;
7> }
使用目标数据库控制文件替代恢复目录
分配的通道: c1
通道 c1: SID=113 设备类型=DISK
RMAN-06908: 警告: 操作不能在已分配的通道上并行运行
RMAN-06909: 警告: 并行度适用于企业版
分配的通道: c2
通道 c2: SID=137 设备类型=DISK
启动 backup 于 27-4月 -21
RMAN-06554: 警告: 文件 4 处于备份模式
通道 c1: 正在启动全部数据文件备份集
通道 c1: 正在指定备份集内的数据文件
输入数据文件: 文件号=00004 名称=F:\ORACLESERVICEXE\APP\ORACLE\ORADATA\XE\USERS.DBF
通道 c1: 正在启动段 1 于 27-4月 -21
通道 c1: 已完成段 1 于 27-4月 -21
段句柄=F:\ORACLESERVICEXE\APP\ORACLE\FAST_RECOVERY_AREA\XE\BACKUPSET\2021_04_27\O1_MF_NNNDF_TAG20210427T180521_J8HRH187_.BKP 标记=TAG20210427T180521 注释=NONE
通道 c1: 备份集已完成, 经过时间:00:00:01
完成 backup 于 27-4月 -21
释放的通道: c1
释放的通道: c2
备份单个Oracle数据文件
RMAN> run{
2> allocate channel c1 type disk;
3> allocate channel c2 type disk;
4> backup datafile 4;
5> release channel c1;
6> release channel c2;
7> }
使用目标数据库控制文件替代恢复目录
分配的通道: c1
通道 c1: SID=48 设备类型=DISK
RMAN-06908: 警告: 操作不能在已分配的通道上并行运行
RMAN-06909: 警告: 并行度适用于企业版
分配的通道: c2
通道 c2: SID=114 设备类型=DISK
启动 backup 于 27-4月 -21
RMAN-06554: 警告: 文件 4 处于备份模式
通道 c1: 正在启动全部数据文件备份集
通道 c1: 正在指定备份集内的数据文件
输入数据文件: 文件号=00004 名称=F:\ORACLESERVICEXE\APP\ORACLE\ORADATA\XE\USERS.DBF
通道 c1: 正在启动段 1 于 27-4月 -21
通道 c1: 已完成段 1 于 27-4月 -21
段句柄=F:\ORACLESERVICEXE\APP\ORACLE\FAST_RECOVERY_AREA\XE\BACKUPSET\2021_04_27\O1_MF_NNNDF_TAG20210427T181411_J8HRZMYT_.BKP 标记=TAG20210427T181411 注释=NONE
通道 c1: 备份集已完成, 经过时间:00:00:01
完成 backup 于 27-4月 -21
释放的通道: c1
释放的通道: c2
查看数据库文件
SQL> desc dba_data_files;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
FILE_NAME VARCHAR2(513)
FILE_ID NUMBER
TABLESPACE_NAME VARCHAR2(30)
BYTES NUMBER
BLOCKS NUMBER
STATUS VARCHAR2(9)
RELATIVE_FNO NUMBER
AUTOEXTENSIBLE VARCHAR2(3)
MAXBYTES NUMBER
MAXBLOCKS NUMBER
INCREMENT_BY NUMBER
USER_BYTES NUMBER
USER_BLOCKS NUMBER
ONLINE_STATUS VARCHAR2(7)
SQL> select file_id from dba_data_files;
FILE_ID
----------
4
2
3
1
5
SQL>
以数据库管理员账号登录数据库
C:\Users\fantasy>sqlplus / as sysdba;
SQL*Plus: Release 11.2.0.2.0 Production on 星期二 4月 27 19:05:40 2021
Copyright (c) 1982, 2014, Oracle. All rights reserved.
连接到:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
SQL> show user;
USER 为 "SYS"
SQL>
使用EXP命令
C:\Users\fantasy>exp fantasy/fantasy tables=test rows=y file=E:/test.dmp log=E:/exp_test.log
Export: Release 11.2.0.2.0 - Production on 星期二 4月 27 16:37:14 2021
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
连接到: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
服务器使用 AL32UTF8 字符集 (可能的字符集转换)
即将导出指定的表通过常规路径...
. . 正在导出表 TEST导出了 1 行
成功终止导出, 没有出现警告。
C:\Users\fantasy>
如果时本机,不要带@数据库实例名!!!如果不是,尝试使用@ip:端口号:SERVICE_NAME
IMP命令导入
E:\>imp fantasy/fantasy fromuser=fantasy touser=fantasy file=test.dmp rows=y commit=y
Import: Release 11.2.0.2.0 - Production on 星期二 4月 27 16:42:50 2021
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
连接到: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
经由常规路径由 EXPORT:V11.02.00 创建的导出文件
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
导入服务器使用 AL32UTF8 字符集 (可能的字符集转换)
. 正在将 FANTASY 的对象导入到 FANTASY
. . 正在导入表 "TEST"导入了 1 行
成功终止导入, 没有出现警告。
E:\>
用户、权限
C:\Users\fantasy>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on 星期二 4月 27 17:02:42 2021
Copyright (c) 1982, 2014, Oracle. All rights reserved.
连接到:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
SQL> show user;
USER 为 "SYS"
创建用户,但是现在fantasy无法登录。
SQL> create user fantasy identified by fantasy
2 default tablespace users;
用户已创建。
SQL> grant connect to fantasy;
授权成功。
登录授权。
恢复数据
SQL> desc v$recover_file;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
FILE# NUMBER
ONLINE VARCHAR2(7)
ONLINE_STATUS VARCHAR2(7)
ERROR VARCHAR2(18)
CHANGE# NUMBER
TIME DATE
SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_STATUS
---------- -------------- --------------
ERROR CHANGE#
----------------------------------------------------------------- ----------
TIME
--------------
5 ONLINE ONLINE
FILE NOT FOUND 0
SQL>
RMAN> restore datafile 5;
启动 restore 于 27-4月 -21
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=3 设备类型=DISK
通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 将数据文件 00005 还原到 F:\ORACLESERVICEXE\APP\ORACLE\PRODUCT\11.2.0\SERVER\DATABASE\TESTSPACE.DBF
通道 ORA_DISK_1: 正在读取备份片段 F:\ORACLESERVICEXE\APP\ORACLE\FAST_RECOVERY_AREA\XE\BACKUPSET\2021_04_27\O1_MF_NNNDF_TAG20210427T194022_J8HY172S_.BKP
通道 ORA_DISK_1: 段句柄 = F:\ORACLESERVICEXE\APP\ORACLE\FAST_RECOVERY_AREA\XE\BACKUPSET\2021_04_27\O1_MF_NNNDF_TAG20210427T194022_J8HY172S_.BKP 标记 = TAG20210427T194022
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
完成 restore 于 27-4月 -21
但是5号文件比其他文件旧
SQL> select file#,CHECKPOINT_CHANGE# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 392799
2 392799
3 392799
4 392799
5 392345
SQL>
需要恢复,但恢复有问题
RMAN> recover datafile 5;
启动 recover 于 27-4月 -21
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recover 命令 (在 04/27/2021 19:59:58 上) 失败
ORA-03114: 未连接到 ORACLE
于实强制恢复到同一时间点
SQL> select file#,CHECKPOINT_CHANGE# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 392799
2 392799
3 392799
4 392799
5 392345
RMAN> recover database until scn 392799;
启动 recover 于 27-4月 -21
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=24 设备类型=DISK
正在开始介质的恢复
Oracle 错误:
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01152: file 1 was not restored from a sufficiently old backup
ORA-01110: data file 1: 'F:\ORACLESERVICEXE\APP\ORACLE\ORADATA\XE\SYSTEM.DBF'
介质恢复完成, 用时: 00:00:01
完成 recover 于 27-4月 -21
RMAN>
然后再启动数据库就发现时间点都一样了
SQL> alter database open noresetlogs;
数据库已更改。
SQL> select * from v$recover_file;
未选定行
SQL> select file#,CHECKPOINT_CHANGE# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 392802
2 392802
3 392802
4 392802
5 392802
SQL>
查看数据库的时间点
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
394075
SQL>
然后再备份一下数据库,就随便玩吧
RMAN> backup database;
启动 backup 于 27-4月 -21
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=6 设备类型=DISK
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
输入数据文件: 文件号=00002 名称=F:\ORACLESERVICEXE\APP\ORACLE\ORADATA\XE\SYSAUX.DBF
输入数据文件: 文件号=00003 名称=F:\ORACLESERVICEXE\APP\ORACLE\ORADATA\XE\UNDOTBS1.DBF
输入数据文件: 文件号=00001 名称=F:\ORACLESERVICEXE\APP\ORACLE\ORADATA\XE\SYSTEM.DBF
输入数据文件: 文件号=00004 名称=F:\ORACLESERVICEXE\APP\ORACLE\ORADATA\XE\USERS.DBF
输入数据文件: 文件号=00005 名称=F:\ORACLESERVICEXE\APP\ORACLE\PRODUCT\11.2.0\SERVER\DATABASE\TESTSPACE.DBF
通道 ORA_DISK_1: 正在启动段 1 于 27-4月 -21
通道 ORA_DISK_1: 已完成段 1 于 27-4月 -21
段句柄=F:\ORACLESERVICEXE\APP\ORACLE\FAST_RECOVERY_AREA\XE\BACKUPSET\2021_04_27\O1_MF_NNNDF_TAG20210427T200847_J8HZPHVB_.BKP 标记=TAG20210427T200847 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:07
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
备份集内包括当前控制文件
备份集内包括当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 27-4月 -21
通道 ORA_DISK_1: 已完成段 1 于 27-4月 -21
段句柄=F:\ORACLESERVICEXE\APP\ORACLE\FAST_RECOVERY_AREA\XE\BACKUPSET\2021_04_27\O1_MF_NCSNF_TAG20210427T200847_J8HZPR0B_.BKP 标记=TAG20210427T200847 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:02
完成 backup 于 27-4月 -21
RMAN>