`
happyqing
  • 浏览: 3183620 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MySQL数据库移植到Oracle(迁移),批量重建序列

阅读更多

 

Oracle SQL Developer 3.2

可以使用Oracle SQL Developer进行迁移,感觉这个工具比较专业。

他会把表结构创建好,并导入数据,数据类型自动转换,也可手动指定规则。

MySQL的自增长列,迁移到Oracle后,会建一个序列(sequence),并建一个触发器,模拟自增长。

(后期不想用触发器可以把他禁用或者删除)

(另外还可以选择表--复制到Oracle)

 

Oracle SQL Developer连接MySQL

http://happyqing.iteye.com/blog/2159705

 

移植时会按MySQL数据库的名字建个Oracle用户,移植到这个用户下,但这个用户所用的表空间是默认的,

我一般是先把MySQL数据库转储成需要的名字,在Oracle建好用户,指定好相应的表空间,再移植

 

创建一个MySQL连接

打开连接,选择一个数据库,右键--移植到Oracle


 

此处连接的用户需要Connect,Resource,Create View权限


 

名称输入一个名字

选个输出目录,里边会有日志和执行过的sql文件(移植后需要分析)









 

 

 

移植成功后,在Oracle SQL Developer里查看分析,看有什么问题,

还要分析生成的日志 

 

 

一个MySQL文件转储为SQL文件1M多,移植需要10分钟左右。

 

有一些中间表可能是移植时建的,删除

drop table MD_ADDITIONAL_PROPERTIES;
drop table MD_APPLICATIONFILES;
drop table MD_APPLICATIONS;
drop table MD_CATALOGS;
drop table MD_COLUMNS;
drop table MD_CONNECTIONS;
drop table MD_CONSTRAINTS;
drop table MD_CONSTRAINT_DETAILS;
drop table MD_DERIVATIVES;
drop table MD_FILE_ARTIFACTS;
drop table MD_GROUPS;
drop table MD_GROUP_MEMBERS;
drop table MD_GROUP_PRIVILEGES;
drop table MD_INDEXES;
drop table MD_INDEX_DETAILS;
drop table MD_MIGR_DEPENDENCY;
drop table MD_MIGR_PARAMETER;
drop table MD_MIGR_WEAKDEP;
drop table MD_NUMROW$SOURCE;
drop table MD_NUMROW$TARGET;
drop table MD_OTHER_OBJECTS;
drop table MD_PACKAGES;
drop table MD_PARTITIONS;
drop table MD_PRIVILEGES;
drop table MD_PROJECTS;
drop table MD_REGISTRY;
drop table MD_REPOVERSIONS;
drop table MD_SCHEMAS;
drop table MD_SEQUENCES;
drop table MD_STORED_PROGRAMS;
drop table MD_SYNONYMS;
drop table MD_TABLES;
drop table MD_TABLESPACES;
drop table MD_TRIGGERS;
drop table MD_USERS;
drop table MD_USER_DEFINED_DATA_TYPES;
drop table MD_USER_PRIVILEGES;
drop table MD_VIEWS;
drop table MIGRATION_RESERVED_WORDS;
drop table MIGRLOG;
drop table MIGR_DATATYPE_TRANSFORM_MAP;
drop table MIGR_DATATYPE_TRANSFORM_RULE;
drop table MIGR_GENERATION_ORDER;
drop table STAGE_MIGRLOG;

--清空回收站
--purge recyclebin;

drop SEQUENCE DBOBJECTID_SEQUENCE

 

问题

1.移植工具建的触发器,可能会影响效率,可以禁用或删除

2移植工具建的序列名是 表名+主键列名+SEQ

由于Oracle的命名规范是30个字符,我觉得以上命名方法太长了,好多都被截断了,

我想采用 表名+_S的命名方式。

3.我不想用触发器,让序列的起始值"等于"表中的ID的最大值

 

后续操作

1.禁用所有触发器

2.删掉所有序列

3.重建序列

 

批量重建序列

我采用查询出结果集,利用Excel拼接SQL的方式,我觉得这个比写个存储过程简单(明了)

 

一、查询表名,主键名,主键数据类型

查询出表名,主键名,就可以拼接查询表的主键列的最大值的SQL了

由于是从mysql导过来的,主键都是1个列,自增长的列都是数字型,varchar型的不用建序列

--查询表名,主键名,主键数据类型
select cu.*,
(select data_type from user_tab_columns c where c.TABLE_NAME=cu.TABLE_NAME and c.COLUMN_NAME = cu.COLUMN_NAME ) as data_type
 from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'P' 
 --and au.table_name = 'TABLE_NAME'
order by data_type;
--order by cu.table_name;

   用PL/SQL执行,结果集 全选 与标题一起复制到excel

 

相关:

--改触发器的名字
rename ADVISORY_ADVISORY_ID_SEQ to ADVISORY_SEQ

--查询用户的序列
select * from user_sequences order by sequence_name;

--查询用户的表
select * from user_tables order by table_name;

select * from user_cons_columns
select * from user_constraints
select * from user_tab_columns 

 

二、查询表的主键列的最大值

此处的COLUMN_NAME,TABLE_NAME来自于上一个查询结果

(最大值为什么要加1,是为了查询序列的下一个值正好是最大值的下一个值)

复制到UE,把制表符(不是空格)换成空

select nvl(max( TABLE1_ID),0)+1 as MAX_ID from TABLE1 union all
select nvl(max( TABLE2_ID),0)+1 as MAX_ID from TABLE2 ;

 

三、新建序列

此处的MAX_ID来自于上一个查询结果

复制到UE,把制表符(不是空格)换成空

create sequence TABLE1_S minvalue 1 nomaxvalue start with 1 increment by 1 cache 20;

create sequence TABLE2_S minvalue 1 nomaxvalue start with 27 increment by 1 cache 20;

 

参考:

MYSQL数据库迁移到ORACLE数据库

http://blog.csdn.net/wwwzys/article/details/8813503

 

  • 大小: 15.4 KB
  • 大小: 61.4 KB
  • 大小: 54.2 KB
  • 大小: 55.3 KB
  • 大小: 56.5 KB
  • 大小: 56.3 KB
  • 大小: 63.6 KB
  • 大小: 57.4 KB
  • 大小: 56.9 KB
  • 大小: 57.1 KB
  • 大小: 7.2 KB
  • 大小: 9.5 KB
  • 大小: 2.6 KB
  • 大小: 3.9 KB
分享到:
评论

相关推荐

    mysql 数据移植到oracle

    在IT行业中,数据库迁移是一项常见的任务,特别是在不同的数据库系统之间,比如从MySQL迁移到Oracle。这个过程涉及到数据的完整性和一致性,以及业务连续性。以下是对这个主题的详细阐述: 一、为什么要进行MySQL到...

    oracle到mysql的迁移

    【Oracle到MySQL迁移】在IT行业中,数据库迁移是一项常见的任务,尤其当业务需求与现有数据库系统不匹配时。本文主要探讨了将Oracle数据库环境迁移到MySQL时遇到的问题及解决策略。 1. **大小写敏感性差异**:...

    Mysql迁移到Oracle[整理].pdf

    MySQL到Oracle的数据迁移是一项常见的数据库操作,尤其在企业系统升级或整合时。MySQL是一款开源、免费的关系型数据库管理系统,而Oracle则是一款功能强大的商业数据库系统,提供更高级别的性能、安全性和可扩展性。...

    oracle_mysql系统移植方案[参照].pdf

    在软件开发中,数据库系统的迁移是一项复杂的工作,尤其是在从Oracle这样的高级数据库系统迁移到MySQL时。Oracle MySQL系统移植方案主要关注数据类型、SQL语法和特定功能的转换。 1. **数据类型差异**: - **数值...

    Oracle向MySQL_迁移相关事项

    Oracle向MySQL迁移是一个复杂的过程,涉及到多个层面的转换和调整。以下是对迁移过程中的主要知识要点的详细说明: 一、表的移植 在迁移过程中,表的结构和数据是最基础的部分。Oracle的表可以被大多数MySQL的图形...

    oracle_mysql系统移植方案归类.pdf

    在将Oracle数据库系统移植到MySQL的过程中,主要涉及以下几个关键知识点: 1. **数据类型差异**: Oracle和MySQL的数据类型存在显著差异,这直接影响到数据迁移的顺利进行。例如: - 数值类型:Oracle的`NUMBER`...

    Oracle Database 11g & MySQL 5.6开发手册 中文版.

    您可以学会如何迁移数据库、移植SQL代码、使用Oracle和MySQL数据库以及配置高效率的查询。在这本内容广泛的书籍中,还包括了安全、监控和调试方面的技巧。 《Oracle Database 11g & MySQL 5.6开发手册》特色 理解...

    数据从MySQL迁移到Oracle 需要注意什么

    在进行数据库迁移,无论是从MySQL迁移到Oracle,还是反向操作,都需要关注多个关键点以确保数据的完整性和系统的稳定性。以下是对迁移过程中需要注意的知识点的详细解释: 1. **自动增长的数据类型处理**: MySQL...

    SQL_Developer数据移植实例

    本实例将深入探讨如何利用SQL Developer进行数据移植,特别是在MySQL到Oracle以及SQL Server到Oracle之间的迁移过程。 一、SQL Developer简介 SQL Developer是一款免费的集成开发环境(IDE),它提供了全面的数据库...

    SQLServer,MySQL,Oracle三者的区别.pdf

    - **自动增长**:Oracle使用序列(Sequences)处理自动增长,MySQL则有自增(AUTO_INCREMENT)属性。 - **主键**:Oracle主键可由多个列组成,MySQL主键通常为单列。 - **单引号处理**:Oracle在SQL语句中需要...

    真实项目中关于主键生成方式的剖析(JPA)

    而Hibernate提供了跨数据库的主键生成策略,例如`native`策略,它会根据底层数据库自动选择合适的主键生成方式(如MySQL的自动增长ID或Oracle的序列)。 在JPA中,通过`@GenericGenerator`注解可以定义主键的生成...

    数据库打包类

    数据库打包类通常指的是在软件开发过程中,为了方便管理和迁移数据库,开发者编写的一种工具类或脚本,用于将数据库结构(如表、视图、存储过程等)和数据一起打包成一个可移植的文件。这样的工具在项目部署、备份、...

    一种通用的生成序列的方法

    传统上,各大数据库供应商如Oracle、MySQL、SQL Server、DB2等都提供了自增数字序列的支持,但其实现方式各异。例如,Oracle使用的是`SEQUENCE`对象,而SQL Server则利用`IDENTITY`属性。然而,这些方法往往依赖于...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    说明:用于连接到oracle数据库,也可实现用户的切换 用法:conn 用户名/密码 [as sysdba/sysoper] 注意:当用特权用户连接时,必须带上sysdba或sysoper 例子: 3. 断开连接(disc) 说明:断开与当前数据库的连接 ...

    Hibernate主键生成方式

    在Java的持久化框架Hibernate中,主键生成策略是一个关键的概念,它决定了如何为数据库中的实体对象生成唯一的标识符(主键...在实际开发中,考虑到可移植性、性能和数据安全性,往往需要权衡各种因素来确定最佳方案。

    Hibernate_基础汇总(一)

    - **sequences**:适用于支持序列的数据库,如Oracle。 #### 常见错误分析 - **错误1**:如果持久化类没有提供默认的无参构造函数,将会引发异常。 - **错误2**:映射文件中指定的主键生成策略与数据库不兼容。 - ...

    java学习路线图

    - **数据备份与移植:** 介绍如何进行数据备份和恢复,以及如何在不同环境中迁移数据。 - **多表连接难题详解:** 解决复杂的多表查询问题,提高查询效率。 - **MySQL数据库的使用:** MySQL是一种流行的开源数据库...

    java写的学生信息管理系统

    学生信息管理系统通常与数据库紧密相连,如MySQL、Oracle或SQL Server等。在本系统中,我们可能需要设计一个包含学生表、课程表、成绩表等的数据模型,以存储和管理学生的个人信息、选课情况及成绩等。Java通过JDBC...

Global site tag (gtag.js) - Google Analytics