欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

达梦(6)联机备份恢复

程序员文章站 2022-05-19 08:33:48
...

达梦数据库的联机备份颇花了我不少时间,关键是附带的文档感觉说得不清楚。不过测试出来后觉得达梦的这个设计还是比较简明的。 为了让后面学习的人不用花我这么多时间,把测试流程整理了下放在下面: 主要测试了: 1. 不包含归档的联机全备 2. 包含归档的联机全

达梦数据库的联机备份颇花了我不少时间,关键是附带的文档感觉说得不清楚。不过测试出来后觉得达梦的这个设计还是比较简明的。
为了让后面学习的人不用花我这么多时间,把测试流程整理了下放在下面:
主要测试了:
1. 不包含归档的联机全备
2. 包含归档的联机全备
3. 不包含归档的联机全备的恢复
4. 不包含归档的联机全备文件加上归档日志的恢复
5. 包含归档的联机全备的恢复

测试版本: V7.1.2.215-Build(2013.11.08-36626trunc)

一。检查并设置数据库为归档模式
联机备份必须处在归档模式下,可用下面两条sql查看数据库当前状态
--查看归档是否打开
select arch_mode from v$database;
--查看归档日志信息
select arch_name,arch_type,arch_dest from v$dm_arch_ini;

二。创建测试数据
-- 创建表空间test_data(数据文件TEST_DATA01.DBF大小为50m)
create tablespace test_data datafile 'C:\dmdbms\data\DAMENG\TEST_DATA01.DBF' size 50;
-- 增加用户
create user "TESTUSER" identified by "111111" default tablespace "TEST_DATA";
-- 授权
grant "DBA" to "TESTUSER";
-- 创建模式
create schema test_sch authorization testuser;
-- 创建 表
create table test_sch.t1(id int primary key ,name varchar(20)) storage(on test_data)
-- 插入数据
insert into test_sch.t1 values(1,'aaa');
insert into test_sch.t1 values(2,'bbb');
-- 检索数据
select * from test_sch.t1;

三。备份数据库
1. 不包含归档的联机全备
-- 仅备份数据库,不备份日志 
backup database full to dmbkname03_noarc bakfile 'C:\xcl\online_noarc\dmbkname03_noarc.bak' backupinfo '测试全库联机备份不包含归档' maxsize 50 without log ;

2. 再次插入数据
insert into test_sch.t1 values(3,'dmbkname03_noarc');

3. 包含归档的联机全备
-- 备份数据库,并包含日志
backup database full to dmbkname04 bakfile 'C:\xcl\online\dmbkname04.bak' backupinfo '测试全库联机备份' maxsize 50 ;

备份完成的后续工作:

1. 继续插入一笔数据
-- 插入数据
insert into test_sch.t1 values(4,'dmbkname04');

-- 检索数据
select * from test_sch.t1;

SQL> select * from test_sch.t1;


行号       ID          NAME
---------- ----------- ----------------
1          1           aaa
2          2           bbb
3          3           dmbkname03_noarc
4          4           dmbkname04


已用时间: 1.245(毫秒). 执行号:99.
2 将归档备份一份到另一个目录
3. 在"DM服务查看器"中停掉对应的实例服务"DmServiceDMSERVER"
4. 将dm.ini 备份一份到另一个目录
5. 删除数据库目录
在"C:\dmdbms\data"目录下删除数据库所在目录"DAMENG".此时数据库就被删除了。
这时,你去"DM服务查看器"刷新下,就看不到"DmServiceDMSERVER"这个服务了

四。恢复测试

达梦数据库的恢复通常分两步走.
第一,通过dminit重新初始化出一个和备份数据库相同的名字的库
第二. 执行恢复命令恢复.

a. 不包含归档的联机全备的恢复

1. 初始化数据库
c:\dmdbms\bin>dminit.exe  PATH=C:\dmdbms\data  DB_NAME=DAMENG  INSTANCE_NAME=DMSERVER
2.恢复数据库
-- 不包含归档
c:\dmdbms\bin> dmrestore ini_path=C:\xcl\dm.ini  file=C:\xcl\online_noarc\dmbkname03_noarc.bak
3. 启动服务,进入数据库查看恢复结果
SQL>select * from test_sch.t1;


行号       ID          NAME
---------- ----------- ----
1          1           aaa
2          2           bbb


已用时间: 60.990(毫秒). 执行号:3.

b. 不包含归档的联机全备文件加上归档日志的恢复
1. 初始化数据库
--再次用不包含归档的备份测试,但指定归档日志目录
dminit.exe  PATH=C:\dmdbms\data  DB_NAME=DAMENG  INSTANCE_NAME=DMSERVER
2.恢复数据库
dmrestore ini_path=C:\xcl\dm.ini  file=C:\xcl\online_noarc\dmbkname03_noarc.bak archive_dir=C:\xcl\online_noarc\arc2
3. 启动服务,进入数据库查看恢复结果
SQL>select * from test_sch.t1;


行号       ID          NAME
---------- ----------- ----------------
1          1           aaa
2          2           bbb
3          3           dmbkname03_noarc
4          4           dmbkname04


已用时间: 62.247(毫秒). 执行号:3.
SQL>

c.包含归档的联机全备的恢复
1. 初始化数据库
dminit.exe  PATH=C:\dmdbms\data  DB_NAME=DAMENG  INSTANCE_NAME=DMSERVER
2.恢复数据库
-- 数据库全库备份,并包含日志
dmrestore ini_path=C:\xcl\dm.ini  file=C:\xcl\online\dmbkname04.bak
3. 启动服务,进入数据库查看恢复结果
SQL>select * from test_sch.t1;


行号       ID          NAME
---------- ----------- ----------------
1          1           aaa
2          2           bbb
3          3           dmbkname03_noarc


已用时间: 62.508(毫秒). 执行号:3.

五.总结
达梦数据库的文档中并没有说明,dmrestore命令即能恢复脱机备份,也能恢复联机备份。导致我在执行backup命令后,
误以为要有resotre恢复。但数据库被破坏后,又没法进disql执行restore.后测试才知,dmrestore命令通杀脱机和联机两种恢复方式。
从上面的测试可看出,基本上达梦的备份流程就是发命令,生成备份文件,并同时备份dm.ini。有些情况下还要备份归档日志。

然后恢复是用dminit重新初始化一个库再用dmrestore恢复。 在达梦数据库中dm.ini非常重要,备份时一定要记得把这个也一同备份。

MAIL: xcl_168@aliyun.com

BLOG: http://blog.csdn.net/xcl168