DMRMAN是脱机备份,备份时一定要关闭数据库。
console工具脱机备份
先关闭实例,DmAPService需要启动
[dmdba@localdm ~]$ console 启动工具,备份目录要求为空。
还原,配置搜索路径,获取备份,还原。
恢复
启动数据库
物理备份还原
联机还原
DM 仅支持表的联机还原,数据库、表空间和归档日志的还原必须通过脱机工具 DMRMAN 执行。
执行表还原,数据库必须处于 OPEN 状态,MOUNT 和 SUSPEND 状态下不允许执行表还原。表还原不需要配置归档,因为表还原是联机完全备份还原,所以不需要借助本地归档日志进行恢复。
完整的表备份还原步骤如下所示:
保证数据库为 OPEN 状态。
创建待备份的表,执行以下命令:
Copy
CREATE TABLE TAB_FOR_RES_01(C1 INT);
备份表数据,执行以下命令:
Copy
BACKUP TABLE TAB_FOR_RES_01 BACKUPSET ‘/home/dm_bak/tab_bak_for_res_01’;
校验备份,执行以下命令:(此步骤为可选)
Copy
SELECT SF_BAKSET_CHECK(‘DISK’,’/home/dm_bak/tab_bak_for_res_01’);
还原表结构,执行以下命令:
Copy
restore table struct from backupset ‘/home/dm_bak/tab_bak_for_res_01’;
还原表数据,执行以下命令:
Copy
RESTORE TABLE FROM BACKUPSET ‘/home/dm_bak/tab_bak_for_res_01’;
指定还原时不重建索引
保证数据库为 OPEN 状态。
准备数据,创建待备份的表及索引,执行以下命令:
Copy
CREATE TABLE TAB_FOR_IDX_01(C1 INT);
CREATE INDEX I_TAB_FOR_IDX_01 ON TAB_FOR_IDX_01 (C1);
3.备份表数据,执行以下命令:
Copy
BACKUP TABLE TAB_FOR_IDX_01 BACKUPSET ‘/home/dm_bak/tab_bak_for_res_01’;
4.校验备份,执行以下命令:(此步骤为可选)
Copy
SELECT SF_BAKSET_CHECK(‘DISK’,’/home/dm_bak/tab_bak_for_res_01’);
还原表结构,执行以下命令:
Copy
RESTORE TABLE STRUCT FROM BACKUPSET ‘/home/dm_bak/tab_bak_for_res_01’;
还原表数据,但不重建索引,执行以下命令:
Copy
RESTORE TABLE WITHOUT INDEX FROM BACKUPSET ‘/home/dm_bak/tab_bak_for_res_01’;
指定还原时不重建约束
保证数据库为 OPEN 状态。
准备数据,创建待备份的表及索引,执行以下命令:
Copy
CREATE TABLE TAB_FOR_CONS_01(C1 INT);
CREATE INDEX I_TAB_FOR_CONS_01 ON TAB_FOR_CONS_01 (C1 INT);
备份表数据,执行以下命令:
Copy
BACKUP TABLE TAB_FOR_CONS_01 BACKUPSET ‘/home/dm_bak/tab_bak_for_res_01’;
校验备份,执行以下命令:(此步骤为可选)
Copy
SELECT SF_BAKSET_CHECK(‘DISK’,’/home/dm_bak/tab_bak_for_res_01’);
还原表结构,执行以下命令:
Copy
RESTORE TABLE STRUCT FROM BACKUPSET ‘/home/dm_bak/tab_bak_for_res_01’;
还原表数据,但不还原约束,执行以下命令:
Copy
RESTORE WITHOUT CONSTRAINT FROM BACKUPSET ‘/home/dm_bak/tab_bak_for_res_01’;
脱机还原
源库
源库是待备份的数据库。使用 DMRMAN 工具只可对数据库进行脱机备份,联机备份需要通过 disql 工具实现。DMRMAN 可以针对整个数据库执行脱机完全备份和增量备份,数据库可以配置归档也可以不配置。
目标库
目标库是待还原的数据库,即是用来做还原的库,也称为目标还原库。目标库可以是通过 dm.ini 文件指定的数据库,也可以是目标文件目录。
通过 dm.ini 指定库时,dm.ini 及其配置中的 CTL_PATH 必须有效,且库必须处于关闭状态。
指定文件目录时,指定目录作为 SYSTEM_PATH 处理,可以存在,也可以不存在,但必须有效。
目前目标库的还原仅支持脱机还原,可通过 DMRMAN 和 CONSOLE 工具实现。
DMRMAN 执行脚本文件
如创建一个名为 cmd_file.txt 的文件,文件中包含 BACKUP DATABASE’/opt/dmdbms/data/DAMENG/dm.ini 命令,保存到 /home/dm_cmd 目录下,执行以下命令:
./home/dm_cmd/cmd_file.txt
数据库还原
例:联机备份、脱机还原
联机备份数据库,保证数据库运行在归档模式及 Open 状态。执行以下命令:
Copied
BACKUP DATABASE BACKUPSET ‘/home/dm_bak/db_full_bak_for_restore’;
准备目标库。还原目标库可以是已经存在的数据库,也可使用 dminit 工具初始化一个新库。执行以下命令:
Copied
./dminit path=/opt/dmdbms/data db_name=DAMENG_FOR_RESTORE
启动 RMAN,校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验。执行以下命令:
Copy
CHECK BACKUPSET ‘/home/dm_bak/db_full_bak_for_restore’;
还原数据库。启动 DMRMAN,执行以下命令:
Copy
RESTORE DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini’ FROM
BACKUPSET ‘/home/dm_bak/db_full_bak_for_restore’;
恢复数据库。启动 DMRMAN,执行以下命令:
Copy
RECOVER DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini’ FROM BACKUPSET ‘/home/dm_bak/db_full_bak_for_recover_backupset’;
恢复 db_magic,执行以下命令:
Copy
RECOVER DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini’ UPDATE DB_MAGIC;
可通过调整 dm.ini 中的和检查点和 REDO 日志相关参数,降低检查点频率,增大 REDO 日志包大小来提升还原性能。
表空间还原
使用 RESTORE 命令完成表空间的脱机还原,还原的备份集可以是联机或脱机生成的库备份集,也可以是联机生成的表空间备份集。脱机表空间还原仅涉及表空间数据文件的重建与数据页的拷贝。不需要事先置目标表空间为 OFFLINE 状态。
表空间还原后,表空间状态被置为 RES_OFFLINE,并设置数据标记 FIL_TS_RECV_STATE_RESTORED,表示经过还原但数据不完整。执行以下命令:
Copy
RESTORE DATABASE <INI 路径> TABLESPACE <表空间名> [WITH CHECK]
[DATAFILE<<文件编号> {,<文件编号>} | ‘<文件路径>’ {,’<文件路径>’}>]
FROM BACKUPSET ‘<备份集路径>’ [DEVICE TYPE <介质类型> [PARMS ‘<介质参数>’]]
[IDENTIFIED BY <加密密码>] [ENCRYPT WITH <加密算法>]
[WITH BACKUPDIR ‘<备份目录>’ {,’<备份目录>’}]
[MAPPED FILE ‘<映射文件>’]
[TASK THREAD <线程数>];
以联机表空间备份集为例,展示 DMRMAN 如何完成表空间的还原。
在 SQL 编辑界面创建表空间,执行以下命令:
Copy
CREATE TABLESPACE TS1 DATAFILE ‘TS1.DBF’ SIZE 128;
创建表,指定表的存储空间为 TS1,执行以下命令:
Copy
CREATE TABLE RCT_BFHF_BKJ (C1 INT) STORAGE(ON TS1);
INSERT INTO RCT_BFHF_BKJ VALUES(1);
Commit;
联机备份数据库,保证数据库运行在归档模式及 OPEN 状态。执行以下命令:
Copy
BACKUP TABLESPACE MAIN BACKUPSET ‘/home/dm_bak/ts_full_bak_for_restore’;
校验备份,校验待还原备份集的合法性(此步骤可选)。校验备份有两种方式,联机和脱机,此处使用脱机校验。执行以下命令:
Copy
CHECK BACKUPSET ‘/home/dm_bak/ts_full_bak_for_restore’;
将表空间脱机,执行以下命令:
Copy
ALTER TABLESPACE TS1 OFFLINE;
还原表空间。需要注意,表空间还原的目标库只能是备份集产生的源库,否则将报错。启动 DMRMAN,执行以下命令:
Copy
RESTORE DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini’ TABLESPACE MAIN FROM BACKUPSET ‘/home/dm_bak/db_full_bak_for_restore’;
恢复表空间。启动 DMRMAN,执行以下命令:
Copy
RECOVER DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini’ TABLESPACE TS1;
恢复到指定时间点
恢复数据库到指定时间点 /LSN 是从归档恢复的一种方式,也称为不完全恢复。从归档恢复允许恢复到指定的时间点及指定的 LSN 值。若同时指定了时间点和 LSN,则以较早的为结束点。用户可以通过指定一个时间点/LSN,使数据库恢复到这个指定的时间点 /LSN。
例如用户在下午 5 点做了一个误操作,删除了某些重要数据,我们可以指定恢复时间点到下午 4:59 分,恢复被误删除的数据。下面以联机数据库备份为例说明如何恢复数据库到指定的时间点 /LSN。
准备数据,执行以下命令:
Copy
CREATE TABLE TAB_FOR_RECOVER_01(C1 INT);
INSERT INTO TAB_FOR_RECOVER_01 VALUES(1);
COMMIT;
备份数据库,执行以下命令:
Copy
BACKUP DATABASE BACKUPSET ‘/home/dm_bak/db_full_bak_for_time_lsn’;
正确操作数据库,产生一些归档,执行以下命令:
Copy
CREATE TABLE TAB_FOR_RECOVER_02(C1 INT);
INSERT INTO TAB_FOR_RECOVER_02 VALUES(1);
COMMIT;
使用 SELECT SYSDATE 命令查询此时的时间为:2018-11-16 10:56:40.624931。
使用 SELECT FILE_LSN FROM V$RLOG 命令查询此时的 LSN 为:50857。
误操作数据库。此步骤误删除了表 TAB_FOR_RECOVER_01 中数据。执行以下命令:
Copy
DELETE FROM TAB_FOR_RECOVER_01;
COMMIT;
操作步骤同步骤 3,此时的时间和 LSN 分别为:2018-11-16 10:57:20.977265、50861。
关闭数据库,打开 RMAN 还原数据库,执行以下语句:(步骤 4 为误操作,因此我们需要将数据库恢复到步骤 3 的状态)
Copy
RESTORE DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini’ FROM BACKUPSET ‘/home/dm_bak/db_full_bak_for_time_lsn’;
恢复数据库到指定时间点 /LSN。还原后数据库的数据与备份时一致,如果要恢复数据库至步骤 3 的状态可以指定 UNTIL TIME 或 UNTIL LSN 参数重做部分归档。
使用 RECOVER DATABASE…UNTIL TIME 命令恢复到指定的时间,打开 RMAN,执行以下命令:
Copy
RECOVER DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini’ WITH
ARCHIVEDIR’/home/dm_arch/arch’ UNTIL TIME’2018-11-16 10:56:40.624931’;
或者使用 RECOVER DATABASE…UNTIL LSN 命令恢复到指定的时间,执行以下命令:
Copy
RECOVER DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini’ WITH
ARCHIVEDIR’/home/dm_arch/arch’ UNTIL LSN 50857;
恢复 db_magic,执行以下命令:
Copy
RECOVER DATABASE ‘D:\dmdbms\data\DAMENG\dm.ini’ UPDATE DB_MAGIC;
图形工具库备份
用manager库备份
之后关闭数据库,用DM控制台工具恢复 console工具脱机备份
备份还原
恢复
更新
最后启动服务
恢复不重建索引
CREATE TABLE TAB_FOR_IDX_01(C1 INT);
insert into TAB_FOR_IDX_01 VALUES(1);
commit;
select * from TAB_FOR_IDX_01;
CREATE INDEX I_TAB_FOR_IDX_01 ON TAB_FOR_IDX_01 (C1);
select * from SYS.DBA_INDEXES where DBA_INDEXES.INDEX_NAME='I_TAB_FOR_IDX_01';
BACKUP TABLE TAB_FOR_IDX_01 BACKUPSET 'C:\dmdbms\bak\tab_bak_for_res_01';
delete TAB_FOR_IDX_01 where c1=1;
select * from TAB_FOR_IDX_01;
drop table TAB_FOR_IDX_01
drop index I_TAB_FOR_IDX_01
RESTORE TABLE TAB_FOR_IDX_01 FROM BACKUPSET 'C:\dmdbms\bak\tab_bak_for_res_01';
RESTORE TABLE TAB_FOR_IDX_01 WITHOUT INDEX FROM BACKUPSET 'C:\dmdbms\bak\tab_bak_for_res_01';
select * from TAB_FOR_IDX_01;
select * from SYS.DBA_INDEXES where DBA_INDEXES.INDEX_NAME='I_TAB_FOR_IDX_01';
BACKUP DATABASE TO XXXX BACKUPSET ‘c:\dmdbms\backup\test’;
c:\dmdbms\backup\test 会创建出一个test文件夹,该文件夹下的文件名:test.bak,test.meta,test_1.bak
BACKUP DATABASE TO XXXX xxx代表的是备份名
SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK', 'c:\dmdbms\backup\test');
SELECT * FROM V$BACKUPSET;
SELECT * FROM V$BACKUPSET;
完全备份
SQL>BACKUP DATABASE FULL BACKUPSET '/home/dm_bak';
增量备份
--不能加 TO RSGAGQ_POPWMS_FULL_BAK_ZL 否则报错
SQL>BACKUP DATABASE INCREMENT WITH BACKUPDIR '/home/dm_bak' BACKUPSET '/home/dm_bak_02';
DM 提供了一系列动态视图供用户查看备份集相关信息,在查看之前应先使用
SF_BAKSET_BACKUP_DIR_ADD 添加备份集目录,否则只显示默认备份路径下的备份集信
SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK', '/home/dm_bak');
V$BACKUPSET:显示备份集基本信息。
V$BACKUPSET_DBINFO:显示备份集的数据库相关信息。
V$BACKUPSET_DBF:显示备份集中数据文件的相关信息。
V$BACKUPSET_ARCH:显示备份集的归档信息。
V$BACKUPSET_BKP:显示备份集的备份片信息。
V$BACKUPSET_SEARCH_DIRS:显示备份集搜索目录。
V$BACKUPSET_TABLE:显示表备份集中备份表信息。
V$BACKUPSET_SUBS:显示并行备份中生成的子备份集信息。
SF_BAKSET_BACKUP_DIR_ADD 添加备份目录仅对当前会话有效。调用删除备份等函数或查看动态视图时要先调用 SF_BAKSET_BACKUP_DIR_ADD 添加备份目录,否则仅搜索默认备份路径下的备份集。
图形管理工具,添加备份工作目录时,不能通过浏览选择目录,否则添加后,不能读取到备份信息,
一定要通过复制粘贴这种形式
不要在“”备份“”上点刷新,刷新就没有备份信息了,在库备份上点刷新没事
脱机工具 DMRMAN
- 启动 RMAN 备份数据库,保证数据库处于正常退出的脱机状态。
RMAN>BACKUP DATABASE ‘/opt/dmdbms/data/DAMENG/dm.ini’ BACKUPSET ‘/home/dm_bak/db_full_bak_for_recover_dbmagic’;
- 准备目标库,可以使用备份库,也可以重新生成库或者直接指定目录还原。重新生
成库操作如下:
dminit path=/opt/dmdbms/data db_name=DAMENG_FOR_RESTORE auto_overwrite=1
- 校验备份。
RMAN>CHECK BACKUPSET ‘/home/dm_bak/db_full_bak_for_recover_dbmagic’;
- 还原数据库。
RMAN>RESTORE DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini’ FROM BACKUPSET '/home/dm_bak/db_full_bak_for_recover_dbmagic ';
- 恢复数据库。
RMAN>RECOVER DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini’ FROM BACKUPSET '/home/dm_bak/db_full_bak_for_recover_dbmagic ';
- 更新数据库。
RMAN>RECOVER DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini’ UPDATE DB_MAGIC;
联机备份
对联机备份的支持与限制:
- MPP 环境仅允许库和归档备份,且各节点都会执行,生成相应的备份集,支持 DDL
CLONE;
2)DSC 环境支持库备份、表空间备份和表备份,要求 DSC 环境的所有节点都处于 OPEN
状态;
-
MOUNT 状态仅支持归档备份;
-
SUSPEND 状态所有备份均不支持;
-
OPEN 状态支持所有备份,支持 DDL CLONE;
-
PRIMARY 模式支持所有备份,支持 DDL CLONE;
-
STANDBY 模式仅支持库级、表空间级和归档备份,支持 DDL CLONE;
-
DDL CLONE 必须备份归档,不允许指定 WITHOUT LOG。
联机还原:
仅支持表级还原,对联机还原的支持与限制:
-
MPP 和分布式数据库不支持;
-
PRIMARY 支持;
-
SUSPEND 状态所有还原均不支持;
-
OPEN/NORMAL 支持。
脱机备份
脱机备份支持库级和归档备份。
-
MPP 视同单机环境,仅当前节点执行备份操作;
-
允许异常退出后备份,支持 DDL_CLONE;
-
DSC 支持库级备份,支持 DDL_CLONE;当 DSC 环境下正常节点的 CKPT_LSN 小于
故障节点的 CKPT_LSN 时,不支持脱机备份;
- 分布式数据库不支持。
脱机还原:
脱机还原跟目标库所处的模式、状态以及集群环境(MPP 和 DSC)无关,允许库级、
表空间级和归档还原。分布式数据库仅支持库级脱机还原恢复。
在一般的应用场景中,常规性的数据库维护工作,即在不影响数据库正常运行的情况下,
建议定期执行联机数据库备份,且完全备份和增量备份结合使用。执行两次完全备份的时间
间隔可以尽量长一点,在两次完全备份之间执行一定数量的增量备份,比如,可以选择每周
执行一次完全备份,一周内每天执行一次增量备份。为了尽量减少对数据库正常工作的影响,
建议备份时间,选择在工作量较少的时间,比如深夜。
如果本地归档缺失,需要用户先修复归档然后再备份
备份表空间属于联机备份,必须配置归档。
备份表虽然是联机完全备份,但不需要配置归档。因为表在还原之后不需要再进行恢复操作,用不到归档日志。
备份归档日志必须配置归档。
查询 V D M A R C H I N I 、 V DM_ARCH_INI、V DMARCHINI、VARCH_STATUS
SQL> select * from V$ARCH_STATUS;
–启用归档
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
–添加归档,指定最大大小为100G
ALTER DATABASE ADD ARCHIVELOG ‘DEST=/dm8/arch/5236,TYPE=LOCAL,FILE_SIZE=256,SPACE_LIMIT=20480’;
ALTER DATABASE OPEN;
多路归档,指配置多个本地归档
dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm8/arch/5236
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 2048
2)编辑 dm.ini 文件,设置参数 ARCH_INI=1
配置远程归档
ARCH_INCOMING_PATH 设置为本地存储路径
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/dameng/arch_dsc0
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
[ARCH_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC1
ARCH_INCOMING_PATH = /dmdata/dameng/arch_dsc1
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
1.4****备份方式
当前仅支持备份集方式的备份还原,不再支持其他备份方式。备份还原实现策略有两种:
dmap 辅助进程方式和无辅助进程方式。用户可通过 DM.INI 参数 bak_use_ap 来选择
(dmrman 使用参数 use_ap),bak_use_ap 取值 1、2。默认为 1。
归档切换
alter database archivelog current;
alter system archive log current;
alter system switch logfile;
2 备份还原原理
2.1.4 归档修复
2.3.1 数据还原
2.3.1.1 库还原
库还原就是根据库备份集中记录的文件信息重新创建数据库文件,并将数据页重新拷贝到目标数据库的过程
2.3.1.2 表空间还原
表空间还原是根据库备份集或表空间备份集中记录的数据信息,重建目标表空间数据文件并拷贝数据页的过程,该过程不涉及日志操作
**表空间状态包括:ONLINE(联机状态)、OFFLINE(脱机状态)、**RES_OFFLINE
**(还原状态)、CORRUPT(损坏状态)。****V T A B L E S P A C E ∗ ∗ ∗ ∗ 表 的 ∗ ∗ ∗ ∗ S T A T U S TABLESPACE** **表的** **STATUS TABLESPACE∗∗∗∗表的∗∗∗∗STATUS**列值表
示 表 空 间 状 态 , 0/1/2/3 分 别 代 表 ONLINE 状 态 /OFFLINE 状 态
/RES_OFFLINE 状态**/CORRUPT** 状态。
表空间发生故障,比如还原失败(处于 RES_OFFLINE 状态)、表空间文件损坏
或缺失(处于 OFFLINE 状态),这两种故障情况下如果想直接删除表空间,不
考虑还原恢复的方式,则可以手动将表空间切换到 CORRUPT 状态,再执行删
除操作,否则无法删除。已经切换到 CORRUPT 状态后,仍然允许再次执行还
**原恢复,**CORRUPT **语法可参考《**DM8_SQL 语言使用手册》。
2.3.1.3 表还原
只支持在联机状态下执行
表还原是表备份的逆过程,表还原从表备份集中读取数据替换目标表,将目标表还原成备份时刻的状态。表还原主要包括三部分内容:表结构还原、数据还原、以及重建索引和约束。
2.3.2 数据恢复–重做 REDO 日志
将数据库恢复到一致性状态,并执行更新 DB_MAGIC 的过程
只有库备份和表空间备份还原后,需要执行数据恢复,表还原结束后,不需要执行数据恢复
可以通过下列语句查看系统的 PERMANENT_MAGIC 和 DB_MAGIC 值。魔数
SELECT PERMANENT_MAGIC;
SELECT DB_MAGIC FROM V$RLOG;
3 备份还原实战
3.2使用联机执行 SQL 语句进行备份还原
联机方式支持数据库、用户表空间、用户表和归档的备份,用户表的还原 在进行联机库级备份、归档备份和表空间备份时,必须保证系统处于归档模式
当 DM 建库参数的编码方式与操作系统编码方式不一致时,使用中文文件名或路径名等可能造成控制台打印信息和日志文件中的信息的中文部分显示乱码
可备份数据库:
3.2.2 数据备份
SQL>BACKUP DATABASE BACKUPSET ‘db_bak_01’;====/dm8/data/DAMENG/bak
例 3.1 指定备份集路径为“/home/dm_bak/db_bak_3_01”。
SQL>BACKUP DATABASE BACKUPSET ‘/home/dm_bak/db_bak_3_01’;
例 3.2 创建备份集,备份名设置为“WEEKLY_FULL_BAK”。
SQL>BACKUP DATABASE TO WEEKLY_FULL_BAK BACKUPSET ‘/home/dm_bak/db_bak_3_02’;
例 3.4 创建备份为备份集添加描述信息为“完全备份”。
SQL>BACKUP DATABASE BACKUPSET ‘/home/dm_bak/db_bak_3_04’ BACKUPINFO ‘完全备份’;
例 3.5 创建备份限制备份片大小为 300M。
SQL> BACKUP DATABASE BACKUPSET ‘/home/dm_bak/db_bak_3_05’ MAXPIECESIZE 300;
例 3.6 执行备份压缩,压缩级别设置为 5。
SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_06’COMPRESSED LEVEL 5;
例 3.7 创建并行备份,指定并行数为 8。
SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_07’PARALLEL 8;
3.2.2.1.3 备份数据库
执行数据库备份,数据库必须处于 OPEN 状态
完全备份
SQL>BACKUP DATABASE FULL BACKUPSET ‘/home/dm_bak/db_full_bak_01’;
增量备份
累积增量备份,还需要指定 CUMULATIVE
增量备份指基于指定的库(或者表空间)的某个备份(完全备份或者增量备份)
SQL>BACKUP DATABASE INCREMENT WITH BACKUPDIR ‘/home/dm_bak’ BACKUPSET ‘/home/dm_bak/db_increment_bak_02’;
3.2.2.2 表空间备份
SQL>BACKUP TABLESPACE MAIN BACKUPSET ‘ts_bak_01’;
增量备份指定基备份目录
SQL>BACKUP TABLESPACE MAIN BACKUPSET ‘ts_full_bak_01’;
SQL>BACKUP TABLESPACE MAIN INCREMENT BACKUPSET ‘ts_increment_bak_01’;
SQL>BACKUP TABLESPACE MAIN INCREMENT BASE ON BACKUPSET ‘ts_full_bak_01’ BACKUPSET ‘ts_increment_bak_02’;
完全备份
表空间必须处于 OPEN 状态
SQL>BACKUP TABLESPACE MAIN FULL BACKUPSET ‘/home/dm_bak/ts_full_bak_01’;
增量备份
SQL>BACKUP TABLESPACE MAIN INCREMENT WITH BACKUPDIR '/home/dm_bak’BACKUPSET ‘/home/dm_bak/ts_increment_bak_02’;
3.2.2.3 表备份
不需要服务器配置归档
SQL>BACKUP TABLE TAB_01 BACKUPSET ‘tab_bak_01’;
完整的备份表步骤如下:
-
保证数据库处于 OPEN 状态。
-
创建待备份的表 TAB_01:
SQL>CREATE TABLE TAB_01(C1 INT);
- DIsql 中输入备份表语句,简单的备份语句如下:
SQL>BACKUP TABLE TAB_01 BACKUPSET ‘/home/dm_bak/tab_bak_01’;
3.2.2.4 归档备份
SQL>BACKUP ARCHIVE LOG ALL BACKUPSET ‘arch_bak_01’;
数据库处于 OPEN 或者 MOUNT 状态
首先,确定 LSN 范围。
SQL>select ARCH_LSN, CLSN, PATH from V$ARCH_FILE;
其次,备份归档。
SQL>BACKUP ARCHIVELOG LSN BETWEEN 45213 AND 45215 BACKUPSET ‘/home/dm_bak/arch_bak_time_14-78’;
3.2.3 数据备份高级主题
加密和跟踪
SQL>BACKUP DATABASE BACKUPSET ‘/home/dm_bak/db_bak_for_encrypt’ IDENTIFIED BY “cdb546789”;
SQL>BACKUP DATABASE BACKUPSET ‘/home/dm_bak/db_bak_for_encrypt’ IDENTIFIED BY “cdb546789” ENCRYPT WITH RC4;
SQL>BACKUP DATABASE BACKUPSET ‘/home/dm_bak/db_bak_for_trace’ TRACE FILE’/home/dm_log/db_trace.log’ TRACE LEVEL 1;
3.2.4 管理备份–函数视图
3.2.4.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:批量删除满足指定条件的所有备份集。
SP_DB_BAKSET_REMOVE_BATCH:批量删除指定时间之前的数据库备份集。
SP_TS_BAKSET_REMOVE_BATCH:批量删除指定表空间对象及指定时间之前的表空间备份集。
SP_TAB_BAKSET_REMOVE_BATCH:批量删除指定表对象及指定时间之前的表备份集。
SP_ARCH_BAKSET_REMOVE_BATCH:批量删除指定条件的归档备份集。备份管理相关动态视图总结如下:
V$BACKUPSET:显示备份集基本信息。
V$BACKUPSET_DBINFO:显示备份集的数据库相关信息。
V$BACKUPSET_DBF:显示备份集中数据文件的相关信息。
V$BACKUPSET_ARCH:显示备份集的归档信息。
V$BACKUPSET_BKP:显示备份集的备份片信息。
V$BACKUPSET_SEARCH_DIRS:显示备份集搜索目录。
V$BACKUPSET_TABLE:显示表备份集中备份表信息。
V$BACKUPSET_SUBS:显示并行备份中生成的子备份集信息。
SF_BAKSET_BACKUP_DIR_ADD 添加备份目录仅对当前会话有效。调用删除
备份等函数或查看动态视图时要先调用 SF_BAKSET_BACKUP_DIR_ADD 添
加备份目录,否则仅搜索默认备份路径下的备份集。
3.2.4.2 备份目录管理
SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD(‘DISK’,’/home/dm_bak’);
SQL>SELECT SF_BAKSET_BACKUP_DIR_REMOVE(‘DISK’,’/home/dm_bak’);
SQL>SELECT SF_BAKSET_BACKUP_DIR_REMOVE_ALL();
3.2.4.3 备份集校验与删除
SQL>BACKUP DATABASE FULL BACKUPSET ‘/home/dm_bak/db_bak_for_check’;
SQL> SELECT SF_BAKSET_CHECK(‘DISK’,’/home/dm_bak/ db_bak_for_check’);
3.2.4.4 备份信息查看
在查看之前应先使用SF_BAKSET_BACKUP_DIR_ADD 添加备份集目录,否则只显示默认备份路径下的备份集信息
V$BACKUPSET
V$BACKUPSET 显示备份集基本信息
SQL>BACKUP DATABASE FULL BACKUPSET ‘/home/dm_bak/db_bak_for_info’;
SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD(‘DISK’, ‘/home/dm_bak’);
SQL>SELECT DEVICE_TYPE,BACKUP_PATH, TYPE, RANGE# FROM V$BACKUPSET;
V$BACKUPSET_DBINFO
V$BACKUPSET_DBINFO 显示备份集的数据库相关信息
下面以创建表备份为例,查看备份集的页大小、簇大小、大小写是否敏感、UNICODE_FLAG 等数据库信息:
SQL>BACKUP TABLE TAB_01 BACKUPSET ‘/home/dm_bak/tab_bak_01’;
SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD(‘DISK’, ‘/home/dm_bak’);
SQL>SELECT BACKUP_PATH, PAGE_SIZE, EXTENT_SIZE, CASE_SENSITIVE FROM V$BACKUPSET_DBINFO WHERE BACKUP_PATH=’/home/dm_bak/tab_bak_01’;
V$BACKUPSET_DBF
显示备份集中数据文件的相关信息,表备份时无效
SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD(‘DISK’, ‘/home/dm_bak’);
SQL>SELECT FILE_SEQ, TS_ID, FILE_ID, TS_NAME, FILE_NAME FROM V$BACKUPSET_DBF
WHERE BACKUPPATH =’/home/dm_bak/ts_bak_for_dbf’;
V$BACKUPSET_ARCH
显示备份集中归档文件的信息,且仅归档备份才会有数据。
SQL>SELECT
SF_BAKSET_BACKUP_DIR_ADD(‘DISK’, ‘/home/dm_bak’);
SQL>SELECT BACKUPPATH, FILE_SEQ, BEGIN_LSN, END_LSN FROM V$BACKUPSET_ARCH
WHERE BACKUPPATH=’/home/dm_bak/db_bak_for_arch’;
V$BACKUPSET_BKP
显示备份集的备份片信息。
SQL>SELECT BACKUPPATH, BKP_NTH, FILE_NAME, BKP_LEN FROM V$BACKUPSET_BKP WHERE
BACKUPPATH=’/home/dm_bak/db_bak_for_bkp’;
V$BACKUPSET_SEARCH_DIRS
显示备份集搜索目录
SQL>SELECT SF_BAKSET_BACKUP_DIR_REMOVE_ALL();
SQL>SELECT * FROM V$BACKUPSET_SEARCH_DIRS;
V$BACKUPSET_TABLE
显示表备份集中备份表信息,仅表备份有效
BACKUP TABLE TAB_FOR_INFO TO TAB_BAK_FOR_INFO BACKUPSET ‘/home/dm_bak/tab_bak_for_info’;
SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD(‘DISK’, ‘/home/dm_bak’);
SQL>SELECT BACKUPNAME, TABLENAME FROM V$BACKUPSET_TABLE WHERE BACKUPPATH=’/home/dm_bak/tab_bak_for_info’;
V$BACKUPSET_SUBS
显示并行备份中生成的子备份集信息
SQL>BACKUP DATABASE BACKUPSET ‘/home/dm_bak/db_bak_for_subs’ PARALLEL 3;
SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD(‘DISK’, ‘/home/dm_bak’);
SQL>SELECT BACKUPPATH, BKP_NUM, DBF_NUM FROM V$BACKUPSET_SUBS;
3.2.5 数据还原
3.2.5.1 表还原
表还原之后不需要恢复操作
SQL>RESTORE TABLE TAB_01 FROM BACKUPSET ‘tab_bak_01’;
- 保证数据库为 OPEN 状态。
CREATE TABLE TAB_FOR_RES_01(C1 INT);
SQL>BACKUP TABLE TAB_FOR_RES_01 BACKUPSET ‘/home/dm_bak/tab_bak_for_res_01’;
- 校验备份。此步骤为可选。
SQL>SELECT SF_BAKSET_CHECK(‘DISK’,’/home/dm_bak/tab_bak_for_res_01’);
- 还原表数据。
SQL>RESTORE TABLE TAB_FOR_RES_01 FROM BACKUPSET ‘/home/dm_bak/tab_bak_for_res_01’;
表中包含索引为例说明如何还原表
SQL>CREATE TABLE TAB_FOR_RES_02(C1 INT);
- 创建索引。
SQL>CREATE INDEX I_TAB_FOR_RES_02 ON TAB_FOR_RES_02(C1);
- 备份表。
SQL>BACKUP TABLE TAB_FOR_RES_02 BACKUPSET ‘/home/dm_bak/tab_bak_for_res_02’;
- 校验备份。此步骤为可选。
SQL>SELECT SF_BAKSET_CHECK(‘DISK’,’/home/dm_bak/tab_bak_for_res_02’);
- 执行表结构还原。表备份和表中都包含索引,如果直接执行表数据还原会报错:还原表中存在二级索引或冗余约束。
SQL>RESTORE TABLE TAB_FOR_RES_02 STRUCT FROM BACKUPSET ‘/home/dm_bak/tab_bak_for_res_02’;
- 执行表数据还原。
SQL>RESTORE TABLE TAB_FOR_RES_02 FROM BACKUPSET ‘/home/dm_bak/tab_bak_for_res_02’;
3.2.6 数据还原高级主题
3.2.6.1 表还原
恢复表的时候,先要有表结构
WITH INDEX WITHOUT INDEX:指定还原数据后是否重建二级索引,默认重建。
WITH CONSTRAINT WITHOUT CONSTRAINT:指定还原数据后是否重建约束,默认
重建
指定还原时不重建索引
SQL>CREATE TABLE TAB_FOR_IDX_01(C1 INT);
SQL>CREATE INDEX TAB_FOR_IDX_01 ON TAB_FOR_IDX_01 (C1);
- 备份表数据。
SQL>BACKUP TABLE TAB_FOR_IDX_01 BACKUPSET ‘/home/dm_bak/tab_bak_for_res_01’;
- 校验备份。此步骤为可选。
SQL>SELECT SF_BAKSET_CHECK(‘DISK’,’/home/dm_bak/tab_bak_for_res_01’);
- 还原表数据,但不重建索引。
drop table TAB_FOR_IDX_01;
SQL>RESTORE TABLE TAB_FOR_IDX_01 WITHOUT INDEX FROM BACKUPSET ‘/home/dm_bak/tab_bak_for_res_01’;
HOST rm -r /home/dm_bak/tab_bak_for_res_01;
指定还原时不重建约束
SQL>CREATE TABLE TAB_FOR_CONS_01(C1 INT);
SQL>CREATE INDEX I_TAB_FOR_CONS_01 ON TAB_FOR_CONS_01 (C1);
- 备份表数据。
SQL>BACKUP TABLE TAB_FOR_CONS_01 BACKUPSET ‘/home/dm_bak/tab_bak_for_res_03’;
SQL>SELECT SF_BAKSET_CHECK(‘DISK’,’/home/dm_bak/tab_bak_for_res_03’);
drop table TAB_FOR_CONS_01 ;
- 还原表数据,但不还原约束。
SQL>RESTORE TABLE TAB_FOR_CONS_01 WITHOUT CONSTRAINT FROM BACKUPSET ‘/home/dm_bak/tab_bak_for_res_03’;
删除索引或者约束
解决办法:
1.先恢复表结构
RESTORE TABLE t1 WITHOUT INDEX FROM BACKUPSET ‘t1_bak_03’;
2.再恢复数据
RESTORE TABLE t1 WITHOUT INDEX FROM BACKUPSET ‘t1_bak_03’;
3.3使用脱机工具 DMRMAN 进行备份还原
库级脱机备份、脱机还原、脱机恢复
通过 dm.ini 指定库时,dm.ini及其配置中的 CTL_PATH 必须有效,且库必须处于关闭状态;指定文件目录时,指定目录作为 SYSTEM_PATH 处理,可以存在,也可以不存在,但必须有效。目前目标库的还原仅支持脱机还原,可通过 DMRMAN 和 CONSOLE 工具实现
RMAN>HELP
RMAN>BACKUP DATABASE ‘/opt/dmdbms/data/DAMENG/dm.ini’;
调用脚本
RMAN>`/home/dm_cmd/cmd_file.txt
例如,创建一个名为 cmd_rman.txt 的文件,保存到/home/dmdba/dm_cmd 目录下,文件中包含一行如下所示的 DMRMAN 命令:
BACKUP DATABASE’/dm8/data/DAMENG/dm.ini’;设置 CTLFILE 参数启动 DMRMAN 工具,指定脚本文件中的命令将被执行:
先关闭数据库
./dmrman CTLFILE=/home/dmdba/dm_cmd/cmd_rman.txt
dmrman CTLSTMT=“BACKUP DATABASE ‘/dm8/data/DAMENG/dm.ini’;”
3.3.2.3 DMRMAN 环境配置CONFIGURE
恢复默认值
RMAN>CONFIGURE DEFAULT DEVICE CLEAR;
RMAN>CONFIGURE CLEAR;
配置备份集搜集目录
RMAN>CONFIGURE DEFAULT BACKUPDIR;
RMAN>CONFIGURE DEFAULT BACKUPDIR ‘/home/dm_bak1‟,’/home/dm_bak2’;
RMAN>CONFIGURE DEFAULT BACKUPDIR ADD ‘/home/dm_bak3’;
RMAN>CONFIGURE DEFAULT BACKUPDIR DELETE ‘/home/dm_bak3’;
配置归档日志搜集目录
RMAN>CONFIGURE DEFAULT ARCHIVEDIR;
RMAN>CONFIGURE DEFAULT ARCHIVEDIR ‘/home/dm_arch1‟,’/home/dm_arch2’;
RMAN>CONFIGURE DEFAULT ARCHIVEDIR ADD ‘/home/dm_arch3’;
RMAN>CONFIGURE DEFAULT ARCHIVEDIR DELETE ‘/home/dm_arch3’
配置跟踪日志文件
1)显示 TRACE 文件的默认配置。
RMAN>CONFIGURE DEFAULT TRACE;
- 配置默认 TRACE 文件。
RMAN>CONFIGURE DEFAULT TRACE FILE ‘/home/dm_trace/trace.log’;
- 配置默认 TRACE 级别。
RMAN>CONFIGURE DEFAULT TRACE LEVEL 2;
其中,TRACE 文件和 TRACE 级别也可以同时设置:
RMAN>CONFIGURE DEFAULT TRACE FILE '/home/dm_trace/trace.log ’ TRACE LEVEL 2;
3.3.3 数据备份
数据库需要设置归档和关闭数据库实例
RMAN>BACKUP DATABASE ‘/opt/dmdbms/data/DAMENG/dm.ini’;
默认的备份路径为 dm.ini 中BAK_PATH 的配置值,若未配置,则为 SYSTEM_PATH 下的 bak 目录
DDL_CLONE:数据库克隆。该参数只能用于完全备份中,表示仅拷贝所有的元数据不拷贝数据。如对于数据库中的表来说,只备份表的定义不备份表中数据
创建完全备份
RMAN>BACKUP DATABASE ‘/dm8/data/DAMENG/dm.ini’ FULL BACKUPSET ‘/home/dm_bak/db_full_bak_01’;
创建增量备份
RMAN>BACKUP DATABASE ‘/dm8/data/DAMENG/dm.ini’ INCREMENT WITH BACKUPDIR ‘/home/dm_bak’ BACKUPSET ‘/home/dm_bak/db_increment_bak_02’;
3.3.3.2 备份归档
RMAN>BACKUP ARCHIVE LOG DATABASE ‘/dm8/data/DAMENG/dm.ini’;
RMAN>BACKUP ARCHIVE LOG ALL DATABASE ‘/dm8/data/DAMENG/dm.ini’ BACKUPSET ‘/home/dm_bak/arch_all_bak_01’;
RMAN>BACKUP ARCHIVE LOG LSN BETWEEN 50000 AND 120000DATABASE
'/opt/dmdbms/data/DAMENG/dm.ini’BACKUPSET ‘/home/dm_bak/db_increment_bak_02’;
3.3.4 管理备份
RMAN> show backupset’/home/dm_bak/DB_FULL_DAMENG_20190522_133248_000770’
显示的备份集信息分为三类,依次是元数据信息(META INFO)、文件信息(FILE INFO)和数据库信息(DB INFO)
批量显示备份集信息
RMAN>BACKUP DATABASE ‘/opt/dmdbms/data/DAMENG/dm.ini’ BACKUPSET’/home/dm_bak1/db_bak_for_show_01’;
RMAN>BACKUP DATABASE ‘/opt/dmdbms/data/DAMENG/dm.ini’ BACKUPSET’/home/dm_bak2/db_bak_for_show_01’;
RMAN>SHOW BACKUPSETS WITH BACKUPDIR ‘/home/dm_bak1’,’/home/dm_bak2’
查看指定数据库所有备份集的信息
- 查看指定目录下数据库/opt/dmdbms/data/DAMENG 的所有备份集信息。
RMAN>SHOW BACKUPSETS WITH BACKUPDIR ‘/home/dm_bak’ USE DB_MAGIC 1447060265;
指定查看备份集的元数据信息
RMAN> show backupset’/home/dm_bak/DB_FULL_DAMENG_20190522_133248_000770’ info meta
3.3.4.3 备份集校验
RMAN>CHECK BACKUPSET ‘/home/dm_bak/db_bak_for_check_01’;
3.3.4.4 备份集删除
RMAN>REMOVE BACKUPSET ‘/home/dm_bak/db_bak_for_remove_01’;
备份集为其他备份集的基备份
RMAN>BACKUP DATABASE ‘/opt/dmdbms/data/DAMENG/dm.ini’ BACKUPSET’db_bak_for_remove_01’;
–增量备份之前,启动数据库,以便成功生成增量备份
RMAN>BACKUP DATABASE ‘/opt/dmdbms/data/DAMENG/dm.ini’ INCREMENT BACKUPSET’db_bak_for_remove_01_incr’;
RMAN>REMOVE BACKUPSET ‘db_bak_for_remove_01_incr’ DATABASE ‘/opt/dmdbms/data/DAMENG/dm.ini’ CASCADE;
批量删除所有备份集
RMAN>REMOVE BACKUPSETS WITH BACKUPDIR ‘/home/dm_bak’;
批量删除指定时间之前的备份集
RMAN>REMOVE BACKUPSETS WITH BACKUPDIR ‘/home/dm_bak’ UNTIL TIME’2019-6-1 00:00:00’;
3.3.4.5 备份集导出
3.3.4.6 备份集映射文件导出
导出原始路径
RMAN>DUMP BACKUPSET ‘/home/dm_bak/db_bak_3_01’ DEVICE TYPE DISK MAPPED FILE ‘/home/dm_bak/db_bak_3_01db_bak_mapped.txt’;
导出指定 INI_PATH 调整后的路径
RMAN>DUMP BACKUPSET’/mnt/dmsrc/db_bak’ DEVICE TYPE DISKDATABASE ‘/opt/dmdbms/data/DAMENG/dm.ini’ MAPPED FILE ‘/mnt/dmsrc/db_bak_mapped.txt’;
3.3.5 数据库还原和恢复
3.3.5.1 执行数据库还原和恢复
3.3.5.1.1 数据库还原
使用 RESTORE 命令完成脱机还原操作
数据库的还原包括数据库配置文件还原和数据文件还原,目 前 可 能需 要 还原 的数 据 库 配置 文 件包 括 dm.ini、 dm.ctl
通过 RESTORE 命令还原后的数据库不可用,需进一步执行 RECOVER 命令
- 联机备份数据库,保证数据库运行在归档模式及 OPEN 状态。
SQL>BACKUP DATABASE BACKUPSET ‘/home/dm_bak/db_full_bak_for_restore’;
- 准备目标库。还原目标库可以是已经存在的数据库,也可使用 dminit 工具初始
化一个新库。如下所示:
./dminit path=/opt/dmdbms/data db_name=DAMENG_FOR_RESTORE
- 校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验。
RMAN>CHECK BACKUPSET ‘/home/dm_bak/db_full_bak_for_restore’;
- 还原数据库。启动 DMRMAN,输入以下命令:
RMAN>RESTORE DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini’ FROM BACKUPSET ‘/home/dm_bak/db_full_bak_for_restore’;
---------还需要recover
3.3.5.1.2 *数据库恢复
从备份集恢复
- 启动 DIsql 联机备份数据库。
SQL>BACKUP DATABASE BACKUPSET ‘/home/dm_bak/db_full_bak_for_recover_backupset’;
- 准备目标库,可以使用备份库,也可以重新生成库。重新生成库操作如下:
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_backupset’;
- 还原数据库。
RMAN>RESTORE DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini’ FROM BACKUPSET ‘/home/dm_bak/db_full_bak_for_recover_backupset’;
- 恢复数据库。
RMAN>RECOVER DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini’ FROM BACKUPSET ‘/home/dm_bak/db_full_bak_for_recover_backupset’;
execute ‘recover database … update db_magic’ in dmrman.
从归档恢复
从归档恢复是利用重做本地归档日志来恢复数据的过程。从归档恢复允许恢复到指定的
时间点及指定的 LSN 值。若同时指定了时间点和 LSN,则以较早的为结束点
除了下文这两种情况,其他情况**(可能导致数据被破坏)不建议用户使用从本地归档恢复。**
- 启动 DIsql 联机备份数据库,以及备份从检查点开始的本地归档日志。
select ckpt_lsn from v$rlog;
SQL>BACKUP ARCHIVELOG FROM LSN 421401 BACKUPSET ‘/home/dm_bak/arch_bak_lsn_421401’;
SQL>BACKUP DATABASE BACKUPSET ‘/home/dm_bak/db_full_bak_for_recover_arch’;
- 准备目标库,可以使用备份库,也可以重新生成库。
如果使用原备份库,且备份库故障,需要先执行目标库归档修复:
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;
- 利用归档恢复数据库。由步骤 5 显示的备份集信息可知,源库的 DB_MAGIC 值为
1447060265。
RMAN>RECOVER DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini’ WITH ARCHIVEDIR’/home/dm_arch/arch’ USE DB_MAGIC 1447060265;
若还原后,立即执行恢复,可以不用指定 DB_MAGIC 。
./dmrachk arch_path=/home/dm_arch/arch
DMRMAN 查看归档备份的范围:
RMAN>show backupset ‘/home/dm_bak/arch_bak_lsn_421401’ INFO META;
RMAN>RESTORE ARCHIVELOGFROM BACKUPSET ‘/home/dm_bak/arch_bak_lsn_421401’ ALL TO ARCHIVEDIR ‘/home/dm_arch/arch’;
3.3.5.1.3 数据库更新
RECOVER DATABASE ‘<INI 文件路径>’ UPDATE DB_MAGIC;
3.3.5.2 执行数据库还原和恢复:高级场景
3.3.5.2.1 数据库还原
本节主要介绍数据库还原的高级过程,指定映射文件还原。
指定映射文件还原
可以手动修改自动生成的映射文件。当参数 BACKUPSET 和 MAPPED FILE 指定的路径不一致时,以 MAPPED FILE 中指定的路径为主
下面以脱机备份还原为例说明使用映射文件还原的具体步骤。
- 启动 RMAN,脱机备份数据库。
RMAN> BACKUP DATABASE ‘/dm/data/DAMENG/dm.ini’ BACKUPSET ‘/home/dm_bak/db_bak_for_map_01’;
- 生成映射文件 map_file_01.txt 至/home/dm_mapfile 目录。此处指定生成
映射文件中的数据文件路径与数据库/opt/dmdbms/data/DAMENG_FOR_RESTORE 中的
数据文件一致。若不指定,与备份集中的源数据库的数据文件路径一致。
RMAN>DUMP BACKUPSET ‘/home/dm_bak/db_bak_for_map_01’ DATABASE ‘/dm/data/DAMENG/dm.ini’ MAPPED FILE ‘/home/dm_mapfile/map_file_01.txt’;
cat /home/dm_mapfile/map_file_01.txt
如果需要恢复数据文件或镜像文件到指定路径,可手动编辑映射文件中表空间对应的data_path 属性。例如,要还原 MAIN 表空间中的数据文件 MAIN.DBF 到/home/dm_dbf路径下,修改组 DAMENG_MAIN_FIL_0 的内容如下
data_path = /home/dm_dbf/MAIN.DBF
- 指定映射文件还原。还原前可选择对备份文件进行校验。
RMAN> RESTORE DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini’ FROM BACKUPSET ‘/home/dm_bak/db_bak_for_map_01’ MAPPED FILE ‘/home/dm_mapfile/map_file_01.txt’;
3.3.5.2.2 数据库恢复
不完全恢复
恢复数据库到指定时间点**/LSN**
- 准备数据。
SQL>CREATE TABLE TAB_FOR_RECOVER_01(C1 INT);
SQL>INSERT INTO TAB_FOR_RECOVER_01 VALUES(1);
SQL>COMMIT;
- 备份数据库。
SQL>BACKUP DATABASE BACKUPSET ‘/home/dm_bak/db_full_bak_for_time_lsn’;
- 正确操作数据库,产生一些归档。
SQL>CREATE TABLE TAB_FOR_RECOVER_02(C1 INT);
SQL>INSERT INTO TAB_FOR_RECOVER_02 VALUES(1);
SQL>COMMIT;
SQL> SELECT SYSDATE; SELECT CURRENT_TIMESTAMP FROM dual;
LINEID SYSDATE
1 2021-01-12 14:45:06.153563 +08:00
SELECT FILE_LSN FROM V$RLOG;
74695
- 误操作数据库。此步骤误删除了表 TAB_FOR_RECOVER_01 中数据。
SQL>DELETE FROM TAB_FOR_RECOVER_01;
SQL>COMMIT;
SQL> SELECT SYSDATE ;
LINEID SYSDATE
1 2021-01-12 11:12:56
SELECT FILE_LSN FROM V$RLOG
- 还原数据库。步骤 4)为误操作,因此我们需要将数据库恢复到步骤 3)的状态。
首先需要还原数据库:
RMAN> RESTORE DATABASE ‘/dm/data/DAMENG/dm.ini’ FROM BACKUPSET ‘/home/dm_bak/db_full_bak_for_time_lsn’;
- 恢复数据库到指定时间点/LSN。还原后数据库的数据与备份时一致,如果要恢复数据库至步骤 3)的状态可以指定 UNTIL TIME 或 UNTIL LSN 参数重做部分归档。
使用 RECOVER DATABASE…UNTIL TIME 命令恢复到指定的时间:
RMAN>RECOVER DATABASE ‘/dm/data/DAMENG/dm.ini’ WITH ARCHIVEDIR ‘/home/dm_arch/arch ’ UNTIL TIME’ 2020-12-11 08:58:20.901552’;
或者使用 RECOVER DATABASE…UNTIL TIME 命令恢复到指定的 LSN:
RMAN>RECOVER DATABASE ‘/dm8/data/DAMENG/dm.ini’ WITH ARCHIVEDIR /home/dm_arch/arch ’ UNTIL LSN 72195;
- 更新数据库。
RMAN>RECOVER DATABASE ‘/dm/data/DAMENG/dm.ini’ UPDATE DB_MAGIC;
主备环境下指定 DB_MAGIC 收集归档
主备环境下,如果当前节点的归档缺失,使用归档进行恢复时,会由于归档日志不连续而报错,无法将数据库恢复到最新状态。如果另一节点保存有该部分日志,则可以使用该节点日志进行恢复
恢复阶段收集归档时只收集与待恢复库 DB_MAGIC、
PERMANENT_MAGIC 一致的归档文件,而在主备环境中 PERMANNET_MAGIC 是一致的,此时可通过指定 DB_MAGIC 跳过这一限制。
1) 搭建主备环境并备份任意节点。
RMAN>BACKUP DATABASE ‘/dm8/dg-data/dg/dm.ini’ BACKUPSET ‘/home/dm_bak/db_full_bak’;
2) 启动主备,登录主节点插入部分数据后退出,然后删除该节点下所有归档日志。
3) 指定备份集还原到主节点。
RMAN>RESTORE DATABASE ‘/opt/dmdbms/data0/DAMENG/dm.ini’ FROM BACKUPSET ‘/home/dm_bak/db_full_bak’;
4) 指定 DB_MAGIC,使用备库归档进行恢复。由于该节点下所有归档已被删除,无法恢复到最新状态,此时需要借助备库存在的归档。
RMAN>RECOVER DATABASE ‘/opt/dmdbms/data0/DAMENG/dm.ini’ WITH ARCHIVEDIR ‘/opt/dmdbms/data1/arch’ USE DB_MAGIC 1447060264;
DMDSC 环境下的数据库恢复
-
搭建 DMDSC 环境,每个节点都需要配置双向的远程归档。
-
启动 DIsql,联机备份数据库。备份其中任意一个节点即可备份整个 DMDSC 环境。
SQL>BACKUP DATABASE BACKUPSET ‘/home/dm_bak/db_full_bak_for_dsc’;
- 还原数据库。还原数据库之前可选择对备份文件进行校验。需要注意的是,待还原
的目标库可以是单机库,也可以是 DMDSC 库,且节点个数允许不同。
RMAN> RESTORE DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini’ FROM BACKUPSET ‘/home/dm_bak/db_full_bak_for_dsc’;
- 恢复数据库。DMDSC 库恢复要求各节点归档完整性由用户保证
RMAN>RECOVER DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini’ WITH ARCHIVEDIR’/dmdata/dameng/arch_dsc0’,’/dmdata/dameng/arch_dsc1’;
- 数据库更新
RMAN>RECOVER DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini’ UPDATE DB_MAGIC
多次故障恢复后使用不同数据库归档恢复
-
创建一个数据库 D1。
-
操作数据库并执行数据库备份 B1。
-
继续操作数据库的过程中数据库故障,此时生成的归档为 A1。
-
利用备份 B1 和归档 A1 将数据库 D1 恢复到目标库 D2,此时数据库 D2 为 D1 故障前的状态。
-
启动数据库 D2,操作数据库过程中数据库第二次故障,此时生成的归档为 A2。归档 A1、A2 属于不同的数据库,使用备份 B1 和归档 A1、A2 是否可以恢复数据库到第二次故障发生前的状态呢?答案是肯定的
./dminit path=/opt/dmdbms/data
./dmserver /opt/dmdbms/data/DAMENG/dm.ini
–连接数据库配置归档
SQL>ALTER DATABASE MOUNT;
SQL>ALTER DATABASE ADD ARCHIVELOG ‘DEST = /home/dm_arch/arch, TYPE = local, FILE_SIZE = 1024, SPACE_LIMIT = 2048’;
SQL> ALTER DATABASE ARCHIVELOG;
SQL>ALTER DATABASE OPEN;
- 操作数据库的同时备份数据库,备份集为 B1。此处以向表中循环插入数据为例来操作数据库。
SQL>DROP TABLE TAB_FOR_RECOVER;
SQL>CREATE TABLE TAB_FOR_RECOVER(C1 INT);
SQL>BEGIN
FOR I IN 1…100000 LOOP
INSERT INTO TAB_FOR_RECOVER VALUES(I);
COMMIT;
END LOOP;
END;
/
–插入数据的同时,另外一个会话备份数据库
SQL>BACKUP DATABASE FULL TO B1 BACKUPSET ‘/home/dm_bak/B1’ DEVICE TYPE DISK BACKUPINFO ‘DAMENG FULL BACKUP ONLINE’ MAXPIECESIZE 2048;
-
继续向数据库插入数据一段时间后关掉数据库实例,模拟数据库故障。从备份后到数据库故障这段时间的生成的归档称为 A1。
-
创建目标库 D2,即待还原的库,并配置归档(参考 3.1.2 归档配置),归档目录与数据库 D1 相同。
./dminit path=/opt/dmdbms/data db_name=DAMENG_FOR_RES
dmserver /opt/dmdbms/data/DAMENG_FOR_RES/dm.ini
- 启动DMRMAN工具,利用备份集B1和归档A1恢复数据库D2到D1故障前的状态。
RMAN>RESTORE DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RES/dm.ini’ FROM BACKUPSET ‘/home/dm_bak/B1’;
RMAN>RECOVER DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RES/dm.ini’ WITH ARCHIVEDIR ‘/home/dm_arch/arch’;
RMAN>RECOVER DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RES/dm.ini’ UPDATE DB_MAGIC;
启动目标库 D2,向数据库中继续插入数据。
./dmserver /opt/dmdbms/data/DAMENG/dm.ini
SQL>BEGIN
FOR I IN 1…100000 LOOP
INSERT INTO TAB_FOR_RECOVER VALUES(I);
COMMIT;
END LOOP;
END;
/
-
插入数据一段时间后,关掉数据库实例,模拟数据库第二次故障。数据库 D2 启动到第二次故障之间产生的归档为 A2
-
恢复目标库D2到第一次故障前的状态。恢复一次,目标库的DB_MAGIC都会改变,
因此归档 A1、A2 的 DB_MAGIC 不同,属于不同的数据库。第一次恢复只能先重做归档 A1,
即恢复到第一次故障前的状态。
RMAN>RESTORE DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RES/dm.ini’ FROM BACKUPSET ‘/home/dm_bak/B1’;
RMAN>RECOVER DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RES/dm.ini’ WITH ARCHIVEDIR ‘/home/dm_arch/arch’;
- 查看归档 A2 的 DB_MAGIC。
./dmrachk arch_fil=/home/dm_arch/arch/ARCHIVE_LOCAL1_2019061208085947282.log
- 利用归档 A2 恢复数据库至第二次故障前的状态。从归档恢复时,默认使用目标库的 DB_MAGIC,此时目标库 DB_MAGIC 值被替换为 B1 备份集源库 DB_MAGIC,与归档 A2DB_MAGIC 值不一致,无法利用该部分归档恢复到最新状态。此时可使用 USE DB_MAGIC语法,指定 DB_MAGIC 值为待恢复归档的 DB_MAIGC 值即可。
RMAN>RECOVER DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RES/dm.ini’ WITH ARCHIVEDIR ‘/home/dm_arch/arch’ USE DB_MAGIC 1449535319 ;
- 更新数据库。
RMAN>RECOVER DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RES/dm.ini’ UPDATE DB_MAGIC;
3.3.6 表空间还原和恢复
3.3.6.1 执行表空间还原和恢复
3.3.6.1.1 表空间还原
RESTORE 命令完成表空间的脱机还原,还原的备份集可以是联机或脱机生成的库备份集,也可以是联机生成的表空间备份集 。脱机表空间还原仅涉及表空间数据文件的重建与数据页的拷贝。不需要事先置目标表空间为 OFFLINE 状态。表空间还原后,表空间状态被置为 RES_OFFLINE , 并 设 置 数 据 标 记FIL_TS_RECV_STATE_RESTORED,表示已经过还原但数据不完整。
使用说明:
\1. 表空间还原不能是 TEMP 表空间,指定文件还原也不能为 TEMP 表空间中文件。
\2. 表空间还原要求还原目标库与备份库为同一个库,且若还原目标库中 SYSTEM 表空间没有故障且还原目标表空间不是 SYSTEM 表空间的话,则要求目标库校验通过,比如加密校验和日志校验等;否则将使用备份集中信息与当前的进行校验。
\3. 还原目标库不能为已经执行过 restore,但是未指定过 recover 的库。
\4. SYSTEM 表空间和 ROLL 表空间不允许指定 UNTIL LSN 或者 UNTIL TIME 还原;其他用户表空间可以。若未指定 UNTIL TIME 或者 UNTIL LSN,则均还原到最新状态。使用 UNTIL TIME(或者 UNTIL LSN)的同时不能指定 DATAFILE 还原,否则报语法错误。
\5. 处于 RES_OFFLINE 或 CORRUPT 状态的表空间不允许指定表空间中数据文件还原。
\6. 整个还原过程中不会修改数据库本身状态或者调整 CKPT_LSN。
\7. 不管是 DSC 环境,还是单机环境,若异常退出,需手动指定各节点归档修复后,使用各节点完整的归档日志执行还原恢复;否则,将可能无法恢复到最新。
\8. 异常退出库指定 UNTIL TIME 或者 UNTIL LSN 还原失效,因为库故障重启时会执行故障修复,UNTIL 失效,表空间仍会恢复到最新状态。
\9. 若目标库中 SYSTEM 表空间故障,则必须优先还原 SYSTEM 表空间。在 DMDSC 环境中进行表空间还原,需要先确保所有节点实例都已退出,此时在任一节点上使用该节点的备份集均可进行表空间还原操作,且只要在一个节点上执行目标表空间还原即可。
10.如果 SYSTEM 表空间处于 ONLINE/OFFLINE 状态且文件丢失,则必须要通过库还原修复,不支持对其执行表空间还原
以联机表空间备份集为例,展示 DMRMAN 如何完成表空间的还原
- 联机备份数据库,保证数据库运行在归档模式及 OPEN 状态。
SQL>BACKUP TABLESPACE MAIN BACKUPSET ‘/home/dm_bak/ts_full_bak_for_restore’;
- 校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验。
RMAN>CHECK BACKUPSET ‘/home/dm_bak/ts_full_bak_for_restore’;
- 还原表空间。需要注意,表空间还原的目标库只能是备份集产生的源库,否则将
报错。启动 DMRMAN,输入以下命令:
RMAN>RESTORE DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RES/dm.ini’ TABLESPACE MAIN FROM BACKUPSET ‘/home/dm_bak/ts_full_bak_for_restore’;
3.3.6.1.2 表空间恢复
表空间恢复通过重做 REDO 日志,以将数据更新到一致状态。
恢复完成后,表空间状态置为 ONLINE,并设置数据标记为 FIL_TS_RECV_STAT_RECOVERED,表示数据已恢复到一致状态。
- 联机备份数据库,保证数据库运行在归档模式及 OPEN 状态。
SQL>BACKUP TABLESPACE MAIN BACKUPSET ‘/home/dm_bak/ts_full_bak_for_recover’;
- 校验备份,校验待还原备份集的合法性,此处使用脱机校验。
RMAN>CHECK BACKUPSET ‘/home/dm_bak/ts_full_bak_for_recover’;
- 还原表空间。启动 DMRMAN,输入以下命令:
RMAN>RESTORE DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RECOVER/dm.ini’ TABLESPACE MAIN FROM BACKUPSET ‘/home/dm_bak/db_full_bak_for_recover’;
- 恢复表空间。启动 DMRMAN,输入以下命令:
RMAN>RECOVER DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RECOVER/dm.ini’ TABLESPACE MAIN;
3.3.6.2 执行表空间还原和恢复:高级场景
3.3.6.2.1 表空间还原
还原表空间中指定的数据文件
DM 不仅支持从数据库备份和表空间备份中还原表空间,还支持还原表空间中特定的数据文件
- 创建待备份的表空间 TS_FOR_RES_01, 并在库目录下创建 3 个数据文件。
SQL>CREATE TABLESPACE TS_FOR_RES_01 DATAFILE’ts_for_res_01_01.dbf’ SIZE 128;
SQL>ALTER TABLESPACE TS_FOR_RES_01 ADD DATAFILE’ts_for_res_01_02.dbf’ SIZE 128;
SQL> ALTER TABLESPACE TS_FOR_RES_01 ADD DATAFILE’ts_for_res_01_03.dbf’ SIZE 128;
- 备份表空间。
SQL>BACKUP TABLESPACE TS_FOR_RES_01 BACKUPSET ‘/home/dm_bak/ts_bak_for_dbf’;
- 查询数据文件的文件编号或路径。还原指定的数据文件需知道数据文件对应的文件编号或路径,相关信息可通过查询动态视图 V$DATAFILE 获取。
SQL>SELECT ID, PATH FROM V$DATAFILE;
- 校验备份。此步骤为可选。
RMAN>CHECK BACKUPSET „/home/dm_bak/ts_bak_for_dbf‟;
- 通过文件编号还原表空间 TS_FOR_RES_01 中的数据文件 ts_for_res_01_02.dbf 和 ts_for_res_01_03.dbf。
RMAN>RESTORE DATABASE „/home/xm/DAMENG/dm.ini‟TABLESPACE TS_FOR_RES_01 DATAFILE 1, 2 FROM BACKUPSET ‘/home/dm_bak/ts_bak_for_dbf’;
- 如果不想使用文件编号还原,使用指定数据文件路径还原数据文件的语句如下:
SQL>RESTORE TABLESPACE TS_FOR_RES_01 DATAFILE ‘/home/xm/DAMENG/ts_for_res_01_02.dbf’, ‘/home/xm/DAMENG/ts_for_res_01_03.dbf’ FROM BACKUPSET ‘/home/dm_bak/ts_bak_for_dbf’;
指定映射文件还原
- 备份 MAIN 表空间。
SQL>BACKUP TABLESPACE MAIN BACKUPSET ‘/home/dm_bak/ts_bak_for_map’;
- 创建映射文件
使用 DMRMAN 的 DUMP 命令生成映射文件 map_file.txt
- 还原 MAIN 表空间。
RMAN>RESTORE DATABASE „/home/xm/DAMENG/dm.ini‟ TABLESPACE MAIN FROM BACKUPSET ‘/home/dm_bak/ts_bak_for_map’MAPPED FILE’/home/dm_mappedfile/map_file.txt’;
3.3.6.2.2 表空间恢复
由于磁盘空间的影响,数据库归档可能出现分布在多个目录的情况。出现这种情况时就需要指定归档目录还原。还原时指定多个归档目录的操作步骤如下
- 备份用户表空间 MAIN
SQL>BACKUP TABLESPACE MAIN BACKUPSET ‘/home/dm_bak/ts_bak_for_arch’;
- 校验备份。此步骤可选。
RMAN>CHECKBACKUPSET '/home/dm_bak/ts_bak_for_arch‟;
- 还原用户表空间 MAIN。假设归档日志分布在目录为/home/dm_arch1 和
/home/dm_arch2 两个目录下。
RMAN>RECOVER DATABASE „/home/xm/DAMENG/dm.ini‟ TABLESPACE MAIN FROM BACKUPSET ‘/home/dm_bak/ts_bak_for_arch’ WITH ARCHIVEDIR’/home/dm_arch1’, ‘/home/dm_arch2’;
主备环境下指定 DB_MAGIC 收集归档
- 搭建主备环境并登录任意节点进行备份。
SQL>BACKUP TABLESPACE MAIN BACKUPSET ‘/home/dm_bak/ts_bak_for_arch’;
-
登录主节点插入部分数据后退出,然后删除该节点下所有归档日志。
-
从备份集还原表空间 MAIN 到主节点。
RMAN>RESTORE DATABASE „/home/xm/DAMENG/dm.ini‟ TABLESPACE MAIN FROM BACKUPSET ‘/home/dm_bak/ts_bak_for_arch’;
- 指定 DB_MAGIC,使用备库归档进行恢复。由于主节点下所有归档已被删除,无法
恢复到最新状态,此时需要借助备库存在的归档。
RMAN>RECOVER DATABASE „/home/xm/DAMENG/dm.ini‟ TABLESPACE MAIN FROM BACKUPSET
‘/home/dm_bak/ts_bak_for_arch’ WITH ARCHIVEDIR’ ‘/home/dm_arch2’ USE DB_MAGIC 18446520;
3.3.7 归档还原
使用 RESTORE 命令完成脱机还原归档操作,在还原语句中指定归档备份集。备份集可以是脱机归档备份集,也可以是联机归档备份集
- 联机备份归档,保证数据库运行在归档模式及 OPEN 状态。
SQL>BACKUP ARCHIVE LOG ALL BACKUPSET ‘/home/dm_bak/arch_all_for_restore’;
- 校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验。
RMAN>CHECK BACKUPSET ‘/home/dm_bak/arch_all_for_restore’;
- 还原归档。启动 DMRMAN,设置 OVERWRITE 为 2,如果归档文件已存在,会报错。
RMAN>RESTORE ARCHIVE LOG FROM BACKUPSET ‘/home/dm_bak/arch_all_for_restore’ TO
DATABASE ‘/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini’ OVERWRITE 2;
或者
RMAN>RESTORE ARCHIVE LOG FROM BACKUPSET ‘/home/dm_bak/arch_all_for_restore’ TO ARCHIVEDIR’/opt/dmdbms/data/DAMENG_FOR_RESTORE/arch_dest’ OVERWRITE 2;
3.3.8 归档修复
使用 REPAIR 命令完成指定数据库的归档修复,归档修复会将目标库 dmarch.ini 中配置的所有本地归档日志目录执行修复。若目标库没有配置本地归档,则不执行修复。执行修复时,目标库一定不能处于运行状态。一般建议在数据库故障后,应立即执行归档修复
- 单机环境时,确保目标库已经停止工作后,执行归档修复。
RMAN>REPAIR ARCHIVELOG DATABASE ‘/opt/dmdbms/data/dm.ini’;
- DSC 环境时,需要每个节点停止工作后,且每个节点独立执行修复操作。对于两
节点 DSC01、DSC02 执行修复如下。
RMAN> REPAIR ARCHIVELOG DATABASE ‘/opt/dmdbms/dsc/dm01.ini’;
RMAN> REPAIR ARCHIVELOG DATABASE ‘/opt/dmdbms/dsc/dm02.ini’;
3)DSC 环境下,REPAIR 操作也会利用其他节点的联机日志修复本地对应的 REMOTE
远程归档。如果脱机修复之后,再进行备份还会报“指定或者默认目录中找不到完整归档日志的错误”、“收集到的归档日志和起始 LSN 不连续”或“归档日志不完整”等,这种情况可能是因为节点之前的远程归档就已经不完整造成的,可以借助 dmrachk 工具手动拷贝远程节点的 LOCAL 归档到本节点对应的 REMOTE 归档目录中进行修复。
3.3.9 查看操作日志
DM 数据库的 log 目录中
全局日志文件 dm_DMSERVER_xxx.log
备份还原日志文件 dm_BAKRES__xxx.log
SBT 接口跟踪文件 dm_SBTTRACE_xxx.log
3.3.9.1 全局日志文件
数据库运行过程中的日志信息都包含
在这个日志中,备份还原过程中备份还原操作的阶段性信息会记录在这个日志文件中,包括
日志生成时间、日志级别、日志生成进程名称和进程 ID、日志生成线程和内容等。
3.3.9.2 备份还原日志文件
dm_BAKRS_xxx.log 是 备 份 还 原 日 志 文 件
3.4使用图形化客户端工具进行备份还原
MANAGER 管理工具联机执行备份还原和使用 CONSOLE 控制台工具脱机执行备份还原
4 联机拷贝数据库还原恢复
拷贝源库得到的一个副本,相当于目标从备份集还原后的状态,利用归档日志应该能将该副本恢复到最新状态,
4.2约束与限制
\1. 调用SP_BACKUP_COPY_BEGIN前需设置当前连接AUTO_COMMIT为FALSE,关闭事务自动提交。
\2. SP_BACKUP_COPY_BEGIN和SP_BACKUP_COPY_END必须在同一连接中执行。
\3. 每次调用SP_BACKUP_COPY_END前必须先调用SP_BACKUP_COPY_BEGIN,否则将报错。
\4. 调用SP_BACKUP_COPY_BEGIN和SP_BACKUP_COPY_END之间不能执行CREATE TABLESPACE操作。
4.3拷贝文件
开始拷贝前,调用系统过程SP_BACKUP_COPY记录当前系统BEGIN_LSN/BEGIN_SEQ信息。
SP_BACKUP_COPY_BEGIN()
\2. 开始拷贝数据库,使用常规方式拷贝数据库文件到新的目录。
必须包含配置文件(dm.ini),控制文件(dm.ctl),秘钥文件(dm_service.prikey),联机日志文件(DAMENG01.log和DAMENG02.log),以及数据文件(*.DBF)。
cp /home/dm/DB_FOR_COPY/DAMENG/dm.ini /home/dm/DB_COPY/
\3. 拷 贝 结 束 后 , 调 用 系 统 过 程 SP_BACKUP_COPY_END
SP_BACKUP_COPY_END(path varchar)中path参数指定备份集绝对路径
SP_BACKUP_COPY_END(’/home/dm/bak/BAKSET_COPY’)
联机拷贝数据库前必须已经配置了归档,否则调用 SP_BACKUP_COPY_END
将报错;该过程产生的空备份集只能用于源库副本的还原,当利用该备份集还
原其他库或从该备份集进行恢复时将报错。
4.4修改文件路径参数
例如,修改dm.ini文件中参数CTL_PATH的路径。
CTL_PATH = /home/dm/DB_FOR_COPY/DAMENG/dm.ctl #ctl file path
改为
CTL_PATH = /home/dm/DB_COPY/dm.ctl #ctl file path
其他路径参数的修改方法类似。控制文件中路径参数修改方法比较特殊,控制文件修改
之前需要从ctl文件转换为txt文件,修改之后,再转为ctl文件。
首先,将dm.ctl文件转为文本文件。
dmctlcvt TYPE=1 SRC=/home/dm/DB_COPY/dm.ctl DEST=/home/dm/DB_COPY/dmctl.txt
其次,修改dmctl.txt中的路径参数。将原始路径修改为拷贝副本所在的路径。
# file path
fil_path=/home/dm/DB_FOR_COPY/DAMENG/SYSTEM.DBF
改为
# file path
fil_path=/home/dm/DB_COPY/SYSTEM.DBF
最后,将修改完成后的dmctl.txt转为二进制文件dm.ctl,并替换原始dm.ctl文件。
dmctlcvt TYPE=2 SRC=/home/dm/DB_COPY/dmctl.txt DEST=/home/dm/DB_COPY/dm.ctl
4.5还原恢复
从源库的副本进行还原恢复,语法与脱机库还原恢复完全一致,语法参考3.3.5 数据
库还原和恢复。
利用空备份集还原源库的副本。
RESTORE DATABASE
‘/home/dm/DB_COPY/dm.ini’
FROM BACKUPSET
‘/home/dm/bak/BAKSET_COPY’
利用源库的归档日志将副本恢复到最新状态。
RECOVER DATABASE
‘/home/dm/DB_COPY/dm.ini’
WITH ARCHIVEDIR
‘/home/dm/DB_FOR_COPY/DAMENG/arch’
恢复成功后更新副本DB_MAGIC。
RECOVER DATABASE ‘/home/dm/DB_COPY/dm.ini’ UPDATE DB_MAGIC
4.6高级主题
SP_BACKUP_COPY_BEGIN()
拷贝文件时,由于DSC环境数据文件通过DMASM管理并存储在共享磁盘上,需拷贝所有
ASM磁盘文件(*.asm),DMASM配置文件(dmasvrmal.ini,dmdcr_cfg.ini以及
dmdcr.ini),以及各节点配置文件(dm.ini)和MAL配置文件(dmmal.ini)。
cp /home/dm/DSC_FOR_COPY/asmdisks/*.asm /home/dm/DSC_COPY/asmdisks/
cp /home/dm/DSC_FOR_COPY/dmdcr_cfg.ini /home/dm/DSC_COPY/
cp /home/dm/DSC_FOR_COPY/dmasvrmal.ini /home/dm/DSC_COPY/
cp /home/dm/DSC_FOR_COPY/dsc0/dmdcr.ini /home/dm/DSC_COPY/dsc0/
cp /home/dm/DSC_FOR_COPY/dsc1/dmdcr.ini /home/dm/DSC_COPY/dsc1/
cp /home/dm/DSC_FOR_COPY/dsc0/dm.ini /home/dm/DSC_COPY/dsc0/
cp /home/dm/DSC_FOR_COPY/dsc1/dm.ini /home/dm/DSC_COPY/dsc1/
cp /home/dm/DSC_FOR_COPY/dsc0/dmmal.ini /home/dm/DSC_COPY/dsc0/
cp /home/dm/DSC_FOR_COPY/dsc1/dmmal.ini /home/dm/DSC_COPY/dsc1/
SP_BACKUP_COPY_END(’/home/dm/bak/BAKSET_DSC_COPY’)
修改文件路径参数
当共享磁盘文件拷贝到不同的目录时,需修改相关路径参数。
一,修改dmdcr_cfg.ini种的路径参数DCR_VTD_PATH和DCR_EP_ASM_LOAD_APTH。
以DCR_VTD_PATH为例进行说明。
拷贝前:
DCR_VTD_PATH = /home/dm/DSC_FOR_COPY/asmdisks/votedisk.asm
拷贝后,修改为:
DCR_VTD_PATH = /home/dm/DSC_COPY/asmdisks/votedisk.asm
dmdcr_cfg.ini修改后,需重新初始化ASM磁盘,其中dcrdisk.asm为拷贝前被初
始化为DCR磁盘的裸设备文件,IDENTIFIED BY后跟指定的密码。
ASM>INIT DCRDISK
‘/home/dm/DSC_COPY/asmdisks/dcrdisk.asm’
FROM
‘/home/dm/DSC_COPY/dmdcr_cfg.ini’ IDENTIFIED BY ‘password’
二,修改 dmdcr.ini 的路径参数 DMDCR_PATH 、 DMDCR_MAL_PATH 、
DMDCR_ASM_STARTUP_CMD和DMDCR_DB_STARTUP_CMD。
以0号节点为例,修改DMDCR_DB_STARTUP_CMD参数。
拷贝前:
DMDCR_DB_STARTUP_CMD = /dm/bin/dmserver path=/home/dm/DSC_FOR_COPY/dsc0/dm.ini
dcr_ini=/home/dm/DSC_FOR_COPY/dsc0/dmdcr.ini
拷贝后,修改为:
DMDCR_DB_STARTUP_CMD = /dm/bin/dmserver path=/home/dm/DSC_COPY/dsc0/dm.ini
dcr_ini=/home/dm/DSC_COPY/dsc0/dmdcr.ini
三,修改dm.ini中的CONFIG_PATH。dm.ini中ASM路径参数不需要修改。
以0号节点为例,修改CONFIG_PATH参数。
拷贝前:
CONFIG_PATH = /home/dm/DSC_FOR_COPY/dsc0 #config path
拷贝后,改为为:
CONFIG_PATH = /home/dm/DSC_COPY/dsc0 #config path
四,修改 dmdcr_cfg.ini , dmasvrmal.ini , dmmal.ini 中 的 IP 参 数 。 以
dmdcr_cfg.ini中的DCR_EP_HOST参数为例。
拷贝前:
DCR_EP_HOST = 192.168.0.111
拷贝后,修改为:
DCR_EP_HOST = 192.168.0.222
还原恢复
DSC环境下的还原恢复操作与单机环境完全相同,请参考前述章节。