暂无图片
暂无图片
12
暂无图片
暂无图片
1
暂无图片

国产数据库第一股|万字长文初探达梦 DM8

962

前 言

达梦数据库一直以来都没怎么真正接触过,一来由于职业生涯没有用到过国产数据库,二来达梦数据库属于闭源的数据库,不能白嫖,就连查看官方文档都要注册账号,现在可以在线看不需要注册了,不过社区也比较高冷,没看到多少宣传及相关的培训认证,应该是看不上我们这种没有直接客户关系的“散户”吧,都是有着垂直关系链的客户群体,今天我以一个 Oracle DBA 第一次接触达梦数据库的角度来介绍一下达梦数据库。

ACE-Pro

武汉达梦数据库股份有限公司成立于 2000 年,是中国电子信息产业集团有限公司(简称“CEC”)、中国互联网投资基金的战略参股企业,2024 年 6 月 12 日在上交所科创板挂牌上市。今天难得有些时间,初步来了解一下 DM 数据库。

图11.png

一、DM 简介

DM 数据库版本介绍

开发版: 官网上下载的版本, 并发数和使用时间做了限制, 功能和企业版是一样的, 但是不能商用。
标准版: 适用小型应用, 不支持集群, 对用户数和并发数有限制
企业版: 适用于中大型应用, 在生产环境中应用最多的一个版本, 三权分立
安全版: 在企业版的基础上做了安全特性, 增加了访问控制, 四权分立。

DM 版本对比

对比项 标准版 企业版 安全版
最大连接数 25 无限制 无限制
最大物理 CPU 数量 2 无限制 无限制
最大逻辑 CPU 核数 32 无限制 无限制
使用时间 无限制 无限制 无限制
硬件平台支持 Windows 全系列、Linux 全系列、 龙芯、飞腾、申威、泰山、 海光、兆芯、Power、安腾等 Windows 全系列、Linux 全系列、 龙芯、飞腾、申威、泰山、 海光、兆芯、Power、安腾等 Windows 全系列、Linux 全系列、 龙芯、飞腾、申威、泰山、 海光、兆芯、Power、安腾等
最大存储容量 500G 无限制 无限制
单表最大行数 1 亿 无限制 无限制
大表最大列数 1024 2048 2048
列存储 不支持 支持 支持
分区表 不支持 支持 支持
并行查询 不支持 支持 支持
闪回查询 不支持 支持 支持
分析函数与 自定义聚集函数 不支持 支持 支持
虚拟函数 VPD 不支持 支持 支持
DBMS_SQL 包 不支持 支持 支持
存储过程调试功能 不支持 支持 支持
XML 支持 不支持 支持 支持
JSON 支持 不支持 支持 支持
空间数据库支持 不支持 支持 支持
全文索引支持 不支持 支持 支持
DBLINK 功能 不支持 支持 支持
DMHS 支持 不支持 支持 支持
数据守护集群 DATAWATCH 不支持 支持 支持
读写分离集群 DMRWC 不支持 支持 支持
共享存储集群 DMDSC 不支持 支持 支持
大规模并行处理集群 DMMPP 不支持 支持 支持
数据复制 Data Replication 不支持 支持 支持
企业管理工具 DEM 不支持 支持 支持
备份还原接口 SBT 不支持 支持 支持
嵌入式 pro*c 不支持 支持 支持
外部函数扩展 不支持 支持 支持
外部表 不支持 支持 支持
通讯加密 不支持 支持 支持
存储加密 不支持 支持 支持
加密引擎 支持 支持 支持
三权分立 不支持 支持 支持
四权分立 不支持 不支持 支持
自主访问控制 不支持 支持 支持
强制访问控制 不支持 不支持 支持
审计和实时侵害检测 不支持 不支持 支持
客体重用 不支持 支持 支持
资源限制 不支持 支持 支持

DM 数据库产品简介

达梦数据库产品简单介绍如下:

43.png

image20240808172329280.png

image20240807223642756.png

DM 体系结构简介

达梦采用单进程,多线程架构,服务器在运行时由各种内存数据结构和一系列的线程组成,体系结构和 Oracle 架构非常相似,也是由实例和数据库组成。也有表空间、数据文件、段、簇、页这些对象。

800.png

814.png

由上图看出在 DM8 中存储的层次结构如下:

  1. 数据库由一个或多个表空间组成;
  2. 每个表空间由一个或多个数据文件组成;
  3. 每个数据文件由一个或多个簇组成;
  4. 段是簇的上级逻辑单元,一个段可以跨多个数据文件;
  5. 簇由磁盘上连续的页组成,一个簇总是在一个数据文件中;
  6. 页是数据库中最小的分配单元,也是数据库中使用的最小的 IO 单元。

二、开发版软件下载及安装

软件下载

注册账号登录达梦官网,选择 CPU 型号和操作系统类型下载后的文件名为 dm8_20240712_x86_rh7_64.zip ,即 2024 年 7 月 12 日发布的开发试用版本,如果购买了正版的达梦数据库,原厂会提供 Key 授权,这里仅是开发试用版本

产品下载-达梦数据 (dameng.com)

https://www.dameng.com/list_103.html

OS: CentOS 7.6 64 位
DB: dm8_20240712_x86_rh7_64.iso

03.png

准备安装

将 DM8 的 zip 包上传到 Linux 系统 自定义 /backup 目录并解压

[root@JiekeXu ~]# uname -a Linux JiekeXu 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux [root@JiekeXu backup]# unzip dm8_20240712_x86_rh7_64.zip Archive: dm8_20240712_x86_rh7_64.zip inflating: dm8_20240712_x86_rh7_64.README inflating: dm8_20240712_x86_rh7_64.iso inflating: dm8_20240712_x86_rh7_64.iso_SHA256.txt
复制

操作系统基础信息检查

[root@JiekeXu ~]# cat /proc/cpuinfo | grep processor | wc -l 2 [root@JiekeXu ~]# grep MemTotal /proc/meminfo MemTotal: 10054664 kB [root@JiekeXu ~]# grep SwapTotal /proc/meminfo SwapTotal: 2097148 kB [root@JiekeXu ~]# free -m total used free shared buff/cache available Mem: 9819 1174 1474 25 7170 8434 Swap: 2047 0 2047 [root@JiekeXu ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 97G 78G 20G 80% / devtmpfs 4.8G 0 4.8G 0% /dev tmpfs 4.8G 0 4.8G 0% /dev/shm tmpfs 4.8G 21M 4.8G 1% /run tmpfs 4.8G 0 4.8G 0% /sys/fs/cgroup /dev/sda1 1014M 180M 835M 18% /boot tmpfs 982M 12K 982M 1% /run/user/42 tmpfs 982M 0 982M 0% /run/user/0
复制

查看 glibc、gcc 版本,安装 DM8 数据库,glibc 版本不能低于 2.3,Linux 内核不能低于 2.6。

[root@JiekeXu ~]# rpm -qa | grep glibc glibc-2.17-260.el7.x86_64 compat-glibc-2.12-4.el7.centos.x86_64 glibc-common-2.17-260.el7.x86_64 glibc-devel-2.17-260.el7.x86_64 glibc-utils-2.17-260.el7.x86_64 glibc-headers-2.17-260.el7.x86_64 compat-glibc-headers-2.12-4.el7.centos.x86_64 [root@JiekeXu ~]# ldd --version ldd (GNU libc) 2.17 Copyright (C) 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Written by Roland McGrath and Ulrich Drepper. [root@JiekeXu ~]# rpm -qa | grep gcc compat-gcc-44-4.4.7-8.el7.x86_64 gcc-c++-4.8.5-36.el7.x86_64 compat-gcc-44-c++-4.4.7-8.el7.x86_64 libgcc-4.8.5-36.el7.x86_64 gcc-gfortran-4.8.5-36.el7.x86_64 gcc-4.8.5-36.el7.x86_64 [root@JiekeXu ~]# gcc --version gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36) Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
复制

OS 配置

修改limits.conf 配置文件,增加如下内容:

cat>>/etc/security/limits.conf <<EOF ################################## ############For DM Setting######## dmdba soft stack unlimited dmdba hard stack unlimited dmdba soft nproc unlimited dmdba hard nproc unlimited dmdba soft nofile 1048576 dmdba hard nofile 1048576 dmdba soft memlock unlimited dmdba hard memlock unlimited EOF
复制

/etc/sysctl.conf 内核参数修改,这里复用了 Oracle 的安装机器配置,我这里不做修改。

cat>>/etc/sysctl.conf <<EOF ############For DM Setting######## fs.aio-max-nr = 1048576 #异步IO请求数目 推荐值是:1048576 其实它等于 1024*1024 也就是 1024K 个 fs.file-max = 6815744 #打开的文件句柄的最大数量,防止文件描述符耗尽的问题 fs.nr_open = 20480000 # 系统范围内可打开的最大文件数 kernel.core_pattern = core.%e.%p.%t # Core dump 文件名模式 kernel.shmall = 2097152 #共享内存总量 页为单位,内存除以4K所得 kernel.shmmax = 4294967295 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 #SEMMSL: 每个信号集的最大信号数量 SEMMNS:用于控制整个 Linux 系统中信号的最大数 SEMOPM: 内核参数用于控制每个 semop 系统调用可以执行的信号操作的数量 SEMMNI :内核参数用于控制整个 Linux 系统中信号集的最大数量 net.ipv4.ip_local_port_range = 9000 65500 #用于向外连接的端口范围 net.core.rmem_default = 262144 #套接字接收缓冲区大小的缺省值 net.core.rmem_max = 4194304 #套接字接收缓冲区大小的最大值 net.core.wmem_default = 262144 #套接字发送缓冲区大小的缺省值 net.core.wmem_max = 1048576 #套接字发送缓冲区大小的最大值 fs.file-max = 6815744 kernel.watchdog_thresh=30 vm.min_free_kbytes = $(free -k | awk 'NR==2 {printf "%d\n", int($2 / 200)}') # 预留给 OS 的最小空闲内存 vm.swappiness = 1 vm.overcommit_memory = 0 # 表示系统的内存分配策略可以选值为 0,1,2。0:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。 vm.max_map_count=2000000 EOF
复制

主要核心参数手工计算如下:

MEM=$(expr $(grep MemTotal /proc/meminfo|awk '{print $2}') \* 1024) SHMALL=$(expr $MEM / $(getconf PAGE_SIZE)) SHMMAX=$(expr $MEM \* 3 / 5) # 这里配置为3/5 RAM大小 echo $MEM echo $SHMALL echo $SHMMAX min_free_kbytes = sqrt(lowmem_kbytes * 16) = 4 * sqrt(lowmem_kbytes)(注:lowmem_kbytes即可认为是系统内存大小) ##这里是测试开发环境,暂时不设置 vm.nr_hugepages =(共享内存大小 M)/Hugepagesize M ##这里是测试开发环境,暂时不设置大页
复制

关闭 selinux 调整 login

cp /etc/selinux/config /etc/selinux/config_`date +"%Y%m%d_%H%M%S"`&& sed -i 's/SELINUX\=enforcing/SELINUX\=disabled/g' /etc/selinux/config cat /etc/selinux/config #不重启 setenforce 0 getenforce cat >> /etc/pam.d/login <<EOF session required /lib/security/pam_limits.so session required pam_limits.so EOF
复制

关闭 numa 和禁用透明大页

### 检查: cat /sys/kernel/mm/transparent_hugepage/enabled cat /sys/kernel/mm/transparent_hugepage/defrag ### 修改 sed -i 's/quiet/quiet transparent_hugepage=never numa=off/' /etc/default/grub grep quiet /etc/default/grub grub2-mkconfig -o /boot/grub2/grub.cfg ### 重启后检查是否生效: cat /sys/kernel/mm/transparent_hugepage/enabled cat /proc/cmdline
复制

关闭防火墙

#关闭防火墙 systemctl status firewalld systemctl stop firewalld systemctl disable firewalld systemctl status firewalld
复制

安装规划

软件的安装路径 /dm8

数据库实例的创建路径 /dm8/data

归档日志文件存储路径 /dm8/arch(归档开启可选项)

为了减少对操作系统的影响,用户不应该以 root 系统用户来安装和运行 DM。用户可以在安装之前为 DM 创建一个专用的系统用户,例如 dmdba。

mkdir -p /dm8/data mkdir -p /dm8/arch ## 1.创建安装用户组 dinstall groupadd -g 12349 dinstall ## 2.创建安装用户 dmdba useradd -u 12345 -g dinstall -m -d /home/dmdba -s /bin/bash dmdba ## 3.初始化用户密码 passwd dmdba chown -R dmdba:dinstall /dm8
复制

挂载镜像

挂载 DM 镜像安装软件

[root@JiekeXu /]# ll /backup/dm8_20240712_x86_rh7_64.iso -rw-r--r-- 1 root root 1103818752 Jul 26 17:36 /backup/dm8_20240712_x86_rh7_64.iso [root@JiekeXu /]# mkdir /mnt/dm [root@JiekeXu /]# mount /backup/dm8_20240712_x86_rh7_64.iso /mnt/dm mount: /dev/loop0 is write-protected, mounting read-only [root@JiekeXu /]# df -h | grep dm /dev/loop0 1.1G 1.1G 0 100% /mnt/dm /dev/loop0 1.1G 1.1G 0 100% /mnt/dm [root@JiekeXu /]# cd /mnt/dm [root@JiekeXu dm]# ll total 1077886 -r-xr-xr-x 1 root root 2853242 Jun 17 14:26 DM8 Install.pdf -r-xr-xr-x 1 root root 1100901663 Jul 12 13:28 DMInstall.bin
复制

安装 DM 数据库软件

DM 数据库支持三种安装方式:

  • 图形化安装,开启图形界面安装
  • 命令行安装,执行 DMInstall.bin -i 命令行方式安装 DM 数据库
  • 静默方式安装,需要配置 xml 文件,./DMInstall.bin -q 配置文件全路径

本次由于是第一次安装,便使用图形化安装。我们登录到 VMWare 虚拟机界面,以 dmdba 用户登录打开图形化。进入到 /mnt/dm 目录,执行 ./DMInstall.bin ,r如下如果图形化界面没有问题则会让我们选择语音。

image20240809155600839.png

然后点击确定进入安装程序下一步

image20240809161033226.png

点击下一步,这里点“接收”选择授权协议。然后点击下一步。

image20240809161203082.png

然后下一步直接点击下一步,因为开发版本没有 key 文件直接跳过,默认使用一年(官网发布时间),故我们这个可以使用到明年 7 月 12 日。

image20240809161325920.png

选择安装方式

DM 安装程序提供四种安装方式:“典型安装”、“服务器安装”、“客户端安装”和“自定义安装”,用户可根据实际情况灵活地选择。如下图所示:

典型安装包括:服务器、客户端、驱动、用户手册、数据库服务。

服务器安装包括:服务器、驱动、用户手册、数据库服务。

客户端安装包括:客户端、驱动、用户手册。

自定义安装包括:根据用户需要勾选组件,可以是服务器、客户端、驱动、用户手册、数据库服务中的任意组合

故这里我选择“典型安装”,然后下一步。

image20240809162215329.png

然后选择安装目录

DM 默认安装目录为$HOME/dmdbms(即 /home/dmdba 目录,如果安装用户为 root 系统用户,则默认安装目录为/opt/dmdbms,但不建议使用 root 系统用户来安装 DM),用户可以通过点击“浏览”按钮自定义安装目录。如果用户所指定的目录已经存在,则弹出警告消息框提示用户该路径已经存在。若确定在指定路径下安装请点击“确定”,则该路径下已经存在的 DM 某些组件,将会被覆盖;否则点击“取消”,重新选择安装目录。

image20240809162522759.png

说明:安装路径里允许字符的范围是小写字母(a-z)、大写字母(A-Z)、数字(0-9)、下划线(_)、空格( )和中文。

安装前小结

显示用户即将进行的安装的有关信息,例如产品名称、版本信息、安装类型、安装目录、可用空间、可用内存等信息,检查无误后点击“安装”按钮,开始拷贝安装的软件。如下图所示:

image20240809163003045.png

使用 root 用户执行 root_installer.sh 脚本完成安装

/home/dmdba/dmdbms/script/root/root_installer.sh

image20240809163437578.png

[root@JiekeXu dm]# cd /home/dmdba/dmdbms/script/root/ [root@JiekeXu root]# ll total 44 -rwxr-xr-x 1 dmdba dinstall 25861 Aug 9 16:32 dm_service_installer.sh -rwxr-xr-x 1 dmdba dinstall 9290 Aug 9 16:32 dm_service_uninstaller.sh -rwxr-xr-x 1 dmdba dinstall 490 Aug 9 16:32 root_installer.sh [root@JiekeXu root]# /home/dmdba/dmdbms/script/root/root_installer.sh 移动 /home/dmdba/dmdbms/bin/dm_svc.conf 到/etc目录 创建DmAPService服务 Created symlink from /etc/systemd/system/multi-user.target.wants/DmAPService.service to /usr/lib/systemd/system/DmAPService.service. 创建服务(DmAPService)完成 启动DmAPService服务
复制

image20240809163725324.png

初始化数据库

如用户在选择安装组件时选中服务器组件,DM 安装过程结束时,将会提示是否初始化数据库,如下图所示。若用户未安装服务器组件,安装完成后,点击“完成”将直接退出,点击“取消”将完成安装,关闭对话框。

image20240809164018015.png

附1 命令行安装软件

[dmdba@jiekexu ~]$ cd /data/dm8/ [dmdba@jiekexu dm8]$ ll total 0 drwxr-xr-x 2 dmdba dinstall 6 Aug 13 11:11 arch drwxr-xr-x 2 dmdba dinstall 6 Aug 13 11:11 data [dmdba@jiekexu dm8]$ mkdir dmdbms --创建软件安装目录 /data/dm8/dmdbms [dmdba@jiekexu dm8]$ ll total 0 drwxr-xr-x 2 dmdba dinstall 6 Aug 13 11:11 arch drwxr-xr-x 2 dmdba dinstall 6 Aug 13 11:11 data drwxr-xr-x 2 dmdba dinstall 6 Aug 13 11:20 dmdbms [dmdba@jiekexu dm8]$ cd /mnt/dm [dmdba@jiekexu dm]$ ll total 1077886 -r-xr-xr-x 1 root root 2853242 Jun 17 14:26 DM8 Install.pdf -r-xr-xr-x 1 root root 1100901663 Jul 12 13:28 DMInstall.bin [dmdba@jiekexu dm]$ ./DMInstall.bin -i -- 使用 -i 选项命令行安装 Installer Language: [1]: 简体中文 [2]: English Please select the installer's language [2]:2 --使用 2 英文安装 Extract install files......... Hardware architecture verification passed! Welcome to DM DBMS Installer Whether to input the path of Key File? (Y/y:Yes N/n:No) [Y/y]:N --输入 N,开发版本不用选择,如果企业版这里也可以不选 key,待安装完成后将 dm.key 文件放入安装目录 bin 下重启数据库即可。 Whether to Set The TimeZone? (Y/y:Yes N/n:No) [Y/y]:y -- 输入 Y 设置 timezone TimeZone: [ 1]: (GTM-12:00) West Date Line [ 2]: (GTM-11:00) Samoa [ 3]: (GTM-10:00) Hawaii [ 4]: (GTM-09:00) Alaska [ 5]: (GTM-08:00) Pacific(America and Canada) [ 6]: (GTM-07:00) Arizona [ 7]: (GTM-06:00) Central(America and Canada) [ 8]: (GTM-05:00) East(America and Canada) [ 9]: (GTM-04:00) Atlantic(America and Canada) [10]: (GTM-03:00) Brasilia [11]: (GTM-02:00) Middle Atlantic [12]: (GTM-01:00) Azores [13]: (GTM) Greenwich Mean Time [14]: (GTM+01:00) Sarajevo [15]: (GTM+02:00) Cairo [16]: (GTM+03:00) Moscow [17]: (GTM+04:00) AbuDhabi [18]: (GTM+05:00) Islamabad [19]: (GTM+06:00) Dakar [20]: (GTM+07:00) BangKok,Hanoi [21]: (GTM+08:00) China [22]: (GTM+09:00) Seoul [23]: (GTM+10:00) Guam [24]: (GTM+11:00) Solomon [25]: (GTM+12:00) Fiji [26]: (GTM+13:00) Nukualofa [27]: (GTM+14:00) Kiribati Please Select the TimeZone [21]:21 --选择 21 中国时区 Installation Type: 1 Typical 2 Server 3 Client 4 Custom Please Input the number of the Installation Type [1 Typical]:1 --选择 1 标准安装 Require Space: 2284M Please Input the install path [/home/dmdba/dmdbms]:/data/dm8/dmdbms --选择前面创建好的软件安装目录 Available Space:207G Please Confirm the install path(/data/dm8/dmdbms)? (Y/y:Yes N/n:No) [Y/y]:Y -- 确认安装路径 Pre-Installation Summary Installation Location: /data/dm8/dmdbms Require Space: 2284M Available Space: 207G Version Information: Expire Date: Installation Type: Typical Confirm to Install? (Y/y:Yes N/n:No):Y -- 确认开始安装 2024-08-13 11:27:55 [INFO] Installing BASE Module... 2024-08-13 11:27:55 [INFO] Installing DM DBMS... 2024-08-13 11:28:05 [INFO] Installing SERVER Module... 2024-08-13 11:28:06 [INFO] Installing CLIENT Module... 2024-08-13 11:28:13 [INFO] Installing DRIVERS Module... 2024-08-13 11:28:16 [INFO] Installing MANUAL Module... 2024-08-13 11:28:16 [INFO] Installing SERVICE Module... 2024-08-13 11:28:17 [INFO] Move log file to log directory. 2024-08-13 11:28:18 [INFO] Installed DM DBMS completely. Please execute the commands by root: /data/dm8/dmdbms/script/root/root_installer.sh End [dmdba@jiekexu dm]$ exit logout -- 使用 root 用户执行 root_installer.sh 脚本 [root@jiekexu dm]# /data/dm8/dmdbms/script/root/root_installer.sh Move /data/dm8/dmdbms/bin/dm_svc.conf to /etc Create the DmAPService service Created symlink from /etc/systemd/system/multi-user.target.wants/DmAPService.service to /usr/lib/systemd/system/DmAPService.service. Finished to create the service (DmAPService) Start the DmAPService service
复制

附2 自动化脚本安装

有位达梦原厂大佬之前写了一键安装脚本,非常方便,对于职场老手很友好,这里也介绍下,对于第一次安装学习的小伙伴来说我是不建议一上来就开始使用脚本安装,这样不太利于个人学习。这里脚本也是简单介绍一下即可。

--DMShellInstall 脚本下载地址 https://gitee.com/hnyuanzj/DMShellInstall
复制

脚本下载解压之后有个 DMShellInstall ,然后挂载操作系统 ISO 镜像,用于脚本自动配置软件源。

脚本使用说明可直接 ./DMShellInstall -h ,可安装达梦单机、数据守护集群(DataWatch)、DSC 集群(DMDSC)。

[root@jiekexu dm]# unzip dm8_20240712_x86_rh7_64.zip [root@jiekexu dm ~]# cd /soft/ [root@jiekexu soft]# chmod u+x DMShellInstall ## 根据实际环境调整以下参数值,执行一键安装即可 ./DMShellInstall -hn dm8 `# 主机名`\ -dp Dameng@123 `# dmdba用户密码`\ -d /data/dm8/dmdbms `# 软件安装目录`\ -dd /data/dm8/data `# 数据库文件目录`\ -ad /data/dm8/arch `# 数据库归档目录`\ -bd /data/dm8/dm_backup `# 数据库备份目录`\ -dn DAMENG `# 数据库名称`\ -in DMSERVER `#实例名称`\ -es 32 `# 数据文件簇大小`\ -ps 32 `# 数据页大小`\ -cs Y `# 字符串大小写敏感`\ -c 1 `# 数据库字符集`\ -sl 102400 `# 归档空间大小`\ -pn 5236 `# 监听端口号`\ -sp SYSDBA `# 数据库SYSDBA用户密码`\ -bm 2 `# 数据库备份模式 1全备 2增量`\ -opd Y `# 优化数据库参数`\ -mp 80 `# 优化数据库物理内存占比`\ -di dm8_20240712_x86_rh7_64.iso `# 达梦ISO镜像名称`
复制

初始化 DM 实例

若用户选中创建数据库选项,点击“初始化”将弹出数据库配置工具。如下图所示:

image20240809164055434.png

当然,也可以使用 dminit 命令行创建数据库实例,位于 DM 安装目录 bin 下 。

[dmdba@JiekeXu bin]$ ll dminit -r-xr-xr-x 1 dmdba dinstall 132744 Jul 12 13:23 dminit [dmdba@JiekeXu bin]$ pwd /home/dmdba/dmdbms/bin [dmdba@JiekeXu bin]$ ./dminit help initdb V8 db version: 0x7000c file dm.key not found, use default license! License will expire on 2025-07-03 version: 03134284194-20240703-234060-20108 Pack1 格式: ./dminit KEYWORD=value 例程: ./dminit PATH=/public/dmdb/dmData PAGE_SIZE=16 关键字 说明(默认值) -------------------------------------------------------------------------------- INI_FILE 初始化文件dm.ini存放的路径 PATH 初始数据库存放的路径 CTL_PATH 控制文件路径 LOG_PATH 日志文件路径 EXTENT_SIZE 数据文件使用的簇大小(16),可选值:16, 32, 64,单位:页 PAGE_SIZE 数据页大小(8),可选值:4, 8, 16, 32,单位:K LOG_SIZE 日志文件大小(2048),单位为:M,范围为:256M ~ 8G CASE_SENSITIVE 大小敏感(Y),可选值:Y/N,1/0 CHARSET/UNICODE_FLAG 字符集(0),可选值:0[GB18030],1[UTF-8],2[EUC-KR] SEC_PRIV_MODE 权限管理模式(0),可选值:0[TRADITION],1[BMJ],2[EVAL],3[ZB] SYSDBA_PWD 设置SYSDBA密码(SYSDBA) SYSAUDITOR_PWD 设置SYSAUDITOR密码(SYSAUDITOR) DB_NAME 数据库名(DAMENG) INSTANCE_NAME 实例名(DMSERVER) PORT_NUM 监听端口号(5236) BUFFER 系统缓存大小(8000),单位M TIME_ZONE 设置时区(+08:00) PAGE_CHECK 页检查模式(3),可选值:0/1/2/3 PAGE_HASH_NAME 设置页检查HASH算法 EXTERNAL_CIPHER_NAME 设置默认加密算法 EXTERNAL_HASH_NAME 设置默认HASH算法 EXTERNAL_CRYPTO_NAME 设置根密钥加密引擎 RLOG_ENCRYPT_NAME 设置日志文件加密算法,若未设置,则不加密 RLOG_POSTFIX_NAME 设置日志文件后缀名,长度不超过10。默认为log,例如DAMENG01.log USBKEY_PIN 设置USBKEY PIN PAGE_ENC_SLICE_SIZE 设置页加密分片大小,可选值:0、512、4096,单位:Byte ENCRYPT_NAME 设置全库加密算法 BLANK_PAD_MODE 设置空格填充模式(0),可选值:0/1 SYSTEM_MIRROR_PATH SYSTEM数据文件镜像路径 MAIN_MIRROR_PATH MAIN数据文件镜像 ROLL_MIRROR_PATH 回滚文件镜像路径 MAL_FLAG 初始化时设置dm.ini中的MAL_INI(0) ARCH_FLAG 初始化时设置dm.ini中的ARCH_INI(0) MPP_FLAG Mpp系统内的库初始化时设置dm.ini中的mpp_ini(0) CONTROL 初始化配置文件(配置文件格式见系统管理员手册) AUTO_OVERWRITE 是否覆盖所有同名文件(0) 0:不覆盖 1:部分覆盖 2:完全覆盖 USE_NEW_HASH 是否使用改进的字符类型HASH算法(1) ELOG_PATH 指定初始化过程中生成的日志文件所在路径 AP_PORT_NUM 分布式环境下协同工作的监听端口 HUGE_WITH_DELTA 是否仅支持创建事务型HUGE表(1) 1:是 0:否 RLOG_GEN_FOR_HUGE 是否生成HUGE表REDO日志(1) 1:是 0:否 PSEG_MGR_FLAG 是否仅使用管理段记录事务信息(0) 1:是 0:否 CHAR_FIX_STORAGE CHAR是否按定长存储(N),可选值:Y/N,1/0 SQL_LOG_FORBID 是否禁止打开SQL日志(N),可选值:Y/N,1/0 DPC_MODE 指定DPC集群中的实例角色(0) 0:无 1:MP 2:BP 3:SP,取值1/2/3时也可以用MP/BP/SP代替 USE_DB_NAME 路径是否拼接DB_NAME(1) 1:是 0:否 MAIN_DBF_PATH MAIN数据文件存放路径 SYSTEM_DBF_PATH SYSTEM数据文件存放路径 ROLL_DBF_PATH ROLL数据文件存放路径 TEMP_DBF_PATH TEMP数据文件存放路径 ENC_TYPE 数据库内部加解密使用的加密接口类型(1), 可选值: 1: 优先使用EVP类型 0: 不启用EVP类型 HELP 打印帮助信息 ## 示例 /data/dm8/dmdbms/bin/dminit path=/data/dm8/data db_name=DMTEST instance_NAME=DMTEST_JIEKEXU sysdba_pwd=JiekeXu_DM8 port_num=15236 PAGE_SIZE=8 charset=1 case_sensitive=1 initdb V8 db version: 0x7000c file dm.key not found, use default license! License will expire on 2025-07-03 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL log file path: /data/dm8/data/DMTEST/DMTEST01.log log file path: /data/dm8/data/DMTEST/DMTEST02.log write to dir [/data/dm8/data/DMTEST]. create dm database success. 2024-08-13 14:30:41 ----charset 字符集选项。取值:0 代表 GB18030,1 代表 UTF-8,2 代表韩文字符集 EUC-KR。默认为 0。可选参数。 ----case_sensitive 标识符大小写敏感。当大小写敏感时,小写的标识符应当用 "" 括起,否则被系统自动转换为大写;当大小写不敏感时,系统不会转换标识符的大小写,在标识符比较时也不能区分大小写。取值:Y、y、1 表示敏感;N、n、0 表示不敏感。默认值为 Y 。可选参数。 上面初始化后还需要通过如下命令启动数据库服务 --注册成服务的方式再启动,-p 后面跟实例名 /data/dm8/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /data/dm8/data/DMTEST/dm.ini -p DMTEST_JIEKEXU /data/dm8/dmdbms/bin/DmServiceDMTEST_JIEKEXU start --当然也可以直接放后台启动 nohup /data/dm8/dmdbms/bin/dmserver path=/data/dm8/data/DMTEST/dm.ini & --初始化示例 2 /home/dmdba/dmdbms/bin/dminit path=/data/ extent_size=16 page_size=32 charset=0 case_sensitive=1 log_size=2048 DB_NAME=DMTEST LOG_PATH= /data/DMTEST/DMTEST01.log LOG_PATH=/data/DMTEST/DMTEST02.log LOG_PATH=/data/DMTEST/DMTEST03.log LOG_PATH=/data/DMTEST/DMTEST04.log LOG_PATH=/data/DMTEST/DMTEST05.log
复制

注意:dminit 方式创建数据库不会自动注册数据库服务(DM 数据库配置助手方式默认自动注册数据库服务),所以不能以服务方式启动数据库,如果要以服务方式启动,则需要注册数据库服务。

image20240809164147190.png

选择数据存放目录,这里选择 /dm8/data 作为数据目录。

image20240809164720023.png

默认数据库名为 DAMENG,实例名为 DMSERVER,端口号为 5236,这里我将数据库名修改为“JiekeXu”,实例名修改为“DM_JiekeXu”,端口号修改为 15236,然后下一步。

image20240809165000405.png

image20240809165445944.png

数据库文件设置

image20240809165650113.png

初始化参数设置

我这里由于是测试库,参数直接默认即可。

簇大小、页大小、字符集、大小写敏感、 VARCHAR 类型以字符为单位等一旦指定, 数据库创建完成将无法更改。页是达梦数据库的最小存储单元, 簇是由连续的页组成,簇是达梦数据库的最小分配单元。达梦中 varchar 类型长度默认不能大于页大小的一半。

image20240809165920302.png

设置统一口令

不得少于 9 位,更不能多于 48 位。我这里将其设置为 JiekeXu_DM8,SYSDBA 用户密码指定后不要忘记。

image20240809170208600.png

创建示例库

这里勾选 BOOKSH 和 DMHR 两个示例库的创建,然后下一步。

image20240809170411477.png

概要信息

点击 完成,开始创建。

数据库名 : JiekeXu 实例名 : DM_JiekeXu 数据库目录 : /dm8/data 端口 : 15236 路径拼接数据库名 : 是 控制文件 : /dm8/data/JiekeXu/dm.ctl 数据文件 : /dm8/data/JiekeXu/SYSTEM.DBF /dm8/data/JiekeXu/ROLL.DBF /dm8/data/JiekeXu/TEMP.DBF /dm8/data/JiekeXu/MAIN.DBF 日志文件 : /dm8/data/JiekeXu/JiekeXu01.log /dm8/data/JiekeXu/JiekeXu02.log /dm8/data/JiekeXu/JiekeXu03.log ELOG : /dm8/data/JiekeXu/ 簇大小 : 16页 页大小 : 8K 日志文件大小 : 256M 时区设置 : +08:00 页面检查 : 默认 字符集 : GB18030 USBKEY-PIN : 页分片大小 : 4096 标识符大小写敏感 : 是 空格填充模式 : 否 改进的字符串HASH算法 : 是 启用日志文件加密 : 否 启用全库加密 : 否 启用加密 : 否 修改 SYSDBA的口令 修改 SYSAUDITOR的口令 创建示例库BOOKSHOP 创建示例库DMHR
复制

image20240809170550256.png

执行脚本

image20240809170732962.png

mv /home/dmdba/dmdbms/bin/DmServiceDM_JiekeXu.service /usr/lib/systemd/system/DmServiceDM_JiekeXu.service systemctl enable DmServiceDM_JiekeXu.service systemctl start DmServiceDM_JiekeXu.service [root@JiekeXu ~]# mv /home/dmdba/dmdbms/bin/DmServiceDM_JiekeXu.service /usr/lib/systemd/system/DmServiceDM_JiekeXu.service [root@JiekeXu ~]# systemctl enable DmServiceDM_JiekeXu.service Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceDM_JiekeXu.service to /usr/lib/systemd/system/DmServiceDM_JiekeXu.service. [root@JiekeXu ~]# systemctl start DmServiceDM_JiekeXu.service
复制

image-20240809171252204

image-20240809171320507

重启实例,使其参数生效

image-20240809171405660

systemctl restart DmServiceDM_JiekeXu.service
复制

点击完成,退出图形化,完成整个实例初始化步骤。

image20240809171514271.png

配置环境变量登录实例

环境变量 MALLOC_ARENA_MAX 用来控制进程可以创建的 thread arena 数量上限(默认为 cpu core*8). 其中修改 DM_HOME 为 DM_SOFT_HOME,LD_LIBRARY_PATH 已存在不用修改。

vim /home/dmdba/.bash_profile export LD_LIBRARY_PATH='LD_LIBRARY_PATH:/home/dmdba/dmdbms/bin' export DM_SOFT_HOME='/home/dmdba/dmdbms' export DM_DATA_HOME='/dm8/data/' export NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss" export PATH=$DM_SOFT_HOME/bin:$PATH:. export PS1=`hostname`:'$PWD'"$" export MALLOC_ARENA_MAX=4
复制

登录数据库实例

[dmdba@JiekeXu bin]$ systemctl status DmServiceDM_JiekeXu.service ● DmServiceDM_JiekeXu.service - DM Instance Service Loaded: loaded (/usr/lib/systemd/system/DmServiceDM_JiekeXu.service; enabled; vendor preset: disabled) Active: active (running) since Fri 2024-08-09 17:14:13 CST; 56min ago Process: 31987 ExecStop=/home/dmdba/dmdbms/bin/DmServiceDM_JiekeXu stop (code=exited, status=0/SUCCESS) Process: 32066 ExecStart=/home/dmdba/dmdbms/bin/DmServiceDM_JiekeXu start (code=exited, status=0/SUCCESS) Main PID: 32087 (dmserver) Tasks: 92 CGroup: /system.slice/DmServiceDM_JiekeXu.service └─32087 /home/dmdba/dmdbms/bin/dmserver path=/dm8/data/JiekeXu/dm.ini -noconsole [dmdba@JiekeXu bin]$ ll disql -r-xr-xr-x 1 dmdba dinstall 8432 Jul 12 13:23 disql [dmdba@JiekeXu bin]$ pwd /home/dmdba/dmdbms/bin [dmdba@JiekeXu bin]$ /home/dmdba/dmdbms/bin/disql sysdba/JiekeXu_DM8:15236 服务器[LOCALHOST:15236]:处于普通打开状态 登录使用时间 : 2.886(ms) disql V8 SQL> select name from V$database; 行号 NAME ---------- ------- 1 JiekeXu 已用时间: 0.615(毫秒). 执行号:2301. SQL> select instance_name from v$instance; 行号 INSTANCE_NAME ---------- ------------- 1 DM_JIEKEXU 已用时间: 0.559(毫秒). 执行号:2302.
复制

image20240810101847151.png

基础信息查询

select '实例名称' 数据库选项,INSTANCE_NAME FROM v$instance union all
select '数据库版本',substr(svr_version,instr(svr_version,'(')) FROM v$instance union all   SELECT '字符集',CASE SF_GET_UNICODE_FLAG() WHEN '0' THEN 'GBK18030' WHEN '1' then 'UTF-8' when '2' then 'EUC-KR' end union all
SELECT '页大小',cast(PAGE()/1024 as varchar) union all   SELECT '簇大小',cast(SF_GET_EXTENT_SIZE() as varchar) union all
SELECT '大小写敏感',cast(SF_GET_CASE_SENSITIVE_FLAG() as varchar) union all
select '数据库模式',MODE$ from v$instance union all
select '唯一魔数',cast(permanent_magic as varchar) union all
select 'LSN',cast(cur_lsn as varchar) from v$rlog;

LINEID     数据库选项 INSTANCE_NAME             
---------- ---------- --------------------------
1          实例名称   DM_JIEKEXU
2          数据库版本 DM Database Server x64 V8 
3          字符集     UTF-8
4          页大小     8
5          簇大小     16
6          大小写敏感 1
7          数据库模式 NORMAL
8          唯一魔数   427956736
9          LSN        48333
复制

三、基础管理

数据库安装目录

下图展示为 DM8 数据库目录。

image20240813000919817.png

/home/dmdba/dmdbms/bin 目录存放 DM 数据库的可执行文件,例如 disql 命令、dminit 命令、dmrman 工具等。

/home/dmdba/dmdbms/desktop/icons 存放 DM 数据库各个工具的桌面图标。

/home/dmdba/dmdbms/doc 存放 DM 数据库用户手册。

/home/dmdba/dmdbms/drivers 存放连接 DM 数据库的驱动文件。

/home/dmdba/dmdbms/log 存放 DM 数据库日志,包括工具的日志、数据库日志、服务日志等。

/home/dmdba/dmdbms/samples 存放 DM 数据库各类配置文件的示例文件。

/home/dmdba/dmdbms/script/root 存放注册、注销 DM 数据库服务的工具,例如 dm_service_installer.sh 等。

/home/dmdba/dmdbms/tool 存放 DM 数据库的各个工具,例如 manager 管理工具、dbca 数据库配置助手等。

/home/dmdba/dmdbms/uninstall 目录存放卸载 DM 数据库的脚本。

/home/dmdba/dmdbms/web 目录存放 DM 数据库 dem 工具的 web 环境。

数据库实例目录

image20240813001519528.png

/dm8/data 为数据库实例目录,该目录存放各个实例的文件。

以实例 JiekeXu 为例,该目录下存放 JiekeXu 实例的配置文件 *.ini、控制文件 dm.ctl、数据文件 *.DBF、redo 日志文件 JiekeXu0*.log 等。

448.png

创建表空间和用户

  • 创建表空间
--创建表空间 TEST,初始大小 128 MB,自动扩容每次扩充 100 MB,扩充上限 10240 MB create tablespace "TEST" datafile 'TEST.DBF' size 128 autoextend on next 100 maxsize 10240 CACHE = NORMAL; --命令行修改表空间,打开自动扩展,每次自动扩展 200M ,扩展上限 20240M,参考示例如下: alter tablespace "TEST" datafile 'TEST.DBF' autoextend on next 200 maxsize 20240; SQL> select b.tablespace_name, b.file_name, b.bytes/1024/1024 size_m 2 from dba_data_files b 3 union all 4 select 'RLOG', a.path, a.rlog_size/1024/1024 5 from v$rlogfile a; 行号 TABLESPACE_NAME FILE_NAME SIZE_M ---------- --------------- ------------------------------- -------------------- 1 BOOKSHOP /dm8/data/JiekeXu/BOOKSHOP.DBF 150 2 SYSTEM /dm8/data/JiekeXu/SYSTEM.DBF 74 3 TEMP /dm8/data/JiekeXu/TEMP.DBF 1024 4 ROLL /dm8/data/JiekeXu/ROLL.DBF 128 5 TEST /dm8/data/JiekeXu/TEST.DBF 128 6 MAIN /dm8/data/JiekeXu/MAIN.DBF 128 7 DMHR /dm8/data/JiekeXu/DMHR.DBF 128 8 RLOG /dm8/data/JiekeXu/JiekeXu01.log 256 9 RLOG /dm8/data/JiekeXu/JiekeXu02.log 256 10 RLOG /dm8/data/JiekeXu/JiekeXu03.log 256 10 rows got
复制
  • 创建用户并指定表空间
create user "TEST" identified by "JiekeXu_DM8" default tablespace "TEST" default index tablespace "TEST"; --授予 “PUBLIC” 和 “SOI” 权限 grant "PUBLIC","SOI" to "TEST"; grant "RESOURCE","VTI" to "TEST"; select USERNAME,ACCOUNT_STATUS,CREATED,LOCK_DATE,PROFILE,PASSWORD_VERSIONS,DEFAULT_TABLESPACE from dba_users where account_status='OPEN' order by CREATED asc; -- 创建只读用户 create user "TEST_READONLY" identified by "JiekeXu_DM8" read only default tablespace "TEST"; grant "PUBLIC","VTI" to "TEST_READONLY"; grant select any table to TEST_READONLY; -- 取消用户限制 ALTER USER "TEST" LIMIT FAILED_LOGIN_ATTEMPS UNLIMITED, PASSWORD_LOCK_TIME UNLIMITED, PASSWORD_GRACE_TIME UNLIMITED; -- 删除用户 DROP USER "TEST" CASCADE; -- 删除表空间 DROP TABLESPACE "TEST";
复制
  • 创建表并插入数据
CREATE TABLE test.city ( city_id CHAR(3) NOT NULL, city_name VARCHAR(40) NULL, region_id INT NULL ); INSERT INTO test.city(city_id,city_name,region_id) VALUES('BJ','北京',1); INSERT INTO test.city(city_id,city_name,region_id) VALUES('SJZ','石家庄',1); INSERT INTO test.city(city_id,city_name,region_id) VALUES('SH','上海',2); INSERT INTO test.city(city_id,city_name,region_id) VALUES('NJ','南京',2); INSERT INTO test.city(city_id,city_name,region_id) VALUES('GZ','广州',3); INSERT INTO test.city(city_id,city_name,region_id) VALUES('HK','海口',3); INSERT INTO test.city(city_id,city_name,region_id) VALUES('WH','武汉',4); INSERT INTO test.city(city_id,city_name,region_id) VALUES('CS','长沙',4); INSERT INTO test.city(city_id,city_name,region_id) VALUES('SY','沈阳',5); INSERT INTO test.city(city_id,city_name,region_id) VALUES('XA','西安',6); INSERT INTO test.city(city_id,city_name,region_id) VALUES('CD','成都',7); commit;
复制

DM 管理工具

开启图形界面,进入数据库安装路径 /tool 目录下,运行 ./manager 即可启动 DM 管理工具。

[dmdba@JiekeXu icons]$ cd /home/dmdba/dmdbms/tool/ [dmdba@JiekeXu tool]$ ./manager
复制

image20240813001950509.png

image20240820235434039.png

image20240821000546204.png

DM 实例启停

DM 数据库启动顺序:读取配置参数文件 dm.ini,找到控制文件 dm.ctl,启动后台进程和线 程,启动数据库实例,启动到 mount状态,根据控制文件中的数据文件路径和联机日志文件 路径,找到并打开数据文件和联机日志,启动到 OPEN 状态。 DM:shutdown ->mount->open

Oracle启动顺序:shutdown -> nomount->mount->open

image20240814001813878.png

Shutdown:关闭状态

Mount:配置状态,此时可以修改数据库归档配置、主备等模式,不能进行数据文件的读写。 此时数据库不能对外正常提供服务。可以读取内存中或者控制文件中的表(V$开头的动态视 图 )。

Open:打开状态,此时数据库提供正常的服务。可以读写数据文件。正常访问表,读取数据。 Suspend:只读状态,只能读,不能写(DML操作一旦 commit,数据库即会被挂起)。 MOUNT和 OPEN可以相互转换(与 Oracle不同)。SUSPEND和 OPEN也可以相互转换。 但 MOUNT和 SUSPEND之间不能相互转换。

  • 手动注册成服务的方式启动与停止
# /data/dm8/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /data/dm8/data/DMTEST/dm.ini -p DMTEST_JIEKEXU ./bin/DmService实例名 start/stop $ /data/dm8/dmdbms/bin/DmServiceDMTEST_JIEKEXU start $ /data/dm8/dmdbms/bin/DmServiceDMTEST_JIEKEXU stop $ /data/dm8/dmdbms/bin/DmServiceDMTEST_JIEKEXU restart $ /data/dm8/dmdbms/bin/DmServiceDMTEST_JIEKEXU status ## disql 登入直接关闭实例 SQL> shutdown immediate;
复制
  • 前台方式启动

前台方式启动数据库后如果启动界面会话关闭数据库也相应会关闭所以一般情况下建议采用服务的方式启动数据库。

/data/dm8/dmdbms/bin/dmserver path=/data/dm8/data/DMTEST/dm.ini --当然也可以直接放后台启动 nohup /data/dm8/dmdbms/bin/dmserver path=/data/dm8/data/DMTEST/dm.ini &
复制

该启动方式为前台启动,界面输出“SYSTEM IS READY”后表示前台启动成功,若想关闭数据库,输入 exit 退出即可。

  • 图形化启动
--图形化安装时会自动注册成服务,可以使用服务的方式启动 systemctl start DmServiceDM_JiekeXu.service systemctl stop DmServiceDM_JiekeXu.service systemctl restart DmServiceDM_JiekeXu.service
复制

另外,进入 DM 安装目录下的 tool 目录,使用如下命令打开 DM 服务查看器,如下所示:

cd /home/dmdba/dmdbms/tool/ ./dmservice.sh
复制

可以通过【DM 服务查看器】查看到对应的 DM 服务,可选择【启动】或【停止】对应的服务,如下图所示:

image20240814000120740.png

实例参数优化调整

实例参数优化可通过手动方式和自动方式进行调整。为增强参数优化的适用性,降低参数修改的过程风险,建议使用达梦数据库提供的 AutoParaAdj.sql 脚本进行实例参数优化。脚本执行成功后,须重启数据库使参数修改生效。

-- AutoParaAdj3.8_dm8.sql /* ************************************************************************** * * * Auto parameter adjustment 3.8 for dm8* * [November 22, 2023 ] * Take effect after restart dmserver * * ************************************************************************** */ declare exec_mode int:= 1; --0表示直接执行脚本修改参数,1表示不直接修改参数,打印设置参数的语句,设置为1后,必须调整v_mem_mb和v_cpus is_dsc int := 0; --是否是dsc集群,如果是dsc集群请设置为1,将自动调整dsc相关参数 mem_per int:= 100; --默认所有的内存归达梦数据库使用,如实际不能100%可用,可以调整此参数; MAX_OS_MEMORY强制100不与此参数挂钩 v_mem_mb int:= 16000; --exec_mode为1时请自行根据机器实际内存调整此参数,单位为M v_cpus int:= 8; --exec_mode为1时请自行根据机器实际CPU核数调整此参数 oltp_mode int:=0; --并发量较高的OLTP类型系统此参数设置为1,并发量不高的一般业务系统和OLAP类的系统此参数设置为0,影响SORT_FLAG和UNDO_RETENTION pk_cluster_mode int:=1; --是否使用聚集主键:性能要求高且大字段较少的业务场景强烈建议设置为1,大字段多的场景设置为0 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; UNDO_RETENTION INT :=90; 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 :=8; IF v_cpus > 64 THEN v_cpus := 64; TASK_THREADS :=16; IO_THR_GROUPS :=32; END IF; IF v_cpus <= 64 THEN IO_THR_GROUPS :=16; TASK_THREADS :=8; END IF; IF v_cpus <= 8 THEN TASK_THREADS :=4; IO_THR_GROUPS :=8; END IF; BUFFER := round(cast(v_mem_mb * 0.4 as int),-3); 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; ELSE BUFFER_POOLS := 101; 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 := 11; 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; IF v_mem_mb >= 64000 THEN FAST_POOL_PAGES :=99999; FAST_ROLL_PAGES :=9999; BUFFER :=BUFFER-3000; 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_POOL :=round(MEMORY_POOL,-2); MEMORY_N_POOLS := 2; 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; --设置根据RECYCLE情况RECYCLE_POOLS参数 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 <= great(RECYCLE*1024/3000/(page()/1024),2) order by 1 desc; tname :='BAK_DMINI_' || to_char(sysdate,'yymmdd'); execute IMMEDIATE 'select count(*) from USER_ALL_TABLES where table_name= ?' into CNT using tname; if exists(select 1 from V$INSTANCE where MODE$ in ('NORMAL','PRIMARY')) then 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; end if; --如果oltp_mode设置为0,采用旧的排序模式,undo_relation采用默认值 if oltp_mode=1 then SORT_FLAG = 0; SORT_BUF_SIZE := 2; end if; --如果oltp_mode设置为0,undo_relation适当放大,采用新的排序方法 if oltp_mode=0 then UNDO_RETENTION = 900; end if; MAX_BUFFER := BUFFER; IF exec_mode=0 THEN --修改cpu相关参数 SP_SET_PARA_VALUE(2,'WORKER_THREADS',v_cpus); SP_SET_PARA_VALUE(2,'IO_THR_GROUPS',IO_THR_GROUPS); --将此参数改为0 SP_SET_PARA_VALUE(2,'GEN_SQL_MEM_RECLAIM',0); --修改内存池相关参数 SP_SET_PARA_VALUE(2,'MAX_OS_MEMORY', 100); 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); --修改内存检测参数为1 SP_SET_PARA_VALUE(2,'MEMORY_MAGIC_CHECK', 1); --修改缓冲区相关参数 SP_SET_PARA_VALUE(2,'BUFFER', BUFFER); --新版本已去掉MAX_BUFFER参数,如果存在就修改 IF EXISTS (SELECT * FROM V$DM_INI WHERE PARA_NAME='MAX_BUFFER') THEN SP_SET_PARA_VALUE(2,'MAX_BUFFER', MAX_BUFFER); END IF; 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); --修改fast_pool相关参数,如果是dsc环境,适当放小,以免影响启动速度 IF is_dsc= 1 THEN SP_SET_PARA_VALUE(2,'FAST_POOL_PAGES', 10000); SP_SET_PARA_VALUE(2,'FAST_ROLL_PAGES', 3000); SP_SET_PARA_VALUE(2,'TASK_THREADS', 16); ELSE 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(2,'TASK_THREADS',TASK_THREADS); --如果不是dsc环境,开启热页动态加载,关闭预读 SP_SET_PARA_VALUE(2,'ENABLE_FREQROOTS',1); SP_SET_PARA_VALUE(2,'MULTI_PAGE_GET_NUM',1); SP_SET_PARA_VALUE(2,'PRELOAD_SCAN_NUM',0); SP_SET_PARA_VALUE(2,'PRELOAD_EXTENT_NUM',0); END IF; --修改HASH相关参数 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); --性能要求高且大字段较少的业务场景建议设置为1,大字段多的场景设置为0 if pk_cluster_mode = 1 then SP_SET_PARA_VALUE(2,'PK_WITH_CLUSTER',1); else SP_SET_PARA_VALUE(2,'PK_WITH_CLUSTER',0); end if; 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); --开启并行PURGE SP_SET_PARA_VALUE(2,'PARALLEL_PURGE_FLAG',1); --开启手动并行 SP_SET_PARA_VALUE(2,'PARALLEL_POLICY',2); SP_SET_PARA_DOUBLE_VALUE(2,'UNDO_RETENTION',UNDO_RETENTION); --UNDO_RETENTION如果放大,可以适当调大UNDO_EXTENT_NUM。负载高的时候,减少文件系统的申请/释放操作。 SP_SET_PARA_VALUE(2,'UNDO_EXTENT_NUM',16); --开启SQL 注入HINT功能 SP_SET_PARA_VALUE(2,'ENABLE_INJECT_HINT',1); SP_SET_PARA_VALUE(2,'FAST_LOGIN',1); SP_SET_PARA_VALUE(2,'BTR_SPLIT_MODE',1); --关闭参数监控 SP_SET_PARA_VALUE(2,'ENABLE_MONITOR_BP',0); --SLCT_OPT_FLAG参数设置为0 IF EXISTS (SELECT * FROM V$DM_INI WHERE PARA_NAME='SLCT_OPT_FLAG') THEN SP_SET_PARA_VALUE(1,'SLCT_OPT_FLAG',0); END IF; IF is_dsc= 1 THEN SP_SET_PARA_VALUE(2,'ENABLE_FREQROOTS',0); --DSC关闭数据页预加载参数 SP_SET_PARA_VALUE(2,'MULTI_PAGE_GET_NUM',1); SP_SET_PARA_VALUE(2,'PRELOAD_SCAN_NUM',0); SP_SET_PARA_VALUE(2,'PRELOAD_EXTENT_NUM',0); SP_SET_PARA_VALUE(2,'DSC_N_POOLS',MEMORY_N_POOLS); IF EXISTS (SELECT * FROM V$DM_INI WHERE PARA_NAME='DSC_GBS_REVOKE_OPT') THEN SP_SET_PARA_VALUE(2,'DSC_GBS_REVOKE_OPT',0); END IF; SP_SET_PARA_VALUE(2,'DSC_HALT_SYNC',0); SP_SET_PARA_VALUE(2,'DSC_N_CTLS',50000); SP_SET_PARA_VALUE(2,'DSC_ENABLE_MONITOR',0); SP_SET_PARA_VALUE(2,'TRX_DICT_LOCK_NUM',5); SP_SET_PARA_VALUE(2,'DIRECT_IO',1); END IF; ELSE --修改cpu相关参数 PRINT 'SP_SET_PARA_VALUE(2,''WORKER_THREADS'','||v_cpus||');'; PRINT 'SP_SET_PARA_VALUE(2,''IO_THR_GROUPS'','||IO_THR_GROUPS||');'; PRINT 'SP_SET_PARA_VALUE(2,''GEN_SQL_MEM_RECLAIM'',0);'; --修改内存池相关参数 PRINT 'SP_SET_PARA_VALUE(2,''MAX_OS_MEMORY'', '||100||');'; 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||');'; --新版本已去掉MAX_BUFFER参数,如果存在就修改 IF EXISTS (SELECT * FROM V$DM_INI WHERE PARA_NAME='MAX_BUFFER') THEN PRINT 'SP_SET_PARA_VALUE(2,''MAX_BUFFER'', '||MAX_BUFFER||');'; END IF; 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||');'; --修改fast_pool相关参数,如果是dsc环境,适当放小,以免影响启动速度 IF is_dsc= 1 THEN PRINT 'SP_SET_PARA_VALUE(2,''FAST_POOL_PAGES'', 10000);'; PRINT 'SP_SET_PARA_VALUE(2,''FAST_ROLL_PAGES'', 3000);'; PRINT 'SP_SET_PARA_VALUE(2,''TASK_THREADS'', 16);'; ELSE PRINT 'SP_SET_PARA_VALUE(2,''FAST_POOL_PAGES'', '||FAST_POOL_PAGES||');'; PRINT 'SP_SET_PARA_VALUE(2,''FAST_ROLL_PAGES'', '||FAST_ROLL_PAGES||');'; --如果不是dsc环境,开启热页动态加载,关闭预读 PRINT 'SP_SET_PARA_VALUE(2,''ENABLE_FREQROOTS'',1);'; PRINT 'SP_SET_PARA_VALUE(2,''MULTI_PAGE_GET_NUM'',1);'; PRINT 'SP_SET_PARA_VALUE(2,''PRELOAD_SCAN_NUM'',0);'; PRINT 'SP_SET_PARA_VALUE(2,''PRELOAD_EXTENT_NUM'',0);'; PRINT 'SP_SET_PARA_VALUE(2,''TASK_THREADS'','||TASK_THREADS||');'; END IF; --修改内存检测参数为1 PRINT 'SP_SET_PARA_VALUE(2,''MEMORY_MAGIC_CHECK'', 1);'; --修改HASH相关参数 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);'; --性能要求高且大字段较少的业务场景建议设置为1,大字段多的场景设置为0 if pk_cluster_mode = 1 then PRINT 'SP_SET_PARA_VALUE(2,''PK_WITH_CLUSTER'', 1);'; else PRINT 'SP_SET_PARA_VALUE(2,''PK_WITH_CLUSTER'', 0);'; end if; 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);'; --开启并行PURGE PRINT 'SP_SET_PARA_VALUE(2,''PARALLEL_PURGE_FLAG'',1);'; --开启手动并行 PRINT 'SP_SET_PARA_VALUE(2,''PARALLEL_POLICY'',2);'; PRINT 'SP_SET_PARA_DOUBLE_VALUE(2,''UNDO_RETENTION'','||UNDO_RETENTION||');'; --UNDO_RETENTION如果放大,可以适当调大UNDO_EXTENT_NUM。负载高的时候,减少文件系统的申请/释放操作。 PRINT 'SP_SET_PARA_VALUE(2,''UNDO_EXTENT_NUM'',16);'; --开启INJECT HINT功能 PRINT 'SP_SET_PARA_VALUE(2,''ENABLE_INJECT_HINT'',1);'; PRINT 'SP_SET_PARA_VALUE(2,''BTR_SPLIT_MODE'',1);'; PRINT 'SP_SET_PARA_VALUE(2,''FAST_LOGIN'',1);'; --关闭参数监控 PRINT 'SP_SET_PARA_VALUE(2,''ENABLE_MONITOR_BP'',0);'; --SLCT_OPT_FLAG参数设置为0 IF EXISTS (SELECT * FROM V$DM_INI WHERE PARA_NAME='SLCT_OPT_FLAG') THEN PRINT 'SP_SET_PARA_VALUE(1,''SLCT_OPT_FLAG'',0);'; END IF; IF is_dsc= 1 THEN PRINT 'SP_SET_PARA_VALUE(2,''ENABLE_FREQROOTS'',0);'; --DSC关闭数据页预加载参数 PRINT 'SP_SET_PARA_VALUE(2,''MULTI_PAGE_GET_NUM'',1);'; PRINT 'SP_SET_PARA_VALUE(2,''PRELOAD_SCAN_NUM'',0);'; PRINT 'SP_SET_PARA_VALUE(2,''PRELOAD_EXTENT_NUM'',0);'; PRINT 'SP_SET_PARA_VALUE(2,''DSC_N_POOLS'',' ||MEMORY_N_POOLS ||');'; IF EXISTS (SELECT * FROM V$DM_INI WHERE PARA_NAME='DSC_GBS_REVOKE_OPT') THEN PRINT 'SP_SET_PARA_VALUE(2,''DSC_GBS_REVOKE_OPT'',0);'; END IF; PRINT 'SP_SET_PARA_VALUE(2,''DSC_HALT_SYNC'',0);'; PRINT 'SP_SET_PARA_VALUE(2,''DSC_N_CTLS'',50000);'; PRINT 'SP_SET_PARA_VALUE(2,''DSC_ENABLE_MONITOR'',0);'; PRINT 'SP_SET_PARA_VALUE(2,''TRX_DICT_LOCK_NUM'',5);'; PRINT 'SP_SET_PARA_VALUE(2,''DIRECT_IO'',1);'; END IF; 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 raise_application_error (-20001,substr( ' 执行失败, '||SQLCODE||' '||SQLERRM||' '||dbms_utility.format_error_backtrace , 1, 400)); <<return_2000>> null; end; /
复制

开启归档模式

开启数据库归档可通过两种方式实现。方式一:通过 SQL 命令方式开启归档;方式二:通过修改数据库配置文件方式开启归档。

ARCH_FILE_SIZE 默认 128,推荐 2048 ,本地单个归档文件最大值(单位:M)。

ARCH_SPACE_LIMIT 默认 0,推荐 102400 ,归档大小上限,0 表示无限制(按数据量的 1/5 保留,例如 500G 数据,保留 100G 归档)。

ALTER DATABASE MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE ADD ARCHIVELOG 'DEST=/data/dm8/arch, TYPE=LOCAL, FILE_SIZE=2048, SPACE_LIMIT=102400'; ALTER DATABASE OPEN; ## 另一种方式 ##修改数据库实例的 /data/dm8/data/DMTEST/dm.ini文件中 ARCH_INI 参数值 vi /data/dm8/data/DMTEST/dm.ini ##将 ARCH_INI 值改为 1,保存后退出 ARCH_INI = 1 #开启归档功能 ##新增文件 dmarch.ini vi /data/dm8/data/DMTEST/dmarch.ini ##新增如下内容 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /data/dm8/arch ARCH_FILE_SIZE = 2048 ARCH_SPACE_LIMIT = 102400 ##最后重启数据库完成归档配置
复制

image20240813155705101.png

配置备份任务

我们可以直接在 SQL 命令行发起备份,在 disql 工具或图形化管理工具 SQL 编辑区中使用 BACKUP 语句可以备份整个数据库,执行以下命令:

SQL> BACKUP DATABASE FULL BACKUPSET '/data/dm8/dm_backup/db_full_bak_01'; ##执行备份压缩,压缩级别设置为 5。 SQL> BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_06' COMPRESSED LEVEL 5; ##压缩选项有不同的压缩级别可以选择,取值范围为 0~9。应根据存储空间、数据文件大小等确定合适地压缩级别 ##创建并行备份,指定并行数为8 SQL> BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_07' PARALLEL 8; ## 表备份 SQL> BACKUP TABLE TAB_01 BACKUPSET 'tab_bak_01'; ##备份集“tab_bak_01”会生成到默认的备份路径下 ## 备份归档 SQL>BACKUP ARCHIVE LOG ALL BACKUPSET 'arch_bak_01';
复制

命令行配置全备任务

例如设置每天 22:30 全量备份、删除 30 天前的全量备份。备份路径为 /data/dm8/dm_backup。 call SP_INIT_JOB_SYS(1); call SP_CREATE_JOB('bakall_delall',1,0,'',0,0,'',0,'每天 22:30 全量备份、删除 30 天前的全量备份'); call SP_JOB_CONFIG_START('bakall_delall'); call SP_ADD_JOB_STEP('bakall_delall', 'bakall', 6, '01020000/data/dm8/dm_backup', 3, 1, 0, 0, NULL, 0); call SP_ADD_JOB_STEP('bakall_delall', 'delall', 0, 'SF_BAKSET_BACKUP_DIR_ADD(''DIS'',''/data/dm8/dm_backup''); CALL SP_DB_BAKSET_REMOVE_BATCH(''DISK'',SYSDATE-30);', 1, 1, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE('bakall_delall', 'bakall_delall_time01', 1, 1, 1, 0, 0, '22:30:00', NULL, '2019-01-01 01:01:01', NULL, ''); call SP_JOB_CONFIG_COMMIT('bakall_delall');
复制

命令行配置全备+增备任务

此备份策略适用于数据量大于 100G 并且小于 3T 的场景下。注意开启数据库归档,确定备份路径。

例如:设置每月第一个周六 23:00 全量备份。每天(除周六) 23:00 增量备份、删除 30 天前的增量备份、删除 40 天前的全量备份。全量备份路径为 /data/dm8/dm_backup/all,增量备份路径为 /data/dm8/dm_backup/add。 --设置 60 分钟后自动进行一次全量备份 call SP_INIT_JOB_SYS(1); call SP_CREATE_JOB('bakall_one',1,0,'',0,0,'',0,'执行一次全量备份'); call SP_JOB_CONFIG_START('bakall_one'); call SP_ADD_JOB_STEP('bakall_one', 'bakall', 6, '01020000/data/dm8/dm_backup/all', 1, 1, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE('bakall_one', 'bakall_one_time01', 1, 0, 0, 0, 0, NULL, NULL, SYSDATE()+1/24, NULL, ''); call SP_JOB_CONFIG_COMMIT('bakall_one'); --设置全量备份 call SP_CREATE_JOB('bakall',1,0,'',0,0,'',0,'每月第一个周六23:00全量备份'); call SP_JOB_CONFIG_START('bakall'); call SP_ADD_JOB_STEP('bakall', 'bakall', 6, '01020000/data/dm8/dm_backup/all', 1, 1, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE('bakall', 'bakall_time01', 1, 4, 1, 7, 0, '23:00:00', NULL, '2019-01-01 01:01:01', NULL, ''); call SP_JOB_CONFIG_COMMIT('bakall'); --设置增量备份 + 删除备份 call SP_CREATE_JOB('bakadd_delbak',1,0,'',0,0,'',0,'每天(除周六)23:00增量备份、删除30天前的增量备份、删除40天前的全量备份'); call SP_JOB_CONFIG_START('bakadd_delbak'); call SP_ADD_JOB_STEP('bakadd_delbak', 'bakadd', 6, '11020000/data/dm8/dm_backup/all|/data/dm8/dm_backup/add', 3, 1, 0, 0, NULL, 0); call SP_ADD_JOB_STEP('bakadd_delbak', 'delbak', 0, 'SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/opt/dmdbms/data/DAMENG/bak/add''); CALL SP_DB_BAKSET_REMOVE_BATCH(''DISK'',SYSDATE-30); SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/data/dm8/dm_backup/all''); CALL SP_DB_BAKSET_REMOVE_BATCH(''DISK'',SYSDATE-40);', 1, 1, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE('bakadd_delbak', 'bakadd_delbak_time01', 1, 2, 1, 63, 0, '23:00:00', NULL, '2019-01-01 01:01:01', NULL, ''); call SP_JOB_CONFIG_COMMIT('bakadd_delbak');
复制

全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~

❤️ 欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!
——————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
ITPUB:https://blog.itpub.net/69968215
腾讯云:https://cloud.tencent.com/developer/user/5645107
——————————————————————————

facebook_pro_light_1920 × 1080  副本.png

最后修改时间:2024-09-20 14:11:50
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
2人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

筱悦星辰
暂无图片
7月前
评论
暂无图片 0
一个干净的房间,不只是简单的住所,更是心灵的栖息滋养之地。
7月前
暂无图片 点赞
评论
TA的专栏
JiekeXu_MySQL 学习笔记
收录42篇内容
JiekeXu DBA之路
收录227篇内容
目录
  • 前 言
  • 一、DM 简介
    • DM 数据库版本介绍
    • DM 版本对比
    • DM 数据库产品简介
    • DM 体系结构简介
  • 二、开发版软件下载及安装
    • 软件下载
    • 准备安装
    • OS 配置
    • 安装规划
    • 挂载镜像
    • 安装 DM 数据库软件
      • 附1 命令行安装软件
      • 附2 自动化脚本安装
    • 初始化 DM 实例
    • 配置环境变量登录实例
  • 三、基础管理
    • 数据库安装目录
    • 数据库实例目录
    • 创建表空间和用户
    • DM 管理工具
    • DM 实例启停
    • 实例参数优化调整
    • 开启归档模式
    • 配置备份任务