一、前言
1.1 概念
物理备份是找出那些已经分配、使用的数据页,拷贝并保存到备份集中。物理还原是物理备份的逆过程,物理还原一般通过 DMRMAN 工具(或者 SQL 语句),把备份集中的数据内容(数据文件、数据页、归档文件)重新拷贝、写入目标文件。
1.2 术语
- 联机备份还原:联机备份还原指数据库处于运行状态时,并正常提供数据库服务情况下进行的备份还原操作,称为联机备份还原。
- 脱机备份还原:脱机还原指数据库处于关闭状态时执行的还原操作。库备份、表空间备份和归档备份,可以执行脱机还原。脱机还原操作的目标库必须处于关闭状态。
- 备份集:备份集用来存放备份过程中产生的备份数据及备份信息。一个备份集对应了一次完整的备份。一般情况下,一个备份集就是一个目录,备份集包含一个或多个备份片文件,以及一个备份元数据文件。
1.3 适用范围
本文所涉及的内容适用于 DM8 数据库物理备份还原。
二、准备工作
联机备份数据库必须要配置归档。联机备份时,大量的事务处于活动状态,为确保备份数据的一致性,需要同时备份一段日志(备份期间产生的 REDO 日志),因此要求数据库必须配置本地归档且归档处于开启状态。
脱机备份数据库可配置归档也可以不配置。正常退出的库的备份不需要考虑本地归档日志的完整性,可以不配置归档;但对于故障退出的库的备份要求因故障未刷盘的日志也必须存在于本地归档中,因此必须配置归档。
归档配置有两种方式:一是联机归档配置,数据库实例启动情况下,使用 SQL 语句完成 dmarch.ini 和 ARCH_INI 配置;二是手动配置归档,数据库实例未启动的情况下,手动编写 dmarch.ini 文件和设置参数 ARCH_INI。下面将分别说明这两种归档如何配置。
方式一:联机配置归档
##修改数据库为 Mount 状态
ALTER DATABASE MOUNT;
##开启归档模式
ALTER DATABASE ARCHIVELOG;
##配置本地归档
ALTER DATABASE ADD ARCHIVELOG 'DEST = /home/dm_arch/arch, TYPE = local,FILE_SIZE = 1024, SPACE_LIMIT = 2048';
##修改数据库为 Open 状态
ALTER DATABASE OPEN;
方法二:手动配置归档
##关闭数据库
##在 dm.ini 所在目录,创建 dmarch.ini 文件。dmarch.ini 文件内容如下:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dm_arch/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 2048
##编辑 dm.ini 文件,设置参数ARCH_INI=1
##启动数据库实例,数据库已运行于归档模式。
注意
联机备份时,关闭已配置的本地归档之后再重新打开,会造成归档文件中部分日志缺失,备份时检查归档文件连续性时将会报错。存在该类操作时,若要避免该错误,备份前需要调用【 checkpoint(100) ;】命令主动刷新检查点。
三、联机备份还原
联机方式支持数据库、用户表空间、用户表和归档的备份以及用户表的还原。在进行联机库级备份、归档备份和表空间备份时,必须保证系统处于归档模式,否则联机备份不能进行。
3.1 数据备份
3.1.1 手动备份
1. 数据库备份
(1)概述
在 disql 工具或图形化管理工具 SQL 编辑区中使用 BACKUP 语句可以备份整个数据库,执行以下命令:
##全备
BACKUP DATABASE FULL BACKUPSET '/opt/dmdbms/BAK/db_full_bak_01';
(2)设置数据库备份选项
- 设置联机数据库备份集路径。
##指定备份集路径为 /home/dm_bak/db_bak_3_01
##BACKUPSET 参数用于指定备份集的输出路径
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_01';
- 设置备份名。
##创建备份集,备份名设置为“WEEKLY_FULL_BAK”
BACKUP DATABASE TO WEEKLY_FULL_BAK BACKUPSET '/home/dm_bak/db_bak_3_02';
##备份名的设置不可以使用特殊格式,例如%NAME。
- 添加备份描述。
##创建备份为备份集添加描述信息为“完全备份”。
##描述信息可以更详细地对备份类型、用途等进行说明
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_04' BACKUPINFO '完全备份';
- 限制备份片大小。
##MAXPIECESIZE 参数用于控制单个备份片的大小
##MAXPIECESIZE 不能大于磁盘剩余空间大小,否则报错磁盘空间不足。
##创建备份限制备份片大小为300M
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_05' MAXPIECESIZE 300;
- 备份压缩。
##执行备份压缩,压缩级别设置为 5。
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_06' COMPRESSED LEVEL 5;
##压缩选项有不同的压缩级别可以选择,取值范围为 0~9。
##应根据存储空间、数据文件大小等确定合适地压缩级别
- 设置并行备份。
##可通过关键字 PARALLEL 指定是否执行并行备份,以及执行并行备份的并行数。
##创建并行备份,指定并行数为8
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_07' PARALLEL 8;
2. 表空间备份
(1)概述
在 disql 工具中使用 BACKUP 语句可以备份单个表空间。同备份数据库一样,执行表空间备份数据库实例也必须运行在归档模式下,启动 disql 输入以下语句即可备份表空间:
BACKUP TABLESPACE MAIN BACKUPSET 'ts_bak_01';
(2)设置表空间备份选项
- 增量备份指定基备份路径。
##以增量备份用户 MAIN 表空间为例,指定 BASE ON BACKUPSET 参数执行增量备份
BACKUP TABLESPACE MAIN BACKUPSET 'ts_full_bak_01';
BACKUP TABLESPACE MAIN INCREMENT BACKUPSET 'ts_increment_bak_01';
BACKUP TABLESPACE MAIN INCREMENT BASE ON BACKUPSET'ts_full_bak_01' BACKUPSET 'ts_increment_bak_02';
- 完全备份。
BACKUP TABLESPACE MAIN FULL BACKUPSET '/home/dm_bak/ts_full_bak_01';
- 增量备份。
BACKUP TABLESPACE MAIN INCREMENT WITH BACKUPDIR '/home/dm_bak' BACKUPSET '/home/dm_bak/ts_increment_bak_02';
注意
1.当备份数据超过限制大小时,会生成新的备份文件,新的备份文件名是初始文件名后加文件编号。
2.系统处于归档模式下时,才允许进行表空间备份。
3.Mount 状态下,不允许进行表空间备份。
4.MPP 集群环境不允许进行表空间备份。
5.更多备份选项可以查看数据库软件安装路径 doc 目录下《DM8 备份还原》手册。
3. 表备份
与备份数据库与表空间不同,备份表不需要服务器配置归档,disql 输入以下命令即可备份用户表。
BACKUP TABLE TAB_01 BACKUPSET 'tab_bak_01';
##备份集“tab_bak_01”会生成到默认的备份路径下
注意
1.表备份均为联机完全备份;
2.不需要配置归档日志;
3.没有增量备份。
4. 归档备份
(1)概述
在 disql 工具中使用 BACKUP 语句可以备份归档日志。归档备份的前提:
- 数据库必须配置归档;
- 归档文件的 db_magic、permanent_magic 值和数据库的 db_magic、permanent_magic 值必须一样;
- 归档日志必须连续,如果出现不连续的情况,前面的连续部分会忽略,仅备份最新的连续部分。
disql 输入以下命令即可备份归档:
SQL>BACKUP ARCHIVE LOG ALL BACKUPSET 'arch_bak_01';
##备份集“arch_bak_01”会生成到默认的备份路径下。
(2)设置归档备份选项
归档备份常用的备份选项有设置备份名、设置备份集路径、指定介质参数、添加备份描述等,详细设置方式可参考设置数据库备份选项。
3.1.2 定时备份
1. 图形化方式创建定时备份
(1)右击管理工具-【代理】-【作业】-【新建作业】。
(2)出现如下图所示界面,在作业名称和作业描述中填写备份名称和描述。
(3)在作业步骤中选择具体的备份方式,如下图所示。
(4)执行完上述步骤后点击【确定】。
2. 定时备份日志查看
右击管理工具,选择【代理】-【作业】-【job 名称】,点击【查看历史作业信息】,即可查看定时备份日志。
3.2 管理备份
3.2.1 备份目录管理
- 添加备份目录。
--函数 SF_BAKSET_BACKUP_DIR_ADD (device_type,backup_dir) 用于添加备份目录
--使用方法:
SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dm_bak');
- 删除备份目录。
--函数 SF_BAKSET_BACKUP_DIR_REMOVE (device_type,backup_dir) 用于删除备份目录
--使用方法:
SELECT SF_BAKSET_BACKUP_DIR_REMOVE('DISK','/home/dm_bak');
- 清理全部备份目录。
--函数 SF_BAKSET_BACKUP_DIR_REMOVE_ALL () 用于清理全部备份目录
--使用方法:
SELECT SF_BAKSET_BACKUP_DIR_REMOVE_ALL();
3.2.2 备份集校验与删除
- 备份集校验。
--SF_BAKSET_CHECK (device_type,backup_dir)
SELECT SF_BAKSET_CHECK ('DISK','/home/dm_bak/db_bak_for_check');
- 备份集删除。
备份集删除相关函数参考如下,相关函数具体使用方法可参考数据库安装目录下 doc 目录中《DM8 备份与还原》手册。
--删除指定设备类型和指定备份集目录地备份集
SF_BAKSET_REMOVE
--批量删除满足指定条件的所有备份集
SF_BAKSET_REMOVE_BATCH
--批量删除指定时间之前的数据库备份集
SP_DB_BAKSET_REMOVE_BATCH
--批量删除指定表空间对象及指定时间之前的表空间备份集
SP_TS_BAKSET_REMOVE_BATCH
--批量删除指定表对象及指定时间之前的表备份集。
SP_TAB_BAKSET_REMOVE_BATCH
--批量删除指定时间之前的归档备份集。
SP_ARCH_BAKSET_REMOVE_BATCH
3.3 数据还原
达梦数据库仅支持表的联机还原,数据库、表空间和归档日志的还原必须通过脱机工具 DMRMAN 执行,详细内容见 脱机备份还原。
表还原的具体操作如下,表还原之后不需要恢复操作。disql 中输入以下 RESTORE 语句即可还原表:
SQL> RESTORE TABLE TAB_01 FROM BACKUPSET 'tab_bak_01';
3.4 管理工具进行联机备份还原
注意
使用的 manager 图形化工具时,需注意工具版本,应与目的端数据库版本尽量一致。
3.4.1 数据备份
下面将介绍如何使用达梦数据库的 MANAGER 管理工具来执行联机的备份与还原操作。
- 点击【备份】,针对相应的备份对象,例如备份数据库,则右键点击【库备份】选择【新建备份】。
- 右键点击【库备份】之后显示如下界面,可设置备份的相关选项。【选择项】中的【常规】选项可以设置备份集的名字、存储目录、备份片的大小、备份描述以及备份类型等等。
- 【选择项】中的【高级】选项可以对备份集的相关属性进行设置,例如是否进行备份压缩、压缩级别、是否备份日志、加密类型等等,详细的属性设置见下图。
- 备份成功结果如下图所示。
3.4.2 备份管理
备份管理包括备份集查看、备份校验、备份删除和指定工作目录。
1. 备份集查看
(1)选择上节数据备份成功的一个备份集,例如库备份下的 DB_DAMENG_FULL_2019_09_16_11_33_27,右键该备份集点击【属性】,可查看备份集的属性信息。
(2)【选择项】中的【文件信息】可查看备份集存储的目录、备份片数以及备份片的具体信息、数据文件数量以及数据文件的具体信息。
(3)【选择项】中的【数据库信息】可以查看进行备份操作的数据库信息。
2. 备份集校验
点击某备份集节点右键菜单-> 备份校验,即可校验备份集的合法性。
3. 备份删除
点击某备份集节点右键菜单->【删除】,可以删除该备份集。也可以同时选中多个备份集节点进行批量删除。
4. 指定工作目录
点击备份文件夹节点右键菜单-> 指定工作目录,可以指定备份的工作目录,允许同时指定多个工作目录。如果设置了备份工作目录,备份文件夹下会显示所有工作目录下的所有备份。指定工作目录的对话框如下:
点击【添加】按钮可以添加一个工作目录,选中一个工作目录点击【删除】按钮可以删除一个工作目录。系统有一个默认工作目录,该目录会一直保留无法被删除。
3.4.3 数据还原
库备份和表空间备份不支持联机还原,只有表备份支持联机还原。表还原过程中表空间中其他的表可以正常操作。
四、脱机备份与还原
4.1 DMRMAN 工具
DMRMAN(DM RECOVERY MANAGER)是脱机备份还原命令行工具,无需额外安装,由它来统一负责库级脱机备份、脱机还原、脱机恢复等相关操作,该工具支持命令行指定参数方式和控制台交互方式执行,降低用户的操作难度。
启动和退出 DMRMAN。进入数据库安装目录的 bin 目录下,例如 /dm8/bin,执行以下命令:
##启动DMRMAN
./dmrman
##退出DMRMAN
##启动后控制台中输入 exit 命令
RMAN> exit;
4.2 数据备份
因表空间备份和表备份都只能在联机状态下进行,因此脱机状态下的数据备份只包括数据库备份和归档备份。
4.2.1 数据库备份
1. 创建完全备份
注意
1.执行数据库脱机备份要求数据库处于脱机状态。
2.若是正常退出的数据库,则脱机备份前不需要配置归档;若是故障退出的数据库,则备份前,需先进行归档修复。
创建一个完整的数据库脱机备份的步骤如下:
##保证数据库处于脱机状态
##启动DMRMAN命令行工具
./dmrman
##DMRMAN中输入以下命令:
RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini ' FULL BACKUPSET '/home/dm_bak/db_full_bak_01';
##FULL参数表示执行的备份为完全备份
2. 创建增量备份
增量备份指基于指定的库的某个备份(完全备份或者增量备份),备份自该备份以来所有发生修改了的数据页。脱机增量备份要求两次备份之间数据库必须有操作,否则备份会报错。
创建脱机增量备份数据库的步骤如下:
##保证数据库处于脱机状态
##启动DMRMAN命令行工具
./dmrman
##DMRMAN中输入以下命令:
RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/home/dm_bak'BACKUPSET '/home/dm_bak/db_increment_bak_02';
##INCREMENT参数表示执行的备份为增量备份
4.2.2 归档备份
使用 DMRMAN 备份归档需要设置归档,否则会报错。同时,归档备份得是归档日志,防止归档日志的丢失导致重要数据缺失。
执行归档备份要求数据库处于脱机状态,完整的创建脱机归档备份的过程如下:
##配置归档,请参考归档配置;
##保证数据库处于脱机状态;
##启动 DMRMAN 命令行工具;
##DMRMAN 中输入以下命令:
RMAN>BACKUP ARCHIVE LOG ALL DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET '/home/dm_bak/arch_all_bak_01';
4.2 备份管理
管理备份一个重要的目的是删除不再需要的备份。DMRMAN 工具提供 SHOW
、CHECK
、REMOVE
、LOAD
等命令分别用来查看、校验、删除和导出备份集。
4.2.1 备份信息查看
DMRMAN 中使用 SHOW
命令可以查看备份集的信息,若指定具体备份集目录,则会生成相应的备份集链表信息。使用方法如下:
##查看单个备份集信息
RMAN> show backupset '/home/test/yy/dm_bak/db_full_bak_01'
##批量显示备份集信息
##SHOW BACKUPSETS...命令用于批量显示指定搜索目录下的备份集信息。
##可通过WITH BACKUPDIR 参数指定多个备份集搜索目录,同时查看所有的备份集。
RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'
BACKUPSET'/home/dm_bak1/db_bak_for_show_01';
RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'
BACKUPSET'/home/dm_bak2/db_bak_for_show_01';
RMAN>SHOW BACKUPSETS WITH BACKUPDIR '/home/dm_bak1','/home/dm_bak2';
4.2.2 备份集校验
DMRMAN 中使用 CHECK
命令对备份集进行校验,校验备份集是否存在及合法。
##语法:CHECK BACKUPSET '<备份集目录>' ;
##CHECK BACKUPSET...命令用于校验特定备份集,每次只能检验一个备份集。
RMAN>CHECK BACKUPSET '/home/dmbak/dbbakforcheck01';
4.2.3 备份集删除
DMRMAN 中使用 REMOVE
命令删除备份集,可删除单个备份集,也可批量删除备份集。单个备份集删除时并行备份中的子备份集不允许单独删除;在指定备份集搜集目录中,发现存在引用待删除备份集作为基备份的需要执行级联删除,默认报错。批量删除备份集时,跳过收集到的单独的子备份集。
RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'
BACKUPSET'/home/dm_bak/db_bak_for_remove_01';
RMAN>REMOVE BACKUPSET '/home/dm_bak/db_bak_for_remove_01'
4.2.4 备份集导出
DMRMAN 中使用 LOAD
命令导出备份集。
##导出磁带/dev/nst0 上所有备份集的 meta 文件到目录/mnt/hgfs/dmsrc/bak_ dir中。直接输##入导出语句将报错,如下所示:
RMAN>LOAD BACKUPSETS FROM DEVICE TYPE TAPE TO BACKUPDIR '/mnt/hgfs/dmsrc/bak_dir';
LOAD BACKUPSETS FROM DEVICE TYPE TAPE TO BACKUPDIR '/mnt/hgfs/dmsrc/bak_dir';
##load backupsets failed.error code:-10000 [-10000]:[错误码:-20022]磁带打开失败
##退出 dmrman,设置环境变量 TAPE,值为/dev/nst0:
[root@192 debug]#export TAPE=/dev/nst0
[root@192 debug]#echo $TAPE /dev/nst0
##启动 dmrman,再次执行
[root@192 debug]# ./dmrman
RMAN>LOAD BACKUPSETS FROM DEVICE TYPE TAPE TO BACKUPDIR '/mnt/hgfs/dmsrc/bak_dir';
LOAD BACKUPSETS FROM DEVICE TYPE TAPE TO BACKUPDIR '/mnt/hgfs/dmsrc/bak_dir';
load meta file [SBT_TEST_T-20140909192629000000-4966] to path
[/mnt/hgfs/dmsrc/bak_dir/0/0.meta]...
load meta file [SBT_TEST_T-20140909192629000000-4966] to path
[/mnt/hgfs/dmsrc/bak_dir/0/0.meta]...success
load meta file [SBT_TEST_T2-20140909192746000000-9983] to path
[/mnt/hgfs/dmsrc/bak_dir/1/1.meta]...
load meta file [SBT_TEST_T2-20140909192746000000-9983] to path
[/mnt/hgfs/dmsrc/bak_dir/1/1.meta]...success
load backupsets successfully.
##退出 dmrman,查看本地磁盘目录/mnt/hgfs/dmsrc/bak_dir:
[root@192 debug]# ls -1 /mnt/hgfs/dmsrc/bak_dir total 0
drwxrwxrwx 1 root root 0 Sep 11 00:23 0
drwxrwxrwx 1 root root 0 Sep 11 00:23 1
[root@192 debug]# ls -1 /mnt/hgfs/dmsrc/bak_dir/0 total 12
-rwxrwxrwx 1 root root 24576 Sep 11 00:23 0.meta
[root@192 debug]# ls -1 /mnt/hgfs/dmsrc/bak_dir/1
total 12
-rwxrwxrwx 1 root root 24576 Sep 11 00:23 1.meta
4.2.5 备份集映射文件导出
备份集映射文件,又称为 mapped file。备份集映射文件导出,是将备份集中各数据文件的原始路径或者调整后的路径生成到一个本地文件中,可通过关键字 MAPPED FILE 应用于表空间和库的还原操作中。
DMRMAN 中使用 DUMP
命令导出映射文件。不支持导出到 DMASM 文件系统中。
##导出备份集中数据文件的原始路径
RMAN>DUMP BACKUPSET'/mnt/dmsrc/db_bak'DEVICE TYPE DISK MAPPED FILE '/mnt/dmsrc/db_bak_mapped.txt';
##指定 ini_path,导出调整后的数据文件路径到映射文件:
RMAN>DUMP BACKUPSET'/mnt/dmsrc/db_bak'DEVICE TYPE DISK DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'
MAPPED FILE '/mnt/dmsrc/db_bak_mapped.txt';
4.3 数据还原恢复
4.3.1 数据库还原和恢复
1. 数据库还原
使用 RESTORE
命令完成脱机还原操作,在还原语句中指定库级备份集,可以是脱机库级备份集,也可以是联机库级备份集。
注意
通过 RESTORE 命令还原后的数据库不可用,需进一步执行 RECOVER 命令,将数据库恢复到备份结束时的状态。
以联机数据库备份说明使用 DMRMAN 如何执行数据库还原操作:
##联机备份数据库,保证数据库运行在归档模式及 OPEN 状态;
SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
##准备目标库。还原目标库可以是已经存在的数据库,也可使用 dminit 工具初始化一个新库。如下所示:
./dminit path=/opt/dmdbms/data db_name=DAMENG_FOR_RESTORE
##校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验;
RMAN>CHECK BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
##还原数据库。启动 DMRMAN,输入以下命令:
RMAN>RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM
BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
2. 数据库恢复
使用 RECOVER
命令完成数据库恢复工作,可以是基于备份集的恢复工作,也可以是使用本地归档日志的恢复工作。数据库恢复是指重做 REDO 日志,有两种方式:从备份集恢复,即重做备份集中的 REDO 日志;或从归档恢复,即重做归档中的 REDO 日志。
方式一:从备份集恢复
##执行还原数据库的命令之后,可以直接执行恢复数据库的命令,如下:
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_recover_backupset';
方式二:从归档恢复
##通过使用 WITH ARCHIVEDIR 关键字进行归档恢复,如下:
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' WITH ARCHIVEDIR'/home/dm_arch/arch'
3. 数据库更新
数据库更新是指更新数据库的 DB_MAGIC,并将数据库调整为可正常工作状态,与数据库恢复一样使用 RECOVER 命令完成。数据库更新发生在重做 REDO 日志恢复数据库后。
RMAN> RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' UPDATE DB_MAGIC;
4.3.2 表空间还原和恢复
1. 表空间还原
使用 RESTORE
命令完成表空间的脱机还原,还原的备份集可以是联机或脱机生成的库备份集,也可以是联机生成的表空间备份集。脱机表空间还原仅涉及表空间数据文件的重建与数据页的拷贝。不需要事先设置目标表空间为 OFFLINE 状态。
表空间还原后,表空间状态被置为 RES_OFFLINE,并设置数据标记 FIL_TS_RECV_STATE_RESTORED,表示经过还原但数据不完整。表空间还原命令如下:
RMAN> RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/home/dm_bak/ts_full_bak_for_restore';
注意
表空间还原的目标库只能是备份集产生的源库,否则将报错。
2. 表空间恢复
表空间恢复通过重做 REDO 日志,以将数据更新到一致状态。由于日志重做过程中,修改好的数据页首先存入缓冲区,缓冲区分批次将修改好的数据页写入磁盘,如果在此过程中发生异常中断,可能导致缓冲区中的数据页无法写入磁盘,造成数据的不一致,数据库启动时校验失败,所以表空间恢复过程中不允许异常中断。
恢复完成后,表空间状态置为 ONLINE,并设置数据标记为 FIL_TS_RECV_STAT_RECOVERED,表示数据已恢复到一致状态。恢复表空间命令如下:
RMAN> RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RECOVER/dm.ini' TABLESPACE MAIN;
4.3.3 归档还原与修复
1. 归档还原
使用 RESTORE
命令完成脱机还原归档操作,在还原语句中指定归档备份集。备份集可以是脱机归档备份集,也可以是联机归档备份集。归档还原的命令如下:
##还原归档。启动 DMRMAN,设置 OVERWRITE 为 2,如果归档文件已存在,会报错。
##1、指定还原的目标归档日志目录:
RMAN>RESTORE ARCHIVE LOG FROM BACKUPSET '/home/dm_bak/arch_all_for_restore' TO ARCHIVEDIR'/opt/dmdbms/data/DAMENG_FOR_RESTORE/arch_dest' OVERWRITE 2;
##2、指定还原目标库的 dm.ini 文件路径:
RMAN>RESTORE ARCHIVE LOG FROM BACKUPSET '/home/dm_bak/arch_all_for_restore' TO DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' OVERWRITE 2;
2. 归档修复
使用 REPAIR
命令完成指定数据库的归档修复,归档修复会对目标库 dmarch.ini 中配置的所有本地归档日志目录执行修复。若目标库没有配置本地归档,则不执行修复。执行修复时,目标库一定不能处于运行状态。一般建议在数据库故障后,应立即执行归档修复,否则后续还原恢复将会导致联机日志中未刷入本地归档的 REDO 日志中而丢失,届时再利用本地归档恢复将无法恢复到故障前的最新状态。归档恢复的命令如下:
##单机环境下,确保目标库已经停止工作后,执行归档修复;
RMAN> REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/data/dm.ini';
##DSC 环境下,需要每个节点停止工作后,每个节点独立执行修复操作;
##对于两节点 DSC01、DSC02 执行修复如下:
RMAN> REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/dsc/dm01.ini';
RMAN> REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/dsc/dm02.ini'
4.4 控制台工具进行脱机备份
下面将介绍如何使用 DM 控制台工具 CONSOLE 来执行脱机的备份与还原操作。
4.4.1 数据备份
- 下图为 console 工具的主页面,点击【新建备份】设置备份选项。
- 点击【新建备份】后的界面显示如下,【选择项】中的【常规】可选择备份的对象(库备份或归档备份)、备份名、备份集目录、是否对备份集大小进行限制以及备份类型等等。
- 【选择项】中的【高级】可设置备份集的具体属性信息,例如是否进行备份压缩、是否备份日志、加密类型、加密密码、介质类型、介质参数等等。
4.4.2 备份管理
- 在备份还原管理页面中,【指定搜索目录】选择备份集存储的目录,点击【获取备份】按钮,即可获取备份集列表。
- 点击【获取备份】按钮后可以获取到指定搜索目录下的所有备份集,并显示在备份集列表中。选择要查看的备份集,点击【属性】按钮。
- 点击【属性】按钮后打开备份属性对话框,可查看备份属性。【选择项】中的【常规】可查看备份集的组 ID 和备份集 ID。
- 【选择项】中的【元信息】主要显示备份集本身相关的信息如备份是否为联机备份、备份的范围、备份的加密信息以及备份的压缩信息等。
- 【选择项】中的【节点信息】显示系统中各节点开始/结束 LSN 以及开始/结束日志包序号。单库只有一个节点,集群系统中会有多个节点。
- 【选择项】中的【文件信息】显示备份集的所有数据文件和备份片信息。
- 【选择项】中的【数据库信息】显示数据库的具体信息。
4.5 控制台工具还原数据库
4.5.1 验证物理备份文件有效性
在数据库安装目录下 bin 目录中启动 DMRMAN 工具进行备份集校验。
./dmrman
RMAN> check backupset '/dmdata/DAMENG/bak/DB_DAMENG_FULL_2024_04_23_00_15_09'
check backupset '/dmdata/DAMENG/bak/DB_DAMENG_FULL_2024_04_23_00_15_09'
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00]
check backupset successfully.
time used: 141.062(ms)
在进行还原操作时需停止数据库服务。
4.5.2 启动控制台工具
使用 root 用户启动 console 工具进行还原时,容易修改达梦相关文件的用户和用户组权限,所以建议使用数据库安装用户,即 dmdba 用户启动 console 工具。一般情况 dmdba 用户启动工具时,会出现如下报错:
其次根据上述报错 “Screen for GtkWindow not set; you must always seta screen for a GtkWindow before using the window” 提示的是图形化界面窗口设置异常,即问题属于图形化界面调用异常。
在 Linux/Unix 类操作系统上的 GUI 应用程序使用 X Window 系统(X Window System),它旨在允许多个用户使用窗口化的应用程序通过网络访问计算机。 DISPLAY 环境变量用来设置将图形显示到何处。
确认当前环境设置的环境变量 DISPLAY:
[root@localhost ~]#
[root@localhost ~]# echo $DISPLAY
:0
[root@localhost ~]# xhost +
access control disabled, clients can connect from any host
[root@localhost ~]# su - dmdba
Last login: Tue Apr 23 00:23:38 PDT 2024 on pts/1
##可以看出,root 用户下 DISPLAY 变量是 :0,而 dmdba 下查询发现变量为空,即不生效了。
[dmdba@localhost ~]$ echo $DISPLAY
##这里需要设置 dmdba 变量和 root 的一致,才能在 dmdba 用户下,启动 manager 时调用图形化界面。
[dmdba@localhost ~]$ export DISPLAY=:0
##xhost + 这个命令,是允许别的用户启动的图形程序将图形显示在当前屏幕上。
[dmdba@localhost ~]$ xhost +
access control disabled, clients can connect from any host
[dmdba@localhost ~]$ echo $DISPLAY
:0
[dmdba@localhost ~]$
此时即可正常启动 console 工具。
[dmdba@localhost ~]$ cd /home/dm/tool
[dmdba@localhost tool]$ ./console
4.5.3 指定备份文件
配置备份路径,获取备份文件。
4.5.4 数据库还原
选择备份文件集,并点击【还原】,指定还原实例的 dm.ini 文件,并点击确定,如下图:
4.5.5 数据库恢复
点击【恢复】,并选择对应数据库实例的 dm.ini 文件后确定,如下图:
4.5.6 更新 db_magic
点击【更新 db_magic】,如下图:
五、参考
若以上内容无法解决您的问题,可前往 达梦技术社区 提问交流。
官方文档地址
https://eco.dameng.com/document/dm/zh-cn/ops/physical-backup-restore.html