达梦数据库之备份与还原

        备份与还原是DBA必备的技能之一,为防止数据的误操作、误删除等突发情况,所以备份还原至关重要,一下从几方面共同学习一下达梦数据库的备份与还原基础知识。

一、概述

        达梦数据库的备份还原方式:物理备份还原和逻辑备份还原
物理备份:
冷备:(dmap服务打开的状态下,数据库是关闭的)
热备:(dmap服务必定是打开的,数据库是打开的,数据库要开归档)
物理备份还原是对数据库的操做系统物理文件(如数据文件、控制文件和日志文件等)的备份还原。

逻辑备份:
导出:dexp / 导入:dimp

  • 逻辑导出和逻辑导入数据库对象分为四种级别:数据库级、用户级、模式级和表级。四种级别独立互斥,不能同时存在。四种级别所提供的功能:
  • 数据库级(FULL):导出或导入整个数据库中的全部对象。
  • 用户级(OWNER):导出或导入一个或多个用户所拥有的全部对象。模式级(SCHEMAS):导出或导入一个或多个模式下的全部对象。
  • 表级(TABLE):导出或导入一个或多个指定的表或表分区。

与备份类似,还原分为逻辑还原和物理还原:

 联机还原和脱机还原

        联机还原指数据库处于运行状态时,通过SQL语句执行还原操作。表还原可以在联机状态下执行。        

        脱机还原指数据库处于关闭状态时执行的还原操作,脱机还原通过DMRMAN工具进行。库备份、表空间备份和归档备份,可以执行脱机还原。(脱机还原操作的目标库必须处于关闭状态。)

数据还原和归档日志还原

        数据还原可以分为库还原、表空间还原和表还原。库还原和表空间必须脱机执行;表还原操作只能联机执行。表还原从表备份集读取数据,重新恢复目标表数据,还会在目标表上重建索引、约束。归档日志还原则将归档日志备份集中的归档日志内容,重新生成到指定目录中。

完全还原和增量还原

        完全还原是指直接利用完全备份集进行数据还原操作。增量还原指通过增量备份集进行数据还原操作。但是考虑到增量备份集的基础一定是一个完全备份集,因此增量还原过程中隐含了一个完全还原操作。如果增量备份集的基备份集被删除了,那么单独使用这个增量备份集是无法进行还原操作的。

二、备份服务进程

        备份还原实现策略有两种:dmap辅助进程方式和无辅助进程方式。

  • DMAP辅助进程方式,可支持第三方备份(指定DEVICE TYPE为TAPE)。DMAP插件执行,改造了备份还原任务子系统,允许指定并行度,大幅提升了备份还原的效率,特别是加密、压缩的处理效率。如果选择使用DMAP辅助进程,执行备份还原之前就必须启动DMAP服务。安装DM数据库以后,DMAP服务会自动启动。如果需要手动启动,有两种途径,一是启动DM服务查看器中的DmAPService。二是通过手动启动DMAP执行码实现,DMAP执行码位于DM安装目录的bin子目录下。除此之外,LINUX下,还可以调用bin目录下的DmAPService脚本。
  • 无辅助进程方式,不依赖DMAP,由主进程dmserver自身执行备份还原,但不支持第三方备份(指定DEVICE TYPE为TAPE)。

三、物理归备份档参数配置

1、归档配置

        通过 dm.ini 和 dmarch.ini 可以配置本地归档。dmarch.ini 生效的前提是 dm.ini 中的参数 ARCH_INI 置为 1。dmarch.ini 可以进行本地归档和远程归档的设置,DM 备份与还原过程中使用的日志均为本地归档日志。

2、手工SQL配置

       ①、修改数据库为 Mount 状态

        SQL>alter DATABASE MOUNT;

        ②、配置本地归档

        SQL>ALTER DATABASE ADD ARCHIVELOG 'DEST = /dm8/dmdata/arch, TYPE = local,FILE_SIZE = 1024, SPACE_LIMIT = 2048';

       ③、开启归档模式

        SQL>ALTER DATABASE ARCHIVELOG;

        ④、修改数据库为 Open 状态

        SQL>ALTER DATABASE OPEN;

        ⑤、查看开启状态

        SQL>select name,status$,ARCH_MODE from v$database;

四、备份

1、备份整个库
    SQL> BACKUP DATABASE FULL BACKUPSET '/opt/dmdbms/BAK/db_full_bak_01';
2、指定备份集路径为 /home/dm_bak/db_bak_3_01,执行以下命令:
    SQL> BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_01';
3、创建备份集,备份名设置为 WEEKLY_FULL_BAK,执行以下命令:
    SQL> BACKUP DATABASE TO WEEKLY_FULL_BAK BACKUPSET '/home/dm_bak/db_bak_3_02';
4、创建备份为备份集添加描述信息为完全备份,执行以下命令:
    SQL> BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_04' BACKUPINFO '完全备份';
5、创建备份限制备份片大小为 300 MB,执行以下命令:
    SQL> BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_05' MAXPIECESIZE 300;
6、执行备份压缩,压缩级别设置为 5,执行以下命令:
    SQL> BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_06' COMPRESSED LEVEL 5;
7、创建并行备份,指定并行数为 8,执行以下命令:
    SQL> BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_07' PARALLEL 8;
8、基于 /home/dm_bak 全量备份的增量备份,执行以下命令:
    SQL> BACKUP DATABASE INCREMENT WITH BACKUPDIR '/home/dm_bak' BACKUPSET '/home/dm_bak/db_increment_bak_02';
注意
当备份数据超过限制大小时,会生成新的备份文件,新的备份文件名是初始文件名后加文件编号。
系统处于归档模式下时,才允许进行表空间备份。
Mount 状态下,不允许进行表空间备份。
MPP 环境不允许进行表空间备份。

  1. 当备份数据超过限制大小时,会生成新的备份文件,新的备份文件名是初始文件名后加文件编号。
  2. 系统处于归档模式下时,才允许进行表空间备份。
  3. Mount 状态下,不允许进行表空间备份。
  4. MPP 环境不允许进行表空间备份。

9、完全备份单个表空间,执行以下命令:
    SQL> BACKUP TABLESPACE MAIN FULL BACKUPSET '/home/dm_bak/ts_full_bak_01';
10、增量备份指定备份目录,以备份 MAIN 表空间为例,指定 BASE_ON 参数执行增量备份,执行以下命令:
    SQL> BACKUP TABLESPACE MAIN INCREMENT WITH BACKUPDIR '/home/dm_bak'BACKUPSET '/home/dm_bak/ts_increment_bak_02';
注意:

  • 若要创建累积增量备份,还需要指定 CUMULATIVE 参数,否则缺省为差异增量备份。
  • 若基备份不在默认备份目录,WITH BACKUPDIR 参数必须指定,用于搜索基备份集。

11、以备份 test表为例,执行以下命令:
    SQL> BACKUP TABLE TEST BACKUPSET '/home/dm_bak/tab_bak_01';
12、添加备份目录。若添加目录已经存在或者为库默认备份路径,则认为已经存在,不添加,但也不报错。执行以下命令:
    SQL> INT SF_BAKSET_BACKUP_DIR_ADD(device_type varchar,backup_dir varchar(256));
13、删除备份目录。若删除目录为库默认备份路径,不进行删除,认为删除失败。若指定目录存在于记录的合法目录中,则删除;不存在或者为空则跳过,正常返回。执行以下命令:
    SQL>INT SF_BAKSET_BACKUP_DIR_REMOVE (device_type varchar,backup_dir varchar(256));
14、清理全部备份目录,默认备份目录除外,执行以下命令:
    SQL>INT SF_BAKSET_BACKUP_DIR_REMOVE_ALL ();

脱机备份rman:
15、全库备份,在 DMRMAN 下执行以下命令:
    dramn> BACKUP  DATABASE  '/opt/dmdbms/data/DAMENG/dm.ini'  FULL  BACKUPSET '/home/dm_bak/db_full_bak_01';
16、增量备份,在 DMRMAN 下执行以下命令:
    dramn> BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/home/dm_bak' BACKUPSET '/home/dm_bak/db_increment_bak_02';

注意:

  • 增量备份指基于指定的库的某个备份(完全备份或者增量备份),备份自该备份以来所有发生修改了的数据页。脱机增量备份要求两次备份之间数据库必须有操作,否则备份会报错。
  • WITH BACKUPDIR 参数用于搜索基备份集。
  • INCREMENT 参数表示执行的备份为增量备份,增量备份该参数不可省略。

17、校验特定的备份集,在 DMRMAN 下执行以下命令:
BACKUP  DATABASE  '/opt/dmdbms/data/DAMENG/dm.ini'  FULL  BACKUPSET '/home/dm_bak/db_full_bak_01';
CHECK BACKUPSET '/home/dm_bak/db_full_bak_01';
18、删除特定备份集,每次只能删除一个备份集,在 DMRMAN 下执行以下命令:
    BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET '/home/dm_bak/db_bak_for_remove_01';
    REMOVE BACKUPSET '/home/dm_bak/db_bak_for_remove_01';
19、备份集在数据库默认备份目录,默认目录在 dm.ini 参数 BAK_PATH,执行以下命令:
    BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET'db_bak_for_remove_01';
    REMOVE BACKUPSET 'db_bak_for_remove_01' DATABASE '/opt/dmdbms/data/DAMENG/dm.ini';
20、备份集为其他备份集的基备份且备份集都在数据库默认备份目录下,执行以下命令:
    BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET'db_bak_for_remove_01';
    BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' INCREMENT  BACKUPSET'db_bak_for_remove_01_incr';
    REMOVE BACKUPSET 'db_bak_for_remove_01_incr' DATABASE'/opt/dmdbms/data/DAMENG/dm.ini' CASCADE;
21、批量删除所有备份,执行以下命令:
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'BACKUPSET'/home/dm_bak/db_bak_for_remove_02';
    REMOVE BACKUPSETS WITH BACKUPDIR '/home/dm_bak';

逻辑备份:

1、FULL 方式导出数据库的所有对象。
        dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=YDIRECTORY=/mnt/data/dexp
2、OWNER 方式导出一个或多个用户拥有的所有对象。
        dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log OWNER=USER01 DIRECTORY=/mnt/data/dexp
3、SCHEMAS 方式的导出一个或多个模式下的所有对象。
        dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log SCHEMAS=USER01DIRECTORY=/mnt/data/dexp
4、TABLES 方式导出和导入一个或多个指定的表或表分区。导出所有数据行、约束、索引等信息。和 TABLES 导出有关的参数还有 QUERY、EXCLUDE 和 INCLUDE,都是用来设置过滤条件的。
        dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log TABLES=table1,table2 DIRECTORY=/mnt/data/dexp

五、还原

        DM 仅支持表的联机还原,数据库、表空间和归档日志的还原必须通过脱机工具 DMRMAN 执行。

逻辑还原
1、还原表结构,执行以下命令:
    SQL>restore table struct from backupset '/home/dm_bak/tab_bak_for_res_01';
2、还原表数据,执行以下命令:
    SQL>RESTORE TABLE  FROM BACKUPSET '/home/dm_bak/tab_bak_for_res_01';
3、还原表数据,但不重建索引,执行以下命令:
    SQL>RESTORE  TABLE    WITHOUT  INDEX  FROM  BACKUPSET '/home/dm_bak/tab_bak_for_res_01';
4、还原表数据,但不还原约束,执行以下命令:
    SQL>RESTORE  WITHOUT  CONSTRAINT  FROM  BACKUPSET '/home/dm_bak/tab_bak_for_res_01';

脱机还原rman

        进入数据库安装目录的 bin 目录下,例如 Linux 下的目录为 /opt/dmdbms/bin,执行以下命令:./dmrman
1、联机备份数据库,保证数据库运行在归档模式及 Open 状态。执行以下命令:
    BACKUP DATABASE BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
2、准备目标库。还原目标库可以是已经存在的数据库,也可使用 dminit 工具初始2、化一个新库。执行以下命令:
    ./dminit path=/opt/dmdbms/data db_name=DAMENG_FOR_RESTORE
3、启动 RMAN,校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验。执行以下命令:
    CHECK BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
4、还原数据库。启动 DMRMAN,执行以下命令:
RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
5、恢复数据库。启动 DMRMAN,执行以下命令:
RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_recover_backupset';
6、恢复 db_magic,执行以下命令:
    RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' UPDATE DB_MAGIC;
注意:
        可通过调整 dm.ini 中的和检查点和 REDO 日志相关参数,降低检查点频率,增大 REDO 日志包大小来提升还原性能。

表空间还原

        使用 RESTORE 命令完成表空间的脱机还原,还原的备份集可以是联机或脱机生成的库备份集,也可以是联机生成的表空间备份集。脱机表空间还原仅涉及表空间数据文件的重建与数据页的拷贝。不需要事先置目标表空间为 OFFLINE 状态。表空间还原后,表空间状态被置为 RES_OFFLINE,并设置数据标记 FIL_TS_RECV_STATE_RESTORED,表示经过还原但数据不完整。
1、创建表空间,执行以下命令:
    CREATE TABLESPACE TS1 DATAFILE 'TS1.DBF' SIZE 128;
2、创建表,指定表的存储空间为 TS1,执行以下命令:
    CREATE TABLE RCT_BFHF_BKJ (C1 INT) STORAGE(ON TS1);
    INSERT INTO RCT_BFHF_BKJ VALUES(1);

    Commit;
3、联机备份数据库,保证数据库运行在归档模式及 OPEN 状态。执行以下命令:
    BACKUP TABLESPACE MAIN BACKUPSET '/home/dm_bak/ts_full_bak_for_restore';
4、校验备份,校验待还原备份集的合法性(此步骤可选),执行以下命令:
    CHECK BACKUPSET '/home/dm_bak/ts_full_bak_for_restore';
5、将表空间脱机,执行以下命令:
    ALTER TABLESPACE TS1 OFFLINE;
6、还原表空间。需要注意,表空间还原的目标库只能是备份集产生的源库,否则将报错。
        RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
7、恢复表空间。启动 DMRMAN,执行以下命令:
        RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' TABLESPACE TS1;

到此文章结束,请耐心阅读~
更多达梦技术资讯,请访问达梦技术社区:
达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心
https://eco.dameng.com/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值