DM数据库的备份还原包括两种类型:物理备份还原和逻辑备份还原。
物理备份还原是对数据库的操作系统物理文件(如数据文件、控制文件和日志文件等)的备份还原。直接扫描数据库文件,找出那些已经分配、使用的数据页,拷贝并保存到备份集中。只是简单的根据数据库文件系统的描述,来挑选有效的数据页。
逻辑备份是指利用dexp导出工具,将指定对象(库级、模式级、表级)的数据导出到文件的备份方式(针对的是数据内容)。
数据备份主要针对数据文件内容,包括库备份、表空间备份和表备份。
1. 备份还原
DM数据库中的数据存储在数据库的物理数据文件中,数据文件按照页、簇和段的方式进行管理,数据页是最小的数据存储单元。任何一个对DM数据库的操作,都是对某个数据文件页的读写操作。
DM备份的本质就是从数据库文件中拷贝有效的数据页(描述页和被分配使用的数据页)保存到备份集中。备份的过程中,如果数据库系统还在继续运行,这期间的数据库操作并不是都会立即体现到数据文件中,而是首先以日志的形式写到归档日志中。
1.1 表空间与数据文件
数据库的所有对象在逻辑上都存放在某个表空间中,而物理上都存储在所属表空间的数据文件中。一个表空间由一个或多个数据文件组成。除了表备份还原,其他的联机备份与还原必须运行在归档模式下。
1.2 备份集
备份集用来存放备份过程中产生的备份数据及备份信息。一个备份集对应了一次完整的备份。备份片用来存储备份数据的文件(备份片文件后缀为.bak)。备份片的大小可以在备份时通过MAXPIECESIZE指定。
按照备份集中的数据是否满足一致性,可以将备份划分为一致性备份和非一致性备份。
不指定 WITHOUT LOG 选项的联机备份生成的备份集就是一致性备份,脱机备份一定是一致性备份。
非一致性备份的备份集只包含数据文件相关内容,没有归档日志信息,利用非一致性备份还原的数据库,无法直接启动,必须借助归档日志来恢复。
2. 备份还原原理
备份->还原->恢复
2.1 归档
归档配置有两种方式:一是联机归档配置 二是手动配置归档。
备份与恢复过程都依赖归档日志,归档日志是保证数据一致性和完整性的重要保障。Redo日志本地归档(LOCAL),就是将Redo日志写入到本地归档日志文件的过程。
所谓远程归档(REMOTE ARCHIVE),顾名思义就是将写入本地归档的REDO日志信息,发送到远程节点,并写入远程节点的指定归档目录中。
远程归档必须双向配置,单向配置时目标实例上不会接收归档日志,归档状态将会变成无效状态。
通过归档切换功能,可以将这些已经写入联机日志文件,但还没有写入归档日志文件的REDO日志,写入到归档日志文件中。通过执行以下SQL命令,可以完成归档切换功能。三条语句功能一样,选择一条执行即可。
alter database archivelog current;
alter system archive log current;
alter system switch logfile;
2.2 备份
DM的物理备份一般包括数据备份和日志备份两部分,数据备份是拷贝数据页内容,日志备份则是拷贝备份过程中产生的REDO日志。
【并行备份】目前的数据库并行备份还原都是以文件为单位,适用于待备份文件大小比较均匀的情况。
若文件大小差别比较大,特别存在个别文件巨大时,并行备份还原基本没有优势。因此在进行数据库备份时,需要指定READ SIZE <拆分块大小>。
执行并行备份会生成一个主备份集和若干个子备份集,子备份集不能单独还原,也不能作为其他备份集的基备份。
2.3 数据恢复
在还原执行结束后,重做REDO日志,将数据库恢复到一致性状态,并执行更新DB_MAGIC的过程。只能在还原后的数据库上执行更新DB_MAGIC操作。
由于经过还原后数据库的DB_MAGIC会产生变化,因此即便PERMANENT_MAGIC相同,DB_MAGIC不同的数据库产生的归档日志也不会备份。
2.4 支持与限制
2.4.1 联机备份
对联机备份的支持与限制:
- MPP环境仅允许库和归档备份,且各节点都会执行,生成相应的备份集,支持DDL CLONE;
- DSC环境支持库备份、表空间备份和表备份,要求DSC环境的所有节点都处于OPEN 状态;
- MOUNT状态仅支持归档备份;
- SUSPEND状态所有备份均不支持;
- OPEN状态支持所有备份,支持DDL CLONE;
- PRIMARY模式支持所有备份,支持DDL CLONE;
- STANDBY模式仅支持库级、表空间级和归档备份,支持DDL CLONE;
- DDL CLONE必须备份归档,不允许指定WITHOUT LOG。
2.4.2 联机还原
仅支持表级还原,对联机还原的支持与限制:
1) MPP不支持;
2) PRIMARY支持;
3) MOUNT支持表空间级还原,SUSPEND均不支持;
4) OPEN/NORMAL支持。
2.4.3 脱机备份
脱机备份支持库级和归档备份。
a) MPP视同单机环境,仅当前节点执行备份操作;
b) 允许异常退出后备份,支持DDL_CLONE;
c) DSC支持库级备份,支持DDL_CLONE。
2.4.4 脱机还原
脱机还原跟目标库所处的模式、状态以及集群环境(MPP 和 DSC)无关,允许库级、表空间级和归档还原。
3. 联机备份还原
Disql 工具:联机数据备份与还原,包括库备份、表空间备份与还原、表备份与还原。
3.1 准备工作
1、联机归档配置
1)修改数据库为MOUNT状态。
SQL>ALTER DATABASE MOUNT;
2)配置本地归档。
SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/home/dmdba/dmdata/dm2/arch, TYPE = local,FILE_SIZE = 1024, SPACE_LIMIT = 2048';
3)开启归档模式。
SQL>ALTER DATABASE ARCHIVELOG;
4)修改数据库为OPEN状态。
SQL>ALTER DATABASE OPEN;
2、手动配置归档
1)手动编辑dmarch.ini文件,之后保存在dm.ini所在的目录。dmarch.ini文件内容如下:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/dmdata/dm1/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 2048
2)编辑dm.ini文件,设置参数ARCH_INI=1,保存。
3)启动数据库实例,数据库已运行于归档模式。
1. 注:ARCH_TYPE设置为REMOTE,表示是远程归档
2. ARCH_DEST设置为远程数据库实例名,表示REDO日志发送到这个节点
3. ARCH_INCOMING_PATH设置为本地存储路径,用于保存ARCH_DEST实例发送的 REDO日志。
查询 V$DM_ARCH_INI、V$ARCH_STATUS 等动态视图可以获取归档配置以及归档状态等相关信息。
3.2 使用DIsql工具实现数据文件的备份、管理及还原
3.2.1 数据备份
【数据库备份】
默认的备份路径为dm.ini中BAK_PATH配置的路径,语句执行完后会在默认的备份路径下生成名为“db_bak_01”的备份集目录
SQL>BACKUP DATABASE BACKUPSET 'db_bak_01';
在执行联机数据库备份过程中,如果报错归档不完整,则需要先执行生成检查点操作,才能正常备份。例如:select checkpoint(50);
执行数据库备份,数据库必须处于OPEN状态
完全备份语句如下:
SQL>BACKUP DATABASE FULL BACKUPSET '/home/dmdba/dmdata/dm1/bak/db_full_bak_01';
增量备份语句如下:
SQL>BACKUP DATABASE INCREMENT WITH BACKUPDIR '/home/dmdba/dmdata/dm1/bak'BACKUPSET '/home/dmdba/dmdata/dm1/bak/db_increment_bak_02';
【表空间备份】
使用DIsql完成最基本的表空间备份及实施一些备份策略,如限制备份集大小、加密备份等
备份表空间:
SQL>BACKUP TABLESPACE MAIN BACKUPSET 'ts_bak_01';
加密算法包括:
DES_ECB、DES_CBC、DES_CFB、DES_OFB、DESEDE_ECB、
DESEDE_CBC、DESEDE_CFB、DESEDE_OFB、AES128_ECB、
AES128_CBC、AES128_CFB 、AES128_OFB、AES192_ECB、
AES192_CBC、AES192_CFB 、AES192_OFB、AES256_ECB、
AES256_CBC、AES256_CFB 、AES256_OFB 、RC4
注:
- 当备份数据超过限制大小时,会生成新的备份文件,新的备份文件名是初始文件名后加文件编号。
- 系统处于归档模式下时,才允许进行表空间备份。
- MOUNT状态下,不允许进行表空间备份(表空间必须处于OPEN状态,MOUNT和SUSPEND状态下不允许执行表空间备份)。
- MPP环境不允许进行表空间备份。
- DM仅支持表空间联机备份
【表备份】
SQL>BACKUP TABLE TAB_01 BACKUPSET 'tab_bak_01';
【归档备份】
SQL>BACKUP ARCHIVE LOG ALL BACKUPSET 'arch_bak_01';
例:备份归档日志,通过LSN BETWEEN… AND …来指定起始和截至LSN。
首先,确定LSN范围。
SQL>select ARCH_LSN, CLSN, PATH from V$ARCH_FILE;
通过查询结果选出备份的起始LSN和截至LSN。比如50414 50478
其次,备份归档。
SQL>BACKUP ARCHIVELOGLSN BETWEEN 50414 AND 50478 BACKUPSET '/home/dmdba/dmdata/dm1/arch/arch_bak_time_14-78';
ENCRYPT WITH子句指定加密算法
3.2.2 管理备份
目的:删除不再需要的备份,DM没有提供自动删除过期备份的功能,删除备份需要手动执行。
备份管理相关系统过程与函数总结如下:
SF_BAKSET_BACKUP_DIR_ADD:添加备份目录。
INT SF_BAKSET_BACKUP_DIR_ADD( device_type varchar, backup_dir varchar(256) )
参数说明: device_type:待添加的备份目录对应存储介质类型,DISK或者TAPE。目前,无论指定介质类型为DISK或者TAPE,都会同时搜索两种类型的备份集。
backup_dir:待添加的备份目录。返回值:
1:目录添加成功;其它情况下报错。
例:
SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dm_bak');
执行结果 1
SF_BAKSET_BACKUP_DIR_REMOVE:指定删除内存中的备份目录。
INT SF_BAKSET_BACKUP_DIR_REMOVE
( device_type varchar, backup_dir varchar(256) )
参数说明: device_type:待删除的备份目录对应存储介质类型。待删除的备份目录对应存储介质类型,DISK或者TAPE。
backup_dir:待删除的备份目录。
返回值: 1:目录删除成功、目录不存在或者目录为空;0:目录为库默认备份路径;其他情况报错。
例:
SQL>SELECT SF_BAKSET_BACKUP_DIR_REMOVE('DISK','/home/dm_bak');
执行结果 1
SF_BAKSET_BACKUP_DIR_REMOVE_ALL:删除内存中全部的备份目录。
INT SF_BAKSET_BACKUP_DIR_REMOVE_ALL ()
1:目录全部清理成功;其它情况下报错。
例:
SQL>SELECT SF_BAKSET_BACKUP_DIR_REMOVE_ALL();
执行结果 1
⚫SF_BAKSET_CHECK:对备份集进行校验。
⚫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.2.3 备份管理相关动态视图总结如下:
⚫ V$BACKUPSET:显示备份集基本信息。
⚫ V$BACKUPSET_DBINFO:显示备份集的数据库相关信息。
⚫ V$BACKUPSET_DBF:显示备份集中数据文件的相关信息。
⚫ V$BACKUPSET_ARCH:显示备份集的归档信息。
⚫ V$BACKUPSET_BKP:显示备份集的备份片信息。
⚫ V$BACKUPSET_SEARCH_DIRS:显示备份集搜索目录。
⚫ V$BACKUPSET_TABLE:显示表备份集中备份表信息。
⚫ V$BACKUPSET_SUBS:显示并行备份中生成的子备份集信息。
备份目录管理
SF_BAKSET_BACKUP_DIR_ADD函数
添加备份目录
INT SF_BAKSET_BACKUP_DIR_ADD( device_type varchar, backup_dir varchar(256) )
参数说明: device_type:待添加的备份目录对应存储介质类型,DISK或者TAPE。目前,无论指定介质类型为DISK或者TAPE,都会同时搜索两种类型的备份集。
backup_dir:待添加的备份目录。返回值1目录添加成功;其它情况下报错。
例:
SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dm_bak');
执行结果 1
SF_BAKSET_BACKUP_DIR_REMOVE函数
删除备份目录
INT SF_BAKSET_BACKUP_DIR_REMOVE ( device_type varchar, backup_dir varchar(256) )
目录删除成功、目录不存在或者目录为空;0:目录为库默认备份路径;其他情况报错。
例:
SQL>SELECT SF_BAKSET_BACKUP_DIR_REMOVE('DISK','/home/dm_bak');
执行结果 1
SF_BAKSET_BACKUP_DIR_REMOVE_ALL函数
清理全部备份目录,默认备份目录除外
INT SF_BAKSET_BACKUP_DIR_REMOVE_ALL ()
目录全部清理成功;其它情况下报错。
例:
SQL>SELECT SF_BAKSET_BACKUP_DIR_REMOVE_ALL();
执行结果 1
3.3.4 数据还原
DM仅支持表的联机还原,数据库、表空间和归档日志的还原必须通过脱机工具DMRMAN 执行。DMDSC不支持指定目录还原数据库。
【表还原】
表空间还原只可以在脱机状态下执行。脱机时通过 DMRMAN 工具执行,对表空间状态没有限制。
表还原主要包括三部分内容:表结构还原、数据还原、以及重建索引和约束。
表还原只支持在联机状态下执行,表还原过程中也不需要重做REDO日志
表还原之后不需要恢复操作。DIsql中输入以下简单的RESTORE语句就可还原表:
SQL>RESTORE TABLE TAB_01 FROM BACKUPSET 'tab_bak_01';
RESTORE TABLE [<表名>][STRUCT]
[WITH INDEX | WITHOUT INDEX]
[WITH CONSTRAINT|WITHOUT CONSTRAINT]
FROM BACKUPSET'<备份集路径>' [DEVICE TYPE <介质类型> [PARMS '<介质参数>']]
[IDENTIFIED BY <密码>]
[ENCRYPT WITH <加密算法>]
[TRACE FILE '<TRACE文件名>'] [TRACE LEVEL <TRACE日志级别>];
注: 仅支持对普通用户表进行还原,包括堆表。其中,系统表、临时表、物化视图表、物 化 视 图 附 属 表和 日 志 表 、 特 定 模 式(INFORMATION_SCHEMA/ DBG_PKG /INFO_SCHEM/SYSREP/SYSGEO/SYSJOB/SYSCP
T/SYS)下的表不支持还原。
执行表还原,数据库必须处于OPEN状态,MOUNT和SUSPEND状态下不允许执行表还原。表还原不需要配置归档,因为表还原是联机完全备份还原,所以不需要借助本地归档日志进行恢复。完整的表备份还原步骤如下:
1) 保证数据库为OPEN状态。
2) 创建待备份的表。
SQL>CREATE TABLE TAB_FOR_RES_01(C1 INT);
3) 备份表数据。
SQL>BACKUP TABLE TAB_FOR_RES_01 BACKUPSET '/home/dm_bak/tab_bak_for_res_01';
4) 校验备份。此步骤为可选。
SQL>SELECT SF_BAKSET_CHECK('DISK','/home/dm_bak/tab_bak_for_res_01');
5) 还原表数据。
SQL>RESTORE TABLE TAB_FOR_RES FROM BACKUPSET '/home/dm_bak/tab_bak_for_res_01';