mysql到oracle的移植
发布时间:2011-01-29 16:23:00
第一步:建与mysql同构的oracle数据库实例,并更新数据。
1.期望将mysql导出成与oracle通用的sql语句,通过该语句进行更新。
2.如果1不能做到,可先将数据库结构(表结构等)导出,在通过insert语句,或execl(限制:最多只能6w多条记录)进行导出、导入。
第二步:一边设计新库,一边写老库到新库的同步程序。
1.通过dblink进行连接,用存贮过程同步。
2.对于数据量为千万级的表需要单独(特别)处理。
2.mysql到oracle的整理工作
1.将表结构文件与数据文件分开
2.将"替换为null(替换为null即删除)
3.将`替换为null
4.将int替换为number,将bigint替换为number,将decimal替换为number,将float替换为number,将unsigned替换为null
5.将char替换为varchar2,将varchar替换为varchar2,将text替换为blob
6.将timestamp替换为date,将datetime替换为date
7.将CURRENT_TIMESTAMP替换为sysdate
8.将character set gb2312 替换为null,将DEFAULT CHARSET=gbk 替换为null
9.将表名前的数据库名替换为null。如:3yxupupup.module中将3yxupupup.删掉
10.将ENGINE=InnoDB替换为null,将ENGINE=MyISAM替换为null
11.将default * 放置在NOT NULL之前
12.pk : PRIMARY KEY (*)可以不进行替换,如果想要替换可替换为 alter table 表名 add primary key (主键列名);如:alter table DEPTLIST add primary key (DEPTID);
13.uk :
14.fk :
15.idx : KEY NewIndex1 (*)替换为 create index 索引名 on 表名 (索引列名);如:KEY NewIndex1 (timelevel,buglevel,moduleid)--》 create index idx_task_level on task (timelevel,buglevel,moduleid);
16.增加表说明:comment on table 表名 is '说明信息'; 如:comment on table deptlist is '部门表';
17.将列说明 COMMENT '列说明信息' 替换为 comment on column 表名.列名 is '列说明信息';如:comment on column deptlist.deptid is '部门编号,保持与RTX一致';
18.将自增长功能 主键列auto_increment替换为null,表尾 AUTO_INCREMENT=当前值 替换为sequence+trigger
如:CREATE TABLE doing (doingid number(11) NOT NULL,...) AUTO_INCREMENT=8 ; 替换为
-- create sequence
create sequence seq_doing
minvalue 1
maxvalue 999999999999999999999999999
start with 8
increment by 1
nocache;
--create sequence bi
create or replace trigger tri_doing_bi before insert on doing for each row
begin
if :new.doingid<0 or :new.doingid is null then
select seq_doing.nextval into :new.doingid from dual;
--select substr(sys_guid(),1,32) into :new.doingid from dual;
end if;
end;
/
21.更新数据对于日期类型需要增加to_date进行格式转换,如:'2011-01-17 20:18:42'--》to_date( '2011-01-17 20:18:42','yyyy-mm-dd hh24:mi:ss')
21.更新数据时需要注意效率问题。一般的原则是每个表处理完成都需要一个commit;如果某个表记录比较多,则每处理100条记录commit一次。
22.如果表之间存在外键及触发器,在更新数据时应该先让外键、触发器失效(disable),更新后在启用外键、触发器(enable)。
23.处理数据时需要记录日志。如:spool c:/temp/×××.log;... spool off;
24.查看日志,对于提示违反唯一性约束的记录分为两种情况:一、记录重复,违反了主键、唯一键、唯一索引,则不需要特殊处理;二、有人调整了唯一键、唯一索引,则需要确认后特殊处理。
对于提示违反完整性约束的记录是指违反了外键约束(父表没有,子表有,即违反完整性约束),需要特殊处理。
31.表连接不建议使用jion的写法
32.对于可能不维护值的字段请勿设置为not null 如:userinfo表
33.请将表名、列名、用户名、数据库名中的3yx*替换为yx3*
34.删除表时将 IF EXISTS替换为null,如:DROP TABLE IF EXISTS yx3_account_info;--》DROP TABLE yx3_account_info;
猜你喜欢
- 在CSS规范中有一个渲染对象的概念,通常用一个盒子(box, rectangle)来表示。mozilla通过一个叫frame的对象对盒子进行
- 本文介绍的MySQL数据库的出错代码表,依据MySQL数据库头文件mysql/include/mysqld_error.h整理而成。详细内容
- 成天都要与样式打交道的朋友,相信对CSS选择符(CSS Selectors)都不会陌生。不过对于刚接触或者还不是很熟悉css的朋友来说,能够
- 问:如何给导入文件加上时间戳标记?答:请参考下文中介绍的两种方法:1.在DOS下从系统获得时间戳利用Dos命令取得时间戳:C:\>ec
- Jon Wiley, User Experience Designer for Google Apps, outlined some of
- 关于截取字符串指定长度的自定义函数很多,各式各样!不过大多原理都是一个样,循环字符串判断每一个字符的asc码!我这里也有一个,示例函数如下:
- 如何在线修改表?具体代码如下:<%Set conn1 = Server.CreateObject(&qu
- SQL触发器实例1 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一
- 开始制作符合标准的站点,第一件事情就是声明符合自己需要的DOCTYPE。查看本站首页原代码,可以看到第一行就是:<!DOCTYPE h
- 以下的文章主要介绍的是MySQL 查询缓存的实际应用代码以及查看MySQL 查询缓存的大小 ,碎片整理,清除缓存以及监视MySQL 查询缓存
- 原文地址:30 Days of Mootools 1.2 Tutorials - Day 8 - Input Filtering Part
- <table border="1" cellpadding="0&quo
- Dreamweaver出现乱码,大致为两种情况:一是没有标明主页制作所用的文字,这种情况下很简单就可以
- 先看看:css中class与id的区别及应用表单的name与id其实是同一个意思,都是为了标记对象名称。它们所不同的是:name是Netsc
- 九宫格是一种比较古老的设计,它最基本的表现其实就像是一个三行三列的表格。其实它最初是在window的c/s结构中用得比较多,比如我们经常看到
- 元数据简介元数据 (metadata) 最常见的定义为“有关数据的结构数据”,或者再简单一点就是“关于数据的信息”,日常生活中的图例、图书馆
- 关于mysql数据库在Linux下的应用一直以来都是我认为比较棘手的,这次通过搭建Linux学习环境顺便研究和学习Mysql数据库在Linu
- 第一个保存在新建一个文本中<% Dim Username,PassWord,strLogFile,f,ff,Str
- 在服务器端asp程序可以接受html页面上的form传来的参数,那么它又如何实现IE地址参数判断呢?当地址栏没有参数"id"时
- 我们生活在信息繁杂的社会,尤其是在互联网时代,人们开始通过网络开始接触越来越多的信息,那么,如何获取/传递有效而准确的信息将非常重要。在网页