该文档目的是通过,一次全备,多次增量备份和多次增量恢复来模拟达梦数据库在搬迁中实现最小化停机时间。
一、环境主备
源数据库服务器:172.16.121.172
目标数据库服务器:172.16.121.107
1、初始化源数据库
dminit path=/u01/dm8/data/hiszj INSTANCE_NAME=hiszj PORT_NUM=5238
2、后台启动源数据库
nohup dmserver /u01/dm8/data/hiszj/DAMENG/dm.ini > /u01/dm8/data/hiszj/hiszj.log &
3、源数据库开归档
mkdir -p /u01/dm8/data/hiszj/arch #创建归档目录
alter database mount;
alter database archivelog;
ALTER DATABASE ADD ARCHIVELOG 'DEST = /u01/dm8/data/hiszj/arch, TYPE = local,FILE_SIZE = 100, SPACE_LIMIT = 2048';
alter database open;
select arch_mode from v$database;
select arch_name,arch_type,arch_dest,arch_file_size from v$dm_arch_ini;
alter system switch logfile;
SQL> select file_name,tablespace_name,bytes/1024/1024,AUTOEXTENSIBLE from dba_data_files;
行号 FILE_NAME TABLESPACE_NAME BYTES/1024/1024 AUTOEXTENSIBLE
---------- ------------------------------------- --------------- -------------------- --------------
1 /u01/dm8/data/hiszj/DAMENG/MAIN.DBF MAIN 128 YES
2 /u01/dm8/data/hiszj/DAMENG/SYSTEM.DBF SYSTEM 74 YES
3 /u01/dm8/data/hiszj/DAMENG/TEMP.DBF TEMP 10 YES
4 /u01/dm8/data/hiszj/DAMENG/ROLL.DBF ROLL 128 YES
4、源数据库建表空间、用户、并插入数据
sysdba账号:
disql sysdba/SYSDBA:5238
create tablespace tbs01 datafile '/u01/dm8/data/hiszj/DAMENG/tbs_data_01.DBF' size 100;
create user chen identified by chenchen123 default tablespace tbs01;
grant public,resource,dba to chen;
conn chen/chenchen123:5238 #切换到chen账号
create table t01 as select * from sysobjects;
create table tt1(id number,name varchar(32));
insert into tt1 values(1,'name1');
insert into tt1 values(2,'name2');
insert into tt1 values(3,'name3');
insert into tt1 values(4,'name4');
insert into tt1 values(5,'name5');
insert into tt1 values(6,'name6');
insert into tt1 values(7,'name7');
insert into tt1 values(8,'name8');
insert into tt1 values(9,'name9');
insert into tt1 values(10,'name10');
commit;
SQL> select table_name from user_tables;
行号 TABLE_NAME
---------- ----------
1 T01
2 TB_TEST1
5、源库第一次全量和增量备份
disql SYSDBA/SYSDBA:5238
backup database backupset '/u01/dm8/backup/hiszjbk'; #会自动创建testbk新目录
backup database increment with backupdir '/u01/dm8/backup' backupset '/u01/dm8/backup/hiszj_inc_back';
6、复制到目标端
scp -r hiszj_inc_back 172.16.121.107:/u01/dm8/backup/.
scp -r hiszjbk 172.16.121.107:/u01/dm8/backup/.
注意:这里目标端的备份文件目录和源端一致。
7、第二次插入数据并增量备份
disql chen/chenchen123:5238
SQL> create table t02 as select * from t01;
SQL> create table t03 as select * from sysobjects;
SQL> alter system switch logfile;
disql SYSDBA/SYSDBA:5238
backup database increment with backupdir '/u01/dm8/backup' backupset '/u01/dm8/backup/hiszj_inc1_back';
scp -r hiszj_inc1_back 172.16.121.107:/u01/dm8/backup/.
8、第三次插入数据并增量备份
disql chen/chenchen123:5238
create table t04 as select * from t01;
create table t05 as select * from t01;
alter system switch logfile;
disql SYSDBA/SYSDBA:5238
backup database increment with backupdir '/u01/dm8/backup' backupset '/u01/dm8/backup/hiszj_inc2_back';
scp -r hiszj_inc2_back 172.16.121.107:/u01/dm8/backup/.
二、数据库迁移恢复
1、目标端初始化数据库
dminit path=/u01/dm8/data/hiszj INSTANCE_NAME=hiszj PORT_NUM=5238
初始化后,目标端数据库不需要启动
2、多次恢复数据库
dmrman
restore database '/u01/dm8/data/hiszj/DAMENG/dm.ini' from backupset '/u01/dm8/backup/hiszjbk';
restore database '/u01/dm8/data/hiszj/DAMENG/dm.ini' from backupset '/u01/dm8/backup/hiszj_inc_back';
restore database '/u01/dm8/data/hiszj/DAMENG/dm.ini' from backupset '/u01/dm8/backup/hiszj_inc1_back';
recover database '/u01/dm8/data/hiszj/DAMENG/dm.ini' from backupset '/u01/dm8/backup/hiszj_inc1_back'; ##针对最后一个restore做recover即可
recover database '/u01/dm8/data/hiszj/DAMENG/dm.ini' update db_magic;
exit;
3、打开数据库,可看到恢复到第2次增量备份后的数据。
dmserver /u01/dm8/data/hiszj/DAMENG/dm.ini #前台启动数据库
disql chen/chenchen123:5238
select table_name from user_tables;
Ctrl+c,关闭数据库
4、继续恢复数据库
restore database '/u01/dm8/data/hiszj/DAMENG/dm.ini' from backupset '/u01/dm8/backup/hiszj_inc2_back';
recover database '/u01/dm8/data/hiszj/DAMENG/dm.ini' from backupset '/u01/dm8/backup/hiszj_inc2_back';
recover database '/u01/dm8/data/hiszj/DAMENG/dm.ini' update db_magic;
dmserver /u01/dm8/data/hiszj/DAMENG/dm.ini #前台启动数据库
disql chen/chenchen123:5238
select table_name from user_tables;
#打开数据库后,发现数据完全一致。