1 DM数据库版本先容
1.1 版本区别
DM8现在的版本重要包括标准版、企业版、安全版和开辟版。前三项的比较如表1-1所示。以适用场景为角度进行分类,标准版适用于小型应用开辟,企业版适合生产情况级应用,安全版则在具备所有企业版基础上加入了对四权分立、强制访问控制、审计和实时侵害检测等功能上的补全,在安全性方面实现了更加全面完善的安全策略;至于开辟版则专供开辟者学习、测试、开辟用途,有1 年免费试用期,并不建议用于保存关键数据和恒久运营,避免因失效造成数据丢失和业务停止。若确有生产需要,建议寻求达梦在线客服或电话帮助,获取贸易允许证。
表1-1 DM数据库重要版本比较
对比项标准版企业版安全版最大毗连数25无穷制无穷制最大物理 CPU 数量2无穷制无穷制最大逻辑 CPU 核数32无穷制无穷制使用时间无穷制无穷制无穷制硬件平台支持Windows 全系列、Linux 全系列、龙芯、飞腾、申威、泰山、海光、兆芯、Power、安腾等Windows 全系列、Linux 全系列、龙芯、飞腾、申威、泰山、海光、兆芯、Power、安腾等Windows 全系列、Linux 全系列、龙芯、飞腾、申威、泰山、海光、兆芯、Power、安腾等最大存储容量500G无穷制无穷制单表最大行数1 亿无穷制无穷制大表最大列数102420482048列存储不支持支持支持分区表不支持支持支持并行查询不支持支持支持闪回查询不支持支持支持分析函数与自界说聚集函数不支持支持支持虚拟函数 VPD不支持支持支持DBMS_SQL 包不支持支持支持存储过程调试功能不支持支持支持XML 支持不支持支持支持JSON 支持不支持支持支持空间数据库支持不支持支持支持全文索引支持不支持支持支持DBLINK 功能不支持支持支持DMHS 支持不支持支持支持数据守护集群 DATAWATCH不支持支持支持读写分离集群 DMRWC不支持支持支持共享存储集群 DMDSC不支持支持支持大规模并行处理集群 DMMPP不支持支持支持数据复制 Data Replication不支持支持支持企业管理工具 DEM不支持支持支持备份还原接口 SBT不支持支持支持嵌入式 pro*c不支持支持支持外部函数扩展不支持支持支持外部表不支持支持支持通讯加密不支持支持支持存储加密不支持支持支持加密引擎支持支持支持三权分立不支持支持支持四权分立不支持不支持支持自主访问控制不支持支持支持强制访问控制不支持不支持支持审计和实时侵害检测不支持不支持支持客体重用不支持支持支持资源限制不支持支持支持 达梦数据旗下除传统关系型数据库外,还研发有蜀天梦图数据库、达梦新云缓存数据库、达梦启志大数据可视化系统等产物,支持不同应用层的开辟需求。详情参见图1-1内容,可以直接从图示所在栏进入或由dameng.com企业官网右上角“下载中心”按钮点击跳转即可✅。
图1-1 达梦数据旗下数据库产物
2 DM数据库安装
2.1 达梦在线服务平台
如图2-1所示为达梦在线服务平台。该平台集成了产物体系及其详细先容、技术社区、行业案例等内容,尤其提供开辟所需的详确文档;点击“查看全部文档”进入图2-2所示的技术文档详情页,包括几大模块:安装部署、应用开辟、运维和产物手册等,构建完成闭环的全生命周期服务。如果遇到技术问题或盼望从事有关开辟,官方文档、快速的论坛内技术人员支持都能助你一臂之力。
图2-1 达梦在线服务平台
本文快速上手部分为重要抓手,详细阐述在Ubuntu 20.04LTS 阿里云ECS实例上进行达梦数据库部署的详尽内容,重要出于官方文档重要面向以CentOS为代表的Redhat系企业服务器市场,一定程度上缺失对Debian家族尤其是Ubuntu版本的支持。盼望在Ubuntu上的开辟部署实现能够向后来人提供开辟部署经验和开辟平台。技术文档主页在图2-2中展示。
图2-2 DM8技术文档之快速上手 2.2 DM8 Tour 达梦线上实验室
访问https://eco.dameng.com/tour/可以访问达梦线上实验室、试用DMSQL,提前熟悉以下重要版块:
需要留意的是:线上情况不代表部署性能,如需测试请遵循完备的测试用例实验过程;该实验过程需在1小时后手动延长,须要时会以弹窗提示。窗口布局可见图2-3。
图2-3 达梦线上实验室 2.3 安装前准备
2.3.1 选择对应版本
DM8在X86架构分类中支持主流Linux和国产操作系统版本,也可以Docker镜像形式应用。在安装到Ubuntu前,键入uname -a命令查询操作系统(内核)版本、CPU 架构。
- root@iZuf64t2vkq04odhykkugyZ:~# uname -a
- Linux iZuf64t2vkq04odhykkugyZ 5.4.0-169-generic #187-Ubuntu SMP Thu Nov 23 14:52:28 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
复制代码 根据查询结果参考选择基于RedHat6 / RedHat7的版本。笔者根据版本信息选择RedHat7版本,下载得到文件夹dm8_20240408_x86_rh7_64_ent_8,ls命令查看有以下实验结果:
- (base) alexanderarthur@AlexLaptop Downloads % cd dm8_20240408_x86_rh7_64_ent_8
- (base) alexanderarthur@AlexLaptop dm8_20240408_x86_rh7_64_ent_8 % ls
- dm8_20240408_x86_rh7_64.iso dm8_20240408_x86_rh7_64.iso_SHA256.txt
复制代码 2.3.2 新建dmdba用户
数据库安装要求在dmdba用户下实验,严禁使用root用户实验安装;命令包括创建用户组、创建并设置用户:
- groupadd dinstall -g 2001
- useradd -G dinstall -m -d /home/dmdba -s /bin/bash -u 2001 dmdba
- # 修改用户密码步骤于此行略
复制代码 2.3.3 修改资源限制
登录root用户修改/etc/security/limits.conf文件配置,在文件最后添加配置如下:
- dmdba soft nice 0
- dmdba hard nice 0
- dmdba soft as unlimited
- dmdba hard as unlimited
- dmdba soft fsize unlimited
- dmdba hard fsize unlimited
- dmdba soft nproc 65536
- dmdba hard nproc 65536
- dmdba soft nofile 65536
- dmdba hard nofile 65536
- dmdba soft core unlimited
- dmdba hard core unlimited
- dmdba soft data unlimited
- dmdba hard data unlimited
复制代码 如需更改后的配置文件永世生效,请实验reboot命令重启服务器实现。
服务器重启后,切换到dmdba用户,查看是否生效:
- su - dmdba
- ulimit -a
- # 执行结果
- core file size (blocks, -c) unlimited
- data seg size (kbytes, -d) unlimited
- scheduling priority (-e) 20
- file size (blocks, -f) unlimited
- pending signals (-i) 7319
- max locked memory (kbytes, -l) 65536
- max memory size (kbytes, -m) unlimited
- open files (-n) 65536
- pipe size (512 bytes, -p) 8
- POSIX message queues (bytes, -q) 819200
- real-time priority (-r) 0
- stack size (kbytes, -s) 8192
- cpu time (seconds, -t) unlimited
- max user processes (-u) 65536
- virtual memory (kbytes, -v) unlimited
- file locks (-x) unlimited
复制代码 2.4 数据库安装
DM数据库支持命令行和图形化安装,本文仅讨论命令行安装步调及其细节避坑。
从官网下载会得到包罗dm8_20240408_x86_rh7_64.iso和dm8_20240408_x86_rh7_64.iso_SHA256.txt的完备性校验文件,默认使用TextEditor打开会部分乱码,实验file -I dm8_20240408_x86_rh7_64.iso_SHA256.txt命令有:
- (base) alexanderarthur@AlexLaptop dm8_20240408_x86_rh7_64_ent_8 % file -I dm8_20240408_x86_rh7_64.iso_SHA256.txt
- dm8_20240408_x86_rh7_64.iso_SHA256.txt: text/plain; charset=iso-8859-1
复制代码 可知字符编码格式iso-8859-1与MacOS默认的UTF-8编码格式不同;不过既然乱码部分为Windows下CertUtil工具校验命令,故没须要借助iconv工具转换文件默认字符编码,只取第二行SHA-256部分hash码616147f57051877537266d1deacdc972315d248c54bcd975d67838c2b49bcd59即可。实验自带shasum命令比较校验码:
- # cd到指定目录,生成并保存dm8_20240408_x86_rh7_64.iso校验码至文件dm8_20240408_x86_rh7_64.iso.sha256并对比
- shasum -a 256 dm8_20240408_x86_rh7_64.iso > dm8_20240408_x86_rh7_64.iso.sha256
- # 或保存原厂校验码至dm8_20240408_x86_rh7_64.iso.sha256,此时有文件内容616147f57051877537266d1deacdc972315d248c54bcd975d67838c2b49bcd59 dm8_20240408_x86_rh7_64.iso。执行以下命令一键比较:
- shasum -a 256 -c dm8_20240408_x86_rh7_64.iso.sha256
- # 得:
- dm8_20240408_x86_rh7_64.iso: OK
复制代码 完备性校验完成。
ISO镜像内包罗"DM8 Install.pdf"的dmdbms安装手册、DMInstall.bin本体。如图2-4:
图2-4 ISO镜像内容
校验完成后,使用SCP协议传输ISO文件到长途ECS服务器:
- # 不要忘记替换username、host地址和文件目录,目的地为/opt
- scp dm8_20240408_x86_rh7_64.iso username@remote_host:/path/to/remote/directory/
复制代码 等候传输完成后,在Ubuntu中以root身份在/opt中保存,并在/mnt挂载;切换至dmdba用户安装:
- cd /opt
- mount -o loop dm8_20240116_x86_rh7_64.iso /mnt
- su - dmdba
- cd /mnt
- ./DMInstall.bin -i
复制代码 实验命令后根据需要选择语言、Key文件路径、时区、安装目录等个性化内容;在根据提示选择的基础上,默认选项键入回车符跳过:
- Installer Language:
- [1]: 简体中文
- [2]: English
- Please select the installer's language [2]:1
- 解压安装程序.........
- 欢迎使用达梦数据库安装程序
- 是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]:n
- 是否设置时区? (Y/y:是 N/n:否) [Y/y]:y
- 设置时区:
- [ 1]: (GTM-12:00) 日界线西
- [ 2]: (GTM-11:00) 萨摩亚群岛
- [ 3]: (GTM-10:00) 夏威夷
- [ 4]: (GTM-09:00) 阿拉斯加
- [ 5]: (GTM-08:00) 太平洋时间(美国和加拿大)
- [ 6]: (GTM-07:00) 亚利桑那
- [ 7]: (GTM-06:00) 中部时间(美国和加拿大)
- [ 8]: (GTM-05:00) 东部部时间(美国和加拿大)
- [ 9]: (GTM-04:00) 大西洋时间(美国和加拿大)
- [10]: (GTM-03:00) 巴西利亚
- [11]: (GTM-02:00) 中大西洋
- [12]: (GTM-01:00) 亚速尔群岛
- [13]: (GTM) 格林威治标准时间
- [14]: (GTM+01:00) 萨拉热窝
- [15]: (GTM+02:00) 开罗
- [16]: (GTM+03:00) 莫斯科
- [17]: (GTM+04:00) 阿布扎比
- [18]: (GTM+05:00) 伊斯兰堡
- [19]: (GTM+06:00) 达卡
- [20]: (GTM+07:00) 曼谷,河内
- [21]: (GTM+08:00) 中国标准时间
- [22]: (GTM+09:00) 首尔
- [23]: (GTM+10:00) 关岛
- [24]: (GTM+11:00) 所罗门群岛
- [25]: (GTM+12:00) 斐济
- [26]: (GTM+13:00) 努库阿勒法
- [27]: (GTM+14:00) 基里巴斯
- 请选择时区 [21]:21
- 安装类型:
- 1 典型安装
- 2 服务器
- 3 客户端
- 4 自定义
- 请选择安装类型的数字序号 [1 典型安装]:1
- 所需空间: 2310M
- 请选择安装目录 [/home/dmdba/dmdbms]:
- 可用空间: 29G
- 是否确认安装路径(/home/dmdba/dmdbms)? (Y/y:是 N/n:否) [Y/y]:y
- 安装前小结
- 安装位置: /home/dmdba/dmdbms
- 所需空间: 2310M
- 可用空间: 29G
- 版本信息:
- 有效日期:
- 安装类型: 典型安装
- 是否确认安装? (Y/y:是 N/n:否):y
- 2024-07-08 16:49:43
- [INFO] 安装 基础 模块...
- 2024-07-08 16:49:43
- [INFO] 安装达梦数据库...
- 2024-07-08 16:50:06
- [INFO] 安装 服务器 模块...
- 2024-07-08 16:50:12
- [INFO] 安装 客户端 模块...
- 2024-07-08 16:50:23
- [INFO] 安装 驱动 模块...
- 2024-07-08 16:50:30
- [INFO] 安装 手册 模块...
- 2024-07-08 16:50:32
- [INFO] 安装 服务 模块...
- 2024-07-08 16:50:32
- [INFO] 移动日志文件。
- 2024-07-08 16:50:33
- [INFO] 安装达梦数据库完成。
- 请以root系统用户执行命令:
- /home/dmdba/dmdbms/script/root/root_installer.sh
- 安装结束
复制代码 留意在自动安装过程竣过后su root切换到root用户实验数据库备份的有关操作,创建DmAPService,否则会影响数据库备份。
2.5 配置实例
达梦数据库作为国产数据库领先者,在选择中文安装后会在Ubuntu中调用默认中文语言编码解析此中的中文内容。为防止命令行初始化实例过程中出现中文乱码问题,提进步行如下操作:
- # 切换到root用户,按先后顺序执行update包命令,接着安装汉化包
- apt-get update
- apt-get install language-pack-zh-hans
- # 第二步执行结果如下
- Reading package lists... Done
- Building dependency tree
- Reading state information... Done
- The following additional packages will be installed:
- language-pack-zh-hans-base
- The following NEW packages will be installed:
- language-pack-zh-hans language-pack-zh-hans-base
- 0 upgraded, 2 newly installed, 0 to remove and 99 not upgraded.
- Need to get 1951 kB of archives.
- After this operation, 7815 kB of additional disk space will be used.
- Do you want to continue? [Y/n] Y
- Get:1 http://mirrors.cloud.aliyuncs.com/ubuntu focal-updates/main amd64 language-pack-zh-hans-base all 1:20.04+20220818 [1949 kB]
- Get:2 http://mirrors.cloud.aliyuncs.com/ubuntu focal-updates/main amd64 language-pack-zh-hans all 1:20.04+20220818 [1944 B]
- Fetched 1951 kB in 0s (4975 kB/s)
- Selecting previously unselected package language-pack-zh-hans-base.
- (Reading database ... 114667 files and directories currently installed.)
- Preparing to unpack .../language-pack-zh-hans-base_1%3a20.04+20220818_all.deb ...
- Unpacking language-pack-zh-hans-base (1:20.04+20220818) ...
- Selecting previously unselected package language-pack-zh-hans.
- Preparing to unpack .../language-pack-zh-hans_1%3a20.04+20220818_all.deb ...
- Unpacking language-pack-zh-hans (1:20.04+20220818) ...
- Setting up language-pack-zh-hans (1:20.04+20220818) ...
- Setting up language-pack-zh-hans-base (1:20.04+20220818) ...
- Generating locales (this might take a while)...
- zh_CN.UTF-8... done
- zh_SG.UTF-8... done
- Generation complete.
复制代码 上述工作完成后,切换到dmdba用户并实验/home/dmdba/dmdbms/bin下的dminit命令。命令清单:
- su - dmdba
- cd /home/dmdba/dmdbms/bin
- # 查看参数
- ./dminit help
复制代码 需要留意的是,页巨细 (page_size)、簇巨细 (extent_size)、巨细写敏感 (case_sensitive)、字符集 (charset) 、空格添补模式 (BLANK_PAD_MODE) 、页查抄模式(PAGE CHECK) 等部分参数,一旦确定无法修改,在初始化实例时确认需求后谨慎设置。
形成对须要参数的认知后,采用默认方式安装数据库,此时仅需指定数据存放位置参数PATH即可;须要情况(一般是生产情况下),在初始化实例时指定PAGE_SIZE, EXTENT_SIZE等内容:
- # 建立实例前准备:创建目录、更改所有权并更改角色权限
- usermod -aG sudo dmdba
- su dmdba
- sudo mkdir -p /dmdata/data
- sudo chown -R dmdba:dmdba /dmdata/data
- ll /dmdata/data
- sudo chmod -R 750 /dmdata/data
- # 执行安装
- ./dminit PATH=/dmdata/data
- # 执行结果
- initdb V8
- db version: 0x7000c
- file dm.key not found, use default license!
- License will expire on 2025-03-21
- Normal of FAST
- Normal of DEFAULT
- Normal of RECYCLE
- Normal of KEEP
- Normal of ROLL
- log file path: /dmdata/data/DAMENG/DAMENG01.log
- log file path: /dmdata/data/DAMENG/DAMENG02.log
- write to dir [/dmdata/data/DAMENG].
- create dm database success. 2024-07-10 12:34:35
复制代码 配置助手等可视化工具需要开放图形化界面权限。
2.6 注册服务
DM提供了将DM服务脚本注册成操作系统服务的脚本/卸载操作系统服务的脚本,存在于安装目录的/script/root目录下,即路径/home/dmdba/dmdbms/script/root/;使用root用户进入上述目录。
故有注册服务操作:
- # 官方教程含坑,-dm_ini参数路径需替换为/dmdata/data/DAMENG/dm.ini
- ./dm_service_installer.sh -t dmserver -dm_ini /dmdata/data/DAMENG/dm.ini -p DMTEST
- # 执行结果
- Created symlink /etc/systemd/system/multi-user.target.wants/DmServiceDMTEST.service → /lib/systemd/system/DmServiceDMTEST.service.
- 创建服务(DmServiceDMTEST)完成
复制代码 创建完成后在/home/dmdba/dmdbms/bin目录下能够查看到注册好的服务DmServiceDMTEST:
- -rwxr-xr-x 1 dmdba dmdba 17501 Jul 10 13:12 DmServiceDMTEST*
复制代码 &esmp;此时注册服务部分完成。
2.7 启停数据库
2.7.1 服务名方式
服务注册成功后, 使用注册完成的DmServiceDMTEST启动数据库:
- # 启动
- ./DmServiceDMTEST start
- Starting DmServiceDMTEST: [ OK ]
- # 停止
- ./DmServiceDMTEST stop
- Starting DmServiceDMTEST: [ OK ]
- # 重启
- ./DmServiceDMTEST restart
- Stopping DmServiceDMTEST: [ OK ]
- Starting DmServiceDMTEST: [ OK ]
- # 查看数据库状态
- ./DmServiceDMTEST status
- DmServiceDMTEST (pid 19172) is running.
复制代码 2.7.2 前台方式
若使用前台方式启停数据库,当启动界面会话关闭,数据库随之关闭;故一般更建议采用服务方式启动数据库。
dmdba用户使用前台方式启停数据库,进入DM安装目录的bin目录下,实验:
- # 前台方式启动数据库
- ./dmserver /dmdata/data/DAMENG/dm.ini
- # 执行结果
- file dm.key not found, use default license!
- version info: develop
- csek2_vm_t = 1400
- nsql_vm_t = 328
- prjt2_vm_t = 176
- ltid_vm_t = 216
- nins2_vm_t = 1008
- nset2_vm_t = 272
- ndlck_vm_t = 192
- ndel2_vm_t = 768
- slct2_vm_t = 208
- nli2_vm_t = 192
- aagr2_vm_t = 280
- pscn_vm_t = 216
- dist_vm_t = 896
- DM Database Server 64 V8 03134284172-20240321-222308-20093 startup...
- Normal of FAST
- Normal of DEFAULT
- Normal of RECYCLE
- Normal of KEEP
- Normal of ROLL
- Database mode = 0, oguid = 0
- License will expire on 2025-03-21
- file lsn: 44780
- ndct db load finished, code:0
- ndct second level fill fast pool finished
- ndct third level fill fast pool finished
- ndct second level fill fast pool finished
- ndct third level fill fast pool finished
- ndct fill fast pool finished
- pseg_set_gtv_trxid_low next_trxid in mem:[12013]
- pseg_collect_mgr_items, total collect 0 active_trxs, 0 cmt_trxs, 0 pre_cmt_trxs, 0 to_release_trxs, 0 active_pages, 0 cmt_pages, 0 pre_cmt_pages, 0 to_release_pages, 0 mgr pages, 0 mgr recs!
- next_trxid in mem:[14015]
- next_trxid = 16017.
- pseg recv finished
- nsvr_startup end.
- uthr_pipe_create, create pipe[read:11, write:12]
- uthr_pipe_create, create pipe[read:13, write:14]
- uthr_pipe_create, create pipe[read:15, write:16]
- uthr_pipe_create, create pipe[read:17, write:18]
- uthr_pipe_create, create pipe[read:19, write:20]
- uthr_pipe_create, create pipe[read:21, write:22]
- uthr_pipe_create, create pipe[read:23, write:24]
- uthr_pipe_create, create pipe[read:25, write:26]
- uthr_pipe_create, create pipe[read:27, write:28]
- uthr_pipe_create, create pipe[read:29, write:30]
- uthr_pipe_create, create pipe[read:31, write:32]
- uthr_pipe_create, create pipe[read:33, write:34]
- uthr_pipe_create, create pipe[read:35, write:36]
- uthr_pipe_create, create pipe[read:37, write:38]
- uthr_pipe_create, create pipe[read:39, write:40]
- uthr_pipe_create, create pipe[read:41, write:42]
- aud sys init success.
- aud rt sys init success.
- systables desc init success.
- ndct_db_load_info finished, code:0.
- nsvr_process_before_open begin.
- nsvr_process_before_open success.
- SYSTEM IS READY.
- # 退出时输入"exit"
- exit
- # 执行结果
- Server is stopping...
- listener closed and all sessions disconnected
- adjust undo_retention & wakeup purge thread...full check point starting...
- generate force checkpoint, rlog free space[536846336], used space[16384]
- checkpoint begin, used_space[16384], free_space[536846336]...
- checkpoint end, 0 pages flushed, used_space[12288], free_space[536850432].
- full check point end.
- shutdown audit subsystem...OK
- shutdown schedule subsystem...OK
- shutdown timer successfully.
- pre-shutdown MAL subsystem...OK
- shutdown worker threads subsystem...OK
- shutdown logic log subsystem...OK
- shutdown sequence cache subsystem...OK
- wait for mtsk link worker to exit..OK
- shutdown mpp session subsystem...OK
- wait for rapply is all over... OK
- rapply worker threads exit successfully.
- pre ending task & worker threads...OK
- shutdown dblink subsystem...OK
- shutdown local parallel threads pool successfully.
- shutdown pthd_pools...OK
- shutdown session subsystem...shutdown aux session subsystem...OK
- shutdown rollback segments purging subsystem...OK
- shutdown transaction subsystem...OK
- shutdown locking subsystem...OK
- shutdown dbms_lock subsystem...OK
- ending tsk and worker threads...OK
- ckpt2_exec_immediately begin.
- checkpoint begin, used_space[12288], free_space[536850432]...
- checkpoint end, 0 pages flushed, used_space[4096], free_space[536858624].
- checkpoint begin, used_space[4096], free_space[536858624]...
- checkpoint begin, used_space[0], free_space[536862720]...
- shutdown archive subsystem...OK
- shutdown redo log subsystem...OK
- shutdown MAL subsystem...OK
- shutdown message compress subsystem successfully.
- shutdown task subsystem...OK
- shutdown trace subsystem...OK
- shutdown svr_log subsystem...OK
- shutdown plan cache subsystem...OK
- shutdown database dictionary subsystem...OK
- shutdown file subsystem...OK
- shutdown mac cache subsystem...OK
- shutdown dynamic login cache subsystem...OK
- shutdown ifun/bifun/sfun/afun cache subsystem...OK
- shutdown crypt subsystem...OK
- shutdown pipe subsystem...OK
- shutdown compress component...OK
- shutdown slave redo subsystem...OK
- shutdown kernel buffer subsystem...OK
- shutdown SQL capture subsystem...OK
- shutdown control file system...OK
- shutdown dtype subsystem...OK
- shutdown huge buffer and memory pools...OK
- close lsnr socket
- DM Database Server shutdown successfully.
复制代码 结语
官方资源下载:https://eco.dameng.com/download/
文档中心:https://eco.dameng.com/document/dm/zh-cn/start/index.html
更多官方支持:https://eco.dameng.com
本文章为此系列文章的SERIES1,可在专栏期待后续更多内容分享。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |