DM DBA 手记之 MySQL 移植到 DM

1 概述
目前采用有自主知识产权的国产数据库将成为主流。
DM 数据库和 MySQL 体系结构上存在差异,SQL 语法也存在一定的差异。
DM 数据库针对 MySQL 做了部分兼容性。但由于有根本性的差异,兼容度不高。
从 MySQL 迁移到 DM 数据库,DM 数据库提供了自动数据迁移工具,但在开发
级别还需要一定的人工干预。
MySQL 到 DM 的移植主要有以下几个方面的工作:
1.分析待移植系统,确定移植对象。
2.通过数据迁移工具 DTS 完成常规数据库对象及数据的迁移。
3.通过人工完成 MSQL 的移植。
4.移植完成后对移植的结果进行校验,确保移植的完整性和正确性。
5.对应用系统进行移植、测试和优化。
2 待移植系统分析
2.1 应用系统情况分

应用后台操作系统Red Hat Linux
数据库后台操作系统Red Hat Linux
后台数据库MySQL5.7
应用开发平台JAVA
应用开发接口JDBC
需要移植的数据库对象表(数据量)、分区表
视图
2
自定义类型
触发器
存储过程、函数
其他
2.2 数据库对象分析
分析系统中历史数据库中含有哪些表,包括业务表和系统表,以及关联结构。
同时明确是否将所有数据表均导入国产化数据库,并提出解决方案。
通过以下方式统计 MySQL 数据中的对象以及表数据量:
–根据指定用户统计用户下的对象数目
SELECT count(*) TABLES, table_schema FROM information_schema.TABLES
where table_schema = ‘数据库名称’ GROUP BY table_schema;//表数目
select name from MySQL.proc where db = ‘数据库名称’ and type = ‘PROCEDURE’; // 存储
过程
select name from MySQL .proc where db = ‘数据库名称’ and type = ‘FUNCTION’ // 函数
–创建移植辅助表,统计每个表的数据量并插入到移植辅助表中
create table MySQLs_tables(tab_owner varchar(100),tab_name varchar(100),tab_count int);
insert into MySQLs_tables select table_name,table_rows from
information_schema.TABLES where TABLE_SCHEMA = ‘数据库名称’ order by table_rows
desc;
select * from MySQL_tables;
从 MySQL 移植到 DM,要求必须创建新的用户和表空间,不要把数据迁移
到系统管理员 SYSDBA 用户下和 MAIN 表空间下。
首先需要分析本次移植MySQL 源库需要移植的是哪一个或者哪几个用户的
数据,然后分别创建这些需要移植的用户和对应的表空间。
3 准备移植环境
3.1 DM 移植环境
3.1.1 版本选择
达梦数据库内部会有定期的版本更新说明和版本发版通知,在进行项目移植
的之前,一定要先根据内部通报情况和自己所在技术团队的讨论,确定一个版本,
尽量以最新版本且无额外另行通知的版本,保证已经出现的问题在即将移植的系
统中不再出现。
版本优先选择完整安装版本(无完整安装版本的平台例外),避免数据库客
户端和服务器端存在版本不匹配带来的额外工作量,达梦在不同平台的不同版本
上,安装包都会有差异,一定要采用严格匹配的原则,除非得到达梦原厂技术人
员的允许,尽量减少干扰性的问题出现。
3.1.2 初始化库
初始化库,关键的点在于对初始化参数的设置,本章节明确是从 MySQL 移
植到 DM 数据库,所以具体的初始化参数建议如下:
(1)关于页大小 PAGE_SIZE。在 DM 数据库中,页大小可以为 4KB、8KB、
16KB 或者 32KB,从 MySQL 移植到 DM,建议设置页大小为 16KB,一旦创建
好了数据库,在该库的整个生命周期内,页大小都不能够改变。除了每个字段的
最大长度限制外,每条记录总长度不能大于页面大小的一半。如果系统中存在或
者以后可能存在含有较长的字符串类型的表,可以按需调整,最大为 32KB(也
可以设置为 8KB)。页大小设置越大,最后数据文件的物理大小就会越大,系
统运行时,每次从磁盘调入内存的数据单位也就越大,所以此处要慎重。
(2)关于簇大小 EXTENT_SIZE。数据文件使用的簇大小,即每次分配新
的段空间时连续的页数,只能是 16 页或 32 页,缺省使用 16 页,从 MySQL 移
植到 DM 使用默认值就可。
(3)关于大小写敏感 CASE_SENSITIVE。DM 为了兼容不同的数据库,在
4
初始化数据库的时候有一个参数字符串比较大小写敏感,用于确定数据库对象及
数据是否区分大小写,默认为区分,不可更改。建议 MySQL 和 SQLSERVER 迁
移过来的系统,使用大小写不敏感。
(4)关于字符集 CHARSET。建议采用默认值 GB18030,如果需要国际字
符可以采用 Unicode,GB18030 数字字母占 1 个字节,普通汉字占 2 个字节,部
分繁体及少数民族文字占 4 字节,Unicode 在达梦中采用 UTF-8 编码格式,欧洲
的字母字符占 1 到 2 个字节,亚洲的大部分字符占 3 个字节,附加字符为 4 个字
节。如果只存储中文和字母数字,一般来说 GB18030 更节省空间一些。
3.1.3 INI 中兼容参数
DM 的 INI 参数文件中针对从 MySQL 移植到 DM,有几个专门的参数,这
里将详细介绍。
compatibility使用效果及建议
COMPATIBLE_ MODE是否兼容其他数据库模式。0 :不兼容,1: 兼容 SQL92 标
准,2 :兼容 ORACLE ,3 :兼 容 MS SQL SERVER ,4 :
兼容 MySQL ,5 :兼 容 DM6,6:兼容 Teradata,所以当
从 MySQL 移植到 DM 时,修改值为 4;
在 INI 参数的 compatibility 部分,还有其它的一些参数,在涉及到之前,尽
量保持默认值,在移植准备的环节,先只调整这个参数就可以了,其它参数,在
移植过程中再具体分析。
3.1.4 创建用户和表空间
从 MySQL 移植到 DM,要求先创建好待使用的用户和这个用户的表空间,
不要把数据移植到系统默认的管理员 SYSDBA 用户下和 MAIN 表空间下。
MySQL 的体系架构是单实例多库,DM7 以上的版本是单库多实例的架构,
MySQL 可能是一个 root 用户访问多个库,访问前切换一下当前库即可。从
MySQL 迁移到达梦的时候就需要针对 MySQL 中的每一个库在达梦里面创建一
个用户和表空间来对应。例如 MySQL 中有一个库 test,达梦里面先创建一个表
空间 tab_test,然后创建一个用户 test,指定默认表空间为 tab_test。
5
迁移 MySQL 中 test 库的数据的时候,用 root 用户连接 MySQL,指定当前
库为 test;用 test 用户连接达梦,这样就把 MySQLtest 库中的数据迁移到了达梦
test 用户中。
我们在做MySQL 移植的时候要先分析本次移植需要从源库中移植哪一个库
或者哪几个库的数据,然后为每一个库,分别在达梦中创建独立的表空间和用户;
大多数情况下,我们需要移植的数据所在的 MySQL 实例里面有多个库,并不是
所有的库都需要移植,所以再移植准备阶段,一定要和相关技术负责人员沟通明
确清楚
3.2 MySQL 移植环境
在从 MySQL 向 DM 进行移植准备阶段,也需要注意 MySQL 的移植环境:
(1)严禁在生产环境中直接迁移。因为移植首先是一个测试的工作,所以
移植应该避免从 MySQL 生产环境数据库中直接进行移植,需要提前向应用开发
商提出其搭建一个测试环境,准备 MySQL 需要移植的环境和数据。直接从生产
库上进行数据移植,有很多风险存在,例如会影响生产库的效率,引发崩溃的可
能等等。
(2)工具准备。这里推荐 Navicat 工具,一般需要有一个工具来连接到需要
移植的 MySQL 环境,以便进行移植数据的确认和初步的分析,当然也可以使用
MySQL 其他的客户端工具,MySQL 是一个开源数据库,可供选择的工具比较多,
使用起来比较方便;
4 数据迁移
通过达梦数据库数据迁移同步工具 DTS 将原系统中结构化数据迁移到国产
化数据库,源端数据库支持 Oracle、达梦、MySQL 等国内外多种关系型数据库
管理系统,目的端数据库支持国产化数据库:
DM 数据迁移工具支持:
 DM 数据库之间模式、表、序列、视图、存储过程/函数、包、触发器、对象
权限的迁移;
6
 主流大型数据库 Oracle、SQLServer、MySQL、DB2、PostgreSQL、Informix、
Kingbase、Sybase 的模式、表、视图、序列、索引迁移到 DM;
 DM 的模式、表、视图、序列、索引迁移到主流大型数据库 Oracle、SQLServer、
MySQL;
 ODBC 数据源、JDBC 数据源的模式、表、视图迁移到 DM;
 DM 数据库模式、表、序列、视图、存储过程/函数、包、触发器、对象权限
迁移到 XML 文件,SQL 脚本文件;
 DM 数据库的表、视图数据迁移到文本文件,Excel 文件,Word 文件;
 指定格式的文本文件,Excel 文件,Word 文件,XML 文件和 SQL 脚本文件迁
移到 DM 数据库。
4.1 数据迁移步骤
(1)选择迁移方式
(2)连接迁移数据源
这里需要注意选择对应的要迁移的数据库名称,不要使用默认,如果下拉框
没有可选的,可以点击右边的刷新。
(3)连接迁移数据目的端
(4)从数据源复制对象,包括模式及模式对象,目录,公共同义词或者上下
文(目的模式选择自己要用的模式)。
(5)选择迁移对象
(6)审阅迁移任务
(7)执行迁移任务
4.1.1 CURRENT_TIMESTAMP 字段类型的处理
MySQL 的字段可以定义 CURRENT_TIMESTAMP 类型,实际后台是触发器
帮助更新行数据的时间戳,达梦可以用相同的触发器原理仿真,就是需要一些修
改的工作量。
实现最后更新时间功能,即数据新建为新建时间,数据修改时自动更新为当
前时间。
测试示例如下:
drop TABLE T1;
CREATE TABLE T1(
A INT NOT NULL,
B DATETIME(6) DEFAULT sysdate,
C CHAR(10),
PRIMARY KEY(A)
);
insert into t1(a,c) values (1,’a’);
insert into t1(a,c) values (2,’b’);
create or replace trigger tg_ 1
before update on t1 for each row
begin
11
:new.b=sysdate;
end;
/
select * from t1;
/*
A B
1 2019-06-21 15:25:32.792000
2 2019-06-21 15:25:32.813000
*/
update t1 set c=’aa’ where a=1 ;
select * from t1;
/*
A B
1 2019-06-21 15:26:02.758000
2 2019-06-21 15:25:32.813000
*/

4.1.2 数据迁移常见问题
4.1.2.1 无效的数据类型
请核查字段定义中的 int 类型,是否有精度,如果有,请直接去掉。即 int(10)
需要改成 int,去掉精度。(达梦数据库的 int 类型,不需要、也不能设置精度)。
create table test1(v1 int(10),v2 varchar(20));
需要更改成
create table test1(v1 int,v2 varchar(20);
4.1.2.2 TIMESTAMP 类型
在 MySQL 中 时 间 类 型 TIMESTAMP 默 认 default 设 置 为
“ 0000-00-0000:00:00 ” , 而 在 DM 中 TIMESTAMP 类 型 数 据 不 能 为
“0000-00-0000:00:00”,在 DM 中是不合法的,必须在’0001-01-0100:00:00.000000′ 到’9999-12-3123:59:59.999999’之间。
可通过修改直接修改 MySQL 中的业务表数据后进行数据迁移或通过 DTS
12
的使用 SQL 进行迁移数据,详见应对措施一。
4.1.2.3 DEFAULT 设置
对于字段的 default 设置,默认的字符或字符串默认值,需要添加单引号”,
如 achar(10)default‘abc’。
4.1.2.4 TEXT 类型
对于 text 字段类型,若在多条 SQL 中存在对 text 字段类型的 distinct 处理,
可根据具体情况决定是否将 text 字段类型改变为 varchar 类型,或对查询结果进
行其他方式的过滤。
4.1.2.5 精度放大 3 倍
在 2019-9-18 以前的 DM 迁移工具中,如果 MySQL 源端的表字符集为 utf8,
迁移到达梦的时候 CHAR、VARCHAR 类型的精度会自动放大三倍。如果不能
接收这种精度的放大,有两个办法:
1.把 MySQL 的表定义导出成文本,手动修改为 DM 语法。
2.去官网下载 2019-9-18 以后的版本。
4.2 创建触发器、存储过程
对系统中的表和视图,可以使用达梦 DTS 工具进行迁移。如果还用到了自
定义类型、存储过程、函数、触发器等,需要导出源端数据库上的定义,手动进
行等价改写,可以参考后续步骤。
首先,可以先从 MySQL 导出用户对象 sql 脚本,MySQL 导出存储过程及函
数的执行命令:
MySQLdump-hhostname-uusername-ppassword-ntd-Rdatabasename>prorandfu
nc.sql
然后,将导出的 sql 脚本,经人工修改之后,再导入到达梦数据库中运行。
13
4.2.1 常见函数处理
4.2.1.1 DATE_FORMAT()函数
以 date_format 函数为例,MySQL 中的 date_format 函数可以在 DM 数据库
中使用 to_char 或 to_date 函数改写,改写后在达梦中可以达到相同的效果,示例
如下:
–MySQL
select date_format(sysdate(), ‘%Y 年%m 月’) from dual
— DM
select translate(to_char(sysdate, ‘yyyy-mm#’),’-#’,’年月’) from dua
–MySQL
select DATE_ FORMAT(C_ FIRST_TIME,’%Y-%m-%d %H’) FROM DUAL;
— DM
select TO_CHAR(C_FIRST_TIME, ‘YYYY- MM- DD HH24’) FROM DUAL;
4.2.1.2 IF()函数
MySQL 中的 if()函数在当前测试版本 DM 中不支持,需采用 casewhen 进行
替代,后续新版本可能会支持。
4.2.1.3 CONVERT()函数
DM 的 convert()函数中的 type 在前,value 在后,而 MySQL 数据库中 convert()
函数则恰恰相反,对于 cast()函数的用法则一致,测试示例如下:
–MySQL
CONVERT(CASE WHEN TEMP_STA.c_data_value < 0 THEN NULL ELSE TEMP_STA.c_data_value
END, SIGNED) AS “ONLINEUSER”,
— DM
CONVERT( INTEGER,CASE WHEN TEMP_STA.c_data_value <0 THEN NULL
ELSE
14
TEMP_STA.c_data_value END) AS “ONLINEUSER” 4.2.1.4 CAST()函数
DM 中的 cast()函数的用法虽然和 MySQL 一致,但使用效果存在不同,
MySQL 中对于数值类型的 value 转 char 类型没有限制,DM 中则存在限制,会
报“数据转换失败”等报错,可将 cast(数值类型的 valueaschar)转换为 cast(数值
类型的valueasvarchar),对于unsigned类型可以根据实际情况做对应改变或确定是
否有必要进行转换。
4.2.1.5 FIND_IN_SET()函数
MySQL 字符串函数 find_in_set(str1,str2)函数就是查询字段(strlist)中包含(str)
的结果,返回结果为 null 或记录,也就是返回 str2 中 str1 所在的位置索引,str2
必须以”,”分割开。同 like 相比,like 是广泛的模糊匹配,字符串中没有分隔符,
而 Find_IN_SET 是精确匹配,字段值以英文”,”分隔,Find_IN_SET 查询的结
果要小于 like 查询的结果。
而在 DM 中没有对应的函数,需要编写自定义函数,如下:
CREATE OR REPLACE
FUNCTION SYSDBA. FIND_ IN_SET(piv_str1 varchar2, piv_str2 varchar2, p_sep
varchar2 := ‘,’)
RETURN NUMBER IS
l_idxnumber:=0; — 用于计算 piv_str2 中分隔符的位置
strvarchar2(500); — 根据分隔符截取的子字符串
piv_strvarchar2(500) := piv_str2; — 将 piv_str2 赋值给 piv_str
resnumber:=0; — 返回结果
BEGIN
— 如果 piv_str 中没有分割符,直接判断 piv_str1 和 piv_str 是否相等,相等 res=1
IF instr(piv_str, p_sep, 1) = 0 THEN
IF piv_str = piv_str1 THEN
res:= 1;
END IF;
ELSE
— 循环按分隔符截取 piv_str
LOOP
15
l_idx := instr(piv_str,p_sep);
— 当 piv_str 中还有分隔符时
IF l_idx > 0 THEN
— 截取第一个分隔符前的字段 str
str:= substr(piv_str,1,l_idx- 1);
— 判断 str 和 piv_str1 是否相等,相等 res=1 并结束循环判断
IF str = piv_str1 THEN
res:= 1;
EXIT;
END IF;
piv_str := substr(piv_str,l_idx+length(p_sep));
ELSE
— 当截取后的 piv_str 中不存在分割符时,判断 piv_str 和 piv_str1 是否相等,相
等 res=1 IF piv_str = piv_str1 THEN
res:= 1;
END IF;
— 无论最后是否相等,都跳出循环
EXIT;
END IF;
END LOOP;
— 结束循环
END IF;
— 返回 res
RETURN res;
END FIND_ IN_SET;
4.2.1.6 GROUP_CONCAT 函数
对于 group_concat 函数,可以采用 DM 的 LISTAGG 函数进行替换,如下为
MySQL 和 DM 中的函数应用和效果,如下:
–MySQL
select group_concat(ifnull(OPEN_STEP, ’10’) order by ID ASC separator ‘、、’)
from ZHZB_DEV.BID_PACKAGE BP;
10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、
10、、10….
select group_concat(ifnull(OPEN_STEP, ’10’) order by ID ASC separator ‘、、’)
16
from ZHZB_DEV.BID_PACKAGE BP
group by AGENT_ ID;
10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、
10、、10、、10、、 10、、10、、10、、10 10、、10、、10、、10、、10、、10、、10、、
10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、、、 10、、10、、10、、
10、、10、、10、、10、、10、、20、、20、、10、、10
— DM
select LISTAGG(ifnull(“BP”.”OPEN_STEP”, ’10’),’ 、 、 ‘) WITHIN GROUP(ORDER BY
“BP”.”ID” ASC) from ZHZB_DEV.BID_PACKAGE BP;
10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、
10、、10、、10、、
10、、10、、10、、10、、10、、10、、10、、、10、、10、、10、、10、、10、、10、、
10、、10、、10、、
10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、
10、、10、、10、、
10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、
10、、10、、10、、
10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、
10、、10、、10、、
10、、10、、10
select LISTAGG(ifnull(“BP”.”OPEN_STEP”, ’10’),’ 、 、 ‘) WITHIN GROUP(ORDER BY
“BP”.”ID” ASC) from ZHZB_DEV.BID_PACKAGE BP
group by “BP”.”AGENT_ID” ;
— 10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、
10、、10、、10、、
10、、10、、10、、10、、10
— 10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、
10、、10、、10、、
10 、 、 10 、 、 10 、 、 10 、 、 10 、 、 10 、 、 10 、 、 10 、 、
10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、
10、、10、、10、、 10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、
10、、10、、10、、10、、10、、10、、10、、
10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10、、10
17
4.2.1.7 DATE_ADD 函数
date_add 函数若对添加时间间隔的表达式进行求值,可采用 DM 的
TIMESTAMPADD 函数进行替代,例子如下:
–MySQL
select DATE_ADD(sysdate(), INTERVAL 1 YEAR);
–2020-07-02 11:24:18
— DM
select TIMESTAMPADD(SQL_TSI_YEAR, 1,sysdate());
–2020-07-02 11:27:56.000000
4.2.1.8 其他函数
对于 MySQL 独有的函数或基于 MySQL 语法创建的自定义函数,在 DM 中
需要基于 DM 的 SQL 语法进行改写,实现相同的功能。
4.2.1.9 时间间隔表达式
对 于 类 似 date_format((“S”.”CREATE_TIME” + interval 1 year),’%Y’) 、
date_format((now() + interval -(1) year),’%Y’))的时间间隔表达式,对于 interval 关
键词后的正数需添加单引号”,如 interval ‘1’ year,对于负数,需改写,如 interval
‘-1’。
4.3 管理工具的基本使用
修改表名称等基本使用可以通过达梦数据库管理工具进行,在管理工具中选
择表,右键-重命名,对表进行修改。

也可以通过 sql 语句进行修改,使用方式如下:
其他使用方式,通过达梦图形化客户端工具(manager.exe)都可以通过类似
的方式实现。

5 核对数据库移植结果
统计达梦数据基础信息
–统计页大小 select page;
–统计编码格式
select unicode;
–统计大小写敏感参数
select case_sensitive;
统计达梦数据中的对象以及表数据量
a. 根据指定用户统计用户下的各对象类型和数目
Select object_type count* from all_objects where owner = ‘OA8000_DM2015’ group by Object_type
b. 统计指定用户下所有的对象,并记录到新的记录表中
create table dm_objects(obj_owner varchar( 100),obj_name varchar( 100),obj_type varchar(50));
insert into dm_objects select owner,object_name,object_type from all_objects where owner=’OA8000_DM2015′;
c. 统计每个表的数据量到表数据记录表
create table dm_tables(tab_owner varchar( 100),tab_name varchar(100),tab_count int); declare begin for rec in (select owner,object_name from all_objects where owner=’OA8000_DM2015′ and object_type=’TABLE’) loop execute immediate ‘insert into dm_tables select ”’ | | rec.owner | |”’,”’ | | rec.object_name | |”’,count(*) from ‘ | | rec.owner | | ‘.’ | | rec.object_name; end loop; end;
select * from dm_tables;
对比达梦数据库中对象和 MySQL 库中对象以及数据量差异 20 比对表数据量,找出数据量不相等的表: select a.tab_owner,a.tab_name,a.tab_count-b.tab_count from MySQL_tables a, dm_tables b where a.tab_owner=b.tab_owner and a.tab_name=b .tab_name and a.tab_count-b.tab_count<>0 ;
6 数据库移植完毕后的收尾工作
更新统计信息 数据核对完成无问题后, 应进行一次全库的统计信息更新工作。 统计信 息更新脚本示例如下:
DBMS_STATS.GATHER_SCHEMA_STATS( ‘HNSIMIS’, — HNSIMIS 为模式名 100, FALSE, ‘FOR ALL COLUMNS SIZE AUTO’);
更新统计信息的目的在于大批量迁移数据后,可能会导致数据库优化器根据 错误的统计信息得到错误的查询计划,严重影响查询性能。
数据备份 再对数据更新完统计信息后,在数据量不大,磁盘空间足够的情况下应进行 一次数据备份工作。数据备份有两种方式:正常停止数据库后,拷贝备份 data 文件夹;或者开启归档日志后,进行物理备份。
整理对象脚本 整理所有数据库对象脚本,这是为了对项目移植情况进行记录和备份,方便 再次进行数据迁移。备份的数据库对象脚本包括:序列定义及当前值,表定义, 索引定义,视图定义,函数定义,存储过程定义,包及包体定义、自定义类型和 同义词定义。 脚本对象导出可通过达梦数据迁移 DTS 工具来进行。执行步骤如下

7 应用移植
应用移植一般包括:需修改连接串、URL、数据库方言、SQL 语句、配置 JNDI。
数据库迁移到达梦数据库之后,应用需要对应适配迁移到达梦数据库中,针 对应用移植到达梦数据库采用以下修改方式:
URL 连接串修改方式如下:
// 定义 DM JDBC 驱动串
String jdbcString = “dm.jdbc.driver.DmDriver”;
// 定义 DM URL 连接串
String urlString = “jdbc:dm://localhost :5236”;
数据库方言配置方式如下:



如果数据库是集群,则需要配置 dm_svc.conf,配置内容如下:
TIME_ZONE=(480) LANGUAGE=(cn) SHRSG=(10.212.133.11:5236,10.212.133.12:5236)
如 果 应 用 程 序 对 应 的 操 作 系 统 是 window , 则 将 dm_svc.conf 放 在 C:\Windows\System32 目录下;如果操作系统是 linux,则放在/etc/目录下。
7.1 应用移植前的说明
7.1.1 关于 SQL 连接的一个说明 MySQL 和 DM 都支持 join 的常用的几种连接方式。 首先,MySQL 不支持全外连接,需采用左外连接和右外连接做 unionall 的

发表评论