精华内容
下载资源
问答
  • 2020-05-18 15:25:38
        这两样加班搞一个jdsy项目,要求是项目适配dm,Oracle,MySQL,金仓,分别为123级节点以及认证节点。但是目前只测过dm的。
    
    1. cannot load column:对应字段无法封装。两种解决办法,1把所有的select * from Identity 改为select a.* from Identity a ;2.字段无法封装是longblob这种类型造成的,改为longtext,其中longblob是用来存储图片的二进制编码的。
    2. MySQL和Oracle不支持Len(auth_type)>0这种写法的,要删除。
    3. Oracle是不支持select a.* from identity as a这种语法的,但是可以支持简写,如select a.* from identity a 这种语法。
    4. MySQL遇到字段size过大,原因是直接从dm迁移过来的许多varchar(8188),而mysql一张表中只支持最大61355,字段过长了,部分字段改为了128或者255
    5. 数据备份功能,用的是dm本身的dexp.exe软件,所以数据备份功能暂不能由适配sql来实现。需后面重新考虑。
    6. 后台主要是加if条件判断当前系统用的数据库名是什么就好了。
    更多相关内容
  • 国产化指引
  • 鲲鹏认证 | 多数据库切换之Oracle迁移至MySQL篇

    引入:写在前面的话,每一篇摘文都以实际案例场景出发,周末抽空余时间记录每一次mark历程,在不一样的业务实际场景下,针对项目阶段所产生的变化,制定不一样的技术方案。不论多么渺小的技术方案,放在其对应的场景下都有着不一样的意义。实践是检验真理的唯一标准,当真正实操过后参与讨论,或许这会让你有一点新发现,希望对读者在思考上有点不一样的IDea,欢迎文末评论投稿,热衷于分享->每天译点晓知识。

    下文,小编主要以Oracle->MySQL适配为例->常见问答Q-A的方式阐述:

    补充记录:从高版本->低版本,数据导出->导入会出现如下异常

    IMP-00010: not a valid export file, header failed verification

    接着,通过SQL查询当前Oracle版本,

    select * from v$version

    此时,通过Notepad++修改dmp文件中版本信息为,

    再次执行imp命令,

    [oracle@localhost ~]$ imp yd_dev_tmp/user@ip/orcl file=/home/oracle/xxx.dmp ignore=y full=y;

    成功导入数据泵.dmp文件。(其中,可通过su - oracle进入oracle目录,dmp文件可上传到/home/oracle路径)

    上述列举了部分常见函数

    1、COALESCE函数 && NVL函数MySQL:COALESCE()Oracle:COALESCE()、NVL()COALESCE函数在MySQL跟Oracle都适用,NVL函数在Oracle中适用,COALESCE可替换NVL。
    2、STR_TO_DATE函数 && TO_DATE函数MySQL:STR_TO_DATE(field,'yyyy-mm-dd')Oracle:TO_DATE(field,'yyyy-mm-dd hh24:mi:ss')
    3、CONVERT函数 && TO_CHAR函数MySQL:CONVERT(field,CHAR)Oracle:TO_CHAR(field)
    4、DATE_FORMAT函数 && TO_CHAR函数MySQL:DATE_FORMAT(field,'%Y-%m-%d')Oracle:TO_CHAR(field,'yyyy-MM-dd')

    MySQL日期区间计算,

    对应Java中常用ORM映射框架Mybatis中XML写法-SQL,其中MySQL方言可指定databaseId为mysql,Oracle方言可指定databaseId为oracle

    Oracle日期区间计算,

    MySQL与Oracle正则表达式

    Oracle函数DECODE

    DECODE(A.KLX,'01','居民身份证','02','居民户口簿','03','护照','04','军官证','05','驾驶证','06','港澳居民来往内地通行证','07','台湾居民来往内地通行证','其他')

    MySQL函数IF可实现Oracle中DECODE效果

    IF(A.KLX='01','居民身份证',IF(A.KLX='02','居民户口簿',IF(A.KLX='03','护照',IF(A.KLX='04','军官证',IF(A.KLX='05','驾驶证',IF(A.KLX='06','港澳居民来往内地通行证',IF(A.KLX='07','港澳居民来往内地通行证','其他')))))))

    MySQL视图中函数,

    Oracle视图中函数

    基于Mybatis插件的思想,根据当前数据库databaseId,拦截SQL,加入各自数据库的SQL方言函数兼容,无需多套数据库XML中SQL写法。后续考虑在GitHub上开源一款SQL插件,支持插拔式-需要时开启。

    可自动将复杂SQL填充参数打印SQL语句,

    打印其执行计划及耗时,助力于生产环境分析SQL,排查问题,性能优化

    引出这样一个小场景-思考:当你需要作多数据库兼容适配的时候,想提前预估需要改动的一个数量级,这时若需要对数据库层中各个SQL方言编写测试用例,作成功或失败率评估,那么如何拥有一个Java版本,单元测试用例-代码自动生成器,根据类名配置,即可知晓当前类中所有SQL方言的成功或失败率?^_^

    当然,我们也可以在工作之余去看看其他的开发语言,Php,Python,Go......

    「 往期文章 」

    数据库在线实训平台-MySQL篇

    Elasticsearch进阶篇 | 记kibana执行dsl脚本实战过程

    Oracle优化案例 | 从执行计划定位SQL查询问题

    Kafka | 记一次修复Kafka分区所在broker宕机故障-引发当前分区不可用的思考过程

    达梦 | 记一次国产数据库适配的思考过程

    扫描二维码

    获取更多精彩

    扫码关注译点

    展开全文
  • 信创-达梦数据库适配

    千次阅读 2021-12-06 19:03:43
    信创-达梦数据库适配 1. 下载 官网下载地址 注意这里需要根据国产操作系统和CPU平台选择不同的下载安装包。 这里我选择下载 X86。这里我仅仅是适配达梦数据库本身,你们根据情况自动选择下载 2. 安装 安装详细见,...

    信创-达梦数据库适配

    1. 下载

    官网下载地址
    在这里插入图片描述

    注意这里需要根据国产操作系统和CPU平台选择不同的下载安装包。

    这里我选择下载 X86。这里我仅仅是适配达梦数据库本身,你们根据情况自动选择下载

    2. 安装

    安装详细见,安装包中的官网安装手册,里面写的非常详细。

    /dm7_20210303_x86_win_32_ent/dm7_20210303_x86_win_32_ent_7.6.1.92/DM_Install.pdf

    安装完毕大概有如下客户端:

    DM 客户端程序主要使用 Java 编写,具有良好的跨平台特性,可运行在上述操作系

    统上。客户端程序所用的操作系统与服务器所用的操作系统无关。

    DM 客户端程序主要有:

    1.管理工具:Manager(图 1.1)

    2.数据迁移工具:DTS(图 1.2)

    3.控制台工具:Console(图 1.3)

    4.性能监控工具:Monitor(图 1.4)

    5.审计分析工具:Analyzer(图 1.5)

    6.ODBC 3.0 驱动程序:dodbc

    7.JDBC 驱动程序:Dm7JdbcDriver.jar

    8.OLEDB 驱动程序:doledb

    9.C Language Tools:一组 C 语言开发的命令行工具

    3. 数据库迁移

    安装完毕后DM提供了DM数据迁移工具 这个工具能够非常方便的把其他库迁移过来的,如下图:

    在这里插入图片描述

    正式迁移工具步骤:

    1. 打开DM管理工具,新建用户

    在这里插入图片描述

    1. 输入用户名和9位密码,用户创建成功后会创建一个同名的schema(模式),创建完毕,刷新下再模式中即可看到。

      在这里插入图片描述

    2. 最后我们再返回DM数据迁移工具,我们新建一个迁移

      在这里插入图片描述

      这里我是从Oracle库中迁移,需要注意跟我的不同,你们根据情况自行选择要迁移的库,选择完毕点击下一步

    3. 配置下要迁移的数据库连接信息,如果连接失败,可以尝试切换下驱动,进行自定义驱动配置。

      在这里插入图片描述

    4. 没问题点击下一步,配置要迁移的目标数据库,也就是达梦数据库
      在这里插入图片描述

    5. 配置下要迁移的来源库 和 下拉选择 我们新建用户时自动的的同名schema(模式),注意不要勾选创建模式
      在这里插入图片描述

    6. 注意这里选择你要迁移的范围,表、序列、函数等等。在这里插入图片描述

    7. 这一步不是必须的。在这里插入图片描述

    8. 下一步、下一步、完成。等待即可。注意看下最后的迁移日志,是否错误项。

    4. 驱动

    4.1 安装

    4.1.1 Maven仓库

    pom文件中引入对应版本的达梦数据库驱动

    <!-- https://mvnrepository.com/artifact/com.dm/dm-JdbcDriver -->
    <dependency>
        <groupId>com.dm</groupId>
        <artifactId>dm-JdbcDriver</artifactId>
        <version>1.8</version>
    </dependency>
    

    https://mvnrepository.com/artifact/com.dm/dm-JdbcDriver/1.8

    maven公共仓库中目前只有1.8版本,如果安装的不是1.8版本,请使用drivers方式安装,如下。

    4.1.2 安装包drivers

    从官网下载解压后,进入如下目录 /dm7_20210303_x86_win_32_ent_7.6.1.92/source/drivers/jdbc

    如下图:

    在这里插入图片描述

    jdbc/下是对应版本的连接驱动

    dialect 是方言包。由于我是老代码,里面有到Hibernate,所有会用到方言。

    以上jar包上传到自己的私服仓库,然后再工程中pom引入即可

    4.2 jdbc驱动配置

    Java JDBC配置

    driver-class-name: dm.jdbc.driver.DmDriver
    url: jdbc:dm://192.168.1.1:5236/testdemo
    username:SYSDBA
    password:SYSDBA
    

    达梦7JDBC驱动分为Dm7JdbcDriver15Dm7JdbcDriver16Dm7JdbcDriver17,分别对应Jdk1.5Jdk1.6Jdk1.7;

    达梦7提供不同hibernatejdk版本的方言包,用户可根据开发环境选择对应的方言包版本,相关方言包驱动在/drivers/dialect目录下;

    Hibernate.cfg.xml配置要求:
    1、驱动名称

    <property name="connection.driver_class">dm.jdbc.driver.DmDriver</property>
    

    2、方言包名称

    <property name="dialect">org.hibernate.dialect.DmDialect</property>
    

    来源一下路径:

    dm7_20210303_x86_win_32_ent/dm7_20210303_x86_win_32_ent_7.6.1.92/source/drivers/jdbc/Hibernate Dialect&JDBC.txt

    注意: 如果出现 无效的表或视图名 ,严格按照 先 新建用户 再 迁移的步骤。

    关键字适配

    1、 保留字需要加双引号
    保留字:
    ADMIN
    ANY
    ARRAY
    ARRAYLEN
    AUDIT
    BIGDATEDIFF
    BOTH
    BULK
    BYTE
    CALL
    CAST
    CHECK
    CLUSTER
    CLUSTERBTR
    COLLATION
    CONNECT
    CONNECT_BY_ROOT
    CONSTRAINT
    CONTAINS
    CONTEXT
    CORRESPONDING
    CROSS
    CRYPTO
    CUBE
    CURRENT
    CURSOR
    DATEADD
    DATEDIFF
    DATEPART
    DECLARE
    DECODE
    DISKSPACE
    DISTRIBUTED
    DOMAIN
    EQU
    EXCEPT
    EXCHANGE
    EXEC
    EXECUTE
    EXTRACT
    FETCH
    FIRST
    FLOAT
    FOREIGN
    FULL
    FULLY
    FUNCTION
    GOTO
    GRANT
    GROUPING
    HAVING
    IDENTITY
    IMMEDIATE
    INT
    INTERSECT
    INTERVAL
    JSON_QUERY
    JSON_VALUE
    KEEP
    LARGE
    LEADING
    LESS
    LEXER
    LIST
    LNNVL
    LOGIC
    LOGIN
    MINUS
    MOD
    MULTISET
    NATURAL
    NEW
    NEXT
    NOCYCLE
    NOSORT
    OBJECT
    OF
    OFFSET
    ONLINE
    OPTIMIZE
    OUT
    OVER
    OVERLAY
    PENDANT
    PERCENT
    PIPE
    PIVOT
    PRIOR
    PRIVILEGES
    PROCEDURE
    REF
    REFERENCE
    REFERENCES
    REFERENCING
    REPEAT
    REPLICATE
    RESIZE
    RETURN
    RETURNING
    REVERSE
    REVOKE
    RIGHT
    ROLLBACK
    ROLLUP
    ROW
    ROWS
    SAMPLE
    SAVEPOINT
    SCHEMA
    SECTION
    SEED
    SETS
    SIZEOF
    SOME
    STATIC
    SUBPARTITION
    SYNONYM
    TIMESTAMPADD
    TIMESTAMPDIFF
    TOP
    TRAILING
    TRIGGER
    TYPEOF
    UNIQUE
    UNPIVOT
    USER
    USING
    VERIFY
    VERSIONS
    VIRTUAL
    WHENEVER
    WITHOUT
    XMLPARSE
    XMLTABLE

    展开全文
  • 一个应用服务可能会用到多种数据库,可以采用多版本方式去管理运作,实际当中,同一套数据库版本可能又会适配不同的客户需求, 这时候再增加版本去维护会比较复杂, 不利于维护,有没办法根据配置去采用不同的数据库...

    1. 背景说明

    一个应用服务可能会用到多种数据库,可以采用多版本方式去管理运作,实际当中,同一套数据库版本可能又会适配不同的客户需求, 这时候再增加版本去维护会比较复杂, 不利于维护,有没办法根据配置去采用不同的数据库, 只要针对客户一个维度去维护版本即可。

    2. 实现机制

    要能够适配不同数据库, 数据层需定义统一的接口,由具体的数据库组件做实现,对上游调用Service来讲是透明的。

    设计流程:
    在这里插入图片描述
    工程结构:
    在这里插入图片描述

    技术上通过Spring Boot 自动化装配机制去实现不同数据库的适配, 由条件化配置去决定采用哪种数据源, 不配置的数据源不进行加载, 减少资源占用。

    3. 代码实现

    这里以适配TDEngine数据为例,提供一个天气的操作接口, 演示如何封装实现。

    1. 先定义统一数据源层接口在这里插入图片描述
      定义数据层接口 IWeatherDao 以及实体 Weather也放置工程里面。

    2. 创建TDEngine的数据适配工程
      在这里插入图片描述
      这里面定义了底层DAO数据层的操作接口IWeatherMapper,里面只提供增删改操作; 但不同数据的适配可能会有差异,比如属性类型的转换, 语法差异, 这就需要再增加一个适配层adapter, 通过WeatherDaoAdapter进行适配:
      在这里插入图片描述
      这里引入了底层IWeatherMapper接口,对于TDEngine数据库的特性, 在Adapter层进行适配, 由于时序数据库必须要记录时间, 增加了时间的处理。

    3. 自动化配置机制

      基于Spring Boot的自动化装配机制, 在resources资源目录下面创建META-INF文件夹,定义spring.factories文件, 指向自动装配类。 在这里插入图片描述
      通过@SpringBootApplication中的@EnableAutoConfiguration注解会自动扫描装载, 不需要再配置@ComponentScan扫描。

    4. 数据源自动装配实现

      代码:

      @Configuration
      @ComponentScan("com.mirson.unifydao.dp.tdengine")
      @MapperScan(basePackages = "com.mirson.unifydao.dp.tdengine.dao", sqlSessionTemplateRef = "sqlSessionTemplate", sqlSessionFactoryRef = "sql SessionFactory")
      @ConditionalOnProperty(name = "spring.datasource.driverClassNane", havingValue = "com.taos data.jdbc.TSDBDriver")
      public class AutoTdengineConfiguration {
      
      
          /**
           * sql session工厂配置
           *
           * @param dataSource
           * @return
           * @throws Exception
           */
          @Bean
          public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
              SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
              bean.setDataSource(dataSource);
              bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:com/mir son/unify dao/dp/td engine/dao/mapper/*Mapper.xml");
              return bean.getObject();
          }
      
          @Bean
          @ConfigurationProperties(prefix = "spring.datasource")
          public DruidDataSource druidDataSource() {
              return new DruidDataSource();
          }
      
          /**
           * DataSource事务管理器
           *
           * @param dataSource
           * @return
           */
          @Bean
          public DataSourceTransactionManager dataSourceTransactionManager(DataSource dataSource) {
              return new DataSourceTransactionManager(dataSource);
          }
      
          /**
           * Mybatis与Spring的SQLSESSION管理器
           *
           * @param sqlSessionFactory
           * @return
           * @throws Exception
           */
          @Bean
          public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) throws Exception {
              return new SqlSessionTemplate(sqlSessionFactory);
          }
      }
      
      

      通过@ConditionalOnProperty条件化注解控制, 决定是否初始化数据源配置, 如果不符合条件, 不会加载占用额外开销。

      @MapperScan要指定dao的路径,否则不能有效初始化数据源,@ComponentScan扫描路径也要指定,因为需要加载adapter数据适配层。

    5. POM依赖配置

      加入spring boot的自动装载依赖, 以及数据源驱动相关依赖。
      在这里插入图片描述

    4. 应用层使用

    这里直接创建一个web应用服务
    在这里插入图片描述
    入口为Controller层, 调用Service层, 然后调用统一接口层:
    在这里插入图片描述
    POM依赖:
    在这里插入图片描述
    POM依赖, 引入统一数据层接口, 根据需要引入对应封装的数据源组件即可。

    5. 总结

    基于Spring Boot 自动化机制实现的多数据源配置, 对于研发人员来讲, 只需维护一个版本即可,即便某个数据源组件升级,也不会影响其他数据源的使用。

    对于应用方来讲,不用关心具体是采用哪种数据源, 只需调用统一数据层接口即可,由底层做具体适配实现,能够做到灵活配置与扩展。即便引入了多个数据源组件,会根据系统配置,初始化某一个数据源,其他数据源不会初始化,也不会由此造成资源开销或冲突。

    展开全文
  • 首先我简单再描述下在我们的自研ESB版本里面已经实现的数据库适配能力,我们将数据库适配分为查询适配和导入适配,对于数据库适配仍然是首先建立服务规范和服务契约,然后采用从顶朝下的方式,即先选择一个服务规范...
  • 数据库链接配置 均已springboot配置文件说明,内容基本一致 4.3.x 版本 spring.datasource.driver-class-name=org.postgresql.Driver spring.datasource.url=jdbc:postgresql://192.168.***.***:5866/dbname spring....
  • 达梦数据库一般是国产化适配选择的一种数据库,最近做这方面是的适配,感觉是基于oracle所开发的一种数据库,对mysql兼容性并不强,现在列一下需要注意的内容。 1.ORDER BY项不在DISTINCT查询项中 这种问题比较常见...
  • 数据库链接 ...spring.datasource.url=jdbc:oscar://192.168.***.***:2004/dbname spring.datasource.username=test spring.datasource.password=test ...数据库适配一般会出现的问题原因 字段名与数据
  • 神通数据库适配 hibernate

    千次阅读 2022-01-05 15:32:31
    国产化适配文档(神通) 环境:hibernate、spring、activiti等 maven 依赖 springboot集成神通数据库,但是maven库中是没有的,所以需要自己引入maven库中 # oscarJDBC16 mvn install:install-file -DgroupId=...
  • 达梦数据库适配问题

    2021-06-03 07:43:56
    达梦数据库适配采坑记 达梦数据库适配采坑记 问题一 问题描述: 字段内容超长错误: 问题详解: 达梦数据库和Oracle同样,对字段的长度有严格的规范,当然Mysql也是有的,但是默认是不启用的,哪怕超出了,也会自动扩...
  • 六、数据库适配

    2015-07-19 17:49:00
    1.概述 代码生成器需要解决的一个难题就是如何适配多种数据库。...本文的核心是数据库适配不是ORM,所以不会像ORM框架那样设计的很复杂,也不涉及到对象关系映射。 2.设计思路 在没有用过ORM框架之前相信DB...
  • 数据库链接 以springBoot的为例,内容类似如下: spring.datasource.driver-class-name=dm.jdbc.driver.DmDriver spring.datasource.url=jdbc:dm://192.168.*.:5236/dbname spring.datasource.username=TEST spring....
  • 最近公司接到需求,项目要进行国产化适配数据库是人大金仓中间件是TongWeb浏览器是uos,项目所用到的技术是LayuiAdmin、ssm、mybatis-plus、springboot等,数据源切换到人大金仓数据库之后(用的是KingBaseEs8 R3...
  • 对activiti二次开发适配达梦数据库,全网最全教程详解,文本内容详解: 需要对activiti进行二次开发,增加对达梦数据库适配信息
  • 适配使用的是OushuDB 4.0版本数据库和飞腾公司于刚发布的FT-2000+/64CPU。这款CPU集成了64个FTC662处理器内核,16nm工艺,主频2.0-2.3GHz,主要应用于高性能服务器领域,性能与Intel Xeon E5-2695V3系列相当。在ARM ...
  • 简介:达梦数据库适配 SpringBoot+DM8+HiKari+MyBatis3.4.6+tk.MyBatis+PageHelper
  • 人大金仓数据库链接配置 这里以springBoot配置文件演示: spring.datasource.driver-class-name=com.kingbase8.Driver spring.datasource.url=jdbc:kingbase8://192.168.***.***:54321/数据库名 spring.datasource....
  • DM8系统管理员手册.pdf,
  • 主流数据库介绍 Relational DBMS 基于关系模型的数据库,关系模型折射现实世界中的实体关系,将现实世界中各种实体及实体之间的关系通过关系模型表达出来,最大特点就是事务的一致性。 Key-value Stores 一种非关系...
  • 修改分布式事务框架TX-LCN源码,适配PostgreSQL数据库。压缩包中有服务端和客户端,服务端可以直接用,客户端需要把config->tx-lcn包下的代码考到自己的客户端,然后就可以使用了。
  • 达梦数据库兼容LocalDateTime问题解决办法导入 问题 如果使用的是mybatis... * 日期时间处理,适配达梦数据库 */ @MappedTypes(LocalDateTime.class) @MappedJdbcTypes(JdbcType.TIMESTAMP) public class LocalDateT
  • hive元数据库与达梦数据库
  • DM8达梦数据库:与SqlServer数据库适配varchar(max) SqlServer 数据库中,TA表A字段类型为:varchar(max) 使用DMDTS迁移到达梦数据库后为 TEXT类型, 导致原应用系统无法读出该值内容: 显示如下: A=dm.jdbc....
  • 1.nacos服务,适配postgresql数据库。 2.提供nacos,postgresql的创建nacos数据库脚本。 3.nacos/conf/nacos-pg.sql数据库脚本文件。 4.nacos版本1.4.2。
  • 最近项目需要对接达梦数据库,原有的项目的数据管理采用flyway进行管理,不过目前flyway不支持达梦数据库,查看原有的flyway代码结构哦如下: 在这里新增一个支持达梦数据库的包,dm: DMConnection: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,775
精华内容 26,710
关键字:

数据库适配