Skip to content

用户在安装 DM 数据库之前需要检查或修改操作系统的配置,以保证 DM 数据库能够正确安装和运行。

本文以演示环境如下:

操作系统CPU数据库
CentOS7x86_64 架构dm8_20230104_x86_rh6_64.iso

信创环境安装部署也可以参考此篇文章,但需注意 CPU 和操作系统对应的 DM 数据库版本。

新建 dmdba 用户

注意

安装前必须创建 dmdba 用户,禁止使用 root 用户安装数据库。

  1. 创建用户所在的组,命令如下:
plaintext
groupadd dinstall
  1. 创建用户,命令如下:
plaintext
useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
  1. 修改用户密码,命令如下:
plaintext
passwd dmdba

创建 dmdba 用户

修改文件打开最大数

  • 重启服务器后永久生效

使用 vi 编辑器打开 /etc/security/limits.conf 文件,命令如下:

plaintext
vi /etc/security/limits.conf

在最后添加四条语句,需添加的语句如下:

plaintext
dmdba hard nofile 65536
dmdba soft nofile 65536
dmdba hard stack 32768
dmdba soft stack 16384

设置打开文件大小

切换到 dmdba 用户,查看是否生效,命令如下:

plaintext
su - dmdba
plaintext
ulimit -a

查看设置是否生效

  • 设置参数临时生效

可使用 dmdba 用户执行如下命令,使设置临时生效:

plaintext
ulimit -n 65536

挂载镜像

切换到 root 用户,将 DM 数据库的 iso 安装包保存在任意位置,例如 /opt 目录下,执行如下命令挂载镜像:

plaintext
mount -o loop /opt/dm8_setup_rh7_64_ent_8.1.1.45_20191121.iso /mnt

挂载安装包镜像

新建安装目录

在根目录下创建 /dm8 文件夹,用来安装 DM 数据库。命令如下:

plaintext
mkdir /dm8

注意

使用 root 用户建立文件夹,待 dmdba 用户建立完成后需将文件所有者更改为 dmdba 用户,否则无法安装到该目录下

修改安装目录权限

将新建的安装路径目录权限的用户修改为 dmdba,用户组修改为 dinstall。命令如下:

plaintext
chown dmdba:dinstall -R /dm8/

给安装路径下的文件设置 755 权限。命令如下:

plaintext
chmod -R 755 /dm8

DM 数据库在 Linux 环境下支持命令行安装图形化安装,本章节只介绍命令行安装

命令行安装

切换至 dmdba 用户下,在 /mnt 目录下使用命令行安装数据库程序,依次执行以下命令安装 DM 数据库。

plaintext
su - dmdba
plaintext
cd /mnt/
plaintext
./DMInstall.bin -i

按需求选择安装语言,默认为中文。本地安装选择【不输入 Key 文件】,选择【默认时区 21】。

选项1

选择【1-典型安装】,按已规划的安装目录 /dm8 完成数据库软件安装,不建议使用默认安装目录。

选项2

数据库安装大概 1~2 分钟,数据库安装完成后,显示如下界面。

安装完成

数据库安装完成后,需要切换至 root 用户执行上图中的命令 /dm8/script/root/root_installer.sh 创建 DmAPService,否则会影响数据库备份。

配置环境变量

切换到 root 用户进入 dmdba 用户的根目录下,配置对应的环境变量。DM_HOME 变量和动态链接库文件的加载路径在程序安装成功后会自动导入。命令如下:

plaintext
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool

编辑 .bash_profile,使其最终效果如下图所示:

plaintext
cd /home/dmdba/
plaintext
vim .bash_profile

环境变量

切换至 dmdba 用户下,执行以下命令,使环境变量生效。

plaintext
su - dmdba
plaintext
source .bash_profile

DM 数据库在 Linux 环境支持命令行配置实例以及图形化配置实例,本章节将分别进行介绍。

命令行配置实例

使用 dmdba 用户配置实例,进入到 DM 数据库安装目录下的 bin 目录中,使用 dminit 命令初始化实例。

dminit 命令可设置多种参数,可执行如下命令查看可配置参数。

plaintext
./dminit help

dminit 帮助

需要注意的是页大小 (page_size)、簇大小 (extent_size)、大小写敏感 (case_sensitive)、字符集 (charset) 这四个参数,一旦确定无法修改,需谨慎设置。

  • extent_size 指数据文件使用的簇大小,即每次分配新的段空间时连续的页数。只能是 16 页或 32 页或 64 页之一,缺省使用 16 页。
  • page_size 数据文件使用的页大小,可以为 4 KB、8 KB、16 KB 或 32 KB 之一,选择的页大小越大,则 DM 支持的元组长度也越大,但同时空间利用率可能下降,缺省使用 8 KB。
  • case_sensitive 标识符大小写敏感,默认值为 Y 。当大小写敏感时,小写的标识符应用双引号括起,否则被转换为大写;当大小写不敏感时,系统不自动转换标识符的大小写,在标识符比较时也不区分大小写,只能是 Y、y、N、n、1、0 之一。
  • charset 字符集选项。0 代表 GB18030;1 代表 UTF-8;2 代表韩文字符集 EUC-KR;取值 0、1 或 2 之一。默认值为 0。

可以使用默认参数初始化实例,需要附加实例存放路径。此处以初始化实例到 /dm/data 目录下为例(执行初始化命令前,需要使用 root 用户授予 /dm/data 目录相应权限,可以参考修改目录权限),初始化命令如下:

plaintext
./dminit path=/dm/data

dminit 默认参数

也可以自定义初始化实例的参数,参考如下示例:

以下命令设置页大小为 32 KB,簇大小为 32 KB,大小写敏感,字符集为 utf_8,数据库名为 DMDB,实例名为 DBSERVER,端口为 5237。

plaintext
./dminit path=/dm/data PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=y
CHARSET=1 DB_NAME=DMDB INSTANCE_NAME=DBSERVER PORT_NUM=5237

dminit 设置参数

注意

如果此处自定义了初始化参数,在后面的注册服务和启动数据库等步骤中,请按实际的自定义参数进行操作。

命令行注册服务

注册服务需使用 root 用户进行注册。使用 root 用户进入数据库安装目录的 /script/root 下,如下所示:

plaintext
cd /dm8/script/root

注册服务,如下所示:

plaintext
./dm_service_installer.sh -t dmserver -dm_ini /dm8/data/DAMENG/dm.ini -p DMSERVER

用户可根据自己的环境更改 dm.ini 文件的路径以及服务名,如下所示:

plaintext
./dm_service_installer.sh -h

如需为其他实例注册服务,需打开 dbca 工具,进行注册服务,如下所示:

plaintext
cd /dm8/tool
./dbca.sh

命令行启停数据库

服务注册成功后,启动数据库,如下所示:

plaintext
systemctl start DmServiceDMSERVER.service

停止数据库,如下所示:

plaintext
systemctl stop DmServiceDMSERVER.service

重启数据库,如下所示:

plaintext
systemctl restart DmServiceDMSERVER.service

查看数据库服务状态,如下所示:

plaintext
systemctl status DmServiceDMSERVER.service

可前台启动,进入 DM 安装目录下的 bin 目录下,命令如下:

plaintext
./dmserver /dm/data/DAMENG/dm.ini

该启动方式为前台启动,若想关闭数据库,则输入 exit 即可。

也可进入 DM 安装目录下的 bin 目录下,启动/停止/重启数据库,如下所示:

plaintext
./DmServiceDMSERVER start/stop/restart

查看数据库状态,如下所示:

plaintext
./DmServiceDMSERVER status

数据库还原

使用WinSCP工具将数据库备份文件复制到指定的目录

WinSCP 是一款好用SSH图形化SFTP客户端工具

一、前言

本文根据数据备份还原的经典场景,总结以下例子以作说明示范。主要针对以下场景进行说明:

  • 全库 + 增量备份集还原数据库。
  • 全库 + 增量备份集 + 归档还原数据库。

二、全库 + 增量备份集还原数据库

2.1 还原原理

增量还原指通过增量备份集进行数据还原操作。在使用增量备份集进行数据库还原的前提是已对数据库进行全库备份。因为增量还原过程中隐含一个完全还原操作。选择增量备份还原时,直接选择最后一个增量备份集进行还原即可,数据库会自动从最早一个全库备份寻找开始还原。如果增量备份集的基备份集被删除了,那么单独使用这个增量备份集是无法进行还原操作的。

例如,数据库在使用全库 + 增量备份集进行数据库还原时,会先对数据库进行全库备份(在备份之前需要设置好归档)产生完全备份集 A,当对数据库进行相关操作(增删改)之后,依次进行增量备份并产生增量备份集 B、C、D。当使用增量备份集进行数据库还原时,可以直接使用最后一个增量备份集 D 进行还原操作,最终完成整个数据库还原过程。

注意

1.使用增量备份集进行还原时,增量备份集的基备份集不能被删除。 2.进行增量备份还原,需要将该增量备份之前完整的全库备份及增量备份都进行拷贝。

2.2 准备工作

  1. 数据准备,执行以下命令:
sql
--创建表并插入数据
create table test (a int );
insert into test values (1);
commit;
  1. 第一次全库备份。
sql
backup database full to "DB_DAMENG_FULL_2021_09_28_22_37_43" backupset '/dm8/data/DAMENG/bak' compressed level 1;
  1. 第二次备份为增量备份。
shell
##插入数据2
insert into test values(2);
commit;

##执行增量备份
backup database increment to "DB_DAMENG_INCRE_2021_09_28_22_40_46" backupset '/dm8/data/DAMENG/bak' compressed level 1;
  1. 第三次备份为增量备份。
shell
##插入数据3
insert into test values(3);
commit;

##执行增量备份
backup database increment to "DB_DAMENG_INCRE_2021_09_28_22_43_20" backupset '/dm8/data/DAMENG/bak' compressed level 1;
  1. 查看备份集
shell
##检查生成的备份集
[dmdba@localhost bak]$ ls
DB_DAMENG_FULL_2021_09_28_22_37_43
DB_DAMENG_INCRE_2021_09_28_22_40_46
DB_DAMENG_INCRE_2021_09_28_22_43_20
[dmdba@localhost bak]$ pwd
/dm8/data/DBOA/bak

注意

如果两个增量备份期间未产生新数据,则无法进行增量备份。

2.3 具体步骤

  1. 停止数据库服务,还原步骤如下:
shell
##检验备份集是否正确
RMAN>CHECK BACKUPSET '/dm8/data/DAMENG/bak/DB_DAMENG_INCRE_2021_09_28_22_43_20';

##还原
RESTORE DATABASE '/dbdata/dmdata/DAMENG/dm.ini' FROM BACKUPSET   '/dm8/data/DAMENG/bak/DB_DAMENG_INCRE_2021_09_28_22_43_20';

##恢复
RECOVER DATABASE '/dbdata/dmdata/DAMENG/dm.ini' FROM BACKUPSET   '/dm8/data/DAMENG/bak/DB_DAMENG_INCRE_2021_09_28_22_43_20';

##更新数据库魔数
RECOVER DATABASE '/dm8/data/DAMENG/dm.ini'  UPDATE DB_MAGIC;

注意

当备份集为脱机备份即备份过程中无日志生成,那么此时还原后的数据库中数据与备份时数据状态一致。在不需要重做归档日志恢复数据的情况下,可以直接更新 DB_MAGIC 完成数据库恢复操作。

  1. 还原成功后,启动数据库并开始检查数据。
sql
--查看表数据
SQL> select * from test;
行号     A
---------- -----------
1          1
2          2
3          3

三、全库 + 增量备份集 + 归档还原数据库

3.1 还原原理

归档日志是保证数据一致性和完整性的重要保障。配有归档日志的数据库系统在出现故障时丢失数据的可能性更小,这是因为一旦出现介质故障如磁盘损坏时,利用归档日志,系统可被恢复至故障发生的前一刻,也可以还原到指定的时间点。当利用归档恢复到指定时间点时,需调用 UNTIL TIME 字段指定备份的截止时间点,即可以实现恢复数据库到指定时间点。

3.2 准备工作

  1. 数据准备,执行以下命令:
sql
create table test (a int );
insert into test values (1);
commit;
  1. 第一次全库备份。
sql
backup database full to "DB_DAMENG_FULL_2021_09_28_22_37_43" backupset '/dm8/data/DAMENG/bak' compressed level 1;
  1. 第二次备份为增量备份。
shell
##插入数据2
insert into test values(2);
commit;

##执行增量备份
backup database increment to "DB_DAMENG_INCRE_2021_09_28_22_40_46" backupset '/dm8/data/DAMENG/bak' compressed level 1;
  1. 第三次备份为增量备份。
shell
##插入数据3
insert into test values(3);
commit;

##执行增量备份
backup database increment to "DB_DAMENG_INCRE_2021_09_28_22_43_20" backupset '/dm8/data/DAMENG/bak' compressed level 1;
  1. 插入数据 4 并提交,产生新数据归档。
shell
##插入数据4
insert into test values(4);
commit;
  1. 插入数据 5 并提交,产生新数据归档。
shell
##插入数据5
insert into test values(5);
commit;
  1. 查看备份集。
shell
[dmdba@localhost bak]$ ls
DB_DAMENG_FULL_2021_09_28_22_37_43
DB_DAMENG_INCRE_2021_09_28_22_40_46
DB_DAMENG_INCRE_2021_09_28_22_43_20
[dmdba@localhost bak]$ pwd
/dm8/data/DBOA/bak

注意

如果两个增量备份期间未产生新数据,则无法进行增量备份。

3.3 具体步骤

3.3.1 还原到当前最新数据时刻

  1. 停止数据库服务,还原步骤如下:
shell
##检验备份集是否正确
RMAN>CHECK BACKUPSET  '/dm8/data/DAMENG/bak/DB_DAMENG_INCRE_2021_09_28_22_43_20';

##还原
RESTORE DATABASE '/dbdata/data/DAMENG/dm.ini'  FROM  BACKUPSET  '/dm8/data/DAMENG/bak/DB_DAMENG_INCRE_2021_09_28_22_43_20';

##恢复
RECOVER DATABASE '/dbdata/data/DAMENG/dm.ini'  WITH ARCHIVEDIR '/dm8/dmarch';

##更新数据库魔数
RECOVER DATABASE '/dm8/data/DAMENG/dm.ini'  UPDATE DB_MAGIC;
  1. 还原成功后,启动数据库,并检验数据库里最新记录值。
shell
##结果显示恢复到归档数据5
##查看表数据
SQL> select * from test;
行号     A
---------- -----------
1          1
2          2
3          3
4          4
5          5

3.3.2 恢复到指定时间点

  1. 停止数据库服务,还原步骤如下:
shell
##检验备份集是否正确
RMAN>CHECK BACKUPSET  '/dm8/data/DAMENG/bak/DB_DAMENG_INCRE_2021_09_29_13_24_28';

##还原
RESTORE DATABASE '/dbdata/data/DAMENG/dm.ini'  FROM  BACKUPSET  '/dm8/data/DAMENG/bak/DB_DAMENG_INCRE_2021_09_29_13_24_28';

##恢复
RECOVER DATABASE '/dbdata/data/DAMENG/dm.ini'  WITH ARCHIVEDIR
 '/dm8/dmarch'  UNTIL TIME '2021-12-17 15:21:00 ';

##更新数据库魔数
RECOVER DATABASE '/dm8/data/DAMENG/dm.ini'  UPDATE DB_MAGIC;
  1. 还原成功后,启动数据库,并检验数据库里最新记录值。
shell
##结果显示恢复到归档数据4
##查看表数据
SQL> select * from test;
行号     A
---------- -----------
1          1
2          2
3          3
4          4