有幸参与达梦数据库DCA认证培训,三天的培训内容从数据库体系架构讲解到手把手的演示图文安装过程以及各项操作,都是满满的干货,在此对培训老师耐心的讲解表示感谢。
在数据库应用维护过程中,备份还原是逃不过的槛,有备无患,才能无忧。结合对《DM8备份与还原.pdf》的学习以及培训老师的指导,本文对备份还原过程做的实践演练和大家分享,更多的参数说明和细节需要大家深入的学习官方手册。
针对不同的备份对象, 一个完整的备份还原过程包含的步骤不同。
库备份与还原包括:备份—还原—恢复。此处恢复又细分为恢复一致性、更新DB_MAGIC 两步。
表空间备份与还原包括:备份—还原—恢复。此处恢复只包括恢复一致性这一步。
表备份与还原包括:备份—还原。
可根据实际需要选择联机或脱机执行,下表中列出了不同的状态下所支持的操作。
对于生产数据库,一旦上线强烈建议开启归档。
DM 数据库可以运行在归档模式或非归档模式下。如果是归档模式,联机日志文件中的内容保存到硬盘中,形成归档日志文件;如果是非归档模式,则不会形成归档日志。
备份与恢复过程都依赖归档日志,归档日志是保证数据一致性和完整性的重要保障。配有归档日志的数据库系统在出现故障时丢失数据的可能性更小,这是因为一旦出现介质故障如磁盘损坏时,利用归档日志,系统可被恢复至故障发生的前一刻,也可以还原到指定的时间点。
检查是否开启归档:
方式一:查看dm.ini文件文件,如下ARCH_INI为0表示未开启:
方式二:查询字典表,如下未查询到记录,表示未开启。
规划和创建归档目录 ,如:
[dmdba@kylinOS ~]$ mkdir -p /home/dmdba/dmdata_arch
开启归档:
SQL> alter database mount;
SQL> alter database add archivelog 'DEST=/home/dmdba/dmdata_arch,TYPE=LOCAL,FILE_SIZE=2048,SPACE_LIMIT=20480';
SQL> alter database archivelog;
SQL> alter database open;
再次查询,已检查到归档配置:
在操作备份还原操作前,创建以下测试数据:
创建表空间:
SQL> create tablespace busi_data datafile '/home/dmdba/dmdbms/data/DAMENG/busi_data_01.dbf' size 500 autoextend off;
SQL> create tablespace busi_index datafile '/home/dmdba/dmdbms/data/DAMENG/busi_index_01.dbf' size 200 autoextend off;
创建测试用户:
SQL> create user test identified by 123456789 default tablespace busi_data default index tablespace busi_index;
SQL> grant public,resource,vti,soi to test;
准备测试表和数据:
CREATE TABLE TEST.CITY
(
CITY_ID CHAR(3) NOT NULL,
CITY_NAME VARCHAR(40) NULL,
REGION_ID INT NULL,
REMARK VARCHAR(64)
);
INSERT INTO CITY(CITY_ID,CITY_NAME,REGION_ID) VALUES('BJ','北京',1);
INSERT INTO CITY(CITY_ID,CITY_NAME,REGION_ID) VALUES('SJZ','石家庄',1);
INSERT INTO CITY(CITY_ID,CITY_NAME,REGION_ID) VALUES('SH','上海',2);
INSERT INTO CITY(CITY_ID,CITY_NAME,REGION_ID) VALUES('NJ','南京',2);
INSERT INTO CITY(CITY_ID,CITY_NAME,REGION_ID) VALUES('GZ','广州',3);
INSERT INTO CITY(CITY_ID,CITY_NAME,REGION_ID) VALUES('HK','海口',3);
INSERT INTO CITY(CITY_ID,CITY_NAME,REGION_ID) VALUES('WH','武汉',4);
INSERT INTO CITY(CITY_ID,CITY_NAME,REGION_ID) VALUES('CS','长沙',4);
INSERT INTO CITY(CITY_ID,CITY_NAME,REGION_ID) VALUES('SY','沈阳',5);
INSERT INTO CITY(CITY_ID,CITY_NAME,REGION_ID) VALUES('XA','西安',6);
INSERT INTO CITY(CITY_ID,CITY_NAME,REGION_ID) VALUES('CD','成都',7);
默认备份路径位于数据库实例目录下的bak子目录,可查询数据字典,如:
SQL> select * from v$parameter t where name in 'BAK_PATH';
脱机备份也称为冷备,支持两种方式操作:
使用DM控制台工具console备份
使用dmrman工具备份
以下案例主要介绍dmrman工具操作,首先先停止数据库实例:
[dmdba@kylinOS ~]$ DmServiceDMSERVER stop
Stopping DmServiceDMSERVER: [ OK ]
如果没停止实例,备份时会提示:[-137]:服务器正在运行或者存在其他进程正在操作同一个库
最简单的全量备份命令,备份集位于默认备份目录:
RMAN> backup database '/home/dmdba/dmdbms/data/DAMENG/dm.ini';
可指定备份集目录,如:
RMAN> backup database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' full backupset '/home/dmdba/dmdata_bak/fullbak_20230617_02';
前面已做了全量备份,在增量备份前模拟数据变更,对测试表做部分数据删除:
停止数据库实例,在之前全量备份集(fullbak_20230617_02)基础上做增量备份:
RMAN> backup database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' increment with backupdir '/home/dmdba/dmdata_bak/fullbak_20230617_02' backupset '/home/dmdba/dmdata_bak/increment_bak_20230617_01';
执行以下命令可实现归档全备份:
RMAN> backup archive log all database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' backupset '/home/dmdba/dmdata_bak/arch_all_bak_01';
联机备份也称为热备,前提是必须开启归档,也支持两种方式操作:
使用DM管理工具manager备份
使用disql工具进行备份
以下案例主要介绍disql工具操作,首先先启动数据库实例:
[dmdba@kylinOS ~]$ DmServiceDMSERVER start
Starting DmServiceDMSERVER: [ OK ]
联机备份,无需指定dm.ini路径。
disql连接数据库,执行全量备份:
SQL> backup database full backupset '/home/dmdba/dmdata_bak/online_fullbak_20230617_01';
在增量备份前模拟数据变更,对测试表做部分数据删除:
在前面全量备份集(online_fullbak_20230617_01)基础上做增量备份:
SQL> backup database increment backupset '/home/dmdba/dmdata_bak/online_increment_bak_20230617_01';
对TEST.CITY表做备份:
SQL> BACKUP TABLE TEST.CITY TO TAB_TEST_CITY_20230617_01 BACKUPSET '/home/dmdba/dmdata_bak/TAB_TEST_CITY_20230617_01';
对BUSI_DATA表空间做备份:
SQL> BACKUP TABLESPACE BUSI_DATA FULL TO TS_BUSIDATA_20230617_01 BACKUPSET '/home/dmdba/dmdata_bak/TS_BUSIDATA_20230617_01';
对归档文件做备份:
SQL> BACKUP ARCHIVELOG TO ARCH_20230617_01 BACKUPSET '/home/dmdba/dmdata_bak/ARCH_20230617_01' DEVICE TYPE DISK;
使用DM控制台工具还原,需要脱机还原。
使用dmrman工具还原,需要脱机还原。
表空间还原,需要脱机还原。
对city表做truncate误操作,导致数据被清空:
利用前面的表备份集文件做还原:
SQL> RESTORE TABLE TEST.CITY FROM BACKUPSET '/home/dmdba/dmdata_bak/TAB_TEST_CITY_20230617_01';
模拟busi_data表空间数据文件损坏(丢失),经测试无法进行联机还原:
关闭数据库实例:
[dmdba@kylinOS DAMENG]$ DmServiceDMSERVER stop
Stopping DmServiceDMSERVER: [ OK ]
对前面备份的表空间备份集做校验:
[dmdba@kylinOS DAMENG]$ dmrman
dmrman V8
RMAN> check backupset '/home/dmdba/dmdata_bak/TS_BUSIDATA_20230617_01'
check backupset '/home/dmdba/dmdata_bak/TS_BUSIDATA_20230617_01'
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00]
check backupset successfully.
time used: 158.432(ms)
还原表空间:
RMAN> restore database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' tablespace busi_data from backupset '/home/dmdba/dmdata_bak/TS_BUSIDATA_20230617_01';
恢复表空间:
RMAN> recover database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' tablespace busi_data;
启动数据库实例,验证还原成功:
当数据库实例所在磁盘损坏,或system、temp、 roll 等系统表空间损坏,需要对数据库做全库还原。
如模拟temp、roll、main表空间文件损坏(丢失),数据库直接无法启动:
RMAN> check backupset '/home/dmdba/dmdata_bak/fullbak_20230617_02';
check backupset '/home/dmdba/dmdata_bak/fullbak_20230617_02';
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00]
check backupset successfully.
time used: 192.031(ms)
RMAN> restore database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dmdba/dmdata_bak/fullbak_20230617_02';
restore database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dmdba/dmdata_bak/fullbak_20230617_02';
file dm.key not found, use default license!
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00]
restore successfully.
time used: 00:00:02.514
RMAN> recover database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dmdba/dmdata_bak/fullbak_20230617_02';
recover database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dmdba/dmdata_bak/fullbak_20230617_02';
Database mode = 2, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[59556], file_lsn[59556]
备份集[/home/dmdba/dmdata_bak/fullbak_20230617_02]备份过程中未产生日志
recover successfully!
time used: 360.133(ms)
RMAN> recover database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' update db_magic;
recover database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' update db_magic;
Database mode = 2, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[59556], file_lsn[59556]
recover successfully!
time used: 00:00:01.100
重启数据库,查询数据,验证恢复成功:
注:全库恢复后,建议马上再做全库备份。
逻辑备份分四级别,分别独立、互斥,不能同时存在。
数据库级别: 导出或导入整个数据库中的所有对象
用户: 导出或导入一个或多个用户所拥有的所有对象
模式: 导出或导入一个或多个模式下的所有对象
表级: 导出或导入一个或多个指定表或表分区
验证导出实例,再导入到另外一个数据库实例,首先先创建一个新实例:
[dmdba@kylinOS ~]$ dminit PATH=/home/dmdba/dmdbms/data PAGE_SIZE=32 EXTENT_SIZE=32 PORT_NUM=5237 DB_NAME=TESTDB INSTANCE_NAME=TESTDB
[root@kylinOS ~]# /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/dmdbms/data/TESTDB/dm.ini -p TESTDB
新初始化实例对象如下:
[dmdba@kylinOS ~]$ dexp SYSDBA/SYSDBA@localhost:5236 file=exp_dameng.dmp log=exp_dameng.log directory=/home/dmdba/dmdata_dmp full=y
端口为5236实例对象如下:
[dmdba@kylinOS ~]$ dimp SYSDBA/SYSDBA@localhost:5237 file=exp_dameng.dmp log=imp_dameng.log directory=/home/dmdba/dmdata_dmp
如下图所示,新实例数据库导入数据后,增加了原实例库的对象。
逻辑备份导入后,如果没有同名的表空间,默认使用表空间:MAIN
将用户test数据导出,再导入到test2用户,先创建test2用户:
SQL> create user test2 identified by 123456789;
SQL> grant public,resource,vti,soi to test2;
使用owner参数,指定导出test用户数据:
[dmdba@kylinOS dmdata_dmp]$ dexp SYSDBA/SYSDBA@localhost:5236 file=exp_test.dmp log=exp_test.log directory=/home/dmdba/dmdata_dmp owner=TEST tablespace=n drop=n log_write=n
使用touser参数,指定导入到test2用户:
[dmdba@kylinOS ~]$ dimp SYSDBA/SYSDBA@localhost:5236 file=exp_test.dmp log=imp_test.log directory=/home/dmdba/dmdata_dmp fromuser=test touser=test2;
将DMHR模式数据导出,并导入到TEST用户。
9.3.2 导出模式数据
使用schemas参数,指定导出模式DMHR数据:
[dmdba@kylinOS ~]$ dexp SYSDBA/SYSDBA@localhost:5236 file=exp_dmhr.dmp log=exp_dmhr.log directory=/home/dmdba/dmdata_dmp schemas=DMHR tablespace=n drop=n log_write=n
使用remap_schema参数,将模式DMHR数据映射到模式TEST:
[dmdba@kylinOS ~]$ dimp SYSDBA/SYSDBA@localhost:5236 file=exp_dmhr.dmp log=imp_dmhr.log directory=/home/dmdba/dmdata_dmp remap_schema=DMHR:TEST
将city表数据导出,再导入到city2表。
使用tables参数,指定导出的表:
[dmdba@kylinOS ~]$ dexp SYSDBA/SYSDBA@localhost:5236 file=exp_tb1.dmp log=exp_tb1.log directory=/home/dmdba/dmdata_dmp tablespace=n drop=n log_write=n tables=test.city
使用remap_table参数,将city表数据映射到city2表:
[dmdba@kylinOS ~]$ dimp SYSDBA/SYSDBA@localhost:5236 file=exp_tb1.dmp log=imp_tb1.log directory=/home/dmdba/dmdata_dmp remap_table=test.city:city2
达梦在线服务平台 https://eco.dameng.com
文章
阅读量
获赞