注册
通过全备+增量恢复数据库
专栏/培训园地/ 文章详情 /

通过全备+增量恢复数据库

干饭王 2024/02/18 915 0 0
摘要

1、前言

备份与恢复数据库是日常工作中重要一环,本文演示在数据库通过全备、增备数据库后,在异机恢复数据库。
本文演示的整个备份、还原操作过程的时间轴,如下
绘图1.jpg

2、创建相关目录

2.1、全备目录

[dmdba@dbtest ~]$ mkdir -p /home/dmdba/DB_FULL

2.2、增量备份目录

[dmdba@dbtest ~]$ mkdir -p /home/dmdba/DB_INCRE

2.3、归档目录

[dmdba@dbtest ~]$ mkdir -p /home/dmdba/ARCH

3、初始化数据库,启动数据库,并配置为归档模式

3.1、初始化数据库

[dmdba@dbtest ~]$ dminit PATH=/home/dmdba/dmdbms/data/ INSTANCE_NAME=SINGLEDB PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048
initdb V7
db version: 0x7000a
file dm.key not found, use default license!
License will expire on 2024-06-19

 log file path: /home/dmdba/dmdbms/data/DAMENG/DAMENG01.log


 log file path: /home/dmdba/dmdbms/data/DAMENG/DAMENG02.log

write to dir [/home/dmdba/dmdbms/data/DAMENG].
create dm database success. 2024-02-04 09:47:08
[dmdba@dbtest ~]$ 

3.2、启动数据库

[dmdba@dbtest ~]$ DmService start
Starting DmService:                                        [ OK ]
[dmdba@dbtest ~]$ DmService status
DmService (pid 4666) is running...
[dmdba@dbtest ~]$ 

3.3、配置为归档模式

[dmdba@dbtest ~]$ disql sysdba/SYSDBA

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 4.283(毫秒)
disql V7
SQL> ALTER  DATABASE  MOUNT;
操作已执行
已用时间: 00:00:01.882. 执行号:0.
SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST = /home/dmdba/ARCH, TYPE = local,FILE_SIZE = 1024, SPACE_LIMIT = 2048';
操作已执行
已用时间: 1.146(毫秒). 执行号:0.
SQL> ALTER  DATABASE  ARCHIVELOG;
操作已执行
已用时间: 3.062(毫秒). 执行号:0.
SQL> ALTER  DATABASE  OPEN;
操作已执行
已用时间: 00:00:02.364. 执行号:0.
SQL> select ARCH_MODE from v$database;

行号     ARCH_MODE
---------- ---------
1          Y

已用时间: 0.479(毫秒). 执行号:6.
SQL> 
SQL> alter system ARCHIVE LOG CURRENT;
操作已执行
已用时间: 2.819(毫秒). 执行号:0.
SQL> 

四、全备数据库、增备数据库

4.1、全备数据库

SQL> create table t_info (id int ,info varchar(50));
操作已执行
已用时间: 22.878(毫秒). 执行号:7.
SQL>

SQL> insert into t_info values (1,'开始全备数据库');
影响行数 1

已用时间: 0.448(毫秒). 执行号:8.
SQL> commit;
操作已执行
已用时间: 16.436(毫秒). 执行号:9.
SQL> backup database full to "DB_FULL" backupset '/home/dmdba/DB_FULL' compressed level 2 parallel 2;
操作已执行
已用时间: 00:00:01.808. 执行号:10.
SQL> 

SQL> insert into t_info values (2,'完成全备数据库');
影响行数 1

已用时间: 0.434(毫秒). 执行号:11.
SQL> commit;
操作已执行
已用时间: 0.838(毫秒). 执行号:12.
SQL> 

4.2、切换归档

##插入数据,切换归档
insert into t_info values (3,'开始第一次切换归档');
commit;

SQL> insert into t_info values (3,'开始第一次切换归档');
影响行数 1

已用时间: 0.353(毫秒). 执行号:13.
SQL> commit;
操作已执行
已用时间: 0.618(毫秒). 执行号:14.
SQL>  alter system ARCHIVE LOG CURRENT;
操作已执行
已用时间: 27.588(毫秒). 执行号:0.
SQL> 
SQL> insert into t_info values (4,'完成第一次切换归档');
影响行数 1

已用时间: 0.437(毫秒). 执行号:15.
SQL> commit;
操作已执行
已用时间: 0.962(毫秒). 执行号:16.
SQL> 
SQL> 

4.3、增量备份

SQL> insert into t_info values (5,'开始增备数据库');
影响行数 1

已用时间: 0.420(毫秒). 执行号:17.
SQL> commit;
操作已执行
已用时间: 0.872(毫秒). 执行号:18.
SQL> backup database increment base on backupset '/home/dmdba/DB_FULL' to "DB_INCRE" backupset '/home/dmdba/DB_INCRE';
 操作已执行
已用时间: 00:00:01.144. 执行号:22.
SQL> 

SQL> insert into t_info values (6,'完成增备数据库');
影响行数 1

已用时间: 0.416(毫秒). 执行号:23.
SQL>  commit;
操作已执行
已用时间: 0.570(毫秒). 执行号:24.
SQL> 
 

4.4、再次切换归档

SQL> 
SQL> insert into t_info values (7,'开始第二次切换归档');
影响行数 1

已用时间: 0.404(毫秒). 执行号:25.
SQL> commit;
操作已执行
已用时间: 0.538(毫秒). 执行号:26.
SQL> 
SQL> 
SQL> 
SQL> alter system ARCHIVE LOG CURRENT;
操作已执行
已用时间: 2.818(毫秒). 执行号:0.
SQL> 
SQL> 
SQL> insert into t_info values (8,'完成第二次切换归档');
影响行数 1

已用时间: 0.486(毫秒). 执行号:27.
SQL> commit;
操作已执行
已用时间: 0.617(毫秒). 执行号:28.
SQL> 
SQL> 

4.5、检查t_info的操作记录情况

SQL> select * from t_info;

行号     ID          INFO                       
---------- ----------- ---------------------------
1          1           开始全备数据库
2          2           完成全备数据库
3          3           开始第一次切换归档
4          4           完成第一次切换归档
5          5           开始增备数据库
6          6           完成增备数据库
7          7           开始第二次切换归档
8          8           完成第二次切换归档

8 rows got

已用时间: 0.444(毫秒). 执行号:29.
SQL> 

当前t_info表有8条记录,等下恢复数据库后,也要有这8条记录。

4.6、备份集校验

SQL> SELECT  SF_BAKSET_CHECK ('DISK','/home/dmdba/DB_FULL');

行号     SF_BAKSET_CHECK('DISK','/home/dmdba/DB_FULL')
---------- ---------------------------------------------
1          1

已用时间: 19.680(毫秒). 执行号:30.
SQL> SELECT  SF_BAKSET_CHECK ('DISK','/home/dmdba/DB_INCRE');

行号     SF_BAKSET_CHECK('DISK','/home/dmdba/DB_INCRE')
---------- ----------------------------------------------
1          1

已用时间: 12.336(毫秒). 执行号:31.
SQL> 
SQL> 

返回值为1,表示备份集都是有效的。

5、异机恢复

5.1、初始化空库

[dmdba@dbtest ~]$ dminit PATH=/home/dmdba/dmdbms/data/ INSTANCE_NAME=SINGLEDB PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048
initdb V7
db version: 0x7000a
file dm.key not found, use default license!
License will expire on 2024-06-19

 log file path: /home/dmdba/dmdbms/data/DAMENG/DAMENG01.log


 log file path: /home/dmdba/dmdbms/data/DAMENG/DAMENG02.log

write to dir [/home/dmdba/dmdbms/data/DAMENG].
create dm database success. 2024-02-04 11:58:40
[dmdba@dbtest ~]$ 

5.2、还原数据库

RMAN> RESTORE DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/DB_INCRE';
RESTORE DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/DB_INCRE';
checking if the database under system path [/home/dmdba/dmdbms/data/DAMENG] is running, write dmrman info.
RESTORE DATABASE CHECK......
RESTORE DATABASE,dbf collect......
RESTORE DATABASE,dbf refresh ......
RESTORE BACKUPSET [/home/dmdba/DB_FULL/DB_FULL_0] START......
total 4 packages processed...
RESTORE BACKUPSET [/home/dmdba/DB_FULL/DB_FULL_1] START......
total 5 packages processed...
RESTORE BACKUPSET [/home/dmdba/DB_INCRE] START......
total 27 packages processed...
RESTORE DATABASE,UPDATE ctl file......
RESTORE DATABASE,REBUILD key file......
RESTORE DATABASE,CHECK db info......
RESTORE DATABASE,UPDATE db info......
total 31 packages processed!
CMD END.CODE:[0]
restore successfully.
time used: 2007.895(ms)
RMAN> 

5.3、归档恢复

RMAN> RECOVER DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/home/dmdba/ARCH'; 
RECOVER DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/home/dmdba/ARCH';
checking if the database under system path [/home/dmdba/dmdbms/data/DAMENG] is running...[4].
checking if the database under system path [/home/dmdba/dmdbms/data/DAMENG] is running...[3].
checking if the database under system path [/home/dmdba/dmdbms/data/DAMENG] is running...[2].
checking if the database under system path [/home/dmdba/dmdbms/data/DAMENG] is running...[1].
checking if the database under system path [/home/dmdba/dmdbms/data/DAMENG] is running...[0].
checking if the database under system path [/home/dmdba/dmdbms/data/DAMENG] is running, write dmrman info.
EP[0] max_lsn: 45791

total redo pages:8


EP[0] Recover LSN from 45792 to 54516.
Recover from archive log finished, time used:0.013s.
recover successfully!
time used: 7075.283(ms)
RMAN> 

5.4、启动数据库

[dmdba@dbtest data]$ DmService start
Starting DmService:                                        [ OK ]
[dmdba@dbtest data]$ DmService status
DmService (pid 8560) is running...
[dmdba@dbtest data]$

5.5、复查t_info的记录情况

SQL> select * from t_info;

服务器[LOCALHOST:5236]:处于普通打开状态
已连接

行号     ID          INFO                       
---------- ----------- ---------------------------
1          1           开始全备数据库
2          2           完成全备数据库
3          3           开始第一次切换归档
4          4           完成第一次切换归档
5          5           开始增备数据库
6          6           完成增备数据库
7          7           开始第二次切换归档
8          8           完成第二次切换归档

8 rows got

已用时间: 1.252(毫秒). 执行号:4.
SQL> 

t_info表中有8条数据,与备份前完全一致,表明本次恢复已将数据完全恢复。

6、总结

日常工作中一定要保证备份有效性和完整归档,只有这样才能保证数据库在遇到极端情况下也能正常恢复。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服