1、表空间与数据文件
DM8的表空间类型分为:
DM 数据库的备份还原包括两种类型:物理备份还原和逻辑备份还原。物理备份还原是对数据库的操作系统物理文件(如数据文件、控制文件和日志文件等)的备份还原。例如使用 RMAN 工具进行的备份还原。逻辑备份还原是对数据库逻辑组件(如表、视图和存储过程等数据库对象)的备份还原。例如使用 dexp 和 dimp 进行的备份还原。
逻辑导出(dexp)和逻辑导入(dimp)是 DM 数据库的两个命令行工具,分别用来实现对 DM 数据库的逻辑备份和逻辑还原。逻辑备份和逻辑还原都是在联机方式下完成,联机方式是指数据库服务器正常运行过程中进行的备份和还原 dexp 和 dimp 是 DM 数据库自带的工具,只要安装了 DM 数据库,就可以在安装目录 /dmdbms/bin 中找到。
逻辑导出和逻辑导入数据库对象分为四种级别:数据库级、用户级、模式级和表级。四种级别独立互斥,不能同时存在。四种级别所提供的功能:
1、库级
理论上无论出现哪种损坏都可以采用库级备份还原修复,建议物理损坏情况下使用;
逻辑损坏导致库数据丢失比较严重或者表空间已经被删除,也可采用库级备份还原;
要求还原的目标库脱机且正常退出。需借助DMRMAN工具完成。
2、表空间级
若逻辑损坏导致某个表空间中多个表数据丢失时,可以考虑采用表空间级备份还原。
DM8支持从库级备份中还原表空间。
3、归档
归档还原仅能恢复归档文件。
很多时候可以利用归档文件修复数据,若条件允许,最好保留尽量多的归档文件。
4、表级
因逻辑损坏导致个别表数据丢失, 可以采用表级备份还原。建议对数据库中频繁操作的重要表进行表级备份。
将指定表数据从一个表迁移到另外一个表中,也可使用表级备份还原。
表级备份还原过程中,其他表可以正常工作。
5、完全,还是增量
当库或表空间的基础数据量很大而数据修改操作不太频繁时,强烈建议使用增量备份(前提是至少有一个完全备份)建议当进行一定次数的增量备份后,应重新做一个完全备份。
表空间还原后的恢复操作由DM8自动执行;表还原后已经是一致性状态,不需要进行恢复操作。
提供三种库级恢复方式:
4.1 相关工具
Disql 工具:联机数据备份与还原,包括库备份、表空间备份与还原、表备份与还原;
DMRMAN 工具:脱机数据库备份还原与恢复;
客户端工具 MANAGER和CONSOLE:对应命令行工具DIsql和DMRMAN的功能,分别用于联机和脱机备份还原数据。
4.2 归档配置
DM 数据库开启归档方式:
(1)SQL 方式开启归档
alter database mount;
alter database add archivelog 'dest=/d07,TYPE=local,FILE_SIZE=1024,SPACE_LIMIT=200000';
alter database archivelog;
alter database open;
(2)编辑配置文件方式开启归档
首先修改 dm.ini 文件的 arch_ini 参数为 1,然后在 dm.ini 文件目录新建 dmarch.ini 文件,添加以下内容:
ARCH_WAIT_APPLY = 1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /d07
ARCH_FILE_SIZE = 64
ARCH_SPACE_LIMIT = 0
重启数据库即可开启归档模式。
注意:需要注意配置 ARCH_SPACE_LIMIT 参数,为 0 是不限制归档大小,其它数值为限制归档量大小,单位是 MB。
4.3 联机备份
进行联机备份,数据库必须保持在联机状态
4.3.1 数据库备份
4.3.2表空间备份
backup tablespace main backupset '/dm8/dmback/tablespace1';
注:备机状态/MOUNT状态/MPP和RAC环境均不允许表空间备份。
4.3.3 表备份
backup table lcz backupset '/dm8/dmback/lcz';
表备份均为联机完全备份,不需要备份归档日志,不存在增量备份之说。
4.3.4 归档备份
backup archive log all backupset '/dm8/dmback/arch';
归档备份拷贝指定归档目录下的所有的归档文件到备份集中。
备份归档需要服务器配置归档。
4.3.5 备份语法及参数解释
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][<指定基备份子句>]
<指定基备份子句>::= WITH BACKUPDIR '<基备份搜索目录>'{,'<基备份搜索目录>'}|
BASE ON BACKUPSET '<基备份目录>'
<read_limit>::= READ SPEED <读速度上限> [WRITE SPEED <写速度上限>]
<write_limit>::= WRITE SPEED <写速度上限>
备份类型:分为完全备份 FULL 和增量备份 INCREMENT 两种。缺省为 FULL。
4.3.6 备份管理
备份管理相关动态视图总结如下:
V$BACKUPSET:显示备份集基本信息。
V$BACKUPSET_DBINFO:显示备份集的数据库相关信息。
V$BACKUPSET_DBF:显示备份集中数据文件的相关信息。
V$BACKUPSET_ARCH:显示备份集的归档信息。
V$BACKUPSET_RLOG:显示备份集的日志信息。
V$BACKUPSET_BKP:显示备份集的备份片信息。
V$BACKUPSET_SEARCH_DIRS:显示备份集搜索目录。
V$BACKUPSET_TABLE:显示表备份集中备份表信息。
V$BACKUPSET_INDEX:显示表备份集中备份索引信息。
V$BACKUPSET_SUBS:显示并行备份中生成的子备份集信息。
4.4 联机恢复
DM 仅支持表的联机还原,数据库、表空间和归档日志的还原必须通过脱机工具 DMRMAN 执行。
4.4.1 表还原
表还原之后不需要恢复操作。DIsql 中输入以下简单的 RESTORE 语句就可还原表:
restore table lcz from backupset '/dm8/dmbak/lcz';
4.5 脱机备份
DMRMAN(DM RECOVERY MANAGER)是 DM 的脱机备份还原管理工具,由它来统一负责库级脱机备份、脱机还原、脱机恢复等相关操作,该工具支持命令行指定参数方式和控制台交互方式执行。
通过 DMRMAN 工具执行脱机操作过程中,仅会使用通过关键字 DATABASE 指定的目标库的本地归档配置信息,不会对本地归档配置文件中其他类型归档配置信息进行校验。例如:DATABASE 指定目标库为/opt/dmdbms/data/dm.ini,为单机环境且配置参数 ARCH_INI 为 1,那么只会相应的读取 dmarch.ini 中本地归档日志信息。此时,即使 dmarch.ini 中配置了 REALTIME、MARCH、TIMELY 等其他类型的归档日志,也不会去校验 dmmal.ini、dmtimer.ini 等是否有效。
4.5.1 数据库备份
在 DMRMAN 工具中使用 BACKUP 命令可以备份整个数据库。使用 DMRMAN 脱机备份数据库需要关闭数据库实例。若是正常退出的数据库,则脱机备份前不需要配置归档;若是故障退出的数据库,则备份前,需先进行归档修复。在 DMRMAN 中输入以下命令即可备份数据库:
RMAN>backup database '/dm8/dmdata/DMDB/dm.ini';
命令执行完后会在默认的备份路径下生成备份集目录。默认的备份路径为 dm.ini 中 BAK_PATH 配置的路径,若未配置 BAK_PATH,则默认使用 SYSTEM_PATH 下的 bak 目录。这是最简单的脱机数据库备份语句,如果要设置其他备份选项请参考下文的语法及使用说明。
BACKUP DATABASE '<INI文件路径>' [<备份类型>][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]
[TASK THREAD <线程数>][PARALLEL [<并行数>][READ SIZE <拆分块大小>]]
[USE BAK_MAGIC <备份集魔数>];
创建完全备份
RMAN>BACKUP DATABASE '/dm8/dmdata/DMDB/dm.ini' FULL BACKUPSET '/dm8/dmbak/db_full_bak_01';
命令中的 FULL 参数表示执行的备份为完全备份,也可以不指定该参数,DMRMAN 默认执行的备份类型为完全备份。
创建增量备份
增量备份指基于指定的库的某个备份(完全备份或者增量备份),备份自该备份以来所有发生修改了的数据页。脱机增量备份要求两次备份之间数据库必须有操作,否则备份会报错。
BACKUP DATABASE '/dm8/dmdata/DMDB/dm.ini' increment with backupdir '/dm8/dmbak/db_full_bak_01' backupset '/dm8/dmbak/db_increment_bak_02';
4.5.2 归档备份
执行归档备份要求数据库处于脱机状态。与联机归档备份一样,脱机归档备份需要配置归档。
RMAN>BACKUP ARCHIVE LOG ALL DATABASE '/dm8/dmdata/DMDB/dm.ini' BACKUPSET '/dm8/dmbak/arch_all_bak_01';
4.6 脱机还原
4.6.1 数据库还原
使用 RESTORE 命令完成脱机还原操作,在还原语句中指定库级备份集,可以是脱机库级备份集,也可以是联机库级备份集。数据库的还原包括数据库配置文件还原和数据文件还原,目前可能需要还原的数据库配置文件包括 dm.ini、dm.ctl、服务器秘钥文件(dm_service.prikey 或者 dm_external.config,若备份库指定 usbkey 加密,则无秘钥文件)、联机日志文件。
数据库备份集分为联机和脱机两种类型。通常情况下,用户会在联机状态下备份数据库,因此下面以联机数据库备份为例说明使用 DMRMAN 如何执行数据库还原操作。
校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验;
RMAN>CHECK BACKUPSET '/dm8/dmbak/db_full_bak_01';
还原数据库,可以直接指定还原目标库的 dm.ini 进行数据库还原,如下所示:
RMAN>RESTORE DATABASE '/dm8/dmdata/DMDB/dm.ini' FROM BACKUPSET '/dm8/dmbak/db_full_bak_01';
也可指定 REUSE DMINI 子句进行数据库还原,此时会将备份集中备份的 dm.ini 中除路径相关的 INI 参数外,均拷贝到当前 dm.ini 上。如下所示:
RMAN>RESTORE DATABASE '/dm8/dmdata/DMDB/dm.ini' REUSE DMINI FROM BACKUPSET '/dm8/dmbak/db_full_bak_01';
4.6.2 数据库恢复
使用 RECOVER 命令完成数据库恢复工作,可以是基于备份集的恢复工作,也可以是使用本地归档日志的恢复工作。
如果还原后,不需要重做日志,数据就已经处于一致性状态了(例如正常关闭库的脱机备份还原),则可以跳过这一步,直接进入数据库更新阶段。
数据库恢复是指重做 REDO 日志,有两种方式:从备份集恢复,即重做备份集中的 REDO 日志;从归档恢复,即重做归档中的 REDO 日志。由于日志重做过程中,修改好的数据页首先存入缓冲区,缓冲区分批次将修改好的数据页写入磁盘,如果在此过程中发生异常中断,可能导致缓冲区中的数据页无法写入磁盘,造成数据的不一致,数据库启动时校验失败,所以数据库恢复过程中不允许异常中断。数据库恢复后,还需要执行数据库更新操作,将数据库调整为可正常工作的库才算完成。下面逐一进行说明。
从备份集恢复
如果备份集在备份过程中生成了日志,且这些日志在备份集中有完整备份(如联机数据库备份),在执行数据库还原后,可以重做备份集中备份的日志,将数据库恢复到备份时的状态,即从备份集恢复。
RMAN>RECOVER DATABASE '/dm8/dmdata/DMDB/dm.ini' FROM BACKUPSET '/dm8/dmbak/db_full_bak_01';
从归档恢复
从归档恢复是利用重做本地归档日志来恢复数据的过程。从归档恢复允许恢复到指定的时间点及指定的 LSN 值。若同时指定了时间点和 LSN,则以较早的为结束点。
使用DDL CLONE方式备份的数据库,不支持指定归档恢复。指定归档恢复时,不建议使用联机状态下源库的归档,此时无法保证归档的完整性。
由于从本地归档恢复允许使用 USE DB_MAGIC 指定待收集归档的 DB_MAGIC,那么就会存在跨库恢复情况,所以,归档日志的正确使用完全由用户保证。因此,为了保证用户能正确使用从归档恢复,除了下文这两种情况,其他情况(可能导致数据被破坏)不建议用户使用从本地归档恢复。
执行过从备份集还原,或者执行过从备份集还原恢复的库可以使用从归档进行恢复。此时本地归档日志属于生成备份集的源库,本地归档日志的 DB_MAGIC 与备份集中记录的 DB_MAGIC 值相同。
利用归档恢复数据库至最新状态的完整示例如下:
启动 DIsql 联机备份数据库,以及备份从检查点开始的本地归档日志;
BACKUP ARCHIVELOG FROM LSN 101352 BACKUPSET '/dm8/dmbak/arch_bak_lsn_101352';
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_full_bak_for_recover_arch';
查看动态视图V$RLOG中的CKPT_LSN列,可以得出当前检查点LSN。
准备目标库,可以使用备份库,也可以重新生成库;
如果使用原备份库,且备份库故障,需要先执行目标库归档修复:
RMAN>REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/data/dm.ini';
如果使用新生成的库,生成之后需要先重启一下数据库实例,才可以被还原。重新生成的库不需要执行归档修复(REPAIR)操作。重新生成库操作如下:
./dminit path=/opt/dmdbms/data db_name=DAMENG_FOR_RESTORE auto_overwrite=1
启动 RMAN,校验备份;
RMAN>CHECK BACKUPSET '/home/dm_bak/db_full_bak_for_recover_arch';
还原数据库;
RMAN>RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_recover_arch';
查看备份集的数据库信息,获取源库的 DB_MAGIC;
建议
若还原后,立即执行恢复,可以不用获取源库DB_MAGIC。因为DMRMAN执行库级备份集还原后,会将备份集中的DB_MAGIC刷入还原后的库中。
RMAN>SHOW BACKUPSET '/home/dm_bak/db_full_bak_for_recover_arch' INFO DB;
利用归档恢复数据库。由上步骤 显示的备份集信息可知,源库的 DB_MAGIC 值为 1935823972;
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' WITH ARCHIVEDIR'/home/dm_arch/arch' USE DB_MAGIC 1935823972;
若还原后,立即执行恢复,可以不用指定DB_MAGIC。
4.6.3更新 DB_MAGIC
数据库更新是指更新数据库的 DB_MAGIC,并将数据库调整为可正常工作状态,与数据库恢复一样使用 RECOVER 命令完成。数据库更新发生在重做 REDO 日志恢复数据库后,或者目标库不需要执行重做日志已经处于一致状态的情况。
语法如下:
RECOVER DATABASE '<ini_path>' UPDATE DB_MAGIC;
RMAN>RECOVER DATABASE '/dm8/dmdata/DMDB/dm.ini' UPDATE DB_MAGIC;
4.6.4 表空间还原
使用 RESTORE 命令完成表空间的脱机还原,还原的备份集可以是联机或脱机生成的库备份集,也可以是联机生成的表空间备份集。脱机表空间还原仅涉及表空间数据文件的重建与数据页的拷贝。不需要事先置目标表空间为 OFFLINE 状态。
表空间还原后,表空间状态被置为 RES_OFFLINE,并设置数据标记 FIL_TS_RECV_STATE_RESTORED,表示已经还原但数据不完整。
使用说明:
表空间还原不能是 TEMP 表空间,指定文件还原也不能为 TEMP 表空间中文件。
表空间还原要求还原目标库与备份库为同一个库。
还原目标库不能为已经执行过 RESTORE 但未执行过 RECOVER 的库。
处于 RES_OFFLINE 或 CORRUPT 状态的表空间不允许指定表空间中数据文件还原。
整个还原过程中不会修改数据库本身状态或者调整 CKPT_LSN。
不管是 DSC 环境,还是单机环境,若异常退出,需手动指定各节点归档修复后,使用各节点完整的归档日志执行还原恢复;否则,将可能无法恢复到最新状态。
若目标库中 SYSTEM 表空间故障,则必须优先还原 SYSTEM 表空间。
在 DMDSC 环境中进行表空间还原,需要先确保所有节点实例都已退出,此时在任一节点上使用该节点的备份集均可进行表空间还原操作,且只要在一个节点上执行目标表空间还原即可。
如果 SYSTEM 表空间处于 ONLINE/OFFLINE 状态且文件丢失,则必须要通过库还原修复,不支持对其执行表空间还原。
以联机表空间备份集为例,展示 DMRMAN 如何完成表空间的还原:
4.7 逻辑备份方法
全库导出备份
./dexp USERID=SYSDBA/SYSDBA@192.168.23.88:5236 FILE=db_str.dmp DIRECTORY=/dm8/dmbak LOG=db_str.log FULL=Y
表备份
./dexp USERID=SYSDBA/SYSDBA@192.168.23.88:5236 FILE=db_str_tab.dmp DIRECTORY=/dm8/dmbak LOG=db_str_tab.log tables=lcz
用户备份
./dexp USERID=SYSDBA/SYSDBA@192.168.23.88:5236 FILE=db_str_user.dmp DIRECTORY=/dm8/dmbak LOG=db_str_user.log OWNER=SYSDBA
模式备份
./dexp USERID=SYSDBA/SYSDBA@192.168.23.88:5236 FILE=db_str_schema.dmp DIRECTORY=/dm8/dmbak LOG=db_str_schema.log SCHEMAS=SYSDBA
4.8 逻辑还原方法
dimp导入需要指定导入方式
当不指定时缺省为SCHEMAS。
导入和导出方式可以不一致,
比如当导出方式不是FULL时, 导入时也可以指定为FULL,这时会把dmp文件中的所有内容导入到指定的实例中
全库还原
./dimp USERID=SYSDBA/SYSDBA FILE=/dm8/dmbak/db_str.dmp LOG=db_str.log DIRECTORY=/dm8/dmbak FULL=Y
模式还原
./dimp USERID=SYSDBA/SYSDBA FILE=/dm8/dmbak/db_str_schema.dmp LOG=db_str.log DIRECTORY=/dm8/dmbak SCHEMAS=SYSDBA
表还原
./dimp USERID=SYSDBA/SYSDBA FILE=/dm8/dmbak/db_str_tab.dmp LOG=db_str.log DIRECTORY=/dm8/dmbak TABLES=lcz
用户还原
./dimp USERID=SYSDBA/SYSDBA FILE=/dm8/dmbak/db_str_user.dmp LOG=db_str.log DIRECTORY=/dm8/dmbak OWNER=SYSDBA
导入到指定模式
./dimp USERID=SYSDBA/SYSDBA FILE=/dm8/dmbak/db_str.dmp LOG=db_str.log DIRECTORY=/dm8/dmbak REMAP_SCHEMAS=TESTSCHEMAS:TESTCHEMA21
文章
阅读量
获赞