备份与恢复数据库是日常工作中重要一环,本文演示在数据库通过全备、增备数据库后,在异机恢复数据库。
本文演示的整个备份、还原操作过程的时间轴,如下
[dmdba@dbtest ~]$ mkdir -p /home/dmdba/DB_FULL
[dmdba@dbtest ~]$ mkdir -p /home/dmdba/DB_INCRE
[dmdba@dbtest ~]$ mkdir -p /home/dmdba/ARCH
[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 ~]$
[dmdba@dbtest ~]$ DmService start
Starting DmService: [ OK ]
[dmdba@dbtest ~]$ DmService status
DmService (pid 4666) is running...
[dmdba@dbtest ~]$
[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>
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>
##插入数据,切换归档
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>
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>
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>
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条记录。
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,表示备份集都是有效的。
[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 ~]$
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>
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>
[dmdba@dbtest data]$ DmService start
Starting DmService: [ OK ]
[dmdba@dbtest data]$ DmService status
DmService (pid 8560) is running...
[dmdba@dbtest data]$
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条数据,与备份前完全一致,表明本次恢复已将数据完全恢复。
日常工作中一定要保证备份有效性和完整归档,只有这样才能保证数据库在遇到极端情况下也能正常恢复。
文章
阅读量
获赞