天天看点

达梦DM8数据库的单机部署

达梦数据库​

单机安装部署方案​

达梦数据库​

2022 年09 月​

目录​

​​第一章安装前准备 3​​​

​​1.1硬件和操作系统平台 3​​​

​​1.2申请匹配的版本 4​​​

​​第二章安装前规划 4​​​

​​2.1规划安装路径 4​​​

​​2.2 规划数据库初始化参数 4​​​

​​2.2.1 页大小 4​​​

​​2.2.2 日志文件大小 5​​​

​​2.2.3 时区设置 5​​​

​​2.2.4 字符串比较大小敏感 5​​​

​​2.2.5 字符集 5​​​

​​2.2.6 VARCHAR类型以字符为单位 5​​​

​​2.2.7 改进字符串HASH算法 5​​​

​​第三章安装数据库 6​​​

​​3.1 安装前的检查 6​​​

​​3.1.1 关闭防火墙,开机禁止自动启动防火墙 6​​​

​​3.1.2 禁止selinux 6​​​

​​3.1.2 操作系统内存参数检查 7​​​

​​3.2 创建用户和用户组 7​​​

​​3.3 磁盘划分情况 11​​​

​​3.4 检查系统参数限制 11​​​

​​3.4.1 修改limits.conf参数 11​​​

​​3.4.2 磁盘调度算法检查 12​​​

​​3.5 数据库安装 12​​​

​​3.5.1 挂载镜像 12​​​

​​3.5.2 数据库安装 13​​​

​​3.5.3 环境变量配置 20​​​

​​3.6配置实例 20​​​

​​3.6.1 命令行配置实例 21​​​

​​3.6.2 手动图形化配置实例 22​​​

​​3.7注册服务 27​​​

​​3.7.1 命令行注册 27​​​

​​3.7.2图形化注册服务 28​​​

​​3.8启动,停止数据库 30​​​

​​第四章数据库归档,备份,参数优化 31​​​

​​4.1 数据库归档(两种方式) 31​​​

​​4.1.1 命令行模式配置归档 31​​​

​​4.1.2 图形化界面配置归档 31​​​

​​4.2数据库备份(全备,增量备份,定时删除30天前备份) 34​​​

​​4.2.1 数据库全库备份 34​​​

​​4.2.2 增量备份 37​​​

​​4.2.3 定时删除备份策略 40​​​

​​4.2 数据库配置参数的优化 42​​​

第一章安装前准备

1.1硬件平台和操作系统

本实验采用x86架构来模拟实际生产环境安装和部署。​

采用centos 7.x版本 64位操作系统来安装部署的。​

在终端命令行下,获取操作系统和硬件信息​

参数信息​ 命令​
查看CPU信息​ cat /proc/cpuinfo​
查看操作系统位数​ getconf ​LONG_BIT​
查询linux版本(centos)​ Uname -a或者 cat /etc/redhat-release​
查询内存​ Free -g​
查询磁盘​ df -h​
查询网络​ Ifconfig​

1.2申请匹配的版本

根据以上的硬件和操作系统下载相应的版本​

第二章安装前规划

2.1规划安装路径

  1. 使用df -h查看磁盘挂载情况​
  2. 根据服务器配置规划安装路径,数据路径,备份路径​
  3. 安装路径:建议放本地磁盘​
  4. 数据路径:建议放存储性能好的地方,如磁盘阵列的挂载点​
  5. 备份路径:建议放在数据盘不同的磁盘上​
  6. 归档路径:建议放在数据路下,避免误删​

规划路径​

  1. 安装路径:/opt/dmdbms​
  2. 数据路径:/home/dameng/data​
  3. 归档路径:/home/dameng/data/arch​
  4. 备份路径:/home/dameng/bak​

2.2 规划数据库初始化参数

达梦数据库初始化实例后初始化参数无法修改,为了移植、开发、维护的方便,根据应​

用特征合理规划初始化参数尤为重要,下面对一些重要的初始化参数进行详细说明:​

2.2.1 页大小

达梦数据库默认页大小是8K,生产建议该参数设置32K​

2.2.2 日志文件大小

每个DM 数据库实例必须至少有2 个重做日志文件,默认两个日志文件为DAMENG01.log、DAMENG02.log,这两个文件循环使用,日志文件在初始化实例后可以增加和扩大,小型OA 系统建议设置为2*2048M,在线大型交易系统建议设置为4*2048M。​

2.2.3 时区设置

选择时区前需要确认操作系统时区和数据库时区相同以避免时间差异,建议使用北京​

时间+8:00。​

2.2.4 字符串比较大小敏感

达梦为了兼容不同的数据库,在初始化数据库的时候有一个参数字符串比较大小写敏​

感,用于确定数据库对象及数据是否区分大小写,默认为区分,不可更改。建议MYSQL ​

和SQLSERVER 迁移过来的系统,使用大小写不敏感,ORACLE 迁移过来的系统,使用大​

小写敏感,以便和原来系统匹配。​

2.2.5 字符集

建议采用默认值GB18030,如果需要国际字符可以采用Unicode,GB18030 数字字母占​

1 个字节,普通汉字占2 个字节,部分繁体及少数民族文字占4 字节,Unicode 在达梦中采用UTF-8 编码格式,欧洲的字母字符占1 到2 个字节,亚洲的大部分字符占3 个字节,附加字符为4 个字节。如果只存储中文和字母数字,一般来说GB18030 更节省空间一些。​

2.2.6 VARCHAR类型以字符为单位

该参数的作用是建表时VARCHAR 的长度是按照字符计算还是字节计算,默认以字节为​

单位,即字段的长度单位按照字节计算,如果采用字符为单位,字段的长度单位按照字符来​

计算,不同的字符集会导致字段长度不一样,实际最大长度受到页大小的限制。建议采用默​

认以字节为单位,如果从MYSQL 迁移的同时又不方便扩大表结构的长度,需要设置为以​

字符为单位。​

2.2.7 改进字符串HASH算法

在之前的达梦版本上用的旧的HASH 算法(大概2016 年10 月前后,具体时间未知),​

之后的版本默认使用新HASH 算法,如果是从之前旧版本数据还原到新版本上使用,不能​

使用改进字符串HASH 算法,其他情况使用改进字符串HASH 算法。​

第三章安装数据库

3.1 安装前的检查

3.1.1 关闭防火墙,开机禁止自动启动防火墙

[root@DM8 ~]# systemctl status firewall ----查询防火墙状态​

达梦DM8数据库的单机部署

[root@DM8 ~]# systemctl stop firewalld关闭防火墙​

[root@DM8 ~]# systemctl disable firewalld禁止开机启动防火墙​

达梦DM8数据库的单机部署

、​

[root@DM8 ~]# firewall-cmd --permanent --znotallow=public --add-prot=5236/tcp开放5236端口​

[root@DM8 ~]# firewall-cmd --reload重启防火墙​

3.1.2 禁止selinux

[root@DM8 ~]# getenforce查看selinux状态​

达梦DM8数据库的单机部署

[root@DM8 ~]# vi /etc/selinux/config编辑selinux,把SELINUX=Enforcing改成disabled​

达梦DM8数据库的单机部署

[root@DM8 ~]# reboot重启操作系统​

3.1.2 操作系统内存参数检查

Linux操作系统要注意检查/proc/sys/vm/overcommit_memory是否设置为1​

[root@DM8 ~]# cat /proc/sys/vm/overcommit_memory​

永久修改:​

编辑/etc/sysctl.conf,修改vm.overcommit_memory=1,然后执行sysctl -p使配置文件生效,操作如下:​

[root@DM8 ~]# vi /etc/sysctl.conf ---编辑/etc/sysctl.conf添加下面配置​

达梦DM8数据库的单机部署

3.2 创建用户和用户组

1.使用root用户创建组和用户:​

创建安装用户组dinstall​

[root@DM8 ~]# groupadd -g 1010 dinstall​

创建安装用户dmdba​

[root@DM8 ~]# useradd -u 1010 -g dinstall -m -d /home/dmdba -s /bin/bash dmdba​

初始化dmdba用户密码​

[root@DM8 ~]# passwd dmdba​

Changing password for user dmdba.​

New password:​

Retype new password:​

passwd: all authentication tokens updated successfully.​

2.创建安装路径,数据路径,归档路径,备份路径加相应的权限​

[root@DM8 ~]# mkdir /opt/dmdbms​

[root@DM8 ~]# mkdir -p /data/dmdata​

[root@DM8 ~]# mkdir -p /data/dmarch​

[root@DM8 ~]# mkdir -p /data/bak​

[root@DM8 ~]# chown -R dmdba:dinstall /opt/dmdbms/​

[root@DM8 ~]# chown -R dmdba:dinstall /data/dmdata/​

[root@DM8 ~]# chown -R dmdba:dinstall /data/dmarch​

[root@DM8 ~]# chown -R dmdba:dinstall /data/bak​

[root@DM8 ~]# chmod -R 755 /data​

[root@DM8 ~]# chmod -R 755 /opt/dmdbms/​

注意:实际生产环境需要把磁盘单独挂载到安装路径,数据路径,备份路径,拿一块磁盘做例,操作如下:​

比如:新添加一块磁盘或者磁盘阵列划分一块磁盘加载到操作系统中[root@DM8 ~]# fdisk -l查看新加磁盘的路径​

达梦DM8数据库的单机部署

给/dev/sdb分区 使用命令 fdisk /dev/sdb 按照操作输入,如下图所示:​

达梦DM8数据库的单机部署

挂载磁盘

[root@DM8 /]# mount /dev/sdb1 /data/bak --把磁盘挂载到/data/bak目录

注意:这只是临时挂载,重启挂载会消失

永久挂载需要在/etc/fstab中加入下面配置,如下图:​

[root@DM8 data]# vi /etc/fstab ​

达梦DM8数据库的单机部署

[root@DM8 data]# mount -a --测试配置是否正确​

3.3 磁盘划分情况

运行命令(df 及df -h /tmp)查看磁盘容量及使用情况。安装程序产生的临时文件,默​

认使用/tmp 目录,为了安装程序能够正常运行,用户应该保证/tmp 有大于600M 的剩余空间。如果/tmp 目录的剩余空间不足,用户可以扩充/tmp 目录的空间,也可以通过设置环境变量DM_INSTALL_TMPDIR 指定安装程序的临时目录。​

3.4 检查系统参数限制

3.4.1 修改limits.conf参数

[root@DM8 ~]# vi /etc/security/limits.conf编辑在最下面加上下面6行​

dmdba - data unlimited​

dmdba - fsize unlimited​

dmdba - nofile 1048576 ​

dmdba - memlock unlimited​

dmdba - nproc 10240​

dmdba - core unlimited​

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

[root@DM8 ~]# su - dmdba​

Last login: Thu Sep 15 10:09:11 CST 2022 on pts/0​

[dmdba@DM8 ~]$ ulimit -a​

达梦DM8数据库的单机部署

3.4.2 磁盘调度算法检查

查看对应的调度算法(以redhat操作系统为例):​

[dmdba@DM8 ~]$ cat /sys/block/sda/queue/scheduler​

达梦DM8数据库的单机部署
达梦DM8数据库的单机部署

如果查询是如下结果,就不要修改​

达梦DM8数据库的单机部署

3.5 数据库安装

3.5.1 挂载镜像

先上传数据库镜像到/root目录​

切换到root用户​

[dmdba@DM8 ~]$ su - root​

Password:​

Last login: Thu Sep 15 09:59:16 CST 2022 from 192.168.174.1 on pts/0​

查看上次数据库镜像目录,挂载到目录下​

[root@DM8 ~]# mount -o loop /root/dm8_20220701_x86_rh6_64_ent_8.1.2.128.iso /mnt​

mount: /dev/loop0 is write-protected, mounting read-only​

3.5.2 数据库安装

切换到dmdba用户下面​

[root@DM8 ~]# su - dmdba​

Last login: Thu Sep 15 10:23:10 CST 2022 on pts/0​

进入挂载目录,查询目录下文件​

[dmdba@DM8 ~]$ cd /mnt/​

[dmdba@DM8 mnt]$ ll​

total 946102​

-r-xr-xr-x 1 root root 2823968 Jul 1 13:44 DM8 Install.pdf​

-r-xr-xr-x 1 root root 965983690 Jul 1 13:49 DMInstall.bin​

3.5.2.1 命令行安装
  1. 切换至​su - dmdba​

    cd /mnt​

    DMInstall.bin -i​

  2. 按需求选择安装语言,默认为中文。本地安装选择【不输入​
  3. 选择【1-典型安装】,按已规划的安装目录 /dm8 完成数据库软件安装,不建议使用默认安装目录​
  4. 达梦DM8数据库的单机部署
  5. 数据库安装大概​
  6. 达梦DM8数据库的单机部署
  7. 数据库安装完成后,需要切换至 root 用户执行上图中的命令 /opt/dmdbms/script/root/root_installer.sh 创建 DmAPService,否则会影响数据库备份​
3.5.2.2图形化安装

使用dmdba用户执行一下命令:​

[dmdba@DM8 mnt]$ export DISPLAY=192.168.0.102:0.0​

图形化界面启动成功后,将弹出【选择语言与时区】页面,默认为简体中文和中国标准时间。​

达梦DM8数据库的单机部署

点击【确定】后,弹出​

达梦DM8数据库的单机部署

点击【下一步】后,为许可证协议页面,选择【接受】

达梦DM8数据库的单机部署

点击【下一步】后,弹出 key 文件页面,点击【浏览】选择【key 文件】,若没有 key 文件可以直接点击【下一步】,跳过该步骤。​

达梦DM8数据库的单机部署

点击【下一步】后,弹出选择组件页面,建议选择典型安装,也可根据需要,选择服务器安装、客户端安装和自定义安装​

达梦DM8数据库的单机部署

点击【下一步】后,弹出选择安装位置页面,可点击【浏览】选择安装位置,也可安装在默认路径下​

达梦DM8数据库的单机部署

点击【下一步】后,弹出确认安装信息页面,检查安装信息是否准确,确认无误后点击【安装】​

达梦DM8数据库的单机部署

点击【安装】后,等待​

达梦DM8数据库的单机部署

重新打开一个终端,切换到​

达梦DM8数据库的单机部署

脚本执行完成后,点击执行配置脚本页面中的【完成】,弹出提示框,提示是否关闭窗口,选择是,提示数据库安装完成,再点击【完成】按钮,完成数据库安装。​

达梦DM8数据库的单机部署

3.5.3 环境变量配置

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

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

编辑​

[dmdba@DM8 ~]$ vi .bash_profile​

~

达梦DM8数据库的单机部署

切换至​

source .bash_profile​

3.6配置实例

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

3.6.1 命令行配置实例

使用 dmdba 用户配置实例,进入到 DM 数据库安装目录下的 bin 目录中,使用 dminit 命令初始化实例。dminit 命令可设置多种参数,可执行如下命令查看可配置参数

[root@DM8 dmdbms]# su - dmdba​

Last login: Thu Sep 15 11:16:33 CST 2022 on pts/1​

[dmdba@DM8 ~]$ cd $DM_HOME​

[dmdba@DM8 dmdbms]$ cd bin​

[dmdba@DM8 bin]$ ./dminit help​

达梦DM8数据库的单机部署

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

[dmdba@DM8 bin]$ ./dminit path=/data/dmdata​

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

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

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

注意​

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

3.6.2 手动图形化配置实例

若需要主动打开配置助手,可使用 dmdba 用户配置实例,进入到 DM 数据库安装目录下的 tool 目录中,使用命令打开数据库配置助手。​

[dmdba@DM8 dmdata]$ cd $DM_HOME​

[dmdba@DM8 dmdbms]$ cd tool/​

[dmdba@DM8 tool]$ ./dbca.sh​

选择创建数据库实例,点击【开始】,进入创建数据库页面的创建数据库模版页签,选择【一般用途】,如下图所示: ​

达梦DM8数据库的单机部署

点击【下一步】,选择数据库实例安装目录,如下图所示:​

达梦DM8数据库的单机部署

确定好数据库安装目录后,点击【下一步】,用户可根据需要设置对应的数据库参数,如下图所示:​

达梦DM8数据库的单机部署

点击【下一步】,配置数据库文件路径,选择【默认路径】即可,如下图所示:​

达梦DM8数据库的单机部署

点击【下一步】,配置初始化参数,注意簇大小、页大小、字符集以及大小写敏感确定后不可修改,默认配置即可,如下图所示:​

达梦DM8数据库的单机部署

点击【下一步】,配置数据库口令,默认配置即可,如下图所示:​

达梦DM8数据库的单机部署

点击【下一步】,配置示例库,建议勾选或 DMHR,作为演示环境,如下图所示: ​

达梦DM8数据库的单机部署

点击【下一步】,用户可检查创建参数,若有需要修改之处可点击【上一步】回到需要修改的位置进行修改,如下图所示:​

达梦DM8数据库的单机部署

点击【完成】,创建完成数据库实例后,按下图按提示执行脚本即可完成实例配置:​

达梦DM8数据库的单机部署

3.7注册服务

3.7.1 命令行注册

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

cd /opt/dmdbms/script/root​

注册服务,如下所示:

./dm_service_installer.sh -t dmserver -dm_ini /data/dmdata/DAMENG/dm.ini -p DMSERVER​

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

./dm_service_installer.sh -h​

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

3.7.2图形化注册服务

打开运行​

[dmdba@DM8 tool]$ export DISPLAY=192.168.0.102:0.0​

[dmdba@DM8 tool]$ ./dbca.sh​

达梦DM8数据库的单机部署

单击【开始】,弹出注册数据库服务页面,如下图所示:​

达梦DM8数据库的单机部署

点击【完成】后,弹出执行配置脚本页面,按页面要求执行脚本即可,如下图所示:​

达梦DM8数据库的单机部署

执行脚本成功后,该实例已启动,如下图所示:​

达梦DM8数据库的单机部署

3.8启动,停止数据库

Systemctl start DmServiceDMSERVER.service启动数据库​

Systemctl stop DmServiceDMSERVER.service关闭数据库​

Systemctl status DmServiceDMSERVER.service查看数据库状态​

建议使用下面脚本方式启动和停止数据库​

su - dmdba​

cd $DM_HOME/bin​

./DmServiceDMSERVER status查询数据库状态​

./DmServiceDMSERVER stop/start/restart --停止/启动/重启数据库​

数据库归档,备份,参数优化

数据库归档(两种方式)

4.1.1 命令行模式配置归档

  1. 使用disql SYSDBA/SYSDBA登录数据库实例​
  2. 达梦DM8数据库的单机部署
  3. 把数据库修改到mount状态,操作如下:​SQL> alter database mount;​
  4. 添加归档路径和归档文件大小​alter database add archivelog 'type=local,dest=/data/dmarch,file_size=2028,space_limit=10240';​
  5. 达梦DM8数据库的单机部署
  6. 把数据库修改成归档模式​SQL> alter database archivelog;​

    操作已执行​

    已用时间: 11.666(毫秒). 执行号:0.​

  7. 打开数据库​

SQL> alter database open;​

4.1.2 图形化界面配置归档

  1. 使用DM管理工具登录数据库,如下图:​
  2. 达梦DM8数据库的单机部署
  3. 点击确定登录数据库,右键,选择管理服务器,如下图​
  4. 达梦DM8数据库的单机部署
  5. 选择系统管理,状态转换选择配置,点击转换,数据库到mount状态,如下图:​
  6. 达梦DM8数据库的单机部署
  7. 点击归档配置,选择归档,点击加号,添加归档路径和归档文件大小,点击确定,如下图:​
  8. 达梦DM8数据库的单机部署
  9. 点击系统管理,选择打开,点击转换,如下图:​
达梦DM8数据库的单机部署

4.2数据库备份(全备,增量备份,定时删除30天前备份)

4.2.1 数据库全库备份

  1. 使用客户端DM管理工具登录客户端,选择代理,作业,如下所示:​
  2. 达梦DM8数据库的单机部署
  3. 点开新建作业,输入作业名:BACK_FULL,点击作业步骤,如下图所示:​
  4. 达梦DM8数据库的单机部署
  5. 输入步骤名称和作业名称一样,步骤类型选择备份数据库,备份路径输入前面规划好的路径/data/bak,,选择完全备份,在选择高级,如下图所示:​
  6. 达梦DM8数据库的单机部署
  7. 选择成功是报告执行成功并结束作业和失败报告执行失败并结束作业,点击确定,然后点击作业调度,如下图所示:​
  8. 达梦DM8数据库的单机部署
  9. 点击作业调度,输入调度名称,类型默认选择周,选择星期天晚上23:00分,具体时间根据用户来修改,点击确定,这样全备就做完,如下图所示:​
达梦DM8数据库的单机部署

4.2.2 增量备份

  1. 新建作业,输入作业名:BACK_INC,在点击作业步骤,如下图所示:​
  2. 达梦DM8数据库的单机部署
  3. 步骤名称输入BACK_INC,图1所示,点击添加,步骤类型选择备份数据库,如图2所示,输入相关信息,点击高级,选择成功结束作业 ,失败选择执行一下步,点击确定.​
  4. 达梦DM8数据库的单机部署
  5. 图一​
  6. 达梦DM8数据库的单机部署
  7. 图二​

    ​

  8. 增量备份的时候,建议加上执行失败的时候执行一下全库备份,点击作业步骤,再次点击添加,输入全备的相关信息,高级选择,成功和失败结束作业,如下图所示:​
  9. 达梦DM8数据库的单机部署
  10. 图一​
  11. 达梦DM8数据库的单机部署
  12. 图二​
  13. 点击作业调度,输入名称,增量备份默认勾上星期一到星期六,调度类型选择反复执行,时间选择23:00:00 ,具体根据自己要求配置,然后点击确定,如下图所示:​
  14. 达梦DM8数据库的单机部署
  15. 操作完以上步骤以后,增量备份作业就已经完成。​

4.2.3 定时删除备份策略

1.新建作业,输入作业名称和步骤名称都是JOB_DEL_BAK_TIMEY,步骤类型选择sql脚本,脚本语句如下图所示,高级,成功和失败都选择执行结束作业。 ​

达梦DM8数据库的单机部署
  1. 调度作业,点击确定,如下图所示:​
  2. 达梦DM8数据库的单机部署
  3. 最后点击确定,就完成定时删除备份作业任务,如下图,可以到3个作业任务,​
达梦DM8数据库的单机部署

4.可以查询作业执行情况,点击作业右键,查看作业历史信息,如下图:​

达梦DM8数据库的单机部署

数据库配置参数的优化

  1. 根据脚本生成执行语句,默认修改这4个参数:​exec_mode int:=1; 表示直接执行脚本修改参数,1表示不直接修改参数,打印设置参数的语句,设置为1后,必须调整v_mem_mb和v_cpus​

    ​

    Mem_per int:=90;默认所有的内存归达梦数据库使用,如实际不能100%可用,可以调整此参数​

    v_mem_mb int:= 16000; --根据机器时间内存调整此参数​

    v_cpus int:= 2; --根据机器CPU核数调整此参数​

    脚本如下​

    ---------------------------------------------------------------------------------------------------------------------------------​

    declare​

    exec_mode int:= 1; ​

    mem_per int:= 90; ​

    v_mem_mb int:= 16000;​

    v_cpus int:= 2; ​

    tname varchar(100);​

    MEMORY_POOL int;​

    MEMORY_N_POOLS int;​

    MEMORY_TARGET int;​

    BUFFER INT;​

    MAX_BUFFER INT;​

    RECYCLE int;​

    CACHE_POOL_SIZE int;​

    BUFFER_POOLS int;​

    RECYCLE_POOLS int;​

    SORT_BUF_SIZE int;​

    SORT_BUF_GLOBAL_SIZE INT;​

    DICT_BUF_SIZE INT;​

    HJ_BUF_SIZE INT;​

    HAGR_BUF_SIZE INT;​

    HJ_BUF_GLOBAL_SIZE INT;​

    HAGR_BUF_GLOBAL_SIZE INT;​

    SORT_FLAG INT;​

    SORT_BLK_SIZE INT;​

    RLOG_POOL_SIZE INT;​

    TASK_THREADS INT;​

    IO_THR_GROUPS INT;​

    FAST_POOL_PAGES INT :=3000;​

    FAST_ROLL_PAGES INT :=1000;​

    CNT INT;​

    begin​

    CNT :=0;​

    if exec_mode=0 then ​

    SELECT TOP 1 N_CPU,TOTAL_PHY_SIZE/1024/1024 INTO v_cpus,v_mem_mb FROM V$SYSTEMINFO;​

    end if;​

    v_mem_mb := v_mem_mb * (mem_per/100.0);​

    v_mem_mb=round(v_mem_mb,-3);​

    IF v_mem_mb <= 2000 THEN​

    goto return_2000;​

    END IF;​

    IF v_mem_mb > 512000 THEN ​

    v_mem_mb :=v_mem_mb*0.8;​

    END IF;​

    MEMORY_TARGET=round(cast(v_mem_mb * 0.12 as int),-3);​

    TASK_THREADS :=4;​

    IO_THR_GROUPS :=4;​

    IF v_cpus < 8 THEN ​

    TASK_THREADS :=4;​

    IO_THR_GROUPS :=2;​

    END IF;​

    IF v_cpus >= 64 THEN ​

    v_cpus := 64; ​

    TASK_THREADS :=16;​

    IO_THR_GROUPS :=8;​

    END IF;​

    BUFFER := round(cast(v_mem_mb * 0.4 as int),-3);​

    MAX_BUFFER := BUFFER;​

    RECYCLE :=cast(v_mem_mb * 0.04 as int);​

    IF v_mem_mb < 70000 THEN​

    with t as​

    (​

    select rownum rn from dual connect by level <= 100​

    ) ,​

    t1 as​

    (​

    select * from t where rn > 1 minus​

    select​

    ta.rn * tb.rn​

    from​

    t ta,​

    t tb​

    where​

    ta.rn <= tb.rn​

    and ta.rn > 1​

    and tb.rn > 1​

    )​

    select top 1 rn into BUFFER_POOLS from t1 where rn > v_mem_mb/800 order by 1;​

    with t as​

    (​

    select rownum rn from dual connect by level <= 100​

    ) ,​

    t1 as​

    (​

    select * from t where rn > 1 minus​

    select​

    ta.rn * tb.rn​

    from​

    t ta,​

    t tb​

    where​

    ta.rn <= tb.rn​

    and ta.rn > 1​

    and tb.rn > 1​

    )​

    select top 1 rn into RECYCLE_POOLS from t1 where rn > v_mem_mb/800/3 order by 1;​

    ​

    ​

    ELSE​

    BUFFER_POOLS := 101;​

    RECYCLE_POOLS := 41;​

    END IF;​

    IF v_mem_mb >= 16000 THEN ​

    IF v_mem_mb= 16000 THEN​

    MEMORY_POOL := 1500;​

    SORT_BUF_GLOBAL_SIZE := 1000;​

    MEMORY_N_POOLS := 3;​

    CACHE_POOL_SIZE := 512;​

    ELSE​

    MEMORY_POOL := 2000;​

    SORT_BUF_GLOBAL_SIZE := 2000;​

    MEMORY_N_POOLS := 37;​

    CACHE_POOL_SIZE := 1024;​

    END IF; ​

    FAST_POOL_PAGES :=9999;​

    SORT_FLAG = 0;​

    SORT_BLK_SIZE=1;​

    SORT_BUF_SIZE := 10;​

    RLOG_POOL_SIZE := 1024;​

    HJ_BUF_GLOBAL_SIZE := LEAST(cast(v_mem_mb * 0.0625 as int),10000);​

    HAGR_BUF_GLOBAL_SIZE := LEAST(cast(v_mem_mb * 0.0625 as int),10000);​

    HJ_BUF_SIZE :=250;​

    HAGR_BUF_SIZE :=250;​

    RECYCLE :=round(RECYCLE,-3);​

    IF v_mem_mb >= 64000 THEN​

    FAST_POOL_PAGES :=99999;​

    FAST_ROLL_PAGES :=9999;​

    BUFFER :=BUFFER-3000;​

    MAX_BUFFER :=BUFFER;​

    CACHE_POOL_SIZE := 2048;​

    RLOG_POOL_SIZE := 2048;​

    SORT_FLAG = 1;​

    SORT_BLK_SIZE=1;​

    SORT_BUF_SIZE=50; ​

    SORT_BUF_GLOBAL_SIZE= cast(v_mem_mb * 0.02 as int);​

    HJ_BUF_GLOBAL_SIZE := cast(v_mem_mb * 0.15625 as int);​

    HAGR_BUF_GLOBAL_SIZE := cast(v_mem_mb * 0.04 as int);​

    HJ_BUF_SIZE :=512;​

    HAGR_BUF_SIZE :=512;​

    MEMORY_N_POOLS := 59;​

    END IF;​

    DICT_BUF_SIZE := 50;​

    HJ_BUF_GLOBAL_SIZE :=round(HJ_BUF_GLOBAL_SIZE,-3);​

    HAGR_BUF_GLOBAL_SIZE :=round(HAGR_BUF_GLOBAL_SIZE,-3);​

    SORT_BUF_GLOBAL_SIZE :=round(SORT_BUF_GLOBAL_SIZE,-3);​

    RECYCLE :=round(RECYCLE,-3);​

    ELSE​

    MEMORY_POOL :=GREAT(cast(v_mem_mb * 0.0625 as int),100);​

    MEMORY_N_POOLS := 1;​

    CACHE_POOL_SIZE := 200;​

    RLOG_POOL_SIZE := 256;​

    SORT_BUF_SIZE := 10;​

    SORT_BUF_GLOBAL_SIZE := 500;​

    DICT_BUF_SIZE := 50;​

    SORT_FLAG = 0;​

    SORT_BLK_SIZE=1;​

    HJ_BUF_GLOBAL_SIZE := GREAT(cast(v_mem_mb * 0.0625 as int),500);​

    HAGR_BUF_GLOBAL_SIZE := GREAT(cast(v_mem_mb * 0.0625 as int),500);​

    HJ_BUF_SIZE := GREAT(cast(v_mem_mb * 0.00625 as int),50);​

    HAGR_BUF_SIZE :=GREAT(cast(v_mem_mb * 0.00625 as int),50);​

    END IF; ​

    tname :='BAK_DMINI_' || to_char(sysdate,'yymmdd');​

    execute IMMEDIATE 'select count(*) from USER_ALL_TABLES where table_name= ?' into CNT using tname;​

    IF CNT=0 THEN ​

    execute IMMEDIATE 'CREATE TABLE BAK_DMINI_' || to_char(sysdate,'yymmdd') || ' as select *,sysdate uptime from v$dm_ini';​

    ELSE ​

    execute IMMEDIATE 'INSERT INTO BAK_DMINI_' || to_char(sysdate,'yymmdd') || ' select *,sysdate uptime from v$dm_ini';​

    END IF;​

    IF exec_mode=0 THEN​

    SP_SET_PARA_VALUE(2,'WORKER_THREADS',v_cpus);​

    SP_SET_PARA_VALUE(2,'TASK_THREADS',TASK_THREADS);​

    SP_SET_PARA_VALUE(2,'IO_THR_GROUPS',IO_THR_GROUPS);​

    SP_SET_PARA_VALUE(2,'MAX_OS_MEMORY', mem_per);​

    SP_SET_PARA_VALUE(2,'MEMORY_POOL', MEMORY_POOL);​

    SP_SET_PARA_VALUE(2,'MEMORY_N_POOLS', MEMORY_N_POOLS);​

    SP_SET_PARA_VALUE(2,'MEMORY_TARGET', MEMORY_TARGET); ​

    SP_SET_PARA_VALUE(2,'MEMORY_MAGIC_CHECK', 1);​

    if exists(select 1 from v$instance where dsc_role = 'NULL') then​

    SP_SET_PARA_VALUE(2,'ENABLE_FREQROOTS', 1); ​

    end if;​

    SP_SET_PARA_VALUE(2,'BUFFER', BUFFER);​

    SP_SET_PARA_VALUE(2,'MAX_BUFFER', MAX_BUFFER);​

    SP_SET_PARA_VALUE(2,'BUFFER_POOLS', BUFFER_POOLS);​

    SP_SET_PARA_VALUE(2,'RECYCLE', RECYCLE); ​

    SP_SET_PARA_VALUE(2,'RECYCLE_POOLS', RECYCLE_POOLS);​

    SP_SET_PARA_VALUE(2,'FAST_POOL_PAGES', FAST_POOL_PAGES); ​

    SP_SET_PARA_VALUE(2,'FAST_ROLL_PAGES', FAST_ROLL_PAGES);​

    SP_SET_PARA_VALUE(1,'HJ_BUF_GLOBAL_SIZE', HJ_BUF_GLOBAL_SIZE);​

    SP_SET_PARA_VALUE(1,'HJ_BUF_SIZE', HJ_BUF_SIZE );​

    SP_SET_PARA_VALUE(1,'HAGR_BUF_GLOBAL_SIZE',HAGR_BUF_GLOBAL_SIZE);​

    SP_SET_PARA_VALUE(1,'HAGR_BUF_SIZE', HAGR_BUF_SIZE );​

    SP_SET_PARA_VALUE(2,'SORT_FLAG',SORT_FLAG);​

    SP_SET_PARA_VALUE(2,'SORT_BLK_SIZE',SORT_BLK_SIZE);​

    SP_SET_PARA_VALUE(2,'SORT_BUF_SIZE', SORT_BUF_SIZE);​

    SP_SET_PARA_VALUE(2,'SORT_BUF_GLOBAL_SIZE', SORT_BUF_GLOBAL_SIZE);​

    SP_SET_PARA_VALUE(2,'RLOG_POOL_SIZE', RLOG_POOL_SIZE);​

    SP_SET_PARA_VALUE(2,'CACHE_POOL_SIZE', CACHE_POOL_SIZE); ​

    SP_SET_PARA_VALUE(2,'DICT_BUF_SIZE', DICT_BUF_SIZE); ​

    SP_SET_PARA_VALUE(2,'VM_POOL_TARGET', 16384); ​

    SP_SET_PARA_VALUE(2,'SESS_POOL_TARGET', 16384); ​

    SP_SET_PARA_VALUE(2,'USE_PLN_POOL', 1); ​

    SP_SET_PARA_VALUE(2,'ENABLE_MONITOR', 1); ​

    SP_SET_PARA_VALUE(2,'SVR_LOG', 0); ​

    SP_SET_PARA_VALUE(2,'TEMP_SIZE', 1024);​

    SP_SET_PARA_VALUE(2,'TEMP_SPACE_LIMIT', 102400); ​

    SP_SET_PARA_VALUE(2,'MAX_SESSIONS', 1500); ​

    SP_SET_PARA_VALUE(2,'MAX_SESSION_STATEMENT', 20000); ​

    SP_SET_PARA_VALUE(2,'PK_WITH_CLUSTER', 0); ​

    SP_SET_PARA_VALUE(2,'ENABLE_ENCRYPT',0); ​

    SP_SET_PARA_VALUE(2,'OLAP_FLAG',2); ​

    SP_SET_PARA_VALUE(2,'VIEW_PULLUP_FLAG',1); ​

    SP_SET_PARA_VALUE(2,'OPTIMIZER_MODE',1); ​

    SP_SET_PARA_VALUE(2,'ADAPTIVE_NPLN_FLAG',0); ​

    SP_SET_PARA_VALUE(2,'PARALLEL_PURGE_FLAG',1);​

    SP_SET_PARA_VALUE(2,'PARALLEL_POLICY',2);​

    SP_SET_PARA_VALUE(2,'UNDO_EXTENT_NUM',16);​

    SP_SET_PARA_VALUE(2,'ENABLE_INJECT_HINT',1);​

    ELSE​

    PRINT 'SP_SET_PARA_VALUE(2,''WORKER_THREADS'','||v_cpus||');';​

    PRINT 'SP_SET_PARA_VALUE(2,''TASK_THREADS'','||TASK_THREADS||');';​

    PRINT 'SP_SET_PARA_VALUE(2,''IO_THR_GROUPS'','||IO_THR_GROUPS||');';​

    PRINT 'SP_SET_PARA_VALUE(2,''MAX_OS_MEMORY'', '||mem_per||');';​

    PRINT 'SP_SET_PARA_VALUE(2,''MEMORY_POOL'', '||MEMORY_POOL||');';​

    PRINT 'SP_SET_PARA_VALUE(2,''MEMORY_N_POOLS'', '||MEMORY_N_POOLS||');';​

    PRINT 'SP_SET_PARA_VALUE(2,''MEMORY_TARGET'', '||MEMORY_TARGET||');';​

    PRINT 'SP_SET_PARA_VALUE(2,''BUFFER'', '||BUFFER||');';​

    PRINT 'SP_SET_PARA_VALUE(2,''MAX_BUFFER'', '||MAX_BUFFER||');';​

    PRINT 'SP_SET_PARA_VALUE(2,''BUFFER_POOLS'', '||BUFFER_POOLS||');';​

    PRINT 'SP_SET_PARA_VALUE(2,''RECYCLE'', '||RECYCLE||');';​

    PRINT 'SP_SET_PARA_VALUE(2,''RECYCLE_POOLS'', '||RECYCLE_POOLS||');';​

    PRINT 'SP_SET_PARA_VALUE(2,''FAST_POOL_PAGES'', '||FAST_POOL_PAGES||');';​

    PRINT 'SP_SET_PARA_VALUE(2,''FAST_ROLL_PAGES'', '||FAST_ROLL_PAGES||');';​

    ​

    PRINT 'SP_SET_PARA_VALUE(2,''MEMORY_MAGIC_CHECK'', 1);';​

    if exists(select 1 from v$instance where dsc_role = 'NULL') then​

    PRINT 'SP_SET_PARA_VALUE(2,''ENABLE_FREQROOTS'', 1);'; ​

    end if;​

    PRINT 'SP_SET_PARA_VALUE(1,''HJ_BUF_GLOBAL_SIZE'', '||HJ_BUF_GLOBAL_SIZE||');';​

    PRINT 'SP_SET_PARA_VALUE(1,''HJ_BUF_SIZE'', '||HJ_BUF_SIZE||');';​

    PRINT 'SP_SET_PARA_VALUE(1,''HAGR_BUF_GLOBAL_SIZE'','||HAGR_BUF_GLOBAL_SIZE||');';​

    PRINT 'SP_SET_PARA_VALUE(1,''HAGR_BUF_SIZE'', '||HAGR_BUF_SIZE||');';​

    ​

    PRINT 'SP_SET_PARA_VALUE(2,''SORT_FLAG'','||SORT_FLAG||');';​

    PRINT 'SP_SET_PARA_VALUE(2,''SORT_BLK_SIZE'','||SORT_BLK_SIZE||');';​

    PRINT 'SP_SET_PARA_VALUE(2,''SORT_BUF_SIZE'', '||SORT_BUF_SIZE||');';​

    PRINT 'SP_SET_PARA_VALUE(2,''SORT_BUF_GLOBAL_SIZE'', '||SORT_BUF_GLOBAL_SIZE||');';​

    PRINT 'SP_SET_PARA_VALUE(2,''RLOG_POOL_SIZE'', '||RLOG_POOL_SIZE||');';​

    PRINT 'SP_SET_PARA_VALUE(2,''CACHE_POOL_SIZE'', '||CACHE_POOL_SIZE||');';​

    PRINT 'SP_SET_PARA_VALUE(2,''DICT_BUF_SIZE'', '||DICT_BUF_SIZE||');'; ​

    PRINT 'SP_SET_PARA_VALUE(2,''VM_POOL_TARGET'', 16384);';​

    PRINT 'SP_SET_PARA_VALUE(2,''SESS_POOL_TARGET'', 16384);';​

    PRINT 'SP_SET_PARA_VALUE(2,''USE_PLN_POOL'', 1);';​

    PRINT 'SP_SET_PARA_VALUE(2,''ENABLE_MONITOR'', 1);'; ​

    PRINT 'SP_SET_PARA_VALUE(2,''SVR_LOG'', 0);'; ​

    PRINT 'SP_SET_PARA_VALUE(2,''TEMP_SIZE'', 1024);';​

    PRINT 'SP_SET_PARA_VALUE(2,''TEMP_SPACE_LIMIT'', 102400);';​

    PRINT 'SP_SET_PARA_VALUE(2,''MAX_SESSIONS'', 1500);';​

    PRINT 'SP_SET_PARA_VALUE(2,''MAX_SESSION_STATEMENT'', 20000);';​

    PRINT 'SP_SET_PARA_VALUE(2,''PK_WITH_CLUSTER'', 0);';​

    PRINT 'SP_SET_PARA_VALUE(2,''ENABLE_ENCRYPT'',0);';​

    PRINT 'SP_SET_PARA_VALUE(2,''OLAP_FLAG'',2);';​

    PRINT 'SP_SET_PARA_VALUE(2,''VIEW_PULLUP_FLAG'',1);';​

    PRINT 'SP_SET_PARA_VALUE(2,''OPTIMIZER_MODE'',1);';​

    PRINT 'SP_SET_PARA_VALUE(2,''ADAPTIVE_NPLN_FLAG'',0);';​

    PRINT 'SP_SET_PARA_VALUE(2,''PARALLEL_PURGE_FLAG'',1);';​

    PRINT 'SP_SET_PARA_VALUE(2,''PARALLEL_POLICY'',2);';​

    PRINT 'SP_SET_PARA_VALUE(2,''UNDO_EXTENT_NUM'',16);';​

    PRINT 'SP_SET_PARA_VALUE(2,''ENABLE_INJECT_HINT'',1);';​

    END IF;​

    select MEMORY_TARGET+BUFFER+RECYCLE+HJ_BUF_GLOBAL_SIZE+HAGR_BUF_GLOBAL_SIZE+CACHE_POOL_SIZE​

    +DICT_BUF_SIZE+SORT_BUF_GLOBAL_SIZE+RLOG_POOL_SIZE;​

    exception​

    when others then​

    执行失败, '||SQLCODE||' '||SQLERRM||' '||dbms_utility.format_error_backtrace , 1, 400));​

    <<return_2000>> null;​

    end;​

  2. 根据服务器实际的参数执行上面脚本可以得到一下结果:​SP_SET_PARA_VALUE(2,'WORKER_THREADS',2);​

    SP_SET_PARA_VALUE(2,'TASK_THREADS',4);​

    SP_SET_PARA_VALUE(2,'IO_THR_GROUPS',2);​

    SP_SET_PARA_VALUE(2,'MAX_OS_MEMORY', 90);​

    SP_SET_PARA_VALUE(2,'MEMORY_POOL', 875);​

    SP_SET_PARA_VALUE(2,'MEMORY_N_POOLS', 1);​

    SP_SET_PARA_VALUE(2,'MEMORY_TARGET', 2000);​

    SP_SET_PARA_VALUE(2,'BUFFER', 1024);​

    SP_SET_PARA_VALUE(2,'MAX_BUFFER', 6000);​

    SP_SET_PARA_VALUE(2,'BUFFER_POOLS', 19);​

    SP_SET_PARA_VALUE(2,'RECYCLE', 560);​

    SP_SET_PARA_VALUE(2,'RECYCLE_POOLS', 7);​

    SP_SET_PARA_VALUE(2,'FAST_POOL_PAGES', 3000);​

    SP_SET_PARA_VALUE(2,'FAST_ROLL_PAGES', 1000);​

    SP_SET_PARA_VALUE(2,'MEMORY_MAGIC_CHECK', 1);​

    SP_SET_PARA_VALUE(2,'ENABLE_FREQROOTS', 1);​

    SP_SET_PARA_VALUE(1,'HJ_BUF_GLOBAL_SIZE', 875);​

    SP_SET_PARA_VALUE(1,'HJ_BUF_SIZE', 88);​

    SP_SET_PARA_VALUE(1,'HAGR_BUF_GLOBAL_SIZE',875);​

    SP_SET_PARA_VALUE(1,'HAGR_BUF_SIZE', 88);​

    SP_SET_PARA_VALUE(2,'SORT_FLAG',0);​

    SP_SET_PARA_VALUE(2,'SORT_BLK_SIZE',1);​

    SP_SET_PARA_VALUE(2,'SORT_BUF_SIZE', 10);​

    SP_SET_PARA_VALUE(2,'SORT_BUF_GLOBAL_SIZE', 500);​

    SP_SET_PARA_VALUE(2,'RLOG_POOL_SIZE', 256);​

    SP_SET_PARA_VALUE(2,'CACHE_POOL_SIZE', 200);​

    SP_SET_PARA_VALUE(2,'DICT_BUF_SIZE', 50);​

    SP_SET_PARA_VALUE(2,'VM_POOL_TARGET', 16384);​

    SP_SET_PARA_VALUE(2,'SESS_POOL_TARGET', 16384);​

    SP_SET_PARA_VALUE(2,'USE_PLN_POOL', 1);​

    SP_SET_PARA_VALUE(2,'ENABLE_MONITOR', 1);​

    SP_SET_PARA_VALUE(2,'SVR_LOG', 0);​

    SP_SET_PARA_VALUE(2,'TEMP_SIZE', 1024);​

    SP_SET_PARA_VALUE(2,'TEMP_SPACE_LIMIT', 102400);​

    SP_SET_PARA_VALUE(2,'MAX_SESSIONS', 1500);​

    SP_SET_PARA_VALUE(2,'MAX_SESSION_STATEMENT', 20000);​

    SP_SET_PARA_VALUE(2,'PK_WITH_CLUSTER', 0);​

    SP_SET_PARA_VALUE(2,'ENABLE_ENCRYPT',0);​

    SP_SET_PARA_VALUE(2,'OLAP_FLAG',2);​

    SP_SET_PARA_VALUE(2,'VIEW_PULLUP_FLAG',1);​

    SP_SET_PARA_VALUE(2,'OPTIMIZER_MODE',1);​

    SP_SET_PARA_VALUE(2,'ADAPTIVE_NPLN_FLAG',0);​

    SP_SET_PARA_VALUE(2,'PARALLEL_PURGE_FLAG',1);​

    SP_SET_PARA_VALUE(2,'PARALLEL_POLICY',2);​

    SP_SET_PARA_VALUE(2,'UNDO_EXTENT_NUM',16);​

    SP_SET_PARA_VALUE(2,'ENABLE_INJECT_HINT',1);​

  3. 执行第一步执行的脚本,得到上面结果,拷贝到命令行执行,如下图所示​
  4. 达梦DM8数据库的单机部署
  5. 执行完成以后,重启数据库,切换到数据库安装目录bin下面​