签到成功

知道了

CNDBA社区CNDBA社区

DM数据库备份还原

2021-08-16 19:32 1521 0 原创 DM数据库
作者: shinelifes

DM数据库备份还原
一、物理备份还原
1.1 联机归档配置
(1)连接数据库,修改数据库为MOUNT状态。
—检查是否设置归档
select from v$dm_arch_ini;
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/cssWEB123@192.168.2.10:5234
SQL>ALTER DATABASE MOUNT;
(2)配置本地归档。
SQL>ALTER DATABASE ADD ARCHIVELOG ‘DEST=/home/dmdba/dmdbms/data/arch,TYPE=local,FILE_SIZE=64,SPACE_LIMIT=2048’;
(3)开启归档模式。
SQL>ALTER DATABASE ARCHIVELOG;
(4)修改数据库为OPEN状态。
SQL>ALTER DATABASE OPEN;
1.2 联机执行SQL语句进行备份
(1)DIsql中输入备份数据库语句
cd /home/dmdba/dmdbms/bin
dmdba@dm1:/home/dmdba/dmdbms/bin$ ./disql SYSDBA/cssWEB123@192.168.2.10:5234
SQL>BACKUP DATABASE FULL BACKUPSET ‘ /home/dmdba/dmdbms/data/backup /db_full_bak_01’;
备份语句中的参数FULL参数可以省略,不指定备份类型会默认指定备份类型为完全备份。
1.3 使用DMRMAN在dm2恢复还原
(1)在dm2上创建备份目录
$mkdir –p /home/dmdba/dmdbms/data/backup
(2)从dm1拷贝备份文件到dm2的备份目录
$scp -r db_full_bak_01/ 192.168.2.11:/home/dmdba/dmdbms/data/backup/
(3)在dm2上恢复还原数据库
恢复命令:
cd /home/dmdba/dmdbms/bin
dmdba@dm2:/home/dmdba/dmdbms/bin$ ./dmrman CTLSTMT=”RESTORE DATABASE ‘/home/dmdba/dmdbms/data/DMOA/dm.ini’ FROM BACKUPSET ‘/home/dmdba/dmdbms/data/backup/db_full_bak_01’”
还原命令:
dmdba@dm2:/home/dmdba/dmdbms/bin$ ./dmrman CTLSTMT=”Recover DATABASE ‘/home/dmdba/dmdbms/data/DMOA/dm.ini’ FROM BACKUPSET ‘/home/dmdba/dmdbms/data/backup/db_full_bak_01’”
dm2更新db_magic
dmdba@dm2:/home/dmdba/dmdbms/bin$ ./dmrman CTLSTMT=”recover database ‘/home/dmdba/dmdbms/data/DMOA/dm.ini’ update db_magic”
dmdba@dm2:/home/dmdba/dmdbms/bin$
或使用以下命令:
cd /home/dmdba/dmdbms/bin
./dmrman
RMAN> RESTORE database ‘/home/dmdba/dmdbms/data/DMOA1/dm.ini’ from backupset ‘/home/dmdba/dmdbms/data/backup/fullbak1’;
RMAN> RECOVER database ‘/home/dmdba/dmdbms/data/DMOA1/dm.ini’ from backupset ‘/home/dmdba/dmdbms/data/backup/fullbak1’;
RMAN> RECOVER DATABASE ‘/home/dmdba/dmdbms/data/DMOA1/dm.ini’ UPDATE DB_MAGIC;
4)启动数据库服务,连接数据库
dmdba@dm2:/home/dmdba/dmdbms/bin$ ./DmServiceDMOA start
Starting DmServiceDMOA: [ OK ]
dmdba@dm2:/home/dmdba/dmdbms/bin$ ./disql SYSDBA/cssWEB123@192.168.2.11:5234
Server[192.168.2.11:05234]:mode is normal, state is open
login used time : 1.098(ms)
disql V8
SQL>
1.4 备份还原示例
第一部分 备份
(1)完整备份
./disql SYSDBA/cssWEB123@localhost:5236
SQL>BACKUP DATABASE FULL BACKUPSET ‘/home/dmdba/dmdbms/dmbackup/db_full_bak’;
(2)差异增量备份
SQL>BACKUP DATABASE INCREMENT WITH BACKUPDIR ‘/home/dmdba/dmdbms/dmbackup/db_full_bak’ BACKUPSET ‘/home/dmdba/dmdbms/dmbackup/db_increment_bak’;
(3)累积增量备份
SQL>BACKUP DATABASE INCREMENT CUMULATIVE WITH BACKUPDIR ‘/home/dmdba/dmdbms/dmbackup/db_full_bak’ BACKUPSET ‘/home/dmdba/dmdbms/dmbackup/DB_CUMULATIVE_BAK02’;
第二部分 还原
数据库还原之后,正常使用备份集或者归档恢复数据库,并更新数据库魔数即可。
(1)restore数据库
RMAN> restore database ‘/home/dmdba/dmdbms/dmdata/DMOA/dm.ini’ from backupset ‘/home/dmdba/dmdbms/dmbackup/DB_CUMULATIVE_BAK02’ with backupdir ‘/home/dmdba/dmdbms/dmbackup/db_full_bak’;
(2)recover
RMAN> recover database ‘/home/dmdba/dmdbms/dmdata/DMOA/dm.ini’ from backupset ‘/home/dmdba/dmdbms/dmbackup/DB_CUMULATIVE_BAK02’;
(3)更新db_magic
RMAN> recover database ‘/home/dmdba/dmdbms/dmdata/DMOA/dm.ini’ update db_magic;
总结:
(1)DM数据库默认增量备份方式为差异增量备份。差异增量备份的基备份集可以是增量备份集也可以是全量备份集,累积增量备份的备份集只能是全量备份的备份集。
(2)如果不指定备份集搜索目录,数据库默认在指定备份集的上级目录和数据库默认备份路径下找最新的备份集作为基备份集。差异增量备份取所有备份集中最新的备份集作为基备份集(包含全量和增量),累积增量备份取最新的全量备份集。
(3)使用差异增量备份集还原数据库时,基备份集和基备份集依赖的备份集都不能丢失(比如差异增量备份集D基于增量备份集C,C基于增量备份B, B基于全量备份A,则A、B、C备份集都不能丢失),否则将无法完成恢复,报错[-8036]:无基备份或无匹配基备份。累积增量备份的备份集只需要基础全量备份集完整即可。
二、逻辑备份还原
2.1 功能简介
DM数据库的备份还原包括两种类型:物理备份还原和逻辑备份还原。逻辑备份还原是对数据库逻辑组件(如表、视图和存储过程等数据库对象)的备份还原。例如使用dexp和dimp进行的备份还原。逻辑备份还原正是本书所要介绍的内容。
逻辑导出(dexp)和逻辑导入(dimp)是DM数据库的两个命令行工具,分别用来实现对DM数据库的逻辑备份和逻辑还原。逻辑备份和逻辑还原都是在联机方式下完成,联机方式是指数据库服务器正常运行过程中进行的备份和还原。dexp和dimp是DM数据库自带的工具,只要安装了DM数据库,就可以在安装目录/dmdbms/bin中找到。
逻辑导出和逻辑导入数据库对象分为四种级别:数据库级、用户级、模式级和表级。四种级别独立互斥,不能同时存在。四种级别所提供的功能:
 数据库级(FULL):导出或导入整个数据库中的所有对象。
 用户级(OWNER):导出或导入一个或多个用户所拥有的所有对象。
 模式级(SCHEMAS):导出或导入一个或多个模式下的所有对象。
 表级(TABLES):导出或导入一个或多个指定的表或表分区。
2.2 逻辑全库备份还原
2.2.1 在dm1服务器上写入数据
(1)创建TEST1表,并写入数据
create table test1(c1 varchar(100), c2 varchar(100));
begin
for i in 1..100 loop
insert into test1 values(‘a’||i, ‘b’||i);
end loop;
end;
/
(2)创建DMOA用户,并授予resource角色权限
create user DMOA identified by “dameng_oa”;
grant resource to DMOA;
commit;
(3)查询数据
SQL> select count(
) from test1;
LINEID COUNT(*)


1 100
SQL> select USERNAME,ACCOUNT_STATUS from DBA_USERS where USERNAME=’DMOA’;
LINEID USERNAME ACCOUNT_STATUShttp://www.cndba.cn/shinelifes/article/4656


1 DMOA OPEN
SQL> select * from DBA_SYS_PRIVS where GRANTEE=’DMOA’;
LINEID GRANTEE PRIVILEGE ADMIN_OPTION


1 DMOA CREATE SESSION NO
SQL> select GRANTEE,GRANTED_ROLE from DBA_ROLE_PRIVS where GRANTEE=’DMOA’;
LINEID GRANTEE GRANTED_ROLE


1 DMOA RESOURCE
2 DMOA PUBLIC
3 DMOA SOI
2.2.2 导出整个数据库
(1)示例:
导出整个数据库
cd /home/dmdba/dmdbms/bin
./dexp USERID=SYSDBA/cssWEB123@192.168.2.10:5234 FILE=DMOA_Full_061801.dmp DIRECTORY= /home/dmdba/dmdbms/data LOG= DMOA_Full_061801.log FULL=Y
2.2.3 将导出的文件传递到dm2服务器
(1)将逻辑备份文件传递到dm2服务器上
cd /home/dmdba/dmdbms/data/
scp -r DMOA_Full_061801.dmp 192.168.2.11:/home/dmdba/dmdbms/data/
2.2.4 导入数据库
(1)在dm2服务器上导入数据库
cd /home/dmdba/dmdbms/bin
./dimp USERID=SYSDBA/cssWEB123@192.168.2.11:5234 FILE=DMOA_Full_061801.dmp DIRECTORY=/home/dmdba/dmdbms/data LOG=DMOA_Full_061801imp.log FULL=Y TABLE_EXISTS_ACTION=APPEND
2.2.4 在dm2服务器上验证数据
(1)在dm2服务器上查询数据,验收数据
cd /home/dmdba/dmdbms/bin
dmdba@dm2:/home/dmdba/dmdbms/bin$ ./disql SYSDBA/cssWEB123@192.168.2.11:5234
Server[192.168.2.11:05234]:mode is normal, state is open
SQL> select count() from test1;
LINEID COUNT(
)


1 100
SQL> select USERNAME,ACCOUNT_STATUS from DBA_USERS where USERNAME=’DMOA’;
LINEID USERNAME ACCOUNT_STATUS


1 DMOA OPEN
SQL> select * from DBA_SYS_PRIVS where GRANTEE=’DMOA’;
LINEID GRANTEE PRIVILEGE ADMIN_OPTIONhttp://www.cndba.cn/shinelifes/article/4656


1 DMOA CREATE SESSION NO
SQL> select GRANTEE,GRANTED_ROLE from DBA_ROLE_PRIVS where GRANTEE=’DMOA’;
LINEID GRANTEE GRANTED_ROLE


1 DMOA RESOURCE
2 DMOA PUBLIC
3 DMOA SOI
SQL>
2.3 逻辑用户备份还原
2.3.1 在dm1服务器上写入数据
(1)DMOA用户创建表,并写入数据
cd /home/dmdba/dmdbms/bin
dmdba@dm1:/home/dmdba/dmdbms/bin$ ./disql DMOA/“dameng_oa”@192.168.2.11:5234
Server[192.168.2.11:05234]:mode is normal, state is open
SQL> select user;
LINEID USER()


1 DMOA
SQL> create table test1(c1 varchar(100), c2 varchar(100));
SQL> begin
for i in 1..100 loop
insert into test1 values(‘a’||i, ‘b’||i);
end loop;
end;
/
SQL> commit;
SQL> create table user1(c1 varchar(100), c2 varchar(100));
begin
for i in 1..100 loop
insert into user1 values(‘a’||i, ‘b’||i);
end loop;
end;
/
SQL> commit;
2.3.2 查询数据
(1)用DMOA用户查询数据
SQL> select count() from test1;
LINEID COUNT(
)


1 100
SQL> select count() from user1;
LINEID COUNT(
) http://www.cndba.cn/shinelifes/article/4656


1 100
SQL>
SQL> select USERNAME from all_users where USERNAME=’DMOA’;
LINEID USERNAMEhttp://www.cndba.cn/shinelifes/article/4656http://www.cndba.cn/shinelifes/article/4656


1 DMOA
SQL>
2.3.3 导出DMOA用户的全部数据
(1)用SYSDBA导出DMOA用户的全部数据
cd /home/dmdba/dmdbms/bin
./dexp USERID=SYSDBA/cssWEB123@192.168.2.10:5234 FILE=DMOA_061801.dmp DIRECTORY=/home/dmdba/dmdbms/data LOG=DMOA_061801.log SCHEMAS=DMOA
2.3.4 将导出的文件传递到dm2服务器
(1)将导出的数据文件传递到服务器
scp DMOA_061801.dmp 192.168.2.11:/home/dmdba/dmdbms/data/
2.3.5 导入数据
(1)在dm2服务器上,用SYSDBA用户导入数据
cd /home/dmdba/dmdbms/bin
./dimp USERID=SYSDBA/cssWEB123@192.168.2.11:5234 FILE=DMOA_061801.dmp DIRECTORY=/home/dmdba/dmdbms/data LOG=DMOA_061801imp.log SCHEMAS=DMOA TABLE_EXISTS_ACTION=APPEND
2.3.6 在dm2服务器上验证数据
(1)用户DMOA用户验证数据
cd /home/dmdba/dmdbms/bin
dmdba@dm2:/home/dmdba/dmdbms/bin$ ./disql DMOA/“dameng_oa”@192.168.2.11:5234
Server[192.168.2.11:05234]:mode is normal, state is open
SQL> select user;
LINEID USER()


1 DMOA
SQL> select count() from test1;
LINEID COUNT(
) http://www.cndba.cn/shinelifes/article/4656

http://www.cndba.cn/shinelifes/article/4656


1 100
SQL> select count() from user1;
LINEID COUNT(
)


1 100
SQL> select USERNAME from all_users where USERNAME=’DMOA’;
LINEID USERNAMEhttp://www.cndba.cn/shinelifes/article/4656


1 DMOA
SQL>
三、DM dmfldr
3.1 功能简介
dmfldr(DM Fast Loader)是DM提供的快速数据装载命令行工具。用户通过使用dmfldr工具能够把按照一定格式排序的文本数据以简单、快速、高效的方式载入到DM数据库中,或把DM数据库中的数据按照一定格式写入文本文件。
3.2 系统结构
dmfldr的系统结构如下图所示:

dmfldr实际上除了客户端工具,还包含一个在数据库服务器中的dmfldr功能模块,它们共同完成dmfldr的各项功能。
当进行数据载入时,dmfldr客户端接收用户提交的命令与参数,分析控制文件与数据文件,将数据打包发送给服务器端的dmfldr模块,由服务器完成数据的真正装载工作。并分析服务器返回的消息,必要时根据用户参数指定生成日志文件与错误数据文件。
当进行数据导出时,dmfldr客户端接收用户提交的命令与参数,分析控制文件,将用户要求转换成相应消息发送给服务器端的dmfldr模块。服务器解析并打包需要导出的数据,发送给dmfldr客户端,客户端将数据写入指定的数据文件,必要时根据用户参数指定生成日志文件。
3.3 dmfldr示例
3.3.1 dmfldr控制文件
控制文件CONTROL是启动dmfldr必须要指定的参数,用于指定数据文件中数据的格式。在数据载入时,dmfldr根据控制文件指定的格式来解析数据文件;导出数据时,dmfldr也会根据控制文件指定的列分隔符、行分隔符等生成数据文件。控制文件中还可以指定其他dmfldr参数值。
3.3.2 指定数据文件
当dmfldr工作在IN模式时,从数据文件中读取数据并载入数据库;当工作在OUT模式时,从数据库中将指定数据导出到数据文件。数据文件通常为文本文件,列与列之间由列分隔符隔开,行与行之间由行分隔符隔开。数据文件中的列分隔符和行分隔符由用户指定,并在控制文件中设置为与数据文件中的一致。
3.3.3 在控制文件中指定数据文件
可以在控制文件的LOAD节点中指定数据文件。
(1)创建表load_test
CREATE TABLE load_test(C1 INT,C2 INT,C3 DATE);
(2)编辑数据文件load_test.txt,存放路径为/home/dmdba/dmdbms/data/load_test.txt,文件内容如下
1 1|2015-11-06
2 2|2015-11-05
3 3|2015-11_04
4 4|2017-12_04
(3)编辑控制文件load_test.txt,存放路径为/home/dmdba/dmdbms/data/load_test.ctrl,内容如下:
LOAD DATA
INFILE ‘/home/dmdba/dmdbms/data/load_test.txt’
INTO TABLE load_test
FIELDS ‘|’
(C1 TERMINATED BY ‘ ‘,
C2,
C3 DATE FORMAT ‘yyyy-mm-dd’
)
4) 使用dmfldr进行数据载入
cd /home/dmdba/dmdbms/bin
./dmfldr userid=SYSDBA/cssWEB123@192.168.2.10:5234 control=/’/home/dmdba/dmdbms/data/load_test.ctrl/’
5)查询数据
./disql SYSDBA/cssWEB123@192.168.2.10:5234
select from load_test;
SQL> select
from load_test;
LINEID C1 C2 C3


1 1 1 2015-11-06
2 2 2 2015-11-05
3 3 3 2015-11-04
4 4 4 2017-12-04
SQL>
3.3.4 使用DATA参数指定数据文件
也可以使用DATA参数指定dmfldr的数据文件,数据文件路径的优先选择顺序为先控制文件,后参数选项。如果控制文件中数据文件路径指定为‘’,在命令行通过DATA参数指定数据文件路径,DATA所指定的文件路径会替换‘’。
(1)创建表load_test
drop table load_test;
CREATE TABLE load_test(C1 INT,C2 INT,C3 DATE);

(2)编辑数据文件load_test.txt,存放路径为/home/dmdba/dmdbms/data/load_test.txt,文件内容如下
1 1|2015-11-06
2 2|2015-11-05
3 3|2015-11_04
4 4|2016-12_04
5 5|2016-10_04
(3)编辑控制文件load_test.ctrl,存放路径为/home/dmdba/dmdbms/data/load_test.ctrl,内容如下:
LOAD DATA
INFILE *
INTO TABLE load_test
FIELDS ‘|’
(
C1 TERMINATED BY ‘ ‘,
C2,
C3 DATE FORMAT ‘yyyy-mm-dd’
)

(4)使用dmfldr进行数据载入
cd /home/dmdba/dmdbms/bin
./dmfldr userid=SYSDBA/cssWEB123@192.168.2.10:5234 control=/’/home/dmdba/dmdbms/data/load_test.ctrl/’ data=/’/home/dmdba/dmdbms/data/load_test.txt/’
(5)查询数据
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/cssWEB123@192.168.2.10:5234
SQL> select * from load_test;
LINEID C1 C2 C3 http://www.cndba.cn/shinelifes/article/4656http://www.cndba.cn/shinelifes/article/4656


1 1 1 2015-11-06
2 2 2 2015-11-05
3 3 3 2015-11-04
4 4 4 2016-12-04
5 5 5 2016-10-04
更多内容链接:https://edu.dameng.com,https://eco.dameng.com/

版权声明:本文为博主原创文章,未经博主允许不得转载。

https://edu.dameng.com,https://eco.dameng.com/

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
shinelifes

shinelifes

关注
  • 28
    原创
  • 0
    翻译
  • 0
    转载
  • 0
    评论
  • 访问:32430次
  • 积分:99
  • 等级:注册会员
  • 排名:第29名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ