mysql数据迁移到oracle oracle数据库常用命令

一.导言这里把表数据从MySQL数据库迁移到Oracle数据库的全过程记录一次,使用Navicat,版本12.0.11。操作环境和使用的工具:mysql5.7oracle18cwindowsNavicat12.0.11idea第二,开始移植。点击工具->数据传输左边的源标识mysql数据库,右边的目标标识要迁移到的oracle数据库。在...

一.导言

这里把表数据从MySQL数据库迁移到Oracle数据库的全过程记录一次,使用Navicat,版本12.0.11。

操作环境和使用的工具:

mysql5.7oracle18cwindowsNavicat12.0.11idea

第二,开始移植。

点击工具->数据传输

左边的源标识mysql数据库,右边的目标标识要迁移到的oracle数据库。

在高级选项中检查大写字母。

温馨提示:
如果字段名和表名都是小写的,oracle操作数据时会出现找不到表或视图的错误。解决方法是添加双引号来查询数据。在这种情况下,我们必须在通过程序操作数据时加上双引号,这大大增加了迁移数据库后的工作量。所以这里需要检查转换后的对象名是否大写,同时转换过程中的每一个字是否!!
【例如:用户->“用户”数字->“编号”desc->;“desc ”级别->;“级别”】

选择需要移植的表。这里的班车我都选了~

然后等待数据传输完成。

最后,如果遇到以下情况,可以暂时忽略,直接关闭就好~

然后检查oracle,如下图,数据导入成功。

温馨提示:传输过程中有些表可能不成功,手动引导即可~ ~

三。问题

1.求解oracle自增主键

设置oracle自增主键的几种方法:

序列 + 触发器序列 + Hibernate配置 (注:此方式仅适用于通过Hibernate连接数据库的方式)oracle12c版本之后新增 自增列语法 GENERATED BY DEFAULT AS IDENTITY

解决方案:

在ddl中添加自增主键命令创建表sql,重新创建一次表结构,然后单独从oracle导入数据。由于oracle的版本是18c,所以在创建表时可以添加自增主键语法!

①备份数据-->:数据泵模式

数据泵-->:泵数据导出

② idea中如下查看ddl②检查idea中的ddl,如下所示

然后将ddl***到txt文本文件并保存。

③ ddl文件内容替代自增主键工具类

温馨提示:
这里需要将边肖数据库中的时间类型改为时间戳类型。这个问题可以用idea ~的替换功能直接修改,其他修改可以根据个人实际情况日期。

public class MySQLToOracleTest { public static void ***in(String[] args) { try { replaceDDLContent("D:\Users\zq\Desktop\oracle测试\oracle_ddl.txt"); // TODO 这里修改为自己的ddl文件存放位置 } catch (IOException e) { e.printStackTrace(); } } /** * 替换文本文件中的 自增主键ID * * @param path * @throws IOException */ public static void replaceDDLContent(String path) throws IOException { // 原有的内容 String srcStr = "not null"; // 要替换的内容 String replaceStr = "GENERATED BY DEFAULT AS IDENTITY"; // 读 File file = new File(path); FileReader in = new FileReader(file); BufferedReader bufIn = new BufferedReader(in); // 内存流, 作为临时流 CharArrayWriter tempStream = new CharArrayWriter(); // 替换 String line = null; // 需要替换的行 Map<Integer, Object> lineMap = new HashMap<>(104); //定义顺序变量 int count = 0; while ((line = bufIn.readLine()) != null) { count++; if (line.contains("create table")) { lineMap.put(count + 2, line); } //遍历***p中的键 for (Integer key : lineMap.keySet()) { if (count == key && !line.contains("NVARCHAR2")) { // TODO 在这里这是自增主键哦 line = line.replaceAll(srcStr, replaceStr); lineMap.put(count, line); } } // 将该行写入内存 tempStream.write(line); // 添加换行符 tempStream.append(System.getProperty("line.separator")); } // 关闭 输入流 bufIn.close(); // 将内存中的流 写入 文件 FileWriter out = new FileWriter(file); tempStream.writeTo(out); out.close(); System.out.println("文件存放位置:" + path); System.out.println(lineMap); }}

④将替换的ddl***到idea中的新控制台,运行并创建表格。

选择所有ddl,然后点击左上角的Run创建表【注意:这里需要先清空空这个库下的所有表,所以步骤①,你要先备份从mysql迁移到oracle的表数据,别忘了!!】

等待所有表成功创建,如下所示:

⑤导入备份数据

数据泵-->:数据泵导入

⑥ 最后查看数据导入成功!⑥最后,检查数据是否导入成功!

此时数据可用,自增主键可用,但存在一个问题,插入数据时,主键的自增ID从1开始。如果表中没有数据,就ok了。问题是如果表中有数据,主键ID会重复!!!

2.解决自增主键ID无法从表数据ID的最大值开始增加值的问题。

思路:拼接修改表自增ID开始的sql!

SELECT 'SELECT ''ALTER TABLE SEWAGE_GY.' || t1.table_name || ' MODIFY(' || t1.Column_Name || ' Generated as Identity (START WITH '' || MAX( ' || t1.Column_Name || '+1 ) || ''));'' FROM ' || t1.table_name || ' UNION ALL' AS FINAL_SQLFROM cols t1LEFT JOIN user_col_comments t2 ON t1.Table_name = t2.Table_name AND t1.Column_Name = t2.Column_NameLEFT JOIN user_tab_comments t3 ON t1.Table_name = t3.Table_nameWHERE NOT EXISTS ( SELECT t4.Object_Name FROM User_objects t4 WHERE t4.Object_Type = 'TABLE' AND t4.TEMPORARY = 'Y' AND t4.Object_Name = t1.Table_Name ) AND t1.IDENTITY_COLUMN = 'YES'ORDER BY t1.Table_Name, t1.Column_ID

命令分辨率:

# 设置表主键ID从多少开始自增 ex:下面标识从10000开始自增ALTER TABLE 数据库名.表名 MODIFY(主键ID Generated as Identity (START WITH 10000));# 查询该库下所有表名SELECT table_name FROM user_tables;# 查询出指定表的主键ID字段名SELECT t1.table_name,t1.Column_NameFROM cols t1 LEFT JOIN user_col_comments t2 ON t1.Table_name = t2.Table_name AND t1.Column_Name = t2.Column_Name LEFT JOIN user_tab_comments t3 ON t1.Table_name = t3.Table_name WHERE NOT EXISTS ( SELECT t4.Object_Name FROM User_objects t4 WHERE t4.Object_Type = 'TABLE' AND t4.TEMPORARY = 'Y' AND t4.Object_Name = t1.Table_Name ) AND t1.table_name = '表名' AND t1.IDENTITY_COLUMN = 'YES' ORDER BY t1.Table_Name, t1.Column_ID# 查询该库下所有表名+表主键字段名SELECT t1.table_name,t1.Column_NameFROM cols t1 LEFT JOIN user_col_comments t2 ON t1.Table_name = t2.Table_name AND t1.Column_Name = t2.Column_Name LEFT JOIN user_tab_comments t3 ON t1.Table_name = t3.Table_name WHERE NOT EXISTS ( SELECT t4.Object_Name FROM User_objects t4 WHERE t4.Object_Type = 'TABLE' AND t4.TEMPORARY = 'Y' AND t4.Object_Name = t1.Table_Name ) AND t1.IDENTITY_COLUMN = 'YES' ORDER BY t1.Table_Name, t1.Column_ID

***到新的控制台后,注意删除最后一个UNION ALL再运行一次!!!

主键ID最终自动递增从表数据的最大值开始!

3.程序中的sql语句转换

这里结合个人语言的实际操作…

本文来自热恋少女投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/496261.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 04-09
下一篇 04-09

相关推荐

  • linux连接oracle数据库命令 shell连接oracle执行sql脚本

    使用静默安装,您需要先配置所有安装参数,然后直接执行安装过程,而不是手动选择配置。这一系列文章是分享作者在刚接触和学习Linux时的实践记录。内容主要包括Linux的入门、Web程序的一些理论概念,以及mysql数据库的简单安装和部署。希望能帮到一些初学者,少走弯路。注意:

    2023-07-22 23:25:01
    357 0
  • oracle数据源配置 oracle创建数据库

    Oracle 数据库1. Oracle数据库:Oracle公司成立于1977年,最早开发数据库的厂商,经过近40年的发展,oracle公司目前已经是世界数据库以及相关领域领导者。Oracle数据库系统是由Oracle公司(甲骨文)提供的一款关系数据库管理系统。目前主流的版本是Oracle9i,Oracle10g,Orac

    2023-07-20 23:23:01
    977 0
  • oracle迁移到mysql方案 oracle转mysql数据移植

    本文目录:一、OGG概述(一)OGG逻辑架构二、迁移方案(一)环境信息(二)表结构迁移(三)数据迁移1.源端OGG配置(1)Oracle数据库配置(2)Oracle数据库OGG用户创建(3)源端OGG 管理进程(MGR)配置(4)源端OGG 表级补全日志(trandata)配置(5)源端OGG 抽取进程(extract)

    2023-07-14 16:41:01
    116 0
  • plsql怎么连接oracle数据库 连接oracle数据库的正确方式

    前言:Oracle数据库很难安装,但是如何连接?直接在服务器里用自己的命令行操作太繁琐了,所以PL/SQL Developer client的好处显而易见。今天我就和大家聊聊客户端的具体配置方法,有助于大家使用oracle数据库。一、必要条件1.您必须确保要连接的oracle数据库监控服务已打开,即

    2023-07-09 07:00:01
    847 0

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信