注册
DM8 数据库备份和恢复
专栏/培训园地/ 文章详情 /

DM8 数据库备份和恢复

高照 2024/09/27 420 0 0
摘要

本文主要介绍数据库的备份和恢复。

一. dexp/dimp逻辑备份
总体来说和oracle exp/imp expdp/impdp比较接近,并有融合。

dexp参数如下

dimp参数如下

  1. 创建测试模式和表
    SQL> create user test identified by "Abc12345Abc";
    SQL> create table test.a(id int,content varchar(20));
    SQL> insert into test.a values(1,'a');
    SQL> insert into test.a values(2,'b');
    SQL> insert into test.a values(3,'c');
    SQL> commit;

  2. dexp备份测试
    全库备份:
    dexp sysdba/xxxxxxx directory=/opt/dexp file=full.dmp log=full.log full=y
    模式备份
    dexp sysdba/xxxxxxx directory=/opt/dexp file=test.dmp log=test.log schemas=test,dmhr
    表备份:
    dexp sysdba/xxxxxxx directory=/opt/dexp file=a.dmp log=a.log tables=test.a,dmhr.region
    模式不含数据备份:
    dexp sysdba/xxxxxxx directory=/opt/dexp file=a_no_data.dmp log=a_no_data.log schemas=test ROWS=n

以上均成功

  1. dimp恢复测试
    3.1 单表仅导入数据测试:
    初始数据:

dimp sysdba/dmdba123 directory=/opt/dexp file=full.dmp log=a_a.log tables=test.a table_exists_action=append
结果数据:

注意:含有唯一约束将无法导入数据。

dimp sysdba/dmdba123 directory=/opt/dexp file=full.dmp log=a_t.log tables=test.a table_exists_action=truncate
结果数据:

dimp sysdba/dmdba123 directory=/opt/dexp file=full.dmp log=a_r.log tables=test.a table_exists_action=replace

3.2 单表删除导入表结构测试
SQL> drop table test.a;
dimp sysdba/dmdba123 directory=/opt/dexp file=full.dmp log=imp_a_no_data.log tables=test.a rows=n

3.3 单表导入表数据测试
dimp sysdba/dmdba123 directory=/opt/dexp file=full.dmp log=imp_a_data.log tables=test.a ignore=y

注:需要ignore=y,否则无法正常导入数据。

3.4 单模式导入
SQL> drop user test;

SQL> create user test identified by "Abc12345Abc";
dimp sysdba/dmdba123 directory=/opt/dexp file=full.dmp log=imp_test.log schemas=test

3.5 remap_schema导入
dimp sysdba/dmdba123 directory=/opt/dexp file=full.dmp log=imp_testb.log schemas=test remap_schema=test:testb table_exists_action=skip
这个测试,无论是否手动创建testb模式,都无法remap成功,限于时间日后继续测试。

  1. 小结:
    dexp/dimp主要选取了我司日常运维中较为常用的一些场景,除remap_schema导入没有成功,其他均能成功。

二. 联机热备与恢复

  1. 开启归档模式
    SQL> alter database mount;
    不同于oracle,可以直接在open状态改变到mount状态
    SQL> alter database add archivelog 'type=local,dest=/opt/dm8/data/arch,file_size=64,space_limit=0';
    SQL> alter database archivelog;
    查看的相关命令
    SQL> alter database open;
    SQL> select name,status$,ARCH_MODE from v$database;
    SQL> select * from v$dm_arch_ini;

  2. 备份
    全库备份
    SQL> backup database full backupset '/opt/rman/full_bak_20200903';
    增量备份
    SQL> backup database increment backupset '/opt/rman/full_bak_20200904_i';
    归档备份
    SQL> backup archivelog all backupset '/opt/rman/arch_20200904';
    表备份
    SQL> backup table "TEST"."A" backupset '/opt/rman/test_a';
    表空间备份
    SQL> backup tablespace "MAIN" full backupset '/opt/rman/tbs_MAIN';

  3. 通过全备实现不完全恢复
    3.1 停止数据库服务
    service DmServiceDMSERVER stop
    3.2 物理备份数据库
    cd /opt/dm8/
    mv data data.ok
    cp –r data.ok data
    登录到dmrman进行恢复,步骤如下:
    RMAN> restore database to '/opt/dm8/data/DAMENG' OVERWRITE FROM BACKUPSET '/opt/rman/full_bak_20200903';
    RMAN> RECOVER DATABASE '/opt/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/rman/full_bak_20200903' DEVICE TYPE disk;
    RMAN> RECOVER DATABASE '/opt/dm8/data/DAMENG/dm.ini' UPDATE DB_MAGIC;

3.3 启动数据库
service DmServiceDMSERVER start
数据库启动正常,9月3日的备份中尚未创建TEST模式,符合预期。

  1. 通过增量备份实现不完全恢复
    4.1 停止数据库
    service DmServiceDMSERVER stop
    4.2 从增量备份恢复数据库
    登录到dmrman进行恢复,步骤如下:
    RMAN> restore database to '/opt/dm8/data/DAMENG' OVERWRITE FROM BACKUPSET '/opt/rman/full_bak_20200904_i';
    RMAN> RECOVER DATABASE '/opt/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/rman/full_bak_20200904_i' DEVICE TYPE disk;
    RMAN> RECOVER DATABASE '/opt/dm8/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
    增量备份可以找到之前的20200903的完整备份,被由这2个备份恢复了数据库

4.3 启动数据库
service DmServiceDMSERVER start
数据库启动正常,在9月4日的备份中已经存在test.a这张表,符合预期。

  1. 恢复表空间
    5.1 重新进行全备
    SQL> backup database full backupset '/opt/rman/full_bak_20200904';
    5.2 移走DMHR表空间数据文件,模拟故障
    mv DMHR.DBF DMHR.DBF.BAK
    5.3 重启数据库
    service DmServiceDMSERVER restart
    检查表空间状态
    SQL> select tablespace_name,status from dba_tablespaces;

数据库处于mount状态,已经存在问题
SQL> alter database open
SQL> restore tablespace DMHR from backupset '/opt/rman/full_bak_20200904';
进行恢复,无法成功

换到mount状态,同样无法成功
SQL> alter database mount;
SQL> restore tablespace DMHR from backupset '/opt/rman/full_bak_20200904';

表空间恢复无法成功,限于时间日后继续测试。

  1. 小结
    全备和增量备份恢复顺利测试成功,表空间恢复没有成功。

三. 总结
可以实现所有测试场景的逻辑备份和dmrman备份。恢复场景中,dimp remap没有成功,dmrman表空间没有成功。虽有些许遗憾,后期将会继续努力尝试找到问题所在。通过这些测试,基本理解备份恢复的使用,作为初学者已经有非常大的收获。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服