SQL Server 2005与Oracle同步注意NUMBER类型转换

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介:
前面的文章 中我已经讲到使用同义词的方法来在SQL Server 2005下连接Oracle,我们可以使用同义词来实时访问Oracle数据库,但是如果Oracle中的表数据流较大则会影响应用系统的性能,于是我采用数据库作业每天定时执行:
 
drop   table  abc -- 删除旧表
go
select   *   into  abc
from  aaa -- aaa为同义词
这样就可以把Oracle中的数据同步到本地的SQL Server数据库中。从而解决跨实例查询的性能问题。
使用这样的方式半年了都没有发现有什么问题,可是最近却发现了一个灵异的现象,在Oracle中有一个表aaa,其中一个字段BILL NUMBER类型(未指定精度和小数数据位),对于这种类型,SQL Server2005中同步的表abc中却被定义为nvarchar(384)的类型!?明明是一个数字类型为什么SQL Server会将其转换为字符串类型呢?
若只是数据类型改变了倒没有什么,我应用程序在处理时转换一下就是了,但是更奇怪的是其中某些数据在Oracle中查出来是12.34567,但是在SQL Server 2005中查出来却成了12.345670543574563452346547546234234543656434...,后面是几十位的小数,简直神奇了!有一行数据在Oracle中是1,而在SQL Server中查出来是0.99999999999999999999999999999999...但是这种数据也很少发生,在数万条数据中可以找到2-3条这种几十位小数的数据。
正是这种数据的存在使得应用程序有时算出来的结果和Oracle那边的系统算出来的结果无法匹配。
经测试,如果Oracle中指定了NUMBER类型的精度和小数位数比如NUMBER(15)这样SQL Server将可以自动将其转换为numeric(15,0)类型。
由于NUMBER类型可以表示1.0 * 10(-130) —— 9.9...9 * 10(125) {38个9后边带88个0} 之间的数据,精确度可以达到小数点后38位小数,由于SQL Server中没有如此高精度的数据类型,所以在没有指定NUMBER精度和小数位的情况下SQL Server会将其转换为字符串类型以满足长度和精度的需要。
解决办法就是将SQL Server中同步表的nvarchar(384)类型修改为decimal类型或numeric类型,同步时不删除表,只是清除表内容,然后插入数据。同步SQL为:
TRUNCATE   TABLE  abc -- 清除表abc内容
go
insert   into  abc -- 将同义词aaa中的数据插入abc表
select   *
from  aaa
这样问题是解决了,但是造成两边查询出的数据不相同的原因是什么呢?这个我还不知道。
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
3月前
|
开发框架 Oracle 关系型数据库
ABP框架使用Oracle数据库,并实现从SQLServer中进行数据迁移的处理
ABP框架使用Oracle数据库,并实现从SQLServer中进行数据迁移的处理
|
3月前
|
SQL Oracle 关系型数据库
|
3月前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
171 3
|
3月前
|
SQL 存储 Oracle
TDengine 3.3.2.0 发布:新增 UDT 及 Oracle、SQL Server 数据接入
**TDengine 3.3.2.0 发布摘要** - 开源与企业版均强化性能,提升WebSocket、stmt模式写入与查询效率,解决死锁,增强列显示。 - taos-explorer支持geometry和varbinary类型。 - 企业版引入UDT,允许自定义数据转换。 - 新增Oracle和SQL Server数据接入。 - 数据同步优化,支持压缩,提升元数据同步速度,错误信息细化,支持表名修改。 - 扩展跨平台支持,包括麒麟、Euler、Anolis OS等。
97 0
|
4月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用问题之oracle无主键的表支持同步吗如何实现
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4月前
|
Oracle 关系型数据库 数据处理
实时计算 Flink版产品使用问题之如何进行Oracle到HBase的同步
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4月前
|
运维 DataWorks Oracle
DataWorks产品使用合集之在标准模式下,当同步Oracle的表或视图时,是否需要在源端的测试和生产环境中都存在要同步的表或视图
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
39 3
|
4月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用问题之在进行Oracle数据库的全量同步时,只同步了一条数据而源表实际上包含多条数据,是什么原因
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用问题之同步oracle表时,数据量约800万,检查点异常,该如何排查
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4月前
|
资源调度 Oracle 关系型数据库
实时计算 Flink版产品使用问题之同步oracle表时,任务不报错,但是读不到数据,是什么导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

推荐镜像

更多
下一篇
无影云桌面