Dbeaver做数据迁移的详细过程记录

 更新时间:2023年05月11日 09:33:32   作者:巴拿巴与保罗  
DBeaver是一款跨平台的通用数据库开源管理工具,支持 MySQL,PostgreSQL,Oracle,DB2,MSSQL,Sybase,Mimer,HSQLDB,Derby以及其他兼容JDBC的数据库,下面这篇文章主要给大家介绍了关于Dbeaver做数据迁移的详细过程,需要的朋友可以参考下

1、选择源头数据库的表、鼠标右击、选择导出数据

2、在数据转化弹框中,双击 ‘数据库,数据表’ 那一栏

3、选择目标数据库,调整字段类型映射关系

4、调整字段的映射关系

        目前遇到的字段类型,只有 int,bigint   转  number  类型

        再就是VARCHAR2 长度不够的,加长度,超过4000的就改为clob类型

5、勾选‘打开新连接’,‘选择行计数’

6、点击开始

7、注意事项

        A、如果是Oracle转Oracle,同类型的数据库迁移,就不用管字段类型的映射关系了

        B、如果字段的映射不对就会报错,或者表创建了,但数据没有进去

        C、遇到的字段类型,只有 int,bigint   转  number  类型

        D、有些字段迁移后会变成小写,需要后面手动调整

                        可以用SQL查询出所有的小写字段

select column_name,table_name from user_tab_columns where regexp_like(column_name,'[a-z]'); 

        E、VARCHAR2(200)  类型可能存在 实际长度大于限制长度的问题,会报错出来

                超过4000的长度,可以改为  clob 类型

        F、VARCHAR2 类型如果没有限制长度,会报错:“缺少括号”,加就可以了 VARCHAR2(200) 

        G、数据迁移后,对比两个数据库表的数量,可以使用SQL查询数量

        H、表迁移后,发现索引都没有迁移

                导致登录的时候报错: 

                        java.lang.IllegalArgumentException: obj is null

                处理方式:迁移索引后,问题就自动好了

8、处理方式总结

        A、导出时,可以批量的处理,比如一次处理10个表,遇到报错就停止执行,这样后面再处理报错的表就可以了,其他表会都迁移了。报错的表需要删除了,从新迁移。删除表后,需要刷新数据库。

        B、批量迁移索引

                使用SQL 查询出SQL server 所有创建索引的语句。下面是SQL

WITH indexInfo as (
    SELECT SCHEMA_NAME(t.schema_id) [schema_name],t.name as [table_name],t1.name as [index_name]
    ,t1.type,t1.type_desc,t1.is_unique,t1.is_primary_key,t1.is_unique_constraint,t1.has_filter,t1.filter_definition
    ,STUFF((SELECT ','+t4.name FROM sys.sysindexkeys t2 
        inner join sys.index_columns  t3 ON t2.id=t3.object_id and t2.indid=t3.index_id and t2.colid=t3.column_id
        inner join sys.syscolumns t4 ON t2.id=t4.id and t2.colid=t4.colid
        WHERE t2.id=t1.object_id and t1.index_id=t2.indid  and t2.keyno <> 0 ORDER BY t3.key_ordinal FOR XML PATH('')),1,1,'') AS index_cols
    ,STUFF((SELECT ','+t4.name FROM sys.sysindexkeys t2 
        inner join sys.index_columns  t3 ON t2.id=t3.object_id and t2.indid=t3.index_id and t2.colid=t3.column_id
        inner join sys.syscolumns t4 ON t2.id=t4.id and t2.colid=t4.colid
        WHERE t2.id=t1.object_id and t1.index_id=t2.indid  and t2.keyno = 0 ORDER BY t3.key_ordinal FOR XML PATH('')),1,1,'')  AS include_cols
    FROM sys.tables as t
    inner join sys.indexes as t1 on (t1.index_id > 0 and t1.is_hypothetical = 0) and (t1.object_id=t.object_id)
    WHERE t1.type in(1,2)
), indexInfo2 AS (
SELECT * ,(CASE 
    WHEN is_primary_key = 1 
        THEN 'alter table '+[schema_name]+'.'+[table_name]+' add constraint '+[index_name]+' primary key '+(CASE WHEN [type]=1 THEN 'clustered' ELSE 'nonclustered' END)+'('+index_cols+');'
    WHEN is_unique = 1 AND is_unique_constraint = 1 
        THEN 'alter table '+[schema_name]+'.'+[table_name]+' add constraint '+[index_name]+' unique '+(CASE WHEN [type]=1 THEN 'clustered' ELSE 'nonclustered' END)+'('+index_cols+');'
    WHEN is_unique = 1 AND (is_primary_key = 0 OR is_unique_constraint = 0)
        THEN 'create unique '+(CASE WHEN [type]=1 THEN 'clustered' ELSE 'nonclustered' END)+' index '+[index_name]+'  on '+[schema_name]+'.'+[table_name]+'('+index_cols+');'
    ELSE 'create '+(CASE WHEN [type]=1 THEN 'clustered' ELSE 'nonclustered' END)+' index '+[index_name]+' on '+[schema_name]+'.'+[table_name]+'('+index_cols+') ;'
    END) script
FROM indexInfo
) SELECT [schema_name],[table_name],[index_name],script
+(CASE WHEN include_cols IS NOT NULL THEN ' include('+include_cols+')' ELSE '' END)
+(CASE WHEN has_filter = 1THEN ' where '+filter_definition ELSE '' END)
FROM indexInfo2
ORDER BY [schema_name],[table_name],[type],[index_name],is_primary_key DESC,is_unique_constraint DESC,is_unique DESC

        C、批量处理语句后(两种数库的DDL语句有所差异),可以批量执行。

       可以全部一起执行,或者一次执行50条语句,遇到报错就停止,报错前的语句都执行了,就可以删除了。处理报错后,再执行报错后面的语句。

        有些不好处理的报错,可以先不管,后面在手动对表建索引就可以了

批量执行DDL语句的方式

        新开个窗口放DDL语句,SQL编辑器 --> 执行SQL脚本

注意事项:

        SQL SERVE 迁移到 ORACLE  后,在 ‘数据库表管理’ 页面做表创建的时候,DDL语句会报错,因为字段都是小写,且都加了引号,导致Oracle不能识别。需要删除  D:\03_workspace\01_fenghua\02_server\fenghua-tmp-server\src\main\java\xyz\elidom\dbist\ddl\impl\DdlJdbc.java   文件,删除后重启后端,就可以了,

后面生成的DDL语句,字段就没引号了,Oracle就可以正常创建表了。

总结

到此这篇关于Dbeaver做数据迁移的文章就介绍到这了,更多相关Dbeaver数据迁移内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL与Oracle 差异比较之四条件循环语句

    MySQL与Oracle 差异比较之四条件循环语句

    这篇文章主要介绍了MySQL与Oracle 差异比较之四条件循环语句,需要的朋友可以参考下
    2017-04-04
  • SQL语句学习

    SQL语句学习

    丁丁现在在做数据库,可是上学时没有好好的学习SQL的语句,现在每天晚上还要问我,可是我又有好多自己的事情要做,不能天天给她讲(^_^其实我的水品也很一般了),所以先把我以前学习sql语句所记录的一些东东留在这里
    2014-06-06
  • 使用DataGrip的详细教程

    使用DataGrip的详细教程

    这篇文章主要介绍了使用DataGrip的步骤详解,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-09-09
  • idea中连接数据库时出现SSL错误的问题

    idea中连接数据库时出现SSL错误的问题

    这篇文章主要介绍了idea中连接数据库是出现SSL错误的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • 简单聊一聊SQL注入及防止SQL注入

    简单聊一聊SQL注入及防止SQL注入

    众所周知SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,下面这篇文章主要给大家介绍了关于SQL注入及防止SQL注入的相关资料,需要的朋友可以参考下
    2022-03-03
  • SQL注入的四种防御方法总结

    SQL注入的四种防御方法总结

    SQL Injection是一种常见的Web安全漏洞,主要形成的原因是在数据交互中,下面这篇文章主要给大家介绍了关于SQL注入的四种防御方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • SunlightDB 2017新型区块链数据库

    SunlightDB 2017新型区块链数据库

    这篇文章主要为大家详细介绍了SunlightDB 2017新型区块链数据库的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 数据库之Hive概论和架构和基本操作

    数据库之Hive概论和架构和基本操作

    Hive是一个构建在Hadoop上的数据仓库框架,最初,Hive是由Facebook开发,后台移交由Apache软件基金会开发,并做为一个Apache开源项目,感兴趣的同学可以参考阅读
    2023-04-04
  • DBeaver连接GBase数据库的简单步骤记录

    DBeaver连接GBase数据库的简单步骤记录

    DBeaver数据库连接工具,是我用了这么久最好用的一个数据库连接工具,拥有的优点,支持的数据库多、快捷键很赞、导入导出数据非常方便,下面这篇文章主要给大家介绍了关于DBeaver连接GBase数据库的简单步骤,需要的朋友可以参考下
    2024-03-03
  • 关于Rsa Public Key not Find的问题及解决

    关于Rsa Public Key not Find的问题及解决

    这篇文章主要介绍了关于Rsa Public Key not Find的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07

最新评论