4.2.2 联机物理备份还原实战
在数据库处于运行状态并正常提供数据库服务的情况下进行的备份操作,称为联机备份。联机备份可以使用客户端工具连接到数据库实例后,通过执行SQL语句进行;也可以通过配置作业,定时完成自动备份。联机备份不影响数据库正常提供服务,是常用的备份手段之一。联机备份时,可能存在一些处于活动状态的事务正在执行,为确保备份数据的一致性,需要将备份期间产生的REDO日志一起备份。因此,只能在配置本地归档并开启本地归档的数据库上执行联机备份。联机还原是指数据库处于运行状态时,通过SQL语句执行还原操作。表还原可以在联机状态下执行。
4.2.2.1 数据库备份
对整个数据库执行的备份称为数据库备份,又称为库备份。库备份会复制数据库中所有数据文件的有效数据页,如果是联机备份,则还会复制备份过程中产生的归档日志,写入备份集中。接下来,我们学习在DISQL工具中使用SQL语句进行数据库备份的知识。
SQL备份语法如下:
几个主要的参数如下。
(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为单位,最小128 MB,32位系统最大2 GB,64位系统最大128 GB。
(11)COMPRESSED:取值范围为0~9。0级表示不压缩,压缩级别越高,压缩越慢。若没有指定压缩级别,但指定COMPRESSED,则默认为1;否则,默认为0。
(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均认为非并行备份。若未指定关键PARALLEL,则认为非并行备份。并行备份不支持存在介质为TAPE的备份。线程数(TASK THREAD)×并行数(PARALLEL)不得超过512。
示例1 完全备份:
示例2 增量备份:
4.2.2.2 表空间备份
针对特定表空间执行的备份称为表空间备份。表空间备份只能在联机状态下执行。在DISQL工具中使用BACKUP语句也可以备份单个表空间。与备份数据库一样,执行表空间备份的数据库实例也必须在归档模式下运行,启动DISQL,输入以下语句即可备份表空间。
联机备份表空间语法如下:
几个主要的参数如下。
(1)表空间名:指定备份的表空间名称(除了TEMP表空间)。
(2)FULL|INCREMENT:指定备份类型,FULL表示完全备份,INCREMENT表示增量备份。若不指定,默认为完全备份。
(3)CUMULATIVE:用于增量备份中,指明为累积增量备份类型,若不指定,则缺省为差异增量备份类型。
(4)WITH BACKUPDIR:用于增量备份中,指定备份目录,最大长度为256个字节。若不指定,自动在默认备份目录下搜索基备份。如果基备份不在默认的备份目录下,增量备份必须指定该参数。
(5)BASE ON:用于增量备份中,指定基备份集目录。
(6)TO:指定生成备份名称。若未指定,系统随机生成,默认备份名格式为DB_备份类型_表空间名_备份时间。其中,备份时间为开始备份的系统时间。
(7)BACKUPSET:指定当前备份集生成路径。若指定为相对路径,则在默认备份路径中生成备份集。若不指定,则在默认备份路径下以约定规则生成默认的表空间备份集目录。表空间备份默认备份集目录名生成规则为TS_表空间名_备份类型_时间,如TS_MAIN_INCREMENT_20180518_143057_123456,表明该备份集为2018年5月18日14时30分57秒123456毫秒时生成的表空间名为MAIN的表空间增量备份集。若表空间名称超长,上述完整名称长度大于128个字节,则去掉表空间名字段,调整为TS_备份类型_时间。
(8)DEVICE TYPE:指定存储备份集的介质类型,支持DISK和TAPE,默认介质类型为DISK。
(9)PARMS:只对介质类型TAPE有效。
(10)BACKUPINFO:指定备份的描述信息。最大长度不超过256个字节。
(11)MAXPIECESIZE:指定最大备份片文件大小上限,以MB为单位,最小32 MB,32位系统最大2 GB,64位系统最大128 GB。
(12)IDENTIFIED BY:指定备份时的加密密码。密码应用双引号,这样可避免一些特殊字符通不过语法检测。密码的设置规则遵行ini参数pwd_policy指定的口令策略。
(13)WITH ENCRYPTION:指定加密类型,0表示不加密,不对备份文件进行加密处理;1表示简单加密,对备份文件设置口令,但文件内容仍以明文方式存储;2表示完全数据加密,对备份文件进行完全加密,备份文件以密文方式存储。当不指定WITH ENCRYPTION子句时,采用简单加密。
(14)ENCRYPT WITH:指定加密算法。当不指定ENCRYPT WITH子句时,使用AES256_CFB加密算法。
(15)COMPRESSED:取值范围为0~9。0表示不压缩,1表示1级压缩,9表示9级压缩。压缩级别越高,压缩越慢,但压缩比越高。若未指定压缩级别,但指定COMPRESSED,则默认为1;否则,默认为0。
(16)TRACE FILE:指定生成的TRACE文件。启用TRACE,但不指定TRACE FILE时,默认在达梦数据库系统的log目录下生成DM_SBTTRACE_年月.LOG文件;若使用相对路径,则生成在执行码同级目录下。若用户指定,则指定的文件不能为已经存在的文件,否则报错;也不可以为ASM文件。
(17)TRACE LEVEL:有效值为1、2。值为1表示不启用TRACE,此时若指定了TRACE FILE,会生成TRACE文件,但不写入TRACE信息;值为2表示启用TRACE并写入TRACE相关内容。默认值为1。
(18)TASK THREAD:表示在数据库备份过程中,进行数据处理的线程的个数,取值范围为0~64,默认为4。若指定为0,则调整为1;若指定超过当前系统主机核数,则调整为主机核数。线程数(TASK THREAD)×并行数(PARALLEL)不得超过512。
(19)PARALLEL:指定并行备份的<并行数>和READ SIZE<拆分块大小>。
示例1 表空间完全备份:
示例2 表空间增量备份:
备份语句中指定的INCREMENT参数表示执行的备份类型为增量备份,不可省略。若要创建累积增量备份,还需要指定CUMULATIVE参数,否则缺省为差异增量备份。若基备份不在默认备份目录,则必须指定WITH BACKUPDIR参数,以用于搜索基备份集。
4.2.2.3 表备份与还原
1.表备份
表备份是指从BUFFER中读取表所有的数据页到备份集中,并记录表的元信息(建表语句、约束语句、索引语句)。表备份只能在联机状态下执行,一次表备份操作只能备份一张用户表,并且不支持增量表备份。表备份复制指定表使用的所有数据页到备份集中,并记录各个数据页之间的逻辑关系以恢复表数据结构。表备份是联机完全备份,与数据库、表空间备份不同,备份表不需要备份归档日志。备份表时不需要服务器配置归档,在DISQL工具中即可进行表的备份。
表备份的SQL语法如下:
语法选项和之前的并没有区别,这里不再描述。
示例1 备份dmhr用户下的city表:
2.表还原
表还原操作只能联机执行,即数据库必须处于OPEN状态才可以执行表还原操作。数据还原过程从表备份集复制数据页,重构数据页之间的逻辑关系,并重新形成一个完整的表对象。在数据还原过程结束后,使用备份集中记录的信息,重新在表上创建二级索引,并建立各种约束。表还原是联机完全备份还原,不需要借助本地归档日志,还原后不需要恢复。
表还原的SQL语法如下:
几个主要的参数如下。
(1)WITH/WITHOUT INDEX:指定还原数据后是否重建二级索引,默认重建。
(2)WITH/WITHOUT CONSTRAINT:指定还原数据后是否在目标表上重建约束,默认重建。约束和索引的状态和备份表的保持一致,即之前是无效或不可见的,在重建之后依旧保持无效或不可见。
(3)STRUCT:指定STRUCT则执行表结构还原。根据备份集中备份表还原要求,对目标表定义进行校验,并删除目标表中已存在的二级索引和约束。
这里要注意,如果不指定STRUCT关键字,则仅执行表数据还原,表数据还原默认仅会将备份表中聚集索引上数据还原,仅会在目标表定义与备份表一致且不存在二级索引或约束的情况下执行。所以大部分的表还原都需要先执行STRUCT,重建表,再执行实际数据的还原。
示例2 备份dmhr用户下的job表:
直接还原表,提示有二级索引或约束:
重构表并还原:
还原数据不重建索引:
还原数据不重建约束:
4.2.2.4 归档备份
联机SQL语句进行归档备份,备份语法如下:
几个主要的参数如下。
(1)ALL:表示备份所有的归档。
(2)FROM LSN/UNTIL LSN:指定备份的起始/截止的LSN。
(3)FROM TIME/UNTIL TIME:指定备份的开始/截止的时间点。
(4)BETWEEN...AND...:指定备份的区间。指定区间后,只会备份指定区间内的归档文件。
(5)DELETE INPUT:用于指定备份完成之后是否删除归档操作。
归档日志的有效LSN范围可以通过v $ arch_file查看:
备份特定的归档:
备份所有归档: