注册
DM8不同场景下的备份恢复
培训园地/ 文章详情 /

DM8不同场景下的备份恢复

小岛 2023/03/30 962 0 0

数据库系统在运行过程中可能会发生一些故障。造成故障的原因多种多样,包括磁盘崩溃、电源故障、软件错误,甚至人为破坏。这些情况一旦发生,就可能会丢失数据,数据库系统将无法正常运行。因此,故障恢复是数据库系统必不可少的组成部分,即数据库系统必须保证即使发生故障,也可以保障数据的完整性和一致性。
支持故障恢复的技术主要是日志,日志以一种安全的方式记录数据库系统变更的历史信息,一旦系统出现故障,数据库系统可以根据日志将系统恢复至故障发生前的某个时刻。数据库系统的日志分为两种类型:一是 REDO 日志,在数据被修改后记录它的新值;另一种是UNDO 日志,在数据被修改前记录它的旧值。
另外,当服务器处于归档模式时,如果数据库发生故障,通过备份文件和归档日志可以恢复到指定时间点。

M 服务器可以运行在两种模式下,即归档模式和非归档模式,这两种模式可以由用户进行设置,系统在归档模式下运行时,会产生归档日志文件,此时系统管理员应该事先预留出足够的磁盘空间以便存储归档日志文件。通过 dm.ini 和 dmarch.ini 可以配置归档,参见第 2.1 章。归档日志包括以下五种类型:

1 本地归档
写入 REDO 日志到本地归档文件,在 REDO 日志写入日志文件后触发,由归档线程完成
本地归档动作,最多可以设置 8 个本地归档。 若磁盘空间不足, 所有本地归档一旦失效,系
统会被强制挂起,直到磁盘空间释放,本地归档成功后,再继续执行。

2 实时归档
在写入 REDO 日志到日志文件之前,通过 MAL 系统发送 REDO 日志到远程服务器,远程服务器收到 REDO 日志后,返回确认消息。收到确认消息后,执行后续操作,发送 REDO 日志失败,或从备库返回的数据库模式不是 STANDBY,将数据库切换为 SUSPEND 状态,阻塞所有 REDO 日志的写入操作。只能配置 1 个实时归档。

3 即时归档
即时归档在主库将 Redo 日志写入联机 Redo 日志文件后,再通过 MAL 系统将 Redo 日志发送到备库。即时归档是读写分离集群的实现基础,与实时归档的主要区别是发送 Redo日志的时机不同。一个主库可以配置 1~8 个即时备库。

4 异步归档
在设定的时间点或者每隔设定时间,启动归档 REDO 日志发送。设置定时归档,必须保至少有一个本地归档。系统调度线程根据设定,触发归档 REDO 日志发送事件。通过 MAL系统,获取远程服务器的当前 LSN,生成发送归档 REDO 日志任务,加入任务队列。归档任务线程获取任务,通过 MAL 系统,发送到远程服务器。 最多可以设置 8 个异步归档。

5 远程归档
远程归档就是将写入本地归档的 REDO 日志信息,发送到远程节点,并写入远程节点的指定归档目录中。远程归档与本地归档的主要区别是 REDO 日志写入的位置不同,本地归档将 REDO 日志写入数据库实例所在节点的磁盘,而远程归档则将 REDO 日志写入到其他数据库实例所在节点的指定归档目录。远程归档日志文件的命名规范和本地归档日志文件保持一致,都是以归档名+归档文件的创建时间进行组合命名。 最多可以配置 8 个远程归档。
2.1归档模式和非归档模式
通过 dm.ini 和 dmarch.ini 可以配置本地归档。dmarch.ini 生效的前提是 dm.ini 中的参数
ARCH_INI 置为 1。dmarch.ini 可以进行本地归档和远程归档的设置,DM 备份与还原过程中使用的
配置项 配置含义
[ARCH_NAME] REDO 日志归档名
ARCH_TYPE REDO 日志归档类型,LOCAL 表示本地归档,REMOTE 表示远程
ARCH_DEST REDO 日志归档目标,LOCAL 对应归档文件存放路径;REMOTE 对应远程目标节点实例名
ARCH_FILE_SIZE 单个 REDO 日志归档文件大小,取值范围(64 MB~2048 MB),缺省 1024 MB,即 1 GB
ARCH_SPACE_LIMIT REDO 日志归档空间限制,当所有本地归档文件达到限制值时,系统自动删除最老的归档文件。0 表示无空间限制,取值范围(1024 MB~4294967294 MB),缺省为 0
ARCH_INCOMING_PATH 仅 REMOTE 归档有效,对应远程归档存放在本节点的实际路径
日志均为本地归档日志。

2.1.1配置本地归档
1.联机归档配置操作步骤如下所示:
SQL> alter DATABASE MOUNT;
ALTER DATABASE ADD ARCHIVELOG ‘DEST = /dmarch, TYPE = local,FILE_SIZE = 1024, SPACE_LIMIT = 2048’;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
select name, status$,arch_mode from v$database;

行号 NAME STATUS$ ARCH_MODE


1 dmdb120 4 Y

语法说明:
ALTER DATABASE <ADD|MODIFY|DELETE> ARCHIVELOG <归档配置语句>;
<归档配置语句>::= ‘DEST = <归档目标>,TYPE = <归档类型>’
<归档类型>::=<local 方式>|<remote 方式>
<local 方式>::=LOCAL [,FILE_SIZE = <文件大小>]
[,SPACE_LIMIT = <空间大小限制>]
<remote 方式>::=REMOTE [,FILE_SIZE = <文件大小>]
[,SPACE_LIMIT = <空间大小限制>],INCOMING_PATH = <归档存放路径>

2.手动配置本地归档
关闭达梦实例

su - root

systemctl stop DmServicedmdb120
配置dmarch.ini文件
$

su – dmdba

cd /dmdata/dmdb120/
ls -lsa dmarch.ini
ls: 无法访问/dmdata/dmdb120/dmarch.ini: 没有那个文件或目录

cat >> dmarch.ini <<EOF
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmarch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 2048
EOF

cat dmarch.ini

配置dm.ini 文件
$

cat dm.ini |grep ARCH_INI
	ARCH_INI                        = 0                     #dmarch.ini

sed -i ‘s/ARCH_INI = 0 /ARCH_INI = 1 /g’ dm.ini
cat dm.ini |grep ARCH_INI
ARCH_INI = 1 #dmarch.ini

启动实例

SQL>

su – root

systemctl start DmServicedmdb120

select para_name,para_value from v$dm_ini where para_name like ‘%USE_AP%’;
行号 PARA_NAME PARA_VALUE


1 BAK_USE_AP 1

2.2 启动 DMAP
备份集备份还原实现策略有两种:DMAP 辅助进程方式和无辅助进程方式。用户可通过 DM.INI 参数 bak_use_ap 来选择(DMRMAN 使用参数 use_ap),bak_use_ap 取值 1、2。默认为 1。
1.DMAP 辅助进程方式
可支持第三方备份(指定 DEVICE TYPE 为 TAPE)。DMAP 插件执行,改造了备份还原任务子系统,允许指定并行度,大幅提升了备份还原的效率,特别是加密、压缩的处理效率。如果选择使用 DMAP 辅助进程,执行备份还原之前就必须启动 DMAP 服务。安装 DM 数据库以后,DMAP 服务会自动启动。

2.无辅助进程方式
不依赖 DMAP,由主进程 dmserver 自身执行备份还原,但不支持第三方备份(指定 DEVICE TYPE 为 TAPE)。

启动 DMAP,手动启动 DMAP,有两种途径:

一是启动 DM 服务查看器中的 DmAPService。

二是手动启动 DMAP 执行码,DMAP 执行码位于 DM 安装目录的 bin 子目录下。除此之外,Linux 下,还可以调用 bin 目录下的 DmAPService 脚本。

$
ps -ef |grep dmap
dmdba 9169 1 0 12:17 ? 00:00:03 /dm/bin/dmap –已经启动了

–手动启动:
su – dmdba
cd /dm/bin
./DmAPService start

注意:
DMAP 产生管道的命名为 DM_PIPE_DMAP_LSNR,目录在 dmdbms_home 的 bin 目录下。非Windows 环境中对应管道文件名称为 DM_PIPE_DMAP_LSNR_RD 和 DM_PIPE_DMAP_LSNR_WR。

原则上,一台主机上仅允许启动一个 DMAP 实例,否则可能会产生不可预料的结果。非 Windows 环境中,DMAP 退出后,剩下的管道文件都是垃圾文件,直接删除即可。

物理备份还原是对数据库的操作系统物理文件(如数据文件、控制文件和日志文件等)的备份还原。例如使用 RMAN 工具进行的备份还原。
3物理备份与还原
3.1 非归档模式下的全备与异机还原
数据库信息 源端 目标端
数据库名 dmdb120 dmdb22
数据文件路径 /dmdata/dmdb120 /dmdata/dmdb22
IP地址 192.168.1.91 192.168.1.84

3.1.1 前提条件:
1.DmAPService 已启动
2.数据库实例已关闭

ps -ef |grep dmap

dmdba 9169 1 0 12:17 ? 00:00:03 /dm/bin/dmap –已经启动了

–手动启动DMAP:
cd /dm/bin
./DmAPService start

–关闭数据库实例
systemctl stop DmServicedmdb120.service

3.1.2 源端使用dmrman工具冷备

$

RMAN> su - dmdba
cd /dm/bin
./dmrman
backup database ‘/dmdata/dmdb120/dm.ini’ backupset ‘/dmbak/dmdb120_full_01’;

backup database ‘/dmdata/dmdb120/dm.ini’ backupset ‘/dmbak/dmdb120_full_01’;
file dm.key not found, use default license!
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[45684]
BACKUP DATABASE [dmdb120],execute…
CMD CHECK LSN…
BACKUP DATABASE [dmdb120],collect dbf…
CMD CHECK …
DBF BACKUP SUBS…
total 1 packages processed…
total 3 packages processed…
total 4 packages processed…
DBF BACKUP MAIN…
BACKUPSET [/dmbak/dmdb120_full_01] END, CODE [0]…
META GENERATING…
total 6 packages processed…
total 6 packages processed…
total 6 packages processed!
CMD END.CODE:[0]
backup successfully!
time used: 00:00:01.219

3.1.3 备份拷贝到目标库,目标库需提前安装数据库软件,不需要初始化实例
$ scp -r dmdb120_full_01 192.168.7.122:/dmbak/
scp /dmdata/dmdb120/dm.ini 192.168.7.122:/dmbak/

3.1.4 目标端创建相关目录

$ su - dmdba
scp -r dmdb120_full_01 192.168.7.122:/dmbak/

3.1.5 目标端先进行restore
使用 RESTORE 命令完成脱机还原操作,在还原语句中指定库级备份集,可以是脱机库级备份集,或是联机库级备份集。数据库的还原包括数据库配置文件还原和数据文件还原,
目 前 可 能需 要 还原 的数 据 库 配置 文 件包 括 dm.ini、 dm.ctl、 服 务器 秘 钥 文件(dm_service.prikey 或者 dm_external.config,若备份库指定 usbkey 加密,则无秘钥文件)、联机日志文件。

3.2归档模式下的全备与还原
DM 支持通过联机执行 SQL 语句方式对数据库执行备份还原操作。联机方式支持数据库、备份与还原用户表空间、用户表和归档的备份,用户表的还原。在进行联机库级备份、归档备份和表空间备份时,必须保证系统处于归档模式,否则联机备份不能进行。

3.2.1 backup 语法
BACKUP DATABASE [[[FULL] [DDL_CLONE]]| INCREMENT [CUMULATIVE][WITH BACKUPDIR ‘<基备份搜索目录>’{,‘<基备份搜索目录>’} |[BASE ON <BACKUPSET ‘<基备份目录>’]][TO <备份名>][BACKUPSET ‘<备份集路径>’]
[DEVICE TYPE <介质类型> [PARMS ‘<介质参数>’]]
[BACKUPINFO ‘<备份描述>’] [MAXPIECESIZE <备份片限制大小>]
[IDENTIFIED BY <密码>[WITH ENCRYPTION<TYPE>][ENCRYPT WITH <加密算法>]]
[COMPRESSED [LEVEL <压缩级别>]] [WITHOUT LOG]
[TRACE FILE ‘< TRACE 文件名>’] [TRACE LEVEL < TRACE 日志级别>]
[TASK THREAD <线程数>][PARALLEL [<并行数>] [READ SIZE <拆分块大小>]];

常用命令:

SQL> --指定备份集路径为 /dmbak/db_bak_3_01,执行以下命令:
BACKUP DATABASE BACKUPSET ‘/dmbak/db_bak_3_01’;
–创建备份集,备份名设置为 WEEKLY_FULL_BAK,执行以下命令:
BACKUP DATABASE TO WEEKLY_FULL_BAK BACKUPSET ‘/dmbak/db_bak_3_02’;
–创建备份为备份集添加描述信息为完全备份,执行以下命令:
BACKUP DATABASE BACKUPSET ‘/dmbak/db_bak_3_04’ BACKUPINFO ‘完全备份’;
–创建备份限制备份片大小为 300 MB,执行以下命令
BACKUP DATABASE BACKUPSET ‘/dmbak/db_bak_3_05’ MAXPIECESIZE 300;
–执行备份压缩,压缩级别设置为 5,执行以下命令:
BACKUP DATABASE BACKUPSET ‘/dmbak/db_bak_3_06’ COMPRESSED LEVEL 5;
–创建并行备份,指定并行数为 8,执行以下命令:
BACKUP DATABASE BACKUPSET ‘/dmbak/db_bak_3_07’ PARALLEL 8;
基于 /home/dm_bak 全量备份的增量备份,执行以下命令:
BACKUP DATABASE INCREMENT WITH BACKUPDIR ‘/home/dm_bak’ BACKUPSET ‘/dmbak/db_increment_bak_02’;

3.2.2 案例一:归档模式下的全备与还原

主库开启归档模式。
创建测试数据:
SQL> create tablespace test1 datafile ‘/dmdata/dmdb120/test1.dbf’ size 32 autoextend off;
create user test1 identified by dameng123 default tablespace test1;
grant dba to test1;
conn test1/dameng123;
create table test1 (id int,name varchar(20));
insert into test1 values(1,‘aa’);
commit;
select * from test1;

行号 ID NAME


1 1 aa

源端发起一个全备:
SQL> BACKUP DATABASE TO DALIY_FULL_BAK BACKUPSET ‘/dmbak/dmdb120_fullbak_01’ COMPRESSED LEVEL 5 PARALLEL 2;

源端继续插入新的数据:
SQL> create tablespace test2 datafile ‘/dmdata/dmdb120/test2.dbf’ size 32 autoextend off;
create user test2 identified by dameng123 default tablespace test2;
grant dba to test2;
conn test2/dameng123;
create table test2 (id int,name varchar(20));
insert into test2 values(1,‘aa’);
commit;
select * from test2;

源端停机,备份上传到目标端机器:

$
su – dmdba
cd /dm/bin
DmServicedmdb120 stop
ps -ef | grep dmserver
dmdba 16956 16832 0 22:09 pts/2 00:00:00 grep --color=auto dmserver

cd /dmbak/
scp -r dmdb120_fullbak_01 192.168.7.122:/dmbak/
scp /dmarch/dmdb120/* 192.168.7.122:/dmarch/

目标端安装软件,不需要初始化实例

目标端先进行restore
使用 RESTORE 命令完成脱机还原操作,在还原语句中指定库级备份集,可以是脱机库级备份集,或是联机库级备份集。数据库的还原包括数据库配置文件还原和数据文件还原,
目 前 可 能需 要 还原 的数 据 库 配置 文 件包 括 dm.ini、 dm.ctl、 服 务器 秘 钥 文件(dm_service.prikey 或者 dm_external.config,若备份库指定 usbkey 加密,则无秘钥文件)、联机日志文件。

RMAN>
cd /dm/bin
./dmrman
restore database to ‘/dmdata/dmdb120’ from backupset ‘/dmbak/dmdb120_fullbak_01’;
restore database to ‘/dmdata/dmdb120’ from backupset ‘/dmbak/dmdb120_fullbak_01’;
file dm.key not found, use default license!
RESTORE DATABASE CHECK…
chattr: 没有那个文件或目录 当尝试对/dmdata/dmdb120/dm.ctl进行stat调用时
RESTORE DATABASE,dbf collect…
RESTORE DATABASE,dbf refresh …
RESTORE BACKUPSET [/dmbak/dmdb120_fullbak_01/dmdb120_fullbak_01_0] START…
total 3 packages processed…
RESTORE BACKUPSET [/dmbak/dmdb120_fullbak_01/dmdb120_fullbak_01_1] START…
total 5 packages processed…
total 9 packages processed…
RESTORE DATABASE,UPDATE ctl file…
RESTORE DATABASE,REBUILD key file…
RESTORE DATABASE,CHECK db info…
RESTORE DATABASE,UPDATE db info…
RESTORE DATABASE,REUSE or REBUILD dm.ini…
total 9 packages processed…
total 9 packages processed!
CMD END.CODE:[0]
restore successfully.
time used: 426.257(ms)

目标端再进行recover.
使用 RECOVER 命令完成数据库恢复工作,可以是基于备份集的恢复工作,也可以是使用本地归档日志的恢复工作。如果还原后,数据已经处于一致性状态了,则可以使用更新DB_MAGIC 方式恢复,前提是不需要重做日志。
RMAN>

RMAN>

recover database '/dmdata/dmdb120/dm.ini' from backupset '/dmbak/dmdb120_fullbak_01';

recover database ‘/dmdata/dmdb120/dm.ini’ from backupset ‘/dmbak/dmdb120_fullbak_01’;
Read ini warning, default dm.ctl backup path [/dmdata/dmdb120/ctl_bak] does not exist.
Read ini warning, default backup path [/dmdata/dmdb120/bak] does not exist.
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[47354]
RESTORE RLOG CHECK…
RESTORE RLOG, gen tmp file…
RESTORE RLOG FROM BACKUPSET [/dmbak/dmdb120_fullbak_01] START…
total 2 packages processed…
total 2 packages processed…
total 2 packages processed!
CMD END.CODE:[0]
EP:0 total 1 pkgs applied, percent: 50%
EP:0 total 2 pkgs applied, percent: 100%
Recover from archive log finished, time used:0.003s.
recover successfully!
time used: 243.294(ms)

recover database ‘/dmdata/dmdb120/dm.ini’ WITH ARCHIVEDIR ‘/dmarch’;
recover database ‘/dmdata/dmdb120/dm.ini’ WITH ARCHIVEDIR ‘/dmarch’;
Read ini warning, default dm.ctl backup path [/dmdata/dmdb120/ctl_bak] does not exist.
Read ini warning, default backup path [/dmdata/dmdb120/bak] does not exist.
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[47364]
EP:0 total 2 pkgs applied, percent: 11%
EP:0 total 4 pkgs applied, percent: 23%
EP:0 total 6 pkgs applied, percent: 35%
EP:0 total 8 pkgs applied, percent: 47%
EP:0 total 10 pkgs applied, percent: 58%
EP:0 total 12 pkgs applied, percent: 70%
EP:0 total 14 pkgs applied, percent: 82%
EP:0 total 16 pkgs applied, percent: 94%
EP:0 total 17 pkgs applied, percent: 100%
Recover from archive log finished, time used:0.016s.
EP[0]'s apply_lsn[47560] >= end_lsn[47364]
recover successfully!
time used: 244.758(ms)

目标端最后进行数据库更新
数据库更新是指更新数据库的 DB_MAGIC,并将数据库调整为可正常工作状态,与数据
库恢复一样使用 RECOVER 命令完成。数据库更新发生在重做 REDO 日志恢复数据库后,或
者目标库不需要执行重做日志已经处于一致状态的情况。
RMAN>
recover database ‘/dmdata/dmdb120/dm.ini’ update db_magic

recover database ‘/dmdata/dmdb120/dm.ini’ update db_magic
Read ini warning, default backup path [/dmdata/dmdb120/bak] does not exist.
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[47560]
EP[0]'s apply_lsn[47560] >= end_lsn[47364]
recover successfully!
time used: 984.317(ms)

目标端启动实例
$

SQL> dmserver /dmdata/dmdb120/dm.ini

–另开一个窗口
disql sysdba/dameng123
select name,status$,host_name from v$instance;

行号 NAME STATUS$ HOST_NAME


1 DMDB81 OPEN dmdb83

select * from test1.test1;
select * from test2.test2;

目标端添加服务

cd /dm/script/root

./dm_service_installer.sh -t dmserver -dm_ini /dmdata/dmdb120/dm.ini -p dmdb120

3.2.3案例二: 归档模式下的增量全备与还原
主库开启归档模式。
创建测试数据:
SQL> create tablespace test1 datafile ‘/dmdata/dmdb120/test1.dbf’ size 32 autoextend off;
create user test1 identified by dameng123 default tablespace test1;
grant dba to test1;
conn test1/dameng123;
create table test1 (id int,name varchar(20));
insert into test1 values(1,‘aa’);
commit;
select * from test1;

行号 ID NAME


1 1 aa

源端发起一个全备:
SQL> BACKUP DATABASE TO DALIY_FULL_BAK BACKUPSET ‘/dmbak/dmdb120_fullbak_01’ COMPRESSED LEVEL 5 PARALLEL 2;

源端继续插入新的数据:
SQL> create tablespace test3 datafile ‘/dmdata/dmdb120/test3.dbf’ size 32 autoextend off;
create user test3 identified by dameng123 default tablespace test3;
grant dba to test3;
conn test3/dameng123;
create table test3 (id int,name varchar(20));
insert into test3 values(1,‘aa’);
commit;
select * from test3;
/
源端发起一个增量备份:
SQL> BACKUP DATABASE INCREMENT WITH BACKUPDIR ‘/dmbak/’ BACKUPSET ‘/dmbak/dmdb120_increment_bak_01’;

源端插入新的数据:
SQL> conn test3/dameng123;
create table test4 (id int,name varchar(20));
insert into test4 values(1,‘cc’);
commit;
select * from test4;

源端停机,备份上传到目标端机器:

$ cd /dm/bin
DmServicedmdb120 stop
cd /dmbak/
scp -r dmdb120_fullbak_01 192.168.7.122:/dmbak/
scp -r dmdb120_increment_bak_01 192.168.7.122:/dmbak/
scp /dmarch/dmdb120/* 192.168.7.122:/dmarch/

目标端安装软件,不需要初始化实例

目标端先进行restore
使用 RESTORE 命令完成脱机还原操作,在还原语句中指定库级备份集,可以是脱机库级备份集,或是联机库级备份集。数据库的还原包括数据库配置文件还原和数据文件还原,
目 前 可 能需 要 还原 的数 据 库 配置 文 件包 括 dm.ini、 dm.ctl、 服 务器 秘 钥 文件(dm_service.prikey 或者 dm_external.config,若备份库指定 usbkey 加密,则无秘钥文件)、联机日志文件。

$

RMAN>

RMAN>

su - dmdba

cd /dm/bin
./dmrman
restore database to ‘/dmdata/dmdb120’ from backupset ‘/dmbak/dmdb120_fullbak_01’;
restore database to ‘/dmdata/dmdb120’ from backupset ‘/dmbak/dmdb120_fullbak_01’;
file dm.key not found, use default license!
RESTORE DATABASE CHECK…
chattr: 没有那个文件或目录 当尝试对/dmdata/dmdb120/dm.ctl进行stat调用时
RESTORE DATABASE,dbf collect…
RESTORE DATABASE,dbf refresh …
RESTORE BACKUPSET [/dmbak/dmdb120_fullbak_01/dmdb120_fullbak_01_0] START…
total 3 packages processed…
RESTORE BACKUPSET [/dmbak/dmdb120_fullbak_01/dmdb120_fullbak_01_1] START…
total 5 packages processed…
total 9 packages processed…
RESTORE DATABASE,UPDATE ctl file…
RESTORE DATABASE,REBUILD key file…
RESTORE DATABASE,CHECK db info…
RESTORE DATABASE,UPDATE db info…
RESTORE DATABASE,REUSE or REBUILD dm.ini…
total 9 packages processed…
total 9 packages processed!
CMD END.CODE:[0]
restore successfully.
time used: 426.257(ms)

restore database ‘/dmdata/dmdb120/dm.ini’ from backupset ‘/dmbak/dmdb120_increment_bak_01’;
restore database ‘/dmdata/dmdb120/dm.ini’ from backupset ‘/dmbak/dmdb120_increment_bak_01’;
Read ini warning, default dm.ctl backup path [/dmdata/dmdb120/ctl_bak] does not exist.
Read ini warning, default backup path [/dmdata/dmdb120/bak] does not exist.
RESTORE DATABASE CHECK…
RESTORE DATABASE,dbf collect…
RESTORE DATABASE,dbf refresh …
RESTORE BACKUPSET [/dmbak/dmdb120_fullbak_01/dmdb120_fullbak_01_0] START…
total 3 packages processed…
RESTORE BACKUPSET [/dmbak/dmdb120_fullbak_01/dmdb120_fullbak_01_1] START…
total 3 packages processed…
total 9 packages processed…
RESTORE BACKUPSET [/dmbak/dmdb120_increment_bak_01] START…
total 15 packages processed…
total 17 packages processed…
RESTORE DATABASE,UPDATE ctl file…
RESTORE DATABASE,REBUILD key file…
RESTORE DATABASE,CHECK db info…
RESTORE DATABASE,UPDATE db info…
total 17 packages processed…
total 17 packages processed!
CMD END.CODE:[0]
restore successfully.
time used: 701.210(ms)

目标端再进行recover.
使用 RECOVER 命令完成数据库恢复工作,可以是基于备份集的恢复工作,也可以是使用本地归档日志的恢复工作。如果还原后,数据已经处于一致性状态了,则可以使用更新DB_MAGIC 方式恢复,前提是不需要重做日志。
RMAN>

RMAN>

recover database '/dmdata/dmdb120/dm.ini' from backupset '/dmbak/dmdb120_increment_bak_01';

recover database ‘/dmdata/dmdb120/dm.ini’ from backupset ‘/dmbak/dmdb120_increment_bak_01’;
file dm.key not found, use default license!
Read ini warning, default backup path [/dmdata/dmdb120/bak] does not exist.
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[48807]
RESTORE RLOG CHECK…
RESTORE RLOG, gen tmp file…
RESTORE RLOG FROM BACKUPSET [/dmbak/dmdb120_increment_bak_01] START…
total 2 packages processed…
total 2 packages processed…
total 2 packages processed!
CMD END.CODE:[0]
EP:0 total 1 pkgs applied, percent: 50%
EP:0 total 2 pkgs applied, percent: 100%
Recover from archive log finished, time used:0.003s.
recover successfully!
time used: 237.988(ms)

recover database ‘/dmdata/dmdb120/dm.ini’ WITH ARCHIVEDIR ‘/dmarch’;
recover database ‘/dmdata/dmdb120/dm.ini’ WITH ARCHIVEDIR ‘/dmarch’;
Read ini warning, default backup path [/dmdata/dmdb120/bak] does not exist.
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[48810]
EP:0 total 1 pkgs applied, percent: 14%
EP:0 total 2 pkgs applied, percent: 28%
EP:0 total 3 pkgs applied, percent: 42%
EP:0 total 4 pkgs applied, percent: 57%
EP:0 total 5 pkgs applied, percent: 71%
EP:0 total 6 pkgs applied, percent: 85%
EP:0 total 7 pkgs applied, percent: 100%
Recover from archive log finished, time used:0.008s.
EP[0]'s apply_lsn[48961] >= end_lsn[48810]
recover successfully!
time used: 236.429(ms)

目标端最后进行数据库更新
数据库更新是指更新数据库的 DB_MAGIC,并将数据库调整为可正常工作状态,与数据
库恢复一样使用 RECOVER 命令完成。数据库更新发生在重做 REDO 日志恢复数据库后,或
者目标库不需要执行重做日志已经处于一致状态的情况。
RMAN>
recover database ‘/dmdata/dmdb120/dm.ini’ update db_magic

recover database ‘/dmdata/dmdb120/dm.ini’ update db_magic
Read ini warning, default backup path [/dmdata/dmdb120/bak] does not exist.
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[48961]
EP[0]'s apply_lsn[48961] >= end_lsn[48810]
recover successfully!
time used: 983.067(ms)

目标端启动实例
$

SQL> dmserver /dmdata/dmdb120/dm.ini

–另开一个窗口
disql sysdba/dameng123
select name,status$,host_name from v$instance;

行号 NAME STATUS$ HOST_NAME


1 DMDB81 OPEN dmdb83

select * from test1.test1;
select * from test3.test3;
select * from test3.test4;

目标端添加服务

cd /dm/script/root

./dm_service_installer.sh -t dmserver -dm_ini /dmdata/dmdb120/dm.ini -p dmdb120

3.2.4基于时间点的恢复
创建心跳表

SQL>

create user hb identified by heardbeat123;
grant resource to hb;
grant create table to hb;
SP_INIT_JOB_SYS(1);

create table hb.T_heardbeat (id int IDENTITY(1,1) NOT NULL,hbtime DATETIME);

–每分钟往心跳表中插入一条记录
call SP_CREATE_JOB(‘job_hb_insert’,1,0,‘’,0,0,‘’,0,‘’);
call SP_JOB_CONFIG_START(‘job_hb_insert’);
call SP_ADD_JOB_STEP(‘job_hb_insert’, ‘exec_hb_insert’, 0, ‘insert into hb.T_heardbeat values(sysdate);commit;’, 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE(‘job_hb_insert’, ‘exec_hb_insert’, 1, 2, 1, 127, 1, ‘00:00:00’, ‘23:59:59’, ‘2021-07-12 15:05:49’, NULL, ‘’);
call SP_JOB_CONFIG_COMMIT(‘job_hb_insert’);

–每周日清理一次(一周记录大概一万条左右)
call SP_CREATE_JOB(‘job_hb_truncate’,1,0,‘’,0,0,‘’,0,‘’);
call SP_JOB_CONFIG_START(‘job_hb_truncate’);
call SP_ADD_JOB_STEP(‘job_hb_truncate’, ‘exec_hb_truncate’, 0, ‘truncate table hb.T_heardbeat;’, 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE(‘job_hb_truncate’, ‘exec_hb_truncate’, 1, 2, 1, 1, 0, ‘23:59:00’, NULL, ‘2021-07-12 15:40:22’, NULL, ‘’);
call SP_JOB_CONFIG_COMMIT(‘job_hb_truncate’);

–主备库同步检查
select max(hbtime) from hb.T_heardbeat;

在源库上做一个全备
–备份前的心跳表数据
SQL> select hbtime from hb.T_heardbeat;

行号 HBTIME


1 2021-11-01 22:01:35.000000
2 2021-11-01 22:02:35.000000
3 2021-11-01 22:03:35.000000
4 2021-11-01 22:04:35.000000
5 2021-11-01 22:05:35.000000
6 2021-11-01 22:06:35.000000
7 2021-11-01 22:07:35.000000
8 2021-11-01 22:08:35.000000
9 2021-11-01 22:09:35.000000
10 2021-11-01 22:10:35.000000
11 2021-11-01 22:11:35.000000

行号 HBTIME


12 2021-11-01 22:12:35.000000
13 2021-11-01 22:13:35.000000
14 2021-11-01 22:14:35.000000
15 2021-11-01 22:15:35.000000

–做一个全备
BACKUP DATABASE TO DALIY_FULL_BAK BACKUPSET ‘/dmbak/dmdb120_fullbak_01’ COMPRESSED LEVEL 5 PARALLEL 2;

–隔了5分钟之后做一个增量备份
BACKUP DATABASE INCREMENT WITH BACKUPDIR ‘/dmbak/’ BACKUPSET ‘/dmbak/dmdb120_increment_bak_01’;

4逻辑备份与还原
4.1全库导出:
例如,设置 FULL=Y,导出数据库的所有对象,导出数据库文件和日志文件放在路径 /dmbak 下。
$ ./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y DIRECTORY=/dmbak
4.2按照OWNER导出
OWNER 方式导出一个或多个用户拥有的所有对象。
例如,设置 OWNER=USER01,导出用户 USER01 所拥有的对象全部导出。
$ ./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log OWNER=USER01 DIRECTORY=/dmbak

4.3按照SCHEMAS
SCHEMAS 方式的导出一个或多个模式下的所有对象。
例如,设置 SCHEMAS=USER01,导出模式 USER01 模式下的所有对象。
$ ./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log OWNER=USER01 DIRECTORY=/dmbak

4.4按照TABLES
TABLES 方式导出和导入一个或多个指定的表或表分区。导出所有数据行、约束、索引等信息。
例如,设置 TABLES=table1,table2,导出 table1,table2 两张表的所有数据和信息。
$ ./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log TABLES=table1,table2 DIRECTORY=/dmbak

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服