脱机工具DMRMAN执行数据库备份
1. 概述
在DMRMAN工具中使用BACKUP命令你可以备份整个数据库。使用DMRMAN备份数据库不需要设置归档,关闭服务器在DMRMAN中输入以下命令即可备份数据库:
C:\Users\Administrator>net stop DmServicejydm DmServicejydm 服务正在停止.. DmServicejydm 服务已成功停止。 RMAN> backup database 'E:\dmdbms\data\jydm\dm.ini'; backup database 'E:\dmdbms\data\jydm\dm.ini'; checking if the database under system path [E:\dmdbms\data\jydm] is running...[4]. checking if the database under system path [E:\dmdbms\data\jydm] is running...[3]. checking if the database under system path [E:\dmdbms\data\jydm] is running...[2]. checking if the database under system path [E:\dmdbms\data\jydm] is running...[1]. checking if the database under system path [E:\dmdbms\data\jydm] is running...[0]. checking if the database under system path [E:\dmdbms\data\jydm] is running, write dmrman info. EP[0] max_lsn: 898933 BACKUP DATABASE [jydm], execute...... CMD CHECK LSN...... BACKUP DATABASE [jydm], collect dbf...... CMD CHECK ...... DBF BACKUP SUBS...... total 1 packages processed... total 2 packages processed... total 3 packages processed... total 4 packages processed... total 5 packages processed... total 6 packages processed... total 7 packages processed... total 8 packages processed... DBF BACKUP MAIN...... BACKUPSET [E:\dmdbms\data\jydm\bak\DB_jydm_FULL_20200531_181250_000528] END, CODE [0]...... META GENERATING...... total 9 packages processed... total 9 packages processed! CMD END.CODE:[0] backup successfully! time used: 8302.098(ms)
命令执行完后会在默认的备份路径下生成备份集目录,默认的备份路径为dm.ini中BAK_PATH的配置值,若未配置,则为SYSTEM_PATH下的bak目录。这是最简单的脱机数据库备份语句,如果要设置其他备份选项请参考下文的语法及使用说明。语法如下:
BACKUP DATABASE '<INI文件路径>' [[[FULL][DDL_CLONE]] |INCREMENT [CUMULATIVE][WITH BACKUPDIR '<基备份搜索目录>'{,'<基备份搜索目录>'}]|[BASE ON BACKUPSET '<基备份集目录>']] [TO <备份名>] [BACKUPSET '<备份集目录>'][DEVICE TYPE <介质类型>[PARMS '<介质参数>'] [BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>] [IDENTIFIED BY <加密密码>[WITH ENCRYPTION][ENCRYPT WITH <加密算法>]] [COMPRESSED [LEVEL <压缩级别>]][WITHOUT LOG] [TASK THREAD <线程数>][PARALLEL [<并行数>]];
DATABASE:必选参数。指定还原目标库的INI文件路径。
FULL:备份类型。FULL表示完全备份,可不指定,DMRMAN会默认为完全备份。
DDL_CLONE:数据库克隆。该参数只能用于完全备份中,表示仅拷贝所有的元数据不拷贝数据。如对于数据库中的表来说,只备份表的定义不备份表中数据。
INCREMENT:备份类型。INCREMENT表示增量备份,若要执行增量备份必须指定该参数。
WITH BACKUPDIR:用于增量备份中,指定基备份的搜索目录,最大长度为256个字节。若不指定,服务器自动在默认备份目录下搜索基备份。如果基备份不在默认的备份目录下,增量备份必须指定该参数。
CUMULATIVE:用于增量备份中,指明为累积增量备份类型,若不指定则缺省为差异增量备份类型。
BASE ON BACKUPSET:用于增量备份中,为增量备份指定基备份集目录。,如果没有指定基备份集,则会自动搜索一个最近可用的备份集作为基备份集
TO:指定生成备份名称。若未指定,系统随机生成,默认备份名格式为:DB_备份类型_数据库名_备份时间。
BACKUPSET:指定当前备份集生成目录。若指定为相对路径,则在默认备份路径中生成备份集。
DEVICE TYPE:指存储备份集的介质类型,支持DISK和TAPE,默认DISK。DISK表示存储备份集到磁盘,TAPE表示存储到磁带。
PARMS:只对介质类型为TAPE时有效。
BACKUPINFO:备份的描述信息。最大不超过256个字节。
MAXPIECESIZE:最大备份片文件大小上限,以M为单位,最小128M,32位系统最大2G,64位系统最大128G。
IDENTIFIED BY:指定备份时的加密密码。密码应用双引号括起来,这样避免一些特殊字符通不过语法检测。密码的设置规则遵行ini参数pwd_policy指定的口令策略。
WITH ENCRYPTION:指定加密类型,0表示不加密,不对备份文件进行加密处理;1表示简单加密,对备份文件设置口令,但文件内容仍以明文存;2表示完全数据加密,对备份文件进行完全的加密,备份文件以密文方式存储。
ENCRYPT WITH:加密算法。缺省情况下,算法为AES256_CFB。具体可以使用的加密算法参考联机数据库备份章节的参数说明。
COMPRESSED:取值范围0~9。0表示不压缩,1表示1级压缩,9表示9级压缩。压缩级别越高,压缩越慢,但压缩比越高。若未指定,但指定COMPRESSED,则默认1;否则,默认0。
WITHOUT LOG:脱机数据库备份是否备份日志。如果使用,则表示不备份,否则表示备份。如果使用了WITHOUT LOG参数,则使用DMRMAN工具还原时,必须指定WITH ARCHIVEDIR参数。
TASK THREAD:备份过程中数据处理过程线程的个数,取值范围0~64,默认为4。若指定为0,则调整为1;若指定大于当前系统主机核数,则调整为当前主机核数。线程数(TASK THREAD)*并行数(PARALLEL)不得超过512。
PARALLEL:指定并行备份的并行数,取值范围0~128。若不指定,则默认为4,指定0或者1均认为为非并行备份。若未指定关键PARALLEL,则认为非并行备份。并行备份不支持介质为TAPE的备份。线程数(TASK THREAD)*并行数(PARALLEL)不得超过512。
使用说明:
1. 备份成功后会在<备份集目录>或者备份默认目录下生成备份集。备份集中包括一个备份元数据文件,后缀.meta,一个或多个备份片文件,后缀.bak。
2. 对于并行备份的备份集,备份集中还包括其他子备份集目录,但每个子备份集目录中也都包含一个meta文件,0个或者多个备份片文件。
3. DDL_CLONE库备份集不能作为增量备份的基备份,仅能用于库级还原。
4.脱机备份的数据库可以正常退出库,也可以是故障退出的数据库。若是故障退出的数据库,则备份前,需先进行归档修复。
5. 在执行脱机数据库备份过程中,如果报错归档不完整,则需要检查库是不是异常退出。如果库是异常退出,则需要先进行归档修复。
2. 备份数据库
本节主要描述使用DMRMAN如何执行基本的脱机数据库备份及实施一些备份策略,包括:
1. 设置备份选项
2. 创建完全备份
3. 创建增量备份
1.设置备份选项
备份命令如果仅指定了必选参数如“BACKUP DATABASE ‘/opt/dmdbms/data/DAMENG/dm.ini’”,那么DMRMAN会根据配置的环境及内置的参数默认值自动指定备份介质类型、备份路径、备份片大小等参数。用户备份时也可以指定这些参数来覆盖默认值,常见的备份选项有设置备份集路径、指定备份名、限制备份片大小、添加描述信息、并行备份等。DMRMAN脱机备份数据库的语法与使用DIsql联机备份类似。
2.创建完全备份
执行数据库备份要求数据库处于脱机状态。与联机备份数据库不同的是,脱机备份不需要配置归档。一个完整的创建脱机数据库备份的示例如下:
1) 启动DMRMAN命令行工具。
2) 保证数据库处于脱机状态。
3) DMRMAN中输入以下命令:
RMAN> backup database 'E:\dmdbms\data\jydm\dm.ini' full backupset 'E:\dmdbms\backup\db_full_bak_01'; backup database 'E:\dmdbms\data\jydm\dm.ini' full backupset 'E:\dmdbms\backup\db_full_bak_01'; checking if the database under system path [E:\dmdbms\data\jydm] is running...[4]. checking if the database under system path [E:\dmdbms\data\jydm] is running...[3]. checking if the database under system path [E:\dmdbms\data\jydm] is running...[2]. checking if the database under system path [E:\dmdbms\data\jydm] is running...[1]. checking if the database under system path [E:\dmdbms\data\jydm] is running...[0]. checking if the database under system path [E:\dmdbms\data\jydm] is running, write dmrman info. EP[0] max_lsn: 898933 BACKUP DATABASE [jydm], execute...... CMD CHECK LSN...... BACKUP DATABASE [jydm], collect dbf...... CMD CHECK ...... DBF BACKUP SUBS...... total 1 packages processed... total 2 packages processed... total 3 packages processed... total 4 packages processed... total 5 packages processed... total 6 packages processed... total 7 packages processed... total 8 packages processed... DBF BACKUP MAIN...... BACKUPSET [E:\dmdbms\backup\db_full_bak_01] END, CODE [0]...... META GENERATING...... total 9 packages processed... total 9 packages processed! CMD END.CODE:[0] backup successfully! time used: 7256.870(ms)
RAC使用dmrman执行备份
[dmdba@dmrac1 bin]$ dmrman dmrman V7.1.6.46-Build(2018.02.08-89107)ENT RMAN> backup database '/dm7/data/rac0_config/dm.ini' backupset '/dm7/backup/bak/db_rac_full_bak_2020060801'; backup database '/dm7/data/rac0_config/dm.ini' backupset '/dm7/backup/bak/db_rac_full_bak_2020060801'; file dm.key not found, use default license! Read ini warning, default backup path [/dm7data/bak] does not exist. [-105]:Invalid control file
报错是因为对于rac环境来说在启动dmrman时需要指定dcr_ini参数
[dmdba@dmrac1 bin]$ dmrman dcr_ini=/dm7/data/dmdcr.ini dmrman V7.1.6.46-Build(2018.02.08-89107)ENT RMAN> backup database '/dm7/data/rac0_config/dm.ini'; backup database '/dm7/data/rac0_config/dm.ini'; file dm.key not found, use default license! checking if the RAC database under system path [+DMDATA/data/rac] is running.... EP [0] is checking.... [-12000]:The specified instance has been started
报错是因为指定的数据库实例已经启动了,dmrman是用于脱机备份,所以需要停止数据库
RMAN> backup database '/dm7/data/rac0_config/dm.ini'; backup database '/dm7/data/rac0_config/dm.ini'; checking if the RAC database under system path [+DMDATA/data/rac] is running.... EP [0] is checking.... EP [1] is checking.... EP[0] max_lsn: 58852 EP[0] adjust cur_lsn from [58852] to [58867] BACKUP DATABASE [rac], execute...... CMD CHECK LSN...... BACKUP DATABASE [rac], collect dbf...... CMD CHECK ...... DBF BACKUP SUBS...... total 1 packages processed... total 2 packages processed... total 3 packages processed... total 4 packages processed... total 5 packages processed... DBF BACKUP MAIN...... BACKUPSET [+DMDATA/data/rac/bak/DB_rac_FULL_20200608_160009_000828] END, CODE [0]...... META GENERATING...... total 9 packages processed... total 9 packages processed! CMD END.CODE:[0] backup successfully! time used: 16303.415(ms)
命令中的FULL参数表示执行的备份为完全备份,也可以不指定该参数,DMRMAN默认执行的备份类型为完全备份。
3.创建增量备份
增量备份指基于指定的库的某个备份(完全备份或者增量备份),备份自该备份以来所有发生修改了的数据页。脱机增量备份要求两次备份之间数据库必须有操作,否则备份会报错。增量备份示例如下:
首先启动数据库执行一些操作
C:\Users\Administrator>net start DmServicejydm DmServicejydm 服务正在启动 .... DmServicejydm 服务已经启动成功。 SQL> create table t2(id int); 操作已执行 已用时间: 8.250(毫秒). 执行号:5. SQL> begin 2 for i in 1 .. 10 loop 3 insert into t2 values(i); 4 end loop; 5 commit; 6 end; 7 / DMSQL 过程已成功完成 已用时间: 2.845(毫秒). 执行号:6. SQL> exit
1) 启动DMRMAN命令行工具。
2) 保证数据库处于脱机状态。
C:\Users\Administrator>net stop DmServicejydm DmServicejydm 服务正在停止.. DmServicejydm 服务已成功停止。
3) DMRMAN中输入以下命令:
RMAN> backup database 'E:\dmdbms\data\jydm\dm.ini' increment with backupdir 'E:\dmdbms\backup' backupset 'E:\dmdbms\backup\db_full_bak_02'; backup database 'E:\dmdbms\data\jydm\dm.ini' increment with backupdir 'E:\dmdbms\backup' backupset 'E:\dmdbms\backup\db_full_bak_02'; checking if the database under system path [E:\dmdbms\data\jydm] is running...[4]. checking if the database under system path [E:\dmdbms\data\jydm] is running...[3]. checking if the database under system path [E:\dmdbms\data\jydm] is running...[2]. checking if the database under system path [E:\dmdbms\data\jydm] is running...[1]. checking if the database under system path [E:\dmdbms\data\jydm] is running...[0]. checking if the database under system path [E:\dmdbms\data\jydm] is running, write dmrman info. EP[0] max_lsn: 901685 BACKUP DATABASE [jydm], execute...... CMD CHECK LSN...... BACKUP DATABASE [jydm], collect dbf...... CMD CHECK ...... DBF BACKUP SUBS...... total 1 packages processed... total 2 packages processed... total 3 packages processed... total 4 packages processed... total 5 packages processed... total 6 packages processed... total 7 packages processed... total 8 packages processed... DBF BACKUP MAIN...... BACKUPSET [E:\dmdbms\backup\db_full_bak_02] END, CODE [0]...... META GENERATING...... total 9 packages processed... total 9 packages processed! CMD END.CODE:[0] backup successfully! time used: 8219.138(ms)
命令中的INCREMENT参数表示执行的备份为增量备份,增量备份该参数不可省略。如果增量备份的基备份不在默认备份目录,必须指定WITH BACKUPDIR参数用于搜索基备份集,或者使用CONFIGURE…BACKUPDIR命令配置默认的基备份集搜索目录