应用程序的数据库从Sql Server迁移到Oracle

迁移案例一:数据库: Sql Server 2008到Oracle 9i

工具: Sybase PowerDesiner 12 试用版, PL/SQL Developer 7.1.5

迁移主要有两个工作:

  1. 根据Sql Server数据库生成创建Oracle数据库的脚本

  2. 修改代码中的SQL语句

根据Sql Server数据库生成创建Oracle数据库的脚本

  1. 用PowerDesiner将Sql Server数据库反向工程生成物理数据模型

  2. 根据反向工程生成的物理数据模型创建逻辑模型

  3. 再根据逻辑模型生成Oracle数据库版本的物理模型

  4. 根据Oracle数据库版本的物理模型生成Oracle数据库创建脚本

  5. 按照Oracle命名规则和数据类型定义修改Oracle数据库创建脚本

  6. 在PL/SQL Developer中执行以检验其正确性

修改代码中的SQL语句

  1. Sql Server中经常用方括号把表名和字段名括起来, 到Oracle中要把这些方括号都去掉

  2. 将参数变更前的"@"符号改为":"符号

  3. 将Sql Server专有的方法和函数替换成Oracle相应的方法和函数

  4. 在PL/SQL Developer中执行SQL语句以检验其正确性

转换过程中的常见问题

  1. 表名和字段名使用了Oracle中的关键字

  2. Sql Server中的NVARCHAR数据类型可存4000个汉字, Oracle中的NVARCHAR/NVARCHAR2数据类型只能存2000个汉字

  3. 索引名称和外键名称超过了30个字符

  4. PowerDesigner生成的脚本, 表名和字段名都加了引号, 要去掉

案例二:数据库SqlServer 2K到Oracle 10g

公司有一个系统是基于SqlServer 2k,现在,应客户要求,移植到Oracle 10g数据库。代码的扩展极其easy,三下五除二,搞定。就是在将数据从SqlServer 2k导入到Oracle 10g数据库中时出现了一些问题。刚开始采用的方案是把表结构和数据导入到Sql脚本中,然后在Oracle数据库中执行Sql脚本。这个过程涉及到数据库字段类型的转换问题,容易出错。后来采用使用SqlServer 2k的DTS 将数据从SqlServer中导入到Oracle 10g中。工作就这么搞定了,为了方便以后数据类型的转换,方便以后做针对不同数据库的Sql脚本,我把SqlServer 2k和Oracle 10g大部分数据类型都做了一下测试,当然现在只有SqlServer 2k和Oracle 10g数据对应关系。不对应关系如下:

SqlServer 2k转换为Oracle 10g

列名 SqlServer数据类型 SqlServer长度 Oracle数据类型
column1 bigint 8     NUMBER(19)
column2 binary 50     RAW(50)
column3 bit 1     NUMBER(2)
column4 char 10     CHAR(10)
column5 datetime 8     DATE
column6 decimal 9     NUMBER(18)
column7 float 8  BINARY_DOUBLE
column8 image 16     BLOB
column9 int 4     NUMBER(10)
column10 money 8   NUMBER(19,4)
column11 nchar 10   NCHAR(10)
column12 ntext 16   NCLOB
column13 numeric 9  NUMBER(18)
column14 nvarchar 50  NVARCHAR2(50)
column15 real 4  BINARY_FLOAT
column16 smalldatetime 4  DATE
column17 smallint 2  NUMBER(5)
column18 smallmoney 4  NUMBER(10,4)
column19 sql_variant  BLOB
column20 text 16  CLOB
column21 timestamp 8  RAW(8)
column22 tinyint 1  NUMBER(3)
column23 uniqueidentifier 16  BLOB
column24 varbinary 50  RAW(50)
column25 varchar 50  VARCHAR2(50)

Oracle 10g 转换为SqlServer 2k

Oracle列名 Oracle数据类型 SqlServer列名 SqlServer数据类型 SqlServer数据长度
COLUMN1 BINARY_DOUBLE COLUMN1 float 8
COLUMN2 BINARY_FLOAT COLUMN2 real 4
COLUMN3 BLOB COLUMN3 image 16
COLUMN4 CLOB COLUMN4 ntext 16
COLUMN5 CHAR(10) COLUMN5 nchar 10
COLUMN6 DATE COLUMN6 datetime 8
COLUMN12 NUMBER COLUMN12 numeric 13
COLUMN13 NVARCHAR2(10) COLUMN13 nvarchar 10
COLUMN14 RAW(10) COLUMN14 varbinary 10
COLUMN15 TIMESTAMP(6) COLUMN15 datetime 8
COLUMN16 TIMESTAMP(6) WITH LOCAL TIME ZONE COLUMN16 datetime 8
COLUMN17 TIMESTAMP(6) WITH TIME ZONE COLUMN17 datetime 8
COLUMN18 VARCHAR2(10) COLUMN18 nvarchar 10
COLUMN7 INTERVAL DAY(2) TO SECOND(6) COLUMN7 nvarchar 30
COLUMN8 INTERVAL YEAR(2) TO MONTH COLUMN8 nvarchar 14
COLUMN9 LONG COLUMN9 ntext 16
COLUMN10 LONG RAW COLUMN10 image 16
COLUMN11 NCLOB COLUMN11 ntext 16

我们在做数据库移植设计的时候,完全DIY,可以考虑设计可扩展组件完成这种数据库表、列等对应关系的转换工作,那么以后再做系统移植中数据导入时就一劳永逸了。现在也没有时间做这种工作,不过感觉这还是挺有意义的一项工作。

在转换过程中,出现了另一个问题,就是如果SqlServer 2k 中的表名含有小写,那么在导入到Oracle 10g后,需要修改表名,否则Sql语句会执行失败。(导入后表名多了引号) 比如SqlServer 2k有一个表test,导入到Oracle 10g后显示的表名仍然为test,但是如果你要查询test表中的数据时,按照正常情况下,你只用输入select * from test即可,可是现在却变成select * from "test"。通过Oracle 10g的维护系统进入修改表名时,表名显示为带有引号的-"test"。出现这个问题,因为表不是很多,所以我们将SqlServer 2k的表名都改为了大写,或者在Oracle中将表名改为大写,就ok了,需要注意这些细节。Oracle 10g导入到SqlServer 2k中没有出现问题。

附注:oracle的命名规则
oracle中的各种数据对象,包括表名称,视图,等等名称的命名都需要遵循oracle的命名规则。oracle的命名规则分为标准命名方式和非标准命名方式。

标准命名方式需要满足以下的条件:

以字符打头
   30个字符以内
   只能包含A-Z,a-z,0-9,_,$,and,$和#
   不能和同一个用户下的其他对象重名
   不能是oracle服务器的保留字

例如:下面的SQL语句是错误的:create tabel emp-bonus( empid number(10),bonus number(10));因为表名使用了“-”,这在标准命名中是不允许的。

还有一类是非标准命名。这时候你可以使用你想使用的任何字符,包括中文,oracle中的保留字,空格等等都是可以的,但是需要将对象名用双引号引起来。例如: create table “table” (test1 varchar2(10));将会建立一个表名为table的表。并没有什么语法错误。但这这样以后就需要以后在使用这个对象时必须用双引号经对象引起来,例如对于刚才建立的表使用select * from table;是不行的,只能使用select * from “table”;

应用程序的数据库从Sql Server迁移到Oracle相关推荐

  1. 如何把数据库从sql变成mysql_如何将数据库从SQL Server迁移到MySQL

    一.迁移Database Schema. 首先使用Sybase Powerdesigner的逆向工程功能,逆向出SQL Server数据库的物理模型.具体操作是在Powerdesigner中选择&qu ...

  2. 如何把数据库从sql变成mysql_(转)如何将数据库从SQL Server迁移到MySQL

    一.迁移Database Schema. 首 先使用Sybase Powerdesigner的逆向工程功能,逆向出SQL Server数据库的物理模型.具体操作是在Powerdesigner中选择&q ...

  3. 使用Microsoft数据迁移助手在Oracle数据库和SQL Server之间迁移的具体示例

    介绍 (Introduction) Intended audience 目标听众 This document is intended for application developers and da ...

  4. 从Sql server 2000 到 Oracle 10g数据库迁移数据类型转化

    2010-01-12 从Sql server 2000 到 Oracle 10g数据库迁移数据类型转化 文章分类:数据库 SqlServer 2k转换为Oracle 10g 列名 SqlServer数 ...

  5. ssma5.3_适用于Oracle的Microsoft SQL Server迁移助手(SSMA)v7.1

    ssma5.3 介绍 (Introduction) SQL Server Migration Assistant (SSMA) is a free supported tool from Micros ...

  6. ssma迁移助手_如何使用SQL Server迁移助手(SSMA)和SSIS将MySQL表迁移到SQL Server

    ssma迁移助手 介绍 (Introduction) In this article, we will demonstrate how to migrate MySQL tables to SQL S ...

  7. 驰网云数据库MySQL SQL Server

    驰网云数据库MySQL &SQL Server 在最近几年,云数据库逐渐成为焦点中的焦点.根据IDC数据显示,到2025年,全球超过50%的数据库将部署在公有云上:在中国市场,这个数据将达70 ...

  8. AWS 发布新一代Amazon Aurora Serverless,更方便 SQL Server迁移

    (1)Aurora Serverless v2 可在不到一秒内扩展至支持数十万个事务,与按业务高峰需求进行容量配置的方式相比可节省高达90%的成本:(2)Babelfish for Aurora Po ...

  9. SQL Server 迁移数据到MySQL

    一.背景 由于项目开始时候使用的数据库是SQL Server,后来把存储的数据库调整为MySQL,所以需要把SQL Server的数据转移到MySQL:由于涉及的表比较多,所以想在MySQL中生成对应 ...

最新文章

  1. The advantages of SMRT sequencing
  2. VB中对AutoCAD图形对象进行缩放操作
  3. ehcache config xml file
  4. Selenium3+MoocTest环境搭建常见问题解决方案
  5. .NET之生成数据库全流程
  6. 如何在AWS中启动EC2实例
  7. 公布一个硬盘杀手的分析报告
  8. 8大原则带你秒懂Happens-Before原则
  9. 从maya中 导入物体 到Uniyt3D 规范 整理
  10. 第三次面试题目 (反省中!!)
  11. VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题
  12. 腾讯云短信服务报错FailedOperation.TemplateIncorrectOrUnapproved
  13. 大数据安装之hadoop-3.3.4
  14. xp计算机图标,xp我的计算机图标不见了
  15. 华为手机root的最简单方法教程!附专用root工具!详细
  16. 项目质量管理__七种基本质量工具__老七工具和新七工具
  17. Jenkins构建项目
  18. CF Buns (01背包问题)
  19. pantone潘通色卡对照表_潘通色卡微信版(PANTONE色C面效果)
  20. 什么是埃博拉免疫T-细胞?

热门文章

  1. 信鸽 ios tag推送 php,iOS 关于信鸽推送点击推送通知的处理
  2. php mysql cpu100_MySQL服务器进程CPU占用100%的解决方法
  3. 三星note5 android版本区别吗,三星Note5哪种颜色好看?三星Note5四种颜色区别对比图解...
  4. 象过河怎么用远程服务器,象过河远程协助的教程
  5. 挡d挡切换_新手司机请问开车可以直接从“D档”挂到“S档”吗?
  6. 三相滤波器怎么接线_您知道家用电表如何接线吗?小编来告诉你!
  7. java7 javascript引擎_Java7中脚本引擎的一般用法,共三种方法获得JavaScript引擎:名称、文件扩展名、MIME类型 | 学步园...
  8. 快速学会MySQL常用操作方法
  9. vue读取redis 值_Jmeter连接Redis,一定很容易学会吧
  10. 【大数据分析常用算法】1.二次排序