数据库备份是 DBA日常最重要的工作内容。备份的主要目的是数据容灾,保证数据的安全性,在数据库发生故障时,通过还原备份集,将数据恢复到可用状态。
物理备份是找出那些已经分配、使用的数据页,拷贝并保存到备份集中。物理还原是物理备份的逆过程,物理还原一般通过 DMRMAN 工具(或者 SQL 语句),把备份集中的数据内容(数据文件、数据页、归档文件)重新拷贝、写入目标文件。
1.2 备份与还原关系
- 联机备份还原:联机备份还原指数据库处于运行状态时,并正常提供数据库服务情况下进行的备份还原操作,称为联机备份还原。
- 脱机备份还原:脱机还原指数据库处于关闭状态时执行的还原操作。库备份、表空间备份和归档备份,可以执行脱机还原。脱机还原操作的目标库必须处于关闭状态。
- 备份集:备份集用来存放备份过程中产生的备份数据及备份信息。一个备份集对应了一次完整的备份。一般情况下,一个备份集就是一个目录,备份集包含一个或多个备份片文件,以及一个备份元数据文件。
适用于所有技术人员,数据库爱好者,数据库初学者。
2.1 DM8备份说明
DM 数据库的备份还原包括两种类型:物理备份还原和逻辑备份还原。物理备份还原是对数据库的操作系统物理文件(如数据文件、控制文件和日志文件等)的备份还原。例如使用 RMAN 工具进行的备份还原。物理备份还原请参考《DM8 备份与还原》。
逻辑备份还原是对数据库逻辑组件(如表、视图和存储过程等数据库对象)的备份还原。例如使用 dexp 和 dimp 进行的备份还原。逻辑备份还原正是本书所要介绍的内容。
逻辑导出(dexp)和逻辑导入(dimp)是 DM 数据库的两个命令行工具,分别用来实现对 DM 数据库的逻辑备份和逻辑还原。逻辑备份和逻辑还原都是在联机方式下完成,联机方式是指数据库服务器正常运行过程中进行的备份和还原 dexp 和 dimp 是 DM 数据库自带的工具,只要安装了 DM 数据库,就可以在安装目录 $DM_HOME/bin 中找到。
逻辑导出和逻辑导入数据库对象分为四种级别:数据库级、用户级、模式级和表级。四种级别独立互斥,不能同时存在。四种级别所提供的功能:
数据库级(FULL):导出或导入整个数据库中的所有对象。
用户级(OWNER):导出或导入一个或多个用户所拥有的所有对象。
模式级(SCHEMAS):导出或导入一个或多个模式下的所有对象。
表级(TABLES):导出或导入一个或多个指定的表或表分区。
参数 | 含义 | 备注 |
USERID | 数据库的连接信息 | 必选 |
FILE | 明确指定导出文件名称 | 可选。如果缺省该参数,则导出文件名为dexp.dmp |
DIRECTORY | 导出文件所在目录 | 可选 |
FULL | 导出整个数据库(N) | 可选,四者中选其一。缺省为SCHEMAS |
OWNER | 用户名列表,导出一个或多个用户所拥有的所有对象 | |
SCHEMAS | 模式列表,导出一个或多个模式下的所有对象 | |
TABLES | 表名列表,导出一个或多个指定的表或表分区 | |
FUZZY_MATCH | TABLES选项是否支持模糊匹配(N) | 可选 |
QUERY | 用于指定对导出表的数据进行过滤的条件。 | 可选 |
PARALLEL | 用于指定导出的过程中所使用的线程数目 | 可选 |
TABLE_PARALLEL | 用于指定导出每张表所使用的线程数,在MPP模式下会转换成单线程 | 可选 |
TABLE_POOL | 用于设置导出过程中存储表的缓冲区个数 | 可选 |
EXCLUDE | 批量设置导出内容中忽略的对象。 | 可选 |
2. EXCLUDE=TYPE:name1,name2 | ||
3. EXCLUDE=TYPE:cond{,TYPE:cond} | ||
INCLUDE | 批量设置导出时只导出指定的对象种类或某个具体对象。 | 可选 |
2. INCLUDE=TYPE:name1,name2 | ||
3. INCLUDE=TYPE:cond{,TYPE:cond} | ||
CONSTRAINTS | 导出约束 (Y) | 可选 |
TABLESPACE | 导出的对象定义是否包含表空间(N) | 此处单独设置与和EXCLUDE/INCLUDE中批量设置功能一样。设置一个即可 |
GRANTS | 导出权限 (Y) | |
INDEXES | 导出索引 (Y) | |
TRIGGERS | 导出触发器(Y) | |
ROWS | 导出数据行 (Y) | |
LOG | 明确指定日志文件名称 | 可选,如果缺省该参数,则导出文件名为dexp.log |
NOLOGFILE | 不使用日志文件(N) | 可选 |
NOLOG | 屏幕上不显示日志信息(N) | 可选 |
LOG_WRITE | 日志信息实时写入文件 (N) | 可选 |
DUMMY | 交互信息处理: 打印(P), 所有交互都按YES处理(Y),NO(N)。默认为NO,不打印交互信息。 | 可选 |
PARFILE | 参数文件名,如果dexp的参数很多,可以存成参数文件 | 可选 |
FEEDBACK | 每 x 行显示进度 (0) | 可选 |
COMPRESS | 是否压缩导出数据文件(N) | 可选 |
COMPRESS_LEVEL | 导出数据压缩等级(0-9 默认1) | 可选 |
ENCRYPT | 导出数据是否加密 (N) | 可选, |
ENCRYPT_PASSWORD | 导出数据的加密密钥 | 和ENCRYPT同时使用 |
ENCRYPT_NAME | 导出数据的加密算法 | 可选。 |
和ENCRYPT、ENCRYPT_PASSWORD同时使用。缺省为RC4 | ||
FILESIZE | 用于指定单个导出文件大小的上限。可以按字节[B]、K[B]、M[B]、G[B]的方式指定大小 | 可选 |
FILENUM | 多文件导出时,一个模板可以生成文件数,范围为[1,99],缺省为99 | 可选 |
DROP | 导出后删除原表,但不级联删除 (N) | 可选 |
DESCRIBE | 导出数据文件的描述信息,记录在数据文件中 | 可选 |
FLASHBACK_SCN | 用于指定导出表数据的闪回LSN,和FLASHBACK_TIME一起使用时只有一个能生效,参数位置靠后的生效 | 可选 |
FLASHBACK_TIME | 用于指定导出表数据的闪回时间,和FLASHBACK_SCN一起使用时只有一个能生效,参数位置靠后的生效 | 可选 |
COL_DEFAULT_SEPARATE | 是否单独导出列,缺省值 (Y) | 可选 |
WITH_UR | 导出表数据是否允许脏读(N) | 可选 |
SIMPLE_LOG | 导出日志是否使用简要日志(N) | 可选 |
CTRL_INFO | 控制信息用来控制一些特殊情况导出,缺省为0 | 可选 |
CONFIG_FILE | 配置文件路径,配置默认连接串和密码信息 | 可选 |
HELP | 显示帮助信息 | 可选 |
注意
每个参数含义后面的括号内为(N)则表示该参数缺省为否,为(Y)则表示为是,虽然参数大部分为可选参数,但后台这些参数都会传到服务器,此时参数的值就是缺省值。
PARALLEL=4 #线程数。整数类型,取值范围:1~100,缺省为1。
TABLE_POOL=5 #用于设置导出过程中存储表数据的缓冲区个数。整数类型,取值范围:1~20,缺省为 1, 当LTABLE_POOL稍大于LTABLE_PARALLEL时结果为最优。(可选参数)
TABLE_PARALLEL=2 #线程数。整数类型,取值范围:1~50,缺省为 1。用于指定导出每张表所使用的线程数。可选参数,缺省为单线程. CPU核数为N的话,一般设置为N或者N+1
CONSTRAINTS=Y/N #设置是否导出约束,可选参数。取值范围:Y/N。Y:导出约束,缺省
值;N:不导出约束。
TABLESPACE=N/Y #设置导出的对象定义中是否包含表空间,可选参数。取值范围:N/Y。N:不包含表空间,缺省值;Y:包含表空间。
GRANTS=Y/N #设置是否导出权限,可选参数。取值范围:Y/N。Y:导出权限,缺省值;N:不导出权限。
INDEXES=Y/N #设置是否导出索引,可选参数。取值范围:Y/N。Y:导出索引,缺省值;N:不导出索引。
TRIGGERS=Y/N #设置是否导出触发器,可选参数。取值范围:Y/N。Y:导出触发器,缺省值;N:不导出触发器。
ROWS=Y/N #设置是否导出数据,可选参数。取值范围:Y/N。Y:导出数据,缺省值;N:不导出数据。
LOG_WRITE=Y/N #用于日志信息实时写入日志文件。可选参数. Y:一边将日志内容打印到屏幕上,一边将日志内容写入日志文件, N:日志内容先在屏幕上全部打印完毕再写入日志文件,缺省值
COMPRESS=Y/N #指定是否压缩导出文件。可选参数。缺省为不压缩. Y:压缩, N:不压缩,缺省值
ENCRYPT=Y:#设置导出文件加密。如果设置 ENCRYPT=Y,那么默认 COMPRESS=Y,先压缩后加密。
ENCRYPT_PASSWORD=<加密密钥>:#设置加密密钥。支持最大长度为 255。
ENCRYPT_NAME=<加密算法>:#设置加密算法。缺省为 RC4。
2.3 dexp/dexpdp逻辑导出
dexp 工具可以对本地或者远程数据库进行数据库级、用户级、模式级和表级的逻辑备份。备份的内容非常灵活,可以选择是否备份索引、数据行和权限,是否忽略各种约束(外键约束、非空约束、唯一约束等),在备份前还可以选择生成日志文件,记录备份的过程以供查看。dexp 工具名称有两种写法 dexp 和 dexpdp。两者语法完全相同。唯一的区别在于,dexp 导出的文件必须存放在客户端,dexpdp 导出的文件必须存放在服务器端。
语法如下:
dexp PARAMETER=<value> { PARAMETER=<value> }
或
dexpdp PARAMETER=<value> { PARAMETER=<value> }
-
-
- 数据库级(FULL)全库导出
-
- dexp导出
# mkdir -p /data/expback
# chown -R dmdba:dinstall /data/expback
# chmod -R 775 /data/expback
$ dexp USERID=SYSDBA/SYSDBA2023@127.0.0.1:5236 FILE=omp_%U.dmp LOG=omp_`date +%Y%m%d%H%M`.log DIRECTORY=/data/expback PARALLEL=4 TABLE_POOL=5 TABLE_PARALLEL=2 FULL=Y
- dexpdp导出(开并行)
# mkdir -p /data/expdpback
# chown -R dmdba:dinstall /data/expdpback
# chmod -R 775 /data/expdpback
$ dexpdp USERID=SYSDBA/SYSDBA2023@127.0.0.1:5236 FILE=ompexpdp_%U.dmp LOG=ompexpdp_`date +%Y%m%d%H%M`.log DIRECTORY=/data/expdpback PARALLEL=4 TABLE_POOL=5 TABLE_PARALLEL=2 FULL=Y
- dexpdp导出(加密导出)
$ dexpdp USERID=SYSDBA/SYSDBA2023@127.0.0.1:5236 FILE=ompexpdp_%U.dmp LOG=ompexpdp_`date +%Y%m%d%H%M`.log DIRECTORY=/data/expdpback PARALLEL=4 TABLE_POOL=5 TABLE_PARALLEL=2 ENCRYPT=Y ENCRYPT_PASSWORD=abcdefg ENCRYPT_NAME=DES_CBC FULL=Y
加密算法:
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
-
-
- 用户级(OWNER)用户导出
-
- 单用户
$dexp USERID=SYSDBA/SYSDBA2023 FILE=omp_user_%U.dmp LOG=omp_`date +%Y%m%d%H%M`.log DIRECTORY=/data/expbackup OWNER=OMP PARALLEL=4 TABLE_POOL=5 TABLE_PARALLEL=2
- 多用户
$./dexp USERID=SYSDBA/SYSDBA2023 FILE=omp_fms_%U.dmp LOG=omp_fms_`date +%Y%m%d%H%M`.log DIRECTORY=/data/expbackup OWNER=OMP,FMS PARALLEL=4 TABLE_POOL=5 TABLE_PARALLEL=2
$./dexpdp USERID=SYSDBA/SYSDBA2023 FILE=omp_fms_%U.dmp LOG=omp_fms_`date +%Y%m%d%H%M`.log DIRECTORY=/data/expbackup OWNER=OMP,FMS PARALLEL=4 TABLE_POOL=5 TABLE_PARALLEL=2
说明
一般情况下,OWNER与SCHEMAS导入导出是相同的。 但是用户可以包含多个模式,在这种情况下SCHEMAS的导入导出是OWNER导入导出的一个子集。
schema(模式)是数据库的组织和结构。模式中包含了schema对象,可以是表(table)、列(column)、数据类型(data type)、视图(view)、存储过程(stored procedures)、关系(relationships)、主键(primary key)、外键(foreign key)等。
模式是一组相互关联的数据库对象,如表,表列,列的数据类型,索引,外键等等
--单用户
$./dexp USERID=SYSDBA/SYSDBA2023 FILE=omp_user_%U.dmp LOG=omp_`date +%Y%m%d%H%M`.log DIRECTORY=/data/expbackup schemas=OMP PARALLEL=4
$./dexp USERID=SYSDBA/SYSDBA2023 FILE=omp_fms_%U.dmp LOG=omp_fms_`date +%Y%m%d%H%M`.log DIRECTORY=/data/expbackup schemas=OMP,FMS PARALLEL=4
# mkdir -p /data/exptable
# chown -R dmdba:dinstall /data/exptable
# chmod -R 775 /data/exptable
$ dexp USERID=SYSDBA/SYSDBA2023 FILE=omp_table_%U.dmp LOG=omp_table_`date +%Y%m%d%H%M`.log DIRECTORY=/data/exptable TABLES=omp.year_2001,fms.year_2001 PARALLEL=4
# mkdir -p /data/expdptable
# chown -R dmdba:dinstall /data/expdptable
# chmod -R 775 /data/expdptable
$ dexpdp USERID=SYSDBA/SYSDBA2023@127.0.0.1:5236 FILE=omp_table_%U.dmp LOG=omp_table_`date +%Y%m%d%H%M`.log DIRECTORY=/data/expdptable TABLES=omp.year_2001,fms.year_2001 PARALLEL=4
FUZZY_MATCH 用于指定 TABLES 选项是否支持模糊匹配。可选参数,缺省为 N
N:TABLES 选项不支持模糊匹配,指定的表名与数据库中的表名必须精确匹配,缺省值;
Y:TABLES 选项支持模糊匹配,指定的表名与数据库中的表名采用 LIKE 模糊查询匹配。
$ dexpdp USERID=SYSDBA/SYSDBA2023@127.0.0.1:5236 FILE=omp_table_%U.dmp LOG=omp_table_`date +%Y%m%d%H%M`.log DIRECTORY=/data/expdptable TABLES=OMP.year% FUZZY_MATCH=Y PARALLEL=4
-
-
-
- 表不导出表数据(只导表结构)
-
-
$ dexpdp USERID=SYSDBA/SYSDBA2023@127.0.0.1:5236 FILE=omp_table_%U.dmp LOG=omp_table_`date +%Y%m%d%H%M`.log DIRECTORY=/data/expdptable TABLES=omp.year_2001 PARALLEL=4 ROWS=N
$ dexpdp USERID=SYSDBA/SYSDBA2023@127.0.0.1:5236 FILE=omp_table_%U.dmp LOG=omp_table_`date +%Y%m%d%H%M`.log DIRECTORY=/data/expdptable PARALLEL=4 FULL=Y ROWS=N
参数 | 含义 | 备注 |
USERID | 数据库的连接信息 | 必选 |
FILE | 输入文件,即 dexp 导出的文件 | 必选 |
DIRECTORY | 导入文件所在目录 | 可选 |
FULL | 导入整个数据库 | 可选,四者中选其一。 |
OWNER | 导入指定的用户名下的模式 | |
SCHEMAS | 导入的模式列表 | |
TABLES | 表名列表,指定导入的 tables 名称。不支持对外部,表进行导入 | |
PARALLEL | 用于指定导入的过程中所使用的线程数目 | 可选 |
TABLE_PARALLEL | 用于指定导入的过程中每个表所使用的子线程数目 | 可选。在FAST_LOAD 为 Y 时有效 |
具体参数查看《DM8_dexp和dimp使用手册》
-
- dimp/dimpdp逻辑导入
- 数据库级(FULL)全库恢复
- dimp/dimpdp逻辑导入
$ cd $DM_HOME
$ dimp USERID=SYSDBA/SYSDBA2023@127.0.0.1:5236 FILE=ompexpdp_01.dmp LOG=omp_`date +%Y%m%d%H%M`.log DIRECTORY=/data/expback PARALLEL=4
$ dimpdp USERID=SYSDBA/SYSDBA2023@127.0.0.1:5236 FILE=ompexpdp_01.dmp LOG=omp_`date +%Y%m%d%H%M`.log DIRECTORY=/data/expdpback PARALLEL=4
注:如果没有提前建表空间,会默认导入MAIN表空间。
-
-
- 用户级(OWNER)某个用户恢复
-
--单用户
$./dimp USERID=SYSDBA/SYSDBA2023 FILE=omp_user_%U.dmp LOG=omp_`date +%Y%m%d%H%M`.log DIRECTORY=/data/expbackup OWNER=OMP PARALLEL=4
--多用户
$./dimp USERID=SYSDBA/SYSDBA2023 FILE=omp_fms_%U.dmp LOG=omp_fms_`date +%Y%m%d%H%M`.log DIRECTORY=/data/expbackup OWNER=OMP,FMS PARALLEL=4
$./dimpdp USERID=SYSDBA/SYSDBA2023 FILE=omp_fms_%U.dmp LOG=omp_fms_`date +%Y%m%d%H%M`.log DIRECTORY=/data/expbackup OWNER=OMP,FMS PARALLEL=4
-
-
- 模式级(SCHEMAS)恢复
-
$./dimp USERID=SYSDBA/SYSDBA2023 FILE=omp_fms_01.dmp LOG=omp_fms_`date +%Y%m%d%H%M`.log DIRECTORY=/data/expbackup schemas=OMP,FMS PARALLEL=4
$./dimpdp USERID=SYSDBA/SYSDBA2023 FILE=omp_fms_01.dmp LOG=omp_fms_`date +%Y%m%d%H%M`.log DIRECTORY=/data/expbackup schemas=OMP,FMS PARALLEL=4
-
-
- 表级(TABLES)恢复
-
$./dimp USERID=SYSDBA/SYSDBA2023 FILE=omp_table_%U.dmp LOG=omp_table_`date +%Y%m%d%H%M`.log DIRECTORY=/data/expbackup TABLES=omp.year_2001,fms.year_2001 PARALLEL=4
$./dimpdp USERID=SYSDBA/SYSDBA2023 FILE=omp_table_%U.dmp LOG=omp_table_`date +%Y%m%d%H%M`.log DIRECTORY=/data/expbackup TABLES=omp.year_2001,fms.year_2001 PARALLEL=4
COMPRESSED:是否对备份数据进行压缩处理。LEVEL 表示压缩等级,取值范围 0~9:
0 表示不压缩;1 表示 1 级压缩;9 表示 9 级压缩。压缩级别越高,压缩速度越慢,但压缩比越高。若指定COMPRESSED,但未指定LEVEL,则压缩等级默认1;若未指定COMPRESSED,则默认不进行压缩处理。
WITHOUT LOG:联机数据库备份是否备份联机日志。如果使用,则表示不备份,否则表示备份。如果使用了 WITHOUT LOG 参数,则使用 DMRMAN 工具还原时,必须指定 WITHARCHIVEDIR 参数。
WITHOUT MIRROR:联机数据库备份是否备份镜像文件。如果使用,则表示不备份,否则表示备份。
TRACE FILE:指定生成的TRACE文件。启用TRACE,但不指定 TRACE FILE 时,默认在 DM 数据库系统的 log 目录下生成 DM_SBTTRACE_年月.log 文件;若使用相对路径,则生成在执行码同级目录下;若用户指定 TRACE FILE,则指定的文件不能为已经存在的文件,否则报错。TRACE FILE 不可以为 ASM 文件。
TRACE LEVEL:是否启用 TRACE。有效值 1、2,默认为 1 表示不启用 TRACE,此时若
指定了 TRACE FILE,会生成 TRACE 文件,但不写入 TRACE 信息;为 2 启用 TRACE 并在
TRACE 文件中写入 TRACE 相关内容。
TASK THREAD:备份过程中数据处理过程线程的个数,取值范围 0~64,默认为 4。若指定为 0,则调整为 1;若指定超过当前系统主机核数,则调整为主机核数。线程数(TASKTHREAD)*并行数(PARALLEL)不得超过 512。
PARALLEL:指定并行备份的并行数和拆分块大小。并行数取值范围 0~128。若不指定并行数,则默认为 4,若指定为 0 或者 1 均认为非并行备份。若未指定关键字 PARALLEL,则认为非并行备份。并行备份不支持存在介质为 TAPE 的备份。线程数(TASK THREAD)*并行数(PARALLEL)不得超过 512。READ SIZE 指定并行备份大数据量的数据文件时的拆分块大小,默认为 1GB,最小为 512MB,当指定的拆分块大小小于 512MB 时,系统会自动调整为 512MB。若指定并行备份,但未指定拆分块大小,则直接使用默认拆分块大小进行拆分。当数据文件的大小小于拆分块大小时,不执行拆分;当数据文件的大小大于拆分块大小时,执行拆分。并行数不能大于拆分之后的总块数。
FROM LSN:用于增量备份中,指定备份的起始 LSN。起始 LSN 必须小于等于检查点 LSN,
用户可以手动刷新检查点 LSN。仅支持库级增量备份。
CUMULATIVE:用于增量备份中,指明为累积增量备份类型,若不指定则缺省为差异增量备份类型。
WITH BACKUPDIR:用于增量备份中,指定基备份的搜索目录,最大长度为 256 个字节。若缺省,自动在以下路径中搜索:默认备份目录(即 BAK_PATH 配置的路径,如果BAK_PATH 没有配置,则使用 SYSTEM_PATH 配置的路径)、当前备份集目录(即BACKUPSET 指定的路径,例如 BACKUPSET'D:\ bakrman\db_bak'的路径)、当前备份集目录的上一级目录(例如'D:\bakrman')搜索基备份。如果基备份不在上述路径下,增量备份必须指定该参数。BASE ON BACKUPSET:用于增量备份中,指定基备份集路径。
READ SPEED:备份时读速度上限,取值范围 0~2147483647,单位为 MB/S,0 表示无限制。
WRITE SPEED:备份时写速度上限,取值范围 0~2147483647,单位为 MB/S,0 表示无限制。
使用说明:
1. 备份成功后会在<备份集路径>或者默认备份目录下生成备份集。备份集中包括一
个备份元数据文件,后缀.meta,以及一个或多个备份片文件,后缀.bak。
2. 当备份数据超过限制大小时,会生成新的备份文件,新的备份文件名是初始文件名
后加文件编号。
3. 系统处于归档模式下时,才允许进行数据库联机备份。若备份库为 DSC 集群实例,
且未指定 WITHOUT LOG,则需要配置远程归档。
4. MOUNT 状态下,不允许进行数据库备份。
5. DDL_CLONE 库备份集不能作为增量备份的基备份,仅能用于库级还原。
6. 通过指定 FROM LSN 生成的库备份集不能作为增量备份的基备份,仅能用于库级
还原。
7. 在执行联机数据库备份过程中,如果报错归档不完整,则需要首先刷新检查点,才
能正常备份。例如:select checkpoint(50);。
-
- 联机备份(在线备份)
环境要求:数据库处于运行状态+归档模式,使用disql工具进行在线备份。
建目录
$ mkdir -p /data/backup/(后面的目录系统自己建)
$ disql SYSDBA/SYSDBA2023@127.0.0.1:5236
SQL> BACKUP DATABASE FULL BACKUPSET '/data/backup/db_full_backup_01';
或者
SQL> BACKUP DATABASE BACKUPSET '/data/backup/db_full_backup_01';
注:备份类型:分为完全备份 FULL 和增量备份 INCREMENT 两种。缺省为 FULL
全库加参数备份(压缩备份)
SQL> BACKUP DATABASE FULL BACKUPSET '/data/backup/db_full_backup_01' maxpiecesize 300 compressed level 3 parallel 4;
或者
SQL> backup database to ompdb_full_back backupset '/data/backup/full_backup_20240107' backupinfo '完全备份' maxpiecesize 300 compressed level 5 parallel 4;
- to ompdb_full_back:指定备份名
- backupinfo '完全备份':指定备份描述信息
- maxpiecesize 300:用于控制单个备份片大小,当备份片超过限制时会生成新的备份片,单位为 MB,最小为 128MB,32 位系统最大可设置为2GB,64位系统最大可设置为128GB。如果不设置该参数则默认为2GB
- compressed level 5:设置压缩级别(0~9)
- parallel 4:指定备份并行线程数为4
全库增量备份,基于上一次全库备份做增量备份
SQL> backup database increment backupset '/data/backup/db_increment_01';
全库增量备份,指定基于上一次表空间基础备份或增量备份
SQL> backup database increment base on backupset '/data/backup/db_full_backup_01' backupset '/data/backup/db_increment_03';
SQL> backup database increment WITH BACKUPDIR '/data/backup' backupset '/data/backup/db_increment_02';
$ mkdir -p /data/backup/tablespace
SQL> backup tablespace OMP_TS BACKUPSET '/data/backup/omp_ts_tablespace';
表空间增量备份,基于上一次备份
SQL> backup tablespace OMP_TS increment backupset '/data/backup/omp_ts_tablespace_increment01';
#表空间增量备份,基于上一次表空间全备份
SQL> backup tablespace OMP_TS increment base on backupset '/data/backup/omp_ts_tablespace' backupset '/data/backup/omp_ts_tablespace_increment02';
#表空间增量备份,基于上一次表空间增量备份
SQL> backup tablespace OMP_TS increment base on backupset '/data/backup/omp_ts_tablespace_increment01' backupset '/data/backup/omp_ts_tablespace_increment03';
环境要求:数据库处于运行状态,开没开归档都可以。
备份表
SQL> backup table OMP.year_2001 backupset '/data/backup/omp_table_year2001';
使用说明:
1. 仅支持对用户的非分区的行存储表和堆表进行备份,不支持对分区表的备份。在非
分区表中,也不支持对临时表、物化视图表、物化视图附属表、日志表和特定模式
(DBG_PKG/INFORMATION_SCHEMA/INFO_SCHEM/SYSREP/SYSGEO/SYSJOB/SYS
CPT/SYS)下的表进行表备份。
2. 表的列类型为对象类型的表不支持表备份。
3. 表备份不备份表上的注释以及 default 表达式中的函数定义,因此还原时需用户自
行确认。
4. 当备份数据超过限制大小时,会生成新的备份文件,新的备份文件名是初始文件名
后加文件编号。
5. 表备份时,其所属表空间必须处于联机状态。
6. 目前表备份不支持备份到 TAPE 介质上。
在 disql 工具中使用 BACKUP 语句可以备份归档日志。归档备份的前提:
* 数据库必须配置归档;
* 归档文件的 db_magic、permanent_magic 值和数据库的 db_magic、permanent_magic 值必须一样;
* 归档日志必须连续,如果出现不连续的情况,前面的连续部分会忽略,仅备份最新的连续部分。
SQL> backup archive log all BACKUPSET '/data/backup/arch_log_backup';
说明:
ALL:备份所有的归档。若不指定,则默认为 ALL。
FROM LSN:指定备份的起始 LSN。
UNTIL LSN:指定备份的截止 LSN
归档日志的有效 LSN 范围(起始 LSN ,截止 LSN )可以通过v$ARCH_FILE 查看
FROM TIME:指定备份的开始的时间点。
UNTIL TIME:指定备份的截止的时间点。
BETWEEN ... AND ...:指定备份的区间。指定区间后,只会备份指定区间内的归档文件。
BACKUPSET:指定当前备份集生成路径,若指定为相对路径,则在数据库的默认备份目录中生成备份集。若不指定具体备份集路径,则在数据库的默认备份目录下,以约定归档
备份集命名规则生成默认的归档备份集目录。
DEVICE TYPE:指存储备份集的介质类型,支持 DISK 和 TAPE,默认 DISK
COMPRESSED:是否对备份数据进行压缩处理。LEVEL 表示压缩等级,取值范围 0~9:
0 表示不压缩;1 表示 1 级压缩;9 表示 9 级压缩。
-
-
- LSN范围归档备份
-
确定 LSN 范围
SQL> select ARCH_LSN,CLSN,PATH from V$ARCH_FILE;
//通过查询结果选出备份的起始LSN和截至LSN。比如 140507 191529
SQL> BACKUP ARCHIVELOG LSN BETWEEN 140507 AND 191529 BACKUPSET '/data/backup/arch_bak_140507-191529';
- 拷贝备份文件到备库所在机器
$ scp -rp /dm8/back/* 84.0.191.6:/dm8/back
数据库还原只能通过脱机还原
- 对主库进行联机备份操作
$ disql SYSDBA/SYSDBA2023@127.0.0.1:5236
SQL> BACKUP DATABASE BACKUPSET '/dm8/back';
- 拷贝备份文件到备库所在机器
$ scp -rp /dm8/back/* 84.0.191.6:/dm8/back
- 数据库脱机还原
$/dm8/dmdbms/bin/DmServiceCUGDB stop
$/dm8/dmdbms/bin/dmrman CTLSTMT="RESTORE DATABASE '/dm8/data/CUGDB/dm.ini' FROM BACKUPSET '/dm8/back'"
$/dm8/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/CUGDB/dm.ini' FROM BACKUPSET '/dm8/back'"
$/dm8/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/CUGDB/dm.ini' UPDATE DB_MAGIC"
环境要求:数据库处于关闭状态,使用dmrman工具进行脱机备份。
$ ps -ef|grep dmap
若未启动,则先启动 DMAP 服务
$ /dm8/dmdbms/bin/DmAPService start
正常关闭主机数据库
$ /dm8/dmdbms/bin/DmServiceCUGDB stop
#命令行
$ /dm8/dmdbms/bin/dmrman CTLSTMT="BACKUP DATABASE '/dm8/data/CUGDB/dm.ini' FULL BACKUPSET '/data/backup/rman_bak'"
#DMRMAN工具
$ /dm8/dmdbms/bin/dmrman
RMAN> backup database '/dm8/data/CUGDB/dm.ini' FULL BACKUPSET '/data/backup/rman_bak';
增量备份(基于上一次备份)
$ /dm8/dmdbms/bin/dmrman CTLSTMT="backup database '/dm8/data/CUGDB/dm.ini' increment backupset '/data/backup/rman_increment_01'"
RMAN> backup database '/dm8/data/CUGDB/dm.ini' increment backupset '/data/backup/rman_increment_01';
$ /dm8/dmdbms/bin/dmrman CTLSTMT="backup database '/dm8/data/CUGDB/dm.ini' increment with backupdir '/data/backup/rman_bak' backupset '/data/backup/rman_increment_02'"
--基于前面全备做增量1备份
RMAN> backup database '/dm8/data/CUGDB/dm.ini' increment with backupdir '/data/backup/rman_bak' backupset '/data/backup/rman_increment_02';
--基于前面增量1做增量2备份
RMAN> backup database '/dm8/data/CUGDB/dm.ini' increment with backupdir '/data/backup/rman_increment_02' backupset '/data/backup/rman_increment_03';
导出备份集中数据文件路径信息到mapped.txt
RMAN> dump backupset '/data/backup/rman_bak' device type disk mapped file '/data/backup/mapped.txt';
$ cat mapped.txt
fil_id = 0
ts_id = 5
ts_name = "OMP_TS"
data_path = "/dm8/data/CUGDB/OMPTS01.DBF"
mirror_path =
data_mirror = 1
data_striping = 0
指定dm.ini,导出调整后的数据文件路径信息到mapped1.txt
RMAN> dump backupset '/data/backup/rman_bak' device type disk database '/dm8/data/CUGDB/dm.ini' mapped file '/data/backup/mapped1.txt';
-
- 归档备份(离线备份)
RMAN> backup archive log all database '/data/dmdbms/data/DAMENG/dm.ini' backupset '/backup/archlog_backup_20230214';
或者
直接将归档目录拷贝到其它位置,物理拷贝备份。
- disql查看备份集有效性
SQL> select sf_bakset_check('disk','/data/backup/rman_bak');
- disql删除备份集
SQL> select sf_bakset_remove('disk','/backup/dm_bak/backup_01');
- dmrman查看备份集有效性
RMAN> check backupset '/backup/dm_bak/backup_01';
- dmrman查看备份集信息,包含:DB信息、备份信息、数据文件等信息
RMAN> show backupset '/backup/backup_01';
- dmrman使用with backupdir参数查看多个备份集信息
RMAN> show backupset with backupdir '/backup/backup_01','/backup/backup_02';
- 删除备份集
RMAN> remove backupset '/backup/backup_01';
RMAN> check backupset '/data/backup/rman_bak';
#命令行
$ /dm8/dmdbms/bin/dmrman CTLSTMT=" restore database '/dm8/data/CUGDB/dm.ini' from backupset '/data/backup/rman_bak'"
#DMRMAN工具
RMAN> restore database '/dm8/data/CUGDB/dm.ini' from backupset '/data/backup/rman_bak';
-
-
- 数据库恢复(重做备份集中的REDO日志)
-
使用 RECOVER 命令完成数据库恢复工作,可以是基于备份集的恢复工作,也可以是使用本地归档日志的恢复工作。数据库恢复是指重做 REDO 日志。
方式一:从备份集恢复,即重做备份集中的 REDO 日志
#命令行
$ /dm8/dmdbms/bin/dmrman CTLSTMT="recover database '/dm8/data/CUGDB/dm.ini' from backupset '/data/backup/rman_bak'"
#DMRMAN工具
RMAN> recover database '/dm8/data/CUGDB/dm.ini' from backupset '/data/backup/rman_bak';
方式二:从归档恢复,即重做归档中的 REDO 日志。
指定归档目录进行恢复,默认不指定路径会使用dmarch.ini配置的路径进行前滚
#命令行
$ /dm8/dmdbms/bin/dmrman CTLSTMT="recover database '/dm8/data/CUGDB/dm.ini' with archivedir '/dm8/data/arch'"
#DMRMAN工具
RMAN> recover database '/dm8/data/CUGDB/dm.ini' with archivedir '/dm8/data/arch';
数据库更新是指更新数据库的DB_MAGIC,并将数据库调整为可正常工作状态,与数据库恢复一样使用 RECOVER 命令完成。数据库更新发生在重做 REDO 日志恢复数据库后。
#命令行
$ /dm8/dmdbms/bin/dmrman CTLSTMT="recover database '/dm8/data/CUGDB/dm.ini' update DB_MAGIC"
#DMRMAN工具
RMAN> recover database '/dm8/data/CUGDB/dm.ini' update DB_MAGIC;
使用 RESTORE 命令完成表空间的脱机还原,还原的备份集可以是联机或脱机生成的库备份集,也可以是联机生成的表空间备份集。脱机表空间还原仅涉及表空间数据文件的重建与数据页的拷贝。不需要事先设置目标表空间为 OFFLINE 状态。
表空间还原后,表空间状态被置为 RES_OFFLINE,并设置数据标记 FIL_TS_RECV_STATE_RESTORED,表示经过还原但数据不完整。
表空间还原命令如下:
RMAN> restore database '/data/dmdbms/data/DAMENG/dm.ini' tablespace GAOYU from backupset '/backup/tablespace_gaoyu_backup';
表空间恢复通过重做 REDO 日志,以将数据更新到一致状态。由于日志重做过程中,修改好的数据页首先存入缓冲区,缓冲区分批次将修改好的数据页写入磁盘,如果在此过程中发生异常中断,可能导致缓冲区中的数据页无法写入磁盘,造成数据的不一致,数据库启动时校验失败,所以表空间恢复过程中不允许异常中断。
恢复完成后,表空间状态置为 ONLINE,并设置数据标记为 FIL_TS_RECV_STAT_RECOVERED,表示数据已恢复到一致状态。恢复表空间命令如下:
RMAN> recover database '/data/dmdbms/data/DAMENG/dm.ini' tablespace GAOYU;
表空间恢复后不需要更新DB_MAGIC。
恢复归档到指定目录
RMAN> restore archive log from backupset '/backup/archlog_backup_20230214' to archivedir '/backup/archlog_restore';
当DM数据库异常宕机后,需要在DMRMAN交互模式下执行repair archivelog修复动作确保buffer中的联机日志刷新到本地的REDO日志中,否则后面使用备份恢复的时可能因为归档日志不完整导致恢复失败或者修复后缺少部分数据。
RMAN> repair archive log database '/data/dmdbms/data/DAMENG/dm.ini';
#命令行
$/dm8/dmdbms/bin/DmServiceCUGDB stop
$/dm8/dmdbms/bin/dmrman CTLSTMT="recover database '/dm8/data/CUGDB/dm.ini' from backupset '/data/backup/rman_bak'"
#DMRMAN工具
RMAN> recover database '/dm8/data/CUGDB/dm.ini' from backupset '/data/backup/rman_bak';
#命令行
$/dm8/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/CUGDB/dm.ini' FROM BACKUPSET '/data/backup/rman_bak'"
#DMRMAN工具
RMAN> RECOVER DATABASE '/dm8/data/CUGDB/dm.ini' FROM BACKUPSET '/data/backup/rman_bak'
#命令行
$/dm8/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/CUGDB/dm.ini' UPDATE DB_MAGIC"
#DMRMAN工具
RMAN> "RECOVER DATABASE '/dm8/data/CUGDB/dm.ini' UPDATE DB_MAGIC
$ ps -ef|grep dmap
若未启动,则先启动 DMAP 服务
$ /dm8/dmdbms/bin/DmAPService start
Starting DmAPService: [ OK ]
- 正常关闭主机数据库
$ /dm8/dmdbms/bin/DmServiceCUGDB stop
- 进行脱机备份
$ /dm8/dmdbms/bin/dmrman CTLSTMT="BACKUP DATABASE '/dm8/data/CUGDB/dm.ini' FULL BACKUPSET '/dm8/data/backup'"
- 拷贝备份文件到备库所在机器
$ scp -rp /dm8/data/backup/* 84.0.191.6:/dm8/data/backup
- 执行脱机数据库还原与恢复
$/dm8/dmdbms/bin/DmServiceCUGDB stop
$/dm8/dmdbms/bin/dmrman CTLSTMT="RESTORE DATABASE '/dm8/data/CUGDB/dm.ini' FROM BACKUPSET '/dm8/data/backup'"
$/dm8/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/CUGDB/dm.ini' UPDATE DB_MAGIC"
- 对主库进行联机备份操作
$ disql SYSDBA/SYSDBA2023@127.0.0.1:5236
SQL> BACKUP DATABASE BACKUPSET '/dm8/back';
- 拷贝备份文件到备库所在机器
$ scp -rp /dm8/back/* 84.0.191.6:/dm8/back
- 执行脱机数据库还原与恢复
$/dm8/dmdbms/bin/DmServiceCUGDB stop
$/dm8/dmdbms/bin/dmrman CTLSTMT="RESTORE DATABASE '/dm8/data/CUGDB/dm.ini' FROM BACKUPSET '/dm8/back'"
$/dm8/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/CUGDB/dm.ini' FROM BACKUPSET '/dm8/back'"
$/dm8/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/CUGDB/dm.ini' UPDATE DB_MAGIC"