一、文档说明
达梦数据库联机SQL语句备份支持数据库、表空间、表、归档4种备份。支持表空间、表两种还原,数据库还原和归档还原必须在DMRMAN工具中执行。在数据库、归档、表空间备份,以及表空间还原时,必须保证系统处于归档模式下。本文主要介绍数据库级别备份还原这部分。
二.备份命令
2.1备份数据库-命令行
使用SQL语句备份数据库的14个主要参数如下。
(1)FULL:表示完全备份,在不指定该选项的情况下,默认也是完全备份。
(2)INCREMENT:表示增量备份,执行增量备份必须指定该参数。
(3)CUMULATIVE:表示累积增量备份(备份在完全备份以来有变化的数据块),若不指定,默认为差异增量备份(备份在上次备份以来有变化的数据块)。
(4)WITH BACKUPDIR:指定增量备份中基备份的搜索目录。若不指定,服务器自动在默认备份目录下搜索基备份。若基备份不在默认的备份目录下,增量备份必须指定该参数。
(5)BASE ON:用于增量备份中,指定基备份集目录。
(6)TO:指定生成备份的名称。若没有指定,则随机生成,默认备份名的格式为“DB_备份类型_数据库名_备份时间”。
(7)BACKUPSET:指定当前备份集生成路径。若没有指定,则在默认备份路径中生成默认备份集目录。
(8)DEVICE TYPE:指存储备份集的介质类型,支持DISK(磁盘)和TAPE(磁带),默认为DISK。
(9)BACKUPINFO:备份的描述信息。
(10)MAXPIECESIZE:最大备份片文件大小上限,以MB为单位,最小为128MB,32位系统最大为2GB,64位系统最大为128GB。
(11)COMPRESSED:LEVEL的取值范围为0~9。LEVEL取值越大,压缩级别越高,压缩速度越慢。若指定COMPRESSED,但未指定LEVEL,则默认LEVEL为1;若未指定COMPRESSED,则默认不进行压缩。
(12)WITHOUT LOG:联机数据库备份时是否备份日志。如果使用了WITHOUT LOG参数,在DMRMAN还原时,必须指定WITH ARCHIVEDIR参数。
(13)TASK THREAD:在备份过程中数据处理过程线程的个数,取值范围为0~64,默认为4。若指定个数为0,则将其调整为1;若指定个数超过当前系统主机核数,则将其调整为主机核数。线程数(TASK THREAD)×并行数(PARALLEL)不得超过512。
(14)PARALLEL:指定并行备份的并行数,取值范围为0~128。若不指定,则默认为4,指定值为0或1时均认为为非并行备份。若未指定关键并行数,则认为为非并行备份。并行备份不支持存在介质为TAPE的备份。线程数(TASK THREAD)×并行数(PARALLEL)不得超过512。
SQL备份有以下两种主要方式。
完全备份数据库的SQL语句如下。
增量备份数据库(默认差异增量备份)的SQL语句如下。
2.2备份数据库-DM管理工具
联机备份也可以在DM管理工具中进行。DM管理工具在连接DM实例后,在左侧“备份”模块根据需要进行操作,备份类型如图
2.3备份归档文件-命令行
联机SQL语句备份仅支持归档备份,备份语法如下。
归档备份的5个主要选项如下。
(1)ALL:备份所有的归档。
(2)FROM LSN/UNTIL LSN:指定备份开始/截止的LSN。
(3)FROM TIME/UNTILTIME:指定备份开始/截止的时间点。
(4)BETWEEN...AND...:指定备份的区间。指定区间后,只会备份指定区间内的归档文件。
(5)DELETE INPUT:指定备份完成后,是否删除归档操作。
归档日志的有效LSN范围可以通过V$ARCH_FILE查看。
备份指定的归档日志文件的SQL语句如下
备份所有归档日志文件的SQL语句如下。
2.4 DMRAMN脱机备份
DMRMAN是脱机备份工具,在执行备份之前,实例必须关闭。
数据库备份的语法如下。
语法和联机备份类似,这里只描述参数DATABASE后的'<INI文件路径>'。因为连接备份是在DISQL工具里执行的,所以在执行之前已经确认了实例信息。而DMRMAN是脱机备份,所以在DATABASE选项之后必须加上dm.ini参数的绝对路径,以确定备份哪一个数据库。其他参数说明可以参考联机备份部分。完全备份数据库的命令如下。
增量备份数据库的命令如下。
三、查看备份信息
3.1 相关查询视图
在达梦数据库中可以通过如下动态视图查看备份的相关信息。
(1)V$BACKUPSET:显示备份集的基本信息。
(2)V$BACKUPSET_DBINFO:显示备份集的数据库相关信息。
(3)V$BACKUPSET_DBF:显示备份集中数据文件的相关信息。
(4)V$BACKUPSET_ARCH:显示备份集的归档信息。
(5)V$BACKUPSET_BKP:显示备份集的备份片信息。
(6)V$BACKUPSET_SEARCH_DIRS:显示备份集的搜索目录。
(7)V$BACKUPSET_TABLE:显示表备份集中的备份表信息。
(8)V$BACKUPSET_SUBS:显示并行备份中生成的子备份集信息。
关于这些视图的详细说明,可以参考官方手册。注意,在使用这些视图之前需要先使用SF_BAKSET_BACKUP_DIR_ADD函数来添加备份目录,该操作仅对当前会话有效。如果没有添加备份目录,仅搜索默认备份路径下的备份集。
select SF_BAKSET_BACKUP_DIR_ADD('disk','/dm/dmbackup');
select backup_name,backup_path,type from v$backupset;
3.2 备份集常用函数
达梦数据库中没有提供自动删除过期备份的功能,需要DBA手工执行备份删除操作,也可配置定时作业任务自动删除过期的备份文件。
本节介绍使用SQL语句来删除备份,在DMRAN中,使用DMRMAN对应的语法来删除。
使用SQL语句删除备份操作涉及如下函数和存储过程。
(1)SF_BAKSET_BACKUP_DIR_ADD:添加备份目录。
(2)SF_BAKSET_BACKUP_DIR_REMOVE:删除内存中指定的备份目录。
(3)SF_BAKSET_BACKUP_DIR_REMOVE_ALL:删除内存中全部的备份目录。
(4)SF_BAKSET_CHECK:对备份集进行校验。
(5)SF_BAKSET_REMOVE:删除指定设备类型和指定备份集目录的备份集。
(6)SF_BAKSET_REMOVE_BATCH:批量删除满足指定条件的所有备份集。
(7)SP_DB_BAKSET_REMOVE_BATCH:批量删除指定时间之前的数据库备份集。
(8)SP_TS_BAKSET_REMOVE_BATCH:批量删除指定表空间对象及指定时间之前的表空间备份集。
(9)SP_TAB_BAKSET_REMOVE_BATCH:批量删除指定表对象及指定时间之前的表备份集。
(10)SP_ARCH_BAKSET_REMOVE_BATCH:批量删除指定条件的归档备份集。
注意,使用这些函数或存储过程之前需要先使用SF_BAKSET_BACKUP_DIR_ADD添加待删除的备份集目录,否则只删除默认备份路径下的备份集。
这些函数和过程可以在官方文档查询, 本文档只列举3个比较常用的
3.2.1 BAKSET_CHECK
BAKSET_CHECK函数:校验备份集
返回值: 1表示备份集目录存在且合法;否则报错。
3.2.2 SF_BAKSET_REMOVE
SF_BAKSET_REMOVE函数:删除指定备份集目录的备份集
语法:SF_BAKSET_REMOVE(device_type,backsetpath,option)。
SF_BAKSET_REMOVE函数的参数说明如下。
(1)device_type:DISK或TAPE。
(2)backsetpath:待删除的备份集目录。
(3)option:删除备份集选项,0表示默认删除,1表示级联删除。
3.2.3 SP_DB_BAKSET_REMOVE_BATCH
SP_DB_BAKSET_REMOVE_BATCH函数:批量删除指定时间之前的数据库备份集
语法:SP_DB_BAKSET_REMOVE_BATCH(device_type,end_time)。
SP_DB_BAKSET_REMOVE_BATCH函数的参数说明如下。
(1)device_type:DISK或TAPE。NULL则忽略存储设备的区分。
(2)end_time:必填项,删除备份集的结束时间,仅删除结束时间之前备份集
四. 数据库还原
4.1归档回复
使用还原(RESTORE)命令可以将备份集中的归档文件还原到默认路径或指定路径,这里的备份集可以是脱机的备份集,也可以是联机的备份集。
归档还原的语法如下。
参数OVERWRITE表示在还原归档时,对已经存在的归档文件的处理方式,有以下值。
(1)1:默认值,跳过已存在的归档日志,并将信息记录到/log/dm_BAKRES_年月.log。
(2)2:直接报错返回。
(3)3:强制覆盖存在的归档日志。
还原归档到指定路径的命令如下
4.2数据库还原
4.2.1还原恢复说明
此阶段包含3个动作:还原(RESTORE)、恢复(RECOVER)、数据库更新(UPDATE DB_MAGIC)。使用还原(RESTORE)命令从备份集中进行对象的还原(配置文件和数据文件等),备份集可以是脱机库级备份集,也可以是联机库级备份集。
数据库还原的语法如下。
使用恢复命令在数据库还原后继续完成数据库恢复工作,可以基于备份集,也可以基于本地的归档日志,主要是利用日志来恢复数据的一致性。
数据库恢复有以下两种方式。
(1)从备份集恢复,即重做备份集中的REDO日志。
(2)从归档恢复,即重做归档中的REDO日志。
4.2.2从备份集还原恢复
在数据库比较大,或者事务比较多的情况下,备份过程中生成的日志也会存储到备份集中,比如在联机备份(SQL语句备份)的情况下,执行数据库还原后,还需要重做备份集中备份的日志,从而将数据库恢复到备份时的一致状态,即从备份集恢复。
(1)SQL联机备份数据库
(2)停止实例
(3)还原数据库
(4)从备份集恢复数据库
(5)更新数据库
4.2.3从归档还原恢复
从备份集恢复只是将数据库恢复到与备份时一致的状态。如果是在数据迁移的情况下,后面还会生成许多归档日志文件,为了应用这些归档日志文件的内容、保证数据的同步,可以利用归档继续恢复。由于这是一种数据追加操作,在追加的过程中,也可以指定备份点之后的任意时间点和LSN。
(1)使用SQL语句联机备份数据库。
SQL> set lineshow off
SQL>
SQL> select arch_lsn,clsn, path from v$arch_file;
(2)切换归档
(3)创建测试表ustc
(4)停库
(5)将数据库还原至备份点
(6)利用归档恢复:如果是数据迁移等非本地原始的归档文件,还需要指定DB_MAGIC,对于同实例恢复则不需要指定
(7)更新数据库
(8)启动数据库,查询测试表
如果归档恢复过程中提示缺少归档,可以利用DMRACHK工具校验归档的连续性,如果有缺少,可以利用备份进行归档还原,随后再进行归档恢复。
文章
阅读量
获赞