在之前的文章里,已经对DM备份还原一些理论进行知识性总结,也谈到了备份还原的主要工具,包括物理联机备份还原工具Disql、Manager,物理脱机备份还原工具Console、DMRMAN,还有逻辑导出导入工具dexp/dimp,这里对这几个工具进行实例演示。
准备工作
联机备份数据库必须要配置归档。联机备份时,大量的事务处于活动状态,为确保备份数据的一致性,需要同时备份一段日志(备份期间产生的 REDO 日志),因此要求数据库必须配置本地归档且归档必须处于开启状态。脱机备份数据库可配置归档也可以不配置。
通过dm.ini和dmarch.ini可以配置本地归档。dmarch.ini生效的前提是dm.ini 中的参数 ARCH_INI 置为 1。 DM 的 dmarch.ini 可以进行本地归档和远程归档的设置,DM 备份与还原过程中使用 的日志均为本地归档日志。
备份表空间属于联机备份,必须配置归档;备份表虽然是联机完全备份,但不需要配置归档,因为表在还原之后不需要再进行恢复操作,用不到归档日志。 备份归档日志必须配置归档。
联机配置归档
与联机备份还原相同,联机配置归档即是在数据库实例启动的情况下,利用SQL语句完成dm.ini与dmarch的配置。
配置归档语句语法:
ALTER DATABASE <ADD|MODIFY|DELETE> ARCHIVELOG <归档配置语句>;
<归档配置语句>::= 'DEST = <归档目标>,TYPE = <归档类型>'
<归档类型>::=<local 方式>|<remote 方式>
<local方式>::=LOCAL [,FILE_SIZE = <文件大小>][,SPACE_LIMIT = <空间大小限制>][,ARCH_FLUSH_BUF_SIZE = <归档合并刷盘缓存大小>][,HANG_FLAG=<0|1>]
<remote方式>::=REMOTE [,FILE_SIZE = <文件大小>][,SPACE_LIMIT=<空间大小限制>][,ARCH_FLUSH_BUF_SIZE = <归档合并刷盘缓存大小>],INCOMING_PATH = <归档存放路径>
增加(ADD)/删除(MODIFY)归档的步骤:
- 修改数据库为MOUNT状态
- 进行增加(ADD)或修改(MODIFY)操作
- 开启归档模式
- 修改数据库为OPEN状态
示例如下:
删除(DELETE)归档的步骤:
- 修改数据库为MOUNT状态
- 关闭归档模式,在归档模式下,不允许删除本地归档
- 删除归档
手动配置归档
手动配置归档即在数据库实例未启动的情况下,手动编写 dmarch.ini 文件和设置参数 ARCH_INI。手动配置本地归档如下:
- 关闭数据库实例
- 手动编辑dmarch.ini文件,内容如下:
[ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL #归档类型为本地归档 ARCH_DEST = d:\dm_arch\arch #归档目录 ARCH_FILE_SIZE = 1024 #归档文件大小 ARCH_SPACE_LIMIT = 2048 #空间大小限制 ARCH_HANG_FLAG = 1
- 将dm.ini文件中参数ARCH_INI设置为1。
- 启动数据库实例,则数据库已运行于归档模式。
物理联机备份还原工具
使用Disql工具
数据库备份
正常情况下,在配置了本地归档或远程归档后,使用SQL语句BACKUP即可备份整个数据库,具体语法:
BACKUP DATABASE [[[FULL] [DDL_CLONE]]| INCREMENT [CUMULATIVE][WITH BACKUPDIR '<
基备份搜索目录>'{,'<基备份搜索目录>'}]|[BASE ON BACKUPSET '<基备份目录>']][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 <拆分块大小>]];
<read_limit>::= READ SPEED <读速度上限> [WRITE SPEED <写速度上限>]
<write_limit>::= WRITE SPEED <写速度上限>
各参数介绍:
FULL:备份类型。FULL 表示完全备份,默认为完全备份。
DDL_CLONE:数据库克隆。该参数只能用于完全备份中,表示仅拷贝所有的元数据不拷贝数据。如对于数据库中的表来说,只备份表的定义不备份表中数据。表空间和表备份不支持该参数。数据库克隆必须备份日志。
INCREMENT:备份类型。INCREMENT 表示增量备份,若要执行增量备份必须指定该参数。
CUMULATIVE:用于增量备份中,指明为累积增量备份类型,若不指定则缺省为差异增量备份类型。
WITH BACKUPDIR:用于增量备份中,指定基备份的搜索目录,最大长度为 256 个字节。若不指定,自动在默认备份目录和当前备份目录下搜索基备份。如果基备份不在默认的备份目录或当前备份目录下,增量备份必须指定该参数。
BASE ON BACKUPSET:用于增量备份中,指定基备份集路径。
TO:指定生成备份名称。若未指定,系统随机生成,默认备份名格式为:DB_库名_备份类型_备份时间。其中,备份时间为开始备份时的系统时间。
BACKUPSET:指定当前备份集生成路径。若指定为相对路径,则在默认备份路径中生成备份集。若不指定,则在默认备份路径中按约定规则,生成默认备份集目录。库级备份默认备份集目录名生成规则:DB_ 库 名 _ 备份类型 _ 备 份 时间。若库名超长使备份集目录完整名称长度大于 128 个字节将直接报错路径过长。
DEVICE TYPE:指存储备份集的介质类型,支持 DISK 和 TAPE,默认为 DISK。
PARMS:只对介质类型为 TAPE 时有效。用于传递第三方可识别的自定义字符串。
BACKUPINFO:备份的描述信息。最大不超过 256 个字节。
MAXPIECESIZE:最大备份片文件大小上限,以 M 为单位,最小 32M,32 位系统最大 2G,64 位系统最大 128G。
LIMIT:指定备份时最大的读写文件速度,单位为 M/S,默认为 0,表示无速度限制。 IDENTIFIED BY:指定备份时的加密密码。密码可以用双引号括起来,这样可以避免 一些特殊字符通不过语法检测。密码的设置规则遵行 ini 参数 pwd_policy 指定的口令策 略。
WITH ENCRYPTION:指定加密类型,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 LOG 参数,则使用 DMRMAN 工具还原时,必须指定 WITH ARCHIVEDIR 参数。
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;若指定超过当前系统主机核数,则调整为主机核数。线程数(TASK THREAD)*并行数(PARALLEL)不得超过 512。
PARALLEL:指定并行备份的并行数和拆分块大小。并行数取值范围 0~128。若不指定 并行数,则默认为 4,若指定为 0 或者 1 均认为非并行备份。若未指定关键字 PARALLEL, 则认为非并行备份。并行备份不支持存在介质为 TAPE 的备份。线程数(TASK THREAD) *并行数(PARALLEL)不得超过 512。READ SIZE 指定并行备份大数据量的数据文件时 的拆分块大小,默认为 1GB,最小为 512MB,当指定的拆分块大小小于 512MB 时,系统会 自动调整为 512MB。若指定并行备份,但未指定拆分块大小,则直接使用默认拆分块大小 进行拆分。当数据文件的大小小于拆分块大小时,不执行拆分;当数据文件的大小大于拆分 块大小时,执行拆分。并行数不能大于拆分之后的总块数。
简单示例:
/*完全备份*/
SQL> BACKUP DATABASE FULL TO dm_backup_1 BACKUPSET '/dm/data/DAMENG1/bak'
/*增量备份*/
SQL> BACKUP DATABASE INCREMENT CUMULATIVE WITH BACKUPDIR '/dm/data/DAMENG1/bak' BACKUPSET '/dm/data/DAMENG1/increment_bak'
表空间备份
执行表空间备份数据库实例同样必须运行在归档模式下,启动 DIsql 输入以下语句即可备份表空间,具体语法:
BACKUP TABLESPACE <表空间名> [FULL | INCREMENT [CUMULATIVE][WITH BACKUPDIR '<基
备份搜索目录>'{,'<基备份搜索目录>'}]| [BASE ON BACKUPSET '<基备份集目录>']][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 日志级别>]
[TASK THREAD <线程数>][PARALLEL [<并行数>][READ SIZE <拆分块大小>]];
<read_limit>::= READ SPEED <读速度上限> [WRITE SPEED <写速度上限>]
<write_limit>::= WRITE SPEED <写速度上限>
备份表空间的语法的参数与备份数据库的语句的参数类似。
示例:
/*完全备份*/
SQL> BACKUP TABLESPACE MAIN FULL TO 'dm_ts1_bak'
/*增量备份*/
SQL> BACKUP TABLESPACE MAIN INCREMENT CUMULATIVE WITH BACKUPDIR '/dm/data/DAMENG1/bak' BACKUPSET '/dm/data/DAMENG1/TS_increment_bak'
表备份
与备份数据库与表空间不同,备份表不需要服务器配置归档,只需在disql中输入SQL命令执行即可,具体语法如下,参数含义与库备份与表空间备份类似:
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 <写速度上限>
最简单的示例:
SQL>BACKUP TABLE TAB_01 BACKUPSET '/dm/data/DAMENG1/tab_bak_01';
归档备份
在 DIsql 工具中使用 BACKUP 语句可以备份归档日志。归档备份的前提:一,归档文件的 db_magic、permanent_magic 值和库的 db_magic、permanent_magic 值必须 一样;二,服务器必须配置归档;三,归档日志必须连续,如果出现不连续的情况,前面的连续部分会忽略,仅备份最新的连续部分。如果未收集到指定范围内的归档,联机备份时显示“操作已执行”但实际并未备份,日志中记录相关警告信息;脱机备份时则直接报错。联机备份的时候经常会切换归档文件,最后一个归档总是空的,所以最后一个归档不会被备份。
简单的备份归档:
SQL>BACKUP ARCHIVE LOG ALL BACKUPSET 'arch_bak_01' TO;
执行后,备份集“arch_bak_01”会生成到指定的备份路径下。如要设置其他备份选项则徐参考语法:
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 '<备份描述>']
[MA