disql备份还原
前言
本文档根据官方文档,进行整理。
一、概述
在 disql 工具中使用 BACKUP 语句你可以备份整个数据库。通常情况下,在数据库实例配置归档后输入以下语句即可备份数据库:
BACKUP DATABASE BACKUPSET 'db_bak_01';
语句执行完后会在默认的备份路径下生成名为“db_bak_01”的备份集目录。默认的备份路径为 dm.ini 中 BAK_PATH
配置的路径,若未配置 BAK_PATH,则默认使用 SYSTEM_PATH 下的 bak 目录。这是最简单的数据库备份语句,如果要设置其他的备份选项需了解联机备份数据库的语法。
1、语法
BACKUP DATABASE[<备份类型>] [<指定备份集子句>] [TO <备份名>] [BACKUPSET '<备份集路径>'] [DEVICE TYPE <介质类型> [PARMS '<介质参数>']]
[BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>]
[LIMIT <read_limit>|<write_limit>]
[IDENTIFIED BY <密码>|"<密码>" [WITH ENCRYPTION <TYPE>][ENCRYPT WITH <加密算法>]]
[COMPRESSED [LEVEL <压缩级别>]] [WITHOUT LOG][WITHOUT MIRROR]
[TRACE FILE '<TRACE文件名>'] [TRACE LEVEL <TRACE日志级别>]
[TASK THREAD <线程数>][PARALLEL [<并行数>] [READ SIZE <拆分块大小>]];
<备份类型>::= FULL|
[FULL] DDL_CLONE|
[FULL] SHADOW|
INCREMENT <increment_statement>
<increment_statement>::= [FROM LSN <lsn>] | <inc_sub_statement>
<inc_sub_statement>::= [CUMULATIVE][<指定基备份子句>]
<指定基备份子句>::= BASE ON BACKUPSET '<基备份目录>'
<指定备份集子句>::= WITH BACKUPDIR ‘<备份集搜索路径>’{,‘<备份集搜索路径>’}
<read_limit>::= READ SPEED <读速度上限> [WRITE SPEED <写速度上限>]
<write_limit>::= WRITE SPEED <写速度上限>
参数说明:
参数 | 说明 |
---|---|
备份类型 | 1️⃣FULL :完全备份,完全备份生成的备份集包含了指定库(或者表空间)的全部有效数据页。2️⃣ DDL_CLONE :数据库克隆,该参数只能用于完全备份中,对于数据库中的表来说,只备份表的定义不备份表中数据。表空间和表备份不支持该参数,数据库克隆必须备份日志。3️⃣ SHADOW :影子备份,该参数只能用于完全备份中,表示生成影子备份集,只备份源库的 SYSTEM.DBF 及日志相关信息。表空间和表备份不支持该参数,影子备份必须备份日志。4️⃣ INCREMENT :增量备份 |
TO | 指定生成备份名称(管理工具中可以查看)。若未指定,系统随机生成,默认备份名格式为:DB_备份类型_备份时间。 |
BACKUPSET | 指定当前备份集目录。若指定为相对路径,例如 BACKUPSET ‘db_bak_01’,则在默认备份目录中生成备份集。若不指定(命令不写),则在默认备份目录中按约定规则,生成默认备份集目录。 SQL> backup database full; |
DEVICE TYPE | 指存储备份集的介质类型,支持 DISK 和 TAPE,默认 DISK |
PARMS | 只对介质类型为 TAPE 时有效 |
BACKUPINFO | 备份的描述信息。 |
MAXPIECESIZE | 最大备份片文件大小上限,以 MB 为单位,最小 128MB,32 位系统最大 2GB,64 位系统最大 128GB,缺省为最大取值。 |
LIMIT | 指定备份时最大的读写文件速度,单位为 MB/S,默认为 0,表示无速度限制。 |
READ SPEED | 备份时读速度上限,取值范围 0~2147483647,单位为 MB/S,0 表示无限制。 |
WRITE SPEED | 备份时写速度上限,取值范围 0~2147483647,单位为 MB/S,0 表示无限制。 |
IDENTIFIED BY | 指定备份时的加密密码 |
WITH ENCRYPTION | 指定加密类型,取值范围 0、1、2。0 表示不加密,不对备份文件进行加密处理; 1:默认值,表示简单加密,对备份文件设置口令,但文件内容仍以明文方式存储; 2:表示完全数据加密,对备份文件进行完全的加密,备份文件以密文方式存储。 当不指定 WITH ENCRYPTION 子句时,采用简单加密。 |
ENCRYPT WITH | 指定加密算法。当不指定 ENCRYPT WITH 子句时,使用 AES256_CFB 加密算法。 |
COMPRESSED | 是否对备份数据进行压缩处理。LEVEL 表示压缩等级,取值范围 0~9:0(默认值) 表示不压缩;1 表示 1 级压缩;9 表示 9 级压缩。压缩级别越高,压缩速度越慢,但压缩比越高。 若指定 COMPRESSED,但未指定 LEVEL,则压缩等级默认 1; 若未指定 COMPRESSED,则默认不进行压缩处理。 |
WITHOUT LOG | 联机数据库备份是否备份联机日志。如果使用,则表示不备份,否则表示备份。 |
WITHOUT MIRROR | 联机数据库备份是否备份镜像文件。如果使用,则表示不备份,否则表示备份。 |
TRACE LEVEL | 是否启用 TRACE。有效值 1、2,默认为 1 表示不启用 TRACE,此时若指定了 TRACE FILE,会生成 TRACE 文件,但不写入 TRACE 信息;为 2 启用 TRACE 并在 TRACE 文件中写入 TRACE 相关内容。 |
TRACE FILE | 指定生成的 TRACE 文件。启用 TRACE,但不指定 TRACE FILE 时,默认在 DM 数据库系统的 log 目录下生成 DM_SBTTRACE_年月.log 文件;若使用相对路径,则生成在执行码同级目录下;若用户指定 TRACE FILE,则指定的文件不能为已经存在的文件,否则报错。TRACE FILE 不可以为 ASM 文件。 |
TASK THREAD | 备份过程中数据处理过程线程的个数,取值范围 0~64,默认为 4。若指定为 0,则调整为 1;若指定超过当前系统主机核数,则调整为主机核数。线程数(TASK THREAD)*并行数(PARALLEL)不得超过 512。 |
PARALLEL | 指定**并行备份 的并行数和拆分块大小**。并行数取值范围 0~128。若不指定并行数,则默认为 4,若指定为 0 或者 1 均认为非并行备份。若未指定关键字 PARALLEL,则认为非并行备份。 |
FROM LSN | 用于增量备份中,指定备份的起始 LSN。起始 LSN 必须小于等于检查点 LSN,用户可以手动刷新检查点 LSN。仅支持库级增量备份。 |
CUMULATIVE | 用于增量备份中,指明为累积增量备份类型,若不指定则缺省为差异增量备份类型。 |
WITH BACKUPDIR | 用于增量备份中,指定基备份的搜索目录。若缺省,自动在以下路径中搜索:默认备份目录 (即 BAK_PATH 配置的路径,如果 BAK_PATH 没有配置,则使用 SYSTEM_PATH 配置的路径)、当前备份集目录 (即 BACKUPSET 指定的路径,例如 BACKUPSET ‘D:\ bakrman\db_bak’的路径)、当前备份集目录的上一级目录 (例如’D:\bakrman’)搜索基备份。如果基备份不在上述路径下,增量备份必须指定该参数。 |
BASE ON BACKUPSET | 用于增量备份中,指定基备份集路径。 |
注意
增量备份时,DM不会在默认备份目录或当前备份目录的子目录中搜索基备份集,因此若基备份集在默认备份目录或当前备份目录的子目录中,则需要指定基备份的搜索目录或直接指定基备份集路径,否则将无法搜索到相应的基备份集,备份操作将会失败。
2、常用的备份命令
2.1 设置联机备份路径(BACKUPSET
)
- 指定备份集路径为“/dmdata/dmbak/db_bak_3_01”
BACKUP DATABASE BACKUPSET '/dmdata/dmbak/db_bak_3_01';
2.2 设置备份名(TO
)
- 创建备份集,备份名设置为“FULLBAK01”,备份路径为
what
BACKUP DATABASE TO FULLBAK01 BACKUPSET 'what'
备份集名称为FULLBAK01 ,保存路径是/dmdata/dmbak/what
2.3 添加备份描述(BACKUPINFO
)
- 创建备份为备份集添加描述信息为“测试备份”
BACKUP DATABASE BACKUPINFO '测试备份';
2.4 限制备份片大小(MAXPIECESIZE
)
- 创建备份限制备份片大小为 300MB
BACKUP DATABASE BACKUPSET '/dmdata/dmbak/db_bak_3_05' MAXPIECESIZE 300;
2.5 备份压缩(COMPRESSED LEVEL
)
- 执行备份压缩,压缩级别设置为 5
BACKUP DATABASE BACKUPSET '/dmdata/dmbak/db_bak_3_06' COMPRESSED LEVEL 5;
2.6 并行备份(PARALLEL
)
- 创建并行备份,指定并行数为 8
BACKUP DATABASE BACKUPSET '/dmdata/dmbak/db_bak_3_07' PARALLEL 8;
二、数据备份
1、数据库备份
执行数据库备份,数据库必须处于 OPEN 状态,MOUNT 和 SUSPEND 状态下不允许执行数据库备份。,除此之外,还要运行在归档模式
1.1 完全备份
完全备份数据库步骤如下:
- 配置归档;
- 保证数据库处于 OPEN 状态;
- DIsql 中输入备份数据库语句,最简单的不设置其他参数的完全备份语句如下:
BACKUP DATABASE FULL BACKUPSET '/dmdata/dmbak/db_full_bak_01';
备份语句中的参数
FULL
可以省略,不指定备份类型会默认指定备份类型为完全备份。
1.2 增量备份
增量备份指基于指定的库(或者表空间)的某个备份(完全备份或者增量备份),备份自该备份以来所有发生修改的数据页。
增量备份数据库步骤如下:
-
配置归档;
-
保证数据库处于 OPEN 状态;
-
disql 中输入备份数据库语句
1.2.1 差异增量备份
- 最简单的不设置其他参数的增量备份语句如下:
BACKUP DATABASE INCREMENT WITH BACKUPDIR '/dmdata/dmbak' BACKUPSET '/dmdata/dmbak/db_increment_bak_02';
- 指定基备份集路径
/dmdata/dmbak/DB_DAMENG_FULL_20240210_163606_932454
BACKUP DATABASE INCREMENT BASE ON BACKUPSET '/dmdata/dmbak/DB_DAMENG_FULL_20240210_163606_932454' BACKUPSET '/dmdata/dmbak/INC';
以
/dmdata/dmbak/DB_DAMENG_FULL_20240210_163606_932454
这个备份集作为基备份集
- 指定基备份扫描路径
/dmdata/dmbak
BACKUP DATABASE INCREMENT WITH BACKUPDIR '/dmdata/dmbak' BACKUPSET 'DB_DAMENG_INCRE_2024_02_10_16_52_32';
扫描目录
'/dmdata/dmbak'
,找到其中最新的备份集,将其作为基备份集。
WITH BACKUPDIR
参数用来指定基备份集的搜索目录
1.2.2 累积增量备份
BACKUP DATABASE INCREMENT CUMULATIVE;
2、表空间备份
在 disql 工具中使用 BACKUP 语句也可以备份单个表空间。同备份数据库一样,执行表空间备份数据库实例也必须运行在归档模式下
2.1 语法
BACKUP TABLESPACE <表空间名> [FULL | INCREMENT <increment_statement>] [<指定备份集子句>] [TO <备份名>] [BACKUPSET '<备份集路径>'][DEVICE TYPE <介质类型> [PARMS '<介质参数>']]
[BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>]
[LIMIT <read_limit>|<write_limit>]
[IDENTIFIED BY <密码>|"<密码>" [WITH ENCRYPTION<TYPE>][ENCRYPT WITH <加密算法>]] [COMPRESSED [LEVEL <压缩级别>]][WITHOUT LOG][WITHOUT MIRROR]
[TRACE FILE '<TRACE文件名>'] [TRACE LEVEL <TRACE日志级别>]
[TASK THREAD <线程数>][PARALLEL [<并行数>][READ SIZE <拆分块大小>]];
<inc_sub_statement>::= 参考3.2.2.1.1概述
<read_limit>::= READ SPEED <读速度上限> [WRITE SPEED <写速度上限>]
<write_limit>::= WRITE SPEED <写速度上限>
2.2 完全备份
- 备份
MAIN
表空间
BACKUP TABLESPACE MAIN BACKUPSET 'ts_bak_01';
2.3 增量备份
下面以增量备份用户 MAIN 表空间为例
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';
上述示例中,增量备份 ts_increment_bak_02 若不指定备份集 ts_full_bak_01 作为基备份,那么默认会使用最近一次的备份集 ts_increment_bak_01 作为基备份。
3、表备份
与备份数据库与表空间不同,备份表不需要服务器配置归档。
3.1 语法
BACKUP TABLE <表名> [TO <备份名>] [BACKUPSET '<备份集路径>']
[DEVICE TYPE <介质类型> [PARMS '<介质参数>']] [BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>] [LIMIT <read_limit>|<write_limit>]
[IDENTIFIED BY <密码>|"<密码>" [WITH ENCRYPTION <TYPE>][ENCRYPT WITH <加密算法>]]
[COMPRESSED [LEVEL <压缩级别>]]
[TRACE FILE '<TRACE文件名>'] [TRACE LEVEL <TRACE日志级别>];
<read_limit>::= READ SPEED <读速度上限> [WRITE SPEED <写速度上限>]
<write_limit>::= WRITE SPEED <写速度上限>
使用说明:
- 仅支持对用户的
非分区的行存储表
和堆表
进行备份,不支持对分区表的备份。在非分区表中,也不支持对临时表、物化视图表、物化视图附属表、日志表和特定模式(DBG_PKG/INFORMATION_SCHEMA/INFO_SCHEM/SYSREP/SYSGEO/SYSJOB/SYSCPT/SYS)下的表进行表备份。- 表的**
列类型为对象类型
的表不支持表备份**。- 表备份不备份表上的注释以及 default 表达式中的函数定义,因此还原时需用户自行确认。
- 不支持在加密库上进行表备份与还原。
- 当备份数据超过限制大小时,会生成新的备份文件,新的备份文件名是初始文件名后加文件编号。
- 表备份时,其所属表空间必须处于联机状态。
- 目前表备份不支持备份到 TAPE 介质上。
3.2 完整备份步骤
- 保证数据库处于 OPEN 状态;
- 创建待备份的表 TAB_01:
CREATE TABLE TAB_01(C1 INT);
- disql 中输入备份表语句,简单的备份语句如下:
BACKUP TABLE TAB_01 BACKUPSET '/dmdata/dmbak/tab_bak_01';
4、归档备份
4.1 归档备份前提
-
归档文件的 db_magic、permanent_magic 值和库的 db_magic、permanent_magic 值必须一样;
-
服务器必须配置归档;
-
归档日志必须连续,如果出现不连续的情况,前面的连续部分会忽略,仅备份最新的连续部分。如果备份时未收集到指定范围内的归档,则直接报错。联机备份的时候经常会切换归档文件,最后一个归档总是空的,所以最后一个归档不会被备份。
4.2 语法
BACKUP <ARCHIVE LOG |ARCHIVELOG> [ALL | [FROM LSN <lsn>]| [UNTIL LSN <lsn>]|
[LSN BETWEEN <lsn> AND <lsn>] | [FROM TIME '<time>']|[UNTIL TIME '<time>']|
[TIME BETWEEN'<time>'> AND '<time>']][<notBackedUpSpec>][<指定备份集子句>][DELETE INPUT]
[TO <备份名>][<备份集子句>];
<备份集子句>::=BACKUPSET ['<备份集路径>'][DEVICE TYPE <介质类型> [PARMS '<介质参数>']]
[BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>]
[LIMIT <read_limit>|<write_limit>]
[IDENTIFIED BY <密码>|"<密码>" [WITH ENCRYPTION <TYPE>][ENCRYPT WITH <加密算法>]]
[COMPRESSED [LEVEL <压缩级别>]] [WITHOUT LOG]
[TRACE FILE '<TRACE文件名>'] [TRACE LEVEL <TRACE日志级别>]
[TASK THREAD <线程数>][PARALLEL [<并行数>][READ SIZE <拆分块大小>]]
<notBackedUpSpec>::=NOT BACKED UP [<num> TIMES]|[SINCE TIME '<datetime_string>']
<read_limit>::= READ SPEED <读速度上限> [WRITE SPEED <写速度上限>]
<write_limit>::= WRITE SPEED <写速度上限>
参数说明:
参数 | 说明 |
---|---|
ALL | 备份所有的归档。若不指定,则默认为 ALL。 |
FROM LSN | 指定备份的起始 lsn。 |
UNTIL LSN | 指定备份的截止 lsn。 |
FROM TIME | 指定备份的开始的时间点。 |
UNTIL TIME | 指定备份的截止的时间点。 |
BETWEEN … AND … | 指定备份的区间。指定区间后,只会备份指定区间内的归档文件。 |
DELETE INPUT | 用于指定备份完成之后,是否删除归档操作。 |
BACKUPSET | 指定当前备份集目录。若指定为相对路径,例如 BACKUPSET ‘db_bak_01’,则在默认备份目录中生成备份集。若不指定(命令不写),则在默认备份目录中按约定规则,生成默认备份集目录。 SQL> backup database full; |
DEVICE TYPE | 指存储备份集的介质类型,支持 DISK 和 TAPE,默认 DISK |
PARMS | 只对介质类型为 TAPE 时有效 |
BACKUPINFO | 备份的描述信息。 |
MAXPIECESIZE | 最大备份片文件大小上限,以 MB 为单位,最小 128MB,32 位系统最大 2GB,64 位系统最大 128GB,缺省为最大取值。 |
LIMIT | 指定备份时最大的读写文件速度,单位为 MB/S,默认为 0,表示无速度限制。 |
IDENTIFIED BY | 指定备份时的加密密码 |
WITH ENCRYPTION | 指定加密类型,取值范围 0、1、2。0 表示不加密,不对备份文件进行加密处理; 1:默认值,表示简单加密,对备份文件设置口令,但文件内容仍以明文方式存储; 2:表示完全数据加密,对备份文件进行完全的加密,备份文件以密文方式存储。 当不指定 WITH ENCRYPTION 子句时,采用简单加密。 |
ENCRYPT WITH | 指定加密算法。当不指定 ENCRYPT WITH 子句时,使用 AES256_CFB 加密算法。 |
COMPRESSED | 是否对备份数据进行压缩处理。LEVEL 表示压缩等级,取值范围 0~9:0(默认值) 表示不压缩;1 表示 1 级压缩;9 表示 9 级压缩。压缩级别越高,压缩速度越慢,但压缩比越高。 若指定 COMPRESSED,但未指定 LEVEL,则压缩等级默认 1; 若未指定 COMPRESSED,则默认不进行压缩处理。 |
WITHOUT LOG | 联机数据库备份是否备份联机日志。如果使用,则表示不备份,否则表示备份。 |
TRACE LEVEL | 是否启用 TRACE。有效值 1、2,默认为 1 表示不启用 TRACE,此时若指定了 TRACE FILE,会生成 TRACE 文件,但不写入 TRACE 信息;为 2 启用 TRACE 并在 TRACE 文件中写入 TRACE 相关内容。 |
TRACE FILE | 指定生成的 TRACE 文件。启用 TRACE,但不指定 TRACE FILE 时,默认在 DM 数据库系统的 log 目录下生成 DM_SBTTRACE_年月.log 文件;若使用相对路径,则生成在执行码同级目录下;若用户指定 TRACE FILE,则指定的文件不能为已经存在的文件,否则报错。TRACE FILE 不可以为 ASM 文件。 |
TASK THREAD | 备份过程中数据处理过程线程的个数,取值范围 0~64,默认为 4。若指定为 0,则调整为 1;若指定超过当前系统主机核数,则调整为主机核数。线程数(TASK THREAD)*并行数(PARALLEL)不得超过 512。 |
PARALLEL | 指定**并行备份 的并行数和拆分块大小**。并行数取值范围 0~128。若不指定并行数,则默认为 4,若指定为 0 或者 1 均认为非并行备份。若未指定关键字 PARALLEL,则认为非并行备份。 |
READ SPEED | 备份时读速度上限,取值范围 0~2147483647,单位为 MB/S,0 表示无限制。 |
WRITE SPEED | 备份时写速度上限,取值范围 0~2147483647,单位为 MB/S,0 表示无限制。 |
4.3 备份步骤
- 配置归档;
- 保证数据库处于 OPEN 或者 MOUNT 状态;
- DIsql 中输入备份数据库语句。
如何通过 LSN BETWEEN … AND …来指定起始和截至 LSN
- 首先,确定 LSN 范围
select ARCH_LSN, CLSN, PATH from V$ARCH_FILE;
ARCH_LSN CLSN PATH
----------- ---------- ------------------------------------------------------------------
314973 315394 /dmdata/arch/ARCHIVE_LOCAL1_0x2DFFFDD8_EP0_2024-02-10_21-50-01.log
315395 315713 /dmdata/arch/ARCHIVE_LOCAL1_0x2DFFFDD8_EP0_2024-02-10_21-57-56.log
……
//通过查询结果选出备份的起始LSN和截至LSN。比如315395 315713
- 备份归档
BACKUP ARCHIVELOG LSN BETWEEN 315395 AND 315713 BACKUPSET '/dmdata/dmbak/arch_bak_time_14-78';
三、数据备份高级
DM 的数据库、表空间、表备份和归档备份**均支持创建加密备份和备份时设置跟踪日志文件**,本节仅以数据库备份为例说明这两种类型备份的创建。
1、加密备份
备份语句中通过指定 IDENTIFIED BY…WITH ENCRYPTION…ENCRYPT WITH…执行加密备份。其中,IDENTIFIED BY 子句指定加密密码,密码长度为 9 到 48 个字节,若密码长度不符合要求会报错;
WITH ENCRYPTION 子句指定加密类型,加密类型分为简单加密和复杂加密,简单加密
是对备份文件设置口令,但文件内容仍以明文存储,复杂加密
则对备份文件进行完全的加密,备份文件以密文方式存储,用户可根据备份数据的重要程度选择加密类型;ENCRYPT WITH 子句指定加密算法,默认使用的加密算法为 AES256_CFB。
加密备份过程中 IDENTIFIED BY 子句必须指定,子句 WITH ENCRYPTION 和子句 ENCRYPT WITH 可不指定,此时 WITH ENCRYPTION 默认值为 1,ENCRYPT WITH 默认值为 AES256_CFB。
- 简单加密
BACKUP DATABASE BACKUPSET '/dmdata/dmbak/db_bak_for_encrypt' IDENTIFIED BY "cdb546789";
BACKUP DATABASE BACKUPSET '/dmdata/dmbak/db_bak_for_encrypt' IDENTIFIED BY "cdb546789" ENCRYPT WITH RC4;
- 复杂加密
BACKUP DATABASE BACKUPSET '/dmdata/dmbak/db_bak_for_encrypt' IDENTIFIED BY "cdb546789" WITH ENCRYPTION 2;
BACKUP DATABASE BACKUPSET '/dmdata/dmbak/db_bak_for_encrypt' IDENTIFIED BY "cdb546789" WITH ENCRYPTION 2 ENCRYPT WITH RC4;
- 若指定了加密密码,但加密类型 WITH ENCRYPTION 指定为 0,则为非加密备份
BACKUP DATABASE BACKUPSET '/dmdata/dmbak/db_bak_for_encrypt' IDENTIFIED BY "cdb546789" WITH ENCRYPTION 0;
注意:
- 对于增量备份加密,如果基备份存在加密,则增量备份使用的加密密码、加密类型和加密算法必须与基备份保持一致;
- 如果基备份未进行加密处理,则对增量备份使用的加密密码、加密类型和加密算法没有特殊要求。
2、设置跟踪日志文件
DM 备份时支持设置 SBT 接口跟踪日志文件,日志记录了 SBT 接口的调用过程,用户通过查看日志可跟踪备份还原过程。
与生成跟踪日志文件相关的参数有两个:TRACE FILE 和 TRACE LEVEL。 TRACE FILE 用于指定生成的跟踪日志文件路径,TRACE LEVEL 表示是否启用 TRACE。TRACE LEVEL
有效值包括 1 和 2。1 表示不启用 TRACE 功能,2 表示启用,系统默认值为 1。
2.1 指定TRACE FILE
TRACE LEVEL = 1
(默认值)
-- 下面两个语句等价,1.log日志内容为空,保存在$DM_HOME/bin/1.log
backup database trace file '1.log';
backup database trace file '1.log' trace level 1;
指定参数 TRACE FILE 但 TRACE LEVEL 值设置为 1 即不启用 TRACE 功能,则会生成 TRACE 文件,但不会写入 TRACE 信息。
TRACE LEVEL = 2
backup database trace file '2.log' trace level 2; -- 2.log日志内容不为空,保存在$DM_HOME/bin/2.log
backup database trace file '/dmdata/3.log' trace level 2; -- 3.log日志内容不为空,保存在/dmdata/3.log
注意:
- 若 TRACE FILE 使用相对路径,日志文件生成在执行码同级目录下**
$DM_HOME/bin
**。- 若 TRACE FILE 使用绝对路径,日志文件生成在指定的绝对路径。
- 如果指定的 TRACE 文件已存在,则报错。
2.2 不指定TRACE FILE
TRACE LEVEL = 2
backup database trace level 2; -- 在$DM_HOME/log路径下生成.log文件
TRACE LEVEL 值设置为 2 即启用 TRACE 功能,但若 TRACE FILE 没有指定,则系统默认在执行码路径的 log 目录
$DM_HOME/log
生成DM_SBTTRACE_年月.log
文件。
四、管理备份
1、备份管理相关系统过程与函数总结
1.1 函数
函数 | 说明 |
---|---|
SF_BAKSET_BACKUP_DIR_ADD | 添加备份目录 |
SF_BAKSET_BACKUP_DIR_REMOVE | 删除内存中指定的备份目录 |
SF_BAKSET_BACKUP_DIR_REMOVE_ALL | 删除内存中全部的备份目录 |
SF_BAKSET_CHECK | 对备份集进行校验 |
SF_BAKSET_REMOVE | 删除指定设备类型和指定备份集目录的备份集 |
SF_BAKSET_REMOVE_BATCH | 批量删除满足指定条件的所有备份集 |
SF_BAKSET_REMOVE_BATCH_S | 批量安全删除满足指定条件的所有库级备份集 |
SF_BAKSET_REMOVE_BATCH_N | 批量删除满足指定条件的所有备份集,并保留用户指定个数的库级完全备份集 |
1.2 过程
存储过程 | 说明 |
---|---|
SP_DB_BAKSET_REMOVE_BATCH | 批量删除指定时间之前的数据库备份集 |
SP_TS_BAKSET_REMOVE_BATCH | 批量删除指定表空间对象及指定时间之前的表空间备份集 |
SP_TAB_BAKSET_REMOVE_BATCH | 批量删除指定表对象及指定时间之前的表备份集 |
SP_ARCH_BAKSET_REMOVE_BATCH | 批量删除指定条件的归档备份集 |
注意:
上面函数存储过程的使用说明,内容太多,参考官方文档。
2、备份管理相关动态视图总结
视图 | 说明 |
---|---|
V$BACKUPSET | 显示备份集基本信息 |
V$BACKUPSET_DBINFO | 显示备份集的数据库相关信息 |
V$BACKUPSET_DBF | 显示备份集中数据文件的相关信息 |
V$BACKUPSET_ARCH | 显示备份集的归档信息 |
V$BACKUPSET_BKP | 显示备份集的备份片信息 |
V$BACKUPSET_SEARCH_DIRS | 显示备份集搜索目录 |
V$BACKUPSET_TABLE | 显示表备份集中备份表信息 |
V$BACKUPSET_SUBS | 显示并行备份中生成的子备份集信息 |
V$BACKUP_MONITOR | 显示当前备份任务实时监控信息 |
V$BACKUP_HISTORY | 显示最近 100 条备份监控信息 |
V$BACKUP_FILES | 显示当前备份任务待备份数据文件列表 |
五、数据还原
DM 仅支持表的联机还原,数据库、表空间和归档日志的还原必须通过脱机工具 DMRMAN 执行。
1、表还原
表还原之后不需要恢复操作。
1.1 语法
RESTORE TABLE [<表名>] [STRUCT] [KEEP TRXID]
FROM BACKUPSET'<备份集路径>' [DEVICE TYPE <介质类型> [PARMS '<介质参数>']]
[IDENTIFIED BY <密码>|"<密码>" [ENCRYPT WITH <加密算法>]]
[TRACE FILE '<TRACE文件名>'] [TRACE LEVEL <TRACE日志级别>];
参数 | 说明 |
---|---|
表名 | 可选参数,指定需要还原的表名称。 指定表名:还原时数据库中必须存在该表,否则报错,不会从备份集判断是否存在目标表。 不指定表名:则使用备份集中记录的备份表作为还原目标表。 |
STRUCT | 执行表结构还原,若未指定,则认为是表中数据还原;表数据还原要求还原目标表结构与备份集中完全一致,否则报错,所以表结构还原可以在表数据还原之前执行,减少报错。 |
KEEP TRXID | 指定还原后数据页上记录的 TRXID 保持不变,若发现备份时系统最大的 TRXID 大于等于当前系统的最大 TRXID,则将当前系统最大事务 ID+1000。调整后副作用:rec_id >= next_trxid 的记录,或者 rec_id <= bak_max_trxid + 1000 的记录,可能因为执行了表还原,导致查询结果不正确,原本不可见的数据,变得可见了。 |
…… | …… |
1.2 还原限制
-
仅支持对普通用户表进行还原,包括堆表。其中,系统表、临时表、物化视图表、物化视图附属表、日志表以及特定模式(DBG_PKG/INFORMATION_SCHEMA/INFO_SCHEM/SYSREP/SYSGEO/SYSJOB/SYSCPT/SYS)下的表不支持还原。
-
列类型为对象类型的表不支持表还原。
-
若还原表中存在位图连接索引和位图连接虚索引则不支持还原。
-
若为加密库,表还原时要求源库与目标库加密算法一致。
-
备份集路径指备份集所在目录,其中应包含完整备份数据,包括元数据文件(.meta)和备份片文件(.bak)。仅支持从表备份集中还原表。
-
表名设置为可选参数。若指定,则数据库中必须存在该表且表定义必须与备份表严格一致;若不指定,则使用备份集中记录的备份表作为还原目标表。
-
还原时若不指定目标表,则表还原操作需要 DBA 权限;若指定目标表,则目标表的创建者可以进行表还原操作。
-
目标表所在的表空间必须处于联机状态。
-
数据守护环境下,主库允许表备份还原,备库不允许。
-
MOUNT 和 SUSPEND 状态下不允许进行表还原,必须处于OPEN状态。
-
MPP 环境不允许进行表还原。
-
若在语句中指定 STRUCT 关键字,则执行表结构还原。表结构还原会根据备份集中备份表还原要求,对目标表定义进行校验,并删除目标表中已存在的二级索引和约束。
-
若不指定 STRUCT 关键字,则执行表数据还原,表数据还原默认仅会将备份表中聚集索引上的数据进行还原。表数据还原默认仅会在目标表定义与备份表一致且不存在二级索引和约束的情况下执行。
-
若在未指定 STRUCT 的情况下,执行还原出现存在二级索引或冗余约束的错误,或在不指定目标表的情况下,报目标不存在的错误,可先执行 STRUCT 还原后,再继续执行实际数据的还原。
-
若用户指定 TRACE FILE,则指定的文件不能为已经存在的文件,否则报错;也不可以为 ASM 文件。
-
若表中存在大字段列,且表备份时 INI 参数 BLOB_OUTROW_REC_STOR 大于 0,但建立还原目标表时 INI 参数 BLOB_OUTROW_REC_STOR 等于 0,那么若大字段列存在行外数据,则在执行表还原时会报错,且表数据会丢失。
-
表还原不检查目标表的缺省表达式(default 值)。
-
若表列进行了加密,则表还原时不能跨库或跨表还原,只能还原到自身。
1.3. 不包含索引或约束的还原步骤
- 保证数据库为 OPEN 状态;
- 创建待备份的表
CREATE TABLE TAB_FOR_RES_01(C1 INT);
- 备份表数据
BACKUP TABLE TAB_FOR_RES_01 BACKUPSET '/dmdata/dmbak/tab_bak_for_res_01';
- 校验备份,此步骤为可选
SELECT SF_BAKSET_CHECK('DISK','/dmdata/dmbak/tab_bak_for_res_01');
- 还原表数据
RESTORE TABLE TAB_FOR_RES_01 FROM BACKUPSET '/dmdata/dmbak/tab_bak_for_res_01';
1.4 包含索引或约束的还原步骤
- 保证数据库为 OPEN 状态;
- 创建待备份的表
CREATE TABLE TAB_FOR_RES_02(C1 INT);
- 创建索引
CREATE INDEX I_TAB_FOR_RES_02 ON TAB_FOR_RES_02(C1);
- 备份表
BACKUP TABLE TAB_FOR_RES_02 BACKUPSET '/dmdata/dmbak/tab_bak_for_res_02';
- 校验备份,此步骤为可选
SELECT SF_BAKSET_CHECK('DISK','/dmdata/dmbak/tab_bak_for_res_02');
- 执行表结构还原,表备份和目标表中都包含索引,如果直接执行表数据还原会报错:还原表中存在二级索引或冗余约束
RESTORE TABLE TAB_FOR_RES_02 STRUCT FROM BACKUPSET '/dmdata/dmbak/tab_bak_for_res_02';
- 执行表数据还原
RESTORE TABLE TAB_FOR_RES_02 FROM BACKUPSET '/dmdata/dmbak/tab_bak_for_res_02';
1.5 指定还原时不重建索引
表备份时会默认备份表中的索引,还原时使用 RESTORE TABLE...WITHOUT INDEX...
语句可选择不还原索引
- 建表跟索引
CREATE TABLE TAB_FOR_IDX_01(C1 INT);
CREATE INDEX I_TAB_FOR_IDX_01 ON TAB_FOR_IDX_01 (C1);
-
备份(略)
-
还原,但不重建索引
RESTORE TABLE TAB_FOR_RES WITHOUT INDEX FROM BACKUPSET '/dmdata/dmbak/tab_bak_for_res_01';
1.6 指定还原时不重建约束
表备份时会默认备份表中的索引定义,还原时使用 RESTORE TABLE...WITHOUT CONSTRAINT...
语句可选择还原时不重建约束
- 建表跟索引
CREATE TABLE TAB_FOR_CONS_01(C1 INT);
CREATE INDEX I_TAB_FOR_CONS_01 ON TAB_FOR_CONS_01 (C1);
-
备份(略)
-
还原,但不重建约束
RESTORE TABLE TAB_FOR_RES WITHOUT CONSTRAINT FROM BACKUPSET '/dmdata/dmbak/tab_bak_for_res_01';
达梦社区:https://eco.dameng.com