`
阿尔萨斯
  • 浏览: 4168664 次
社区版块
存档分类
最新评论

异地数据库同时(写操作)问题

 
阅读更多

网上看到一篇论文《异地同构数据库合并在电力系统中的应用》,主要是想解决电力系统数据库实际应用中遇到的特定的异地同构数据库合并问题。

由于行业的特殊性,电力系统的数据库应用环境非常复杂。在实际工作中往往有一些同构数据库同时运行在独立的服务器上。到了一定的时候,由于工作环境变化、服务器升级或数据备份等各种原因,需要将这些异地同构数据库里面的数据合并到一起,存储在同一台服务器上。解决这类问题的传统方案是利用SQLSERVER2000提供的DTS(数据转换服务)功能来实现。然而,由于各个服务器之间相互独立(不提交协议),利用DTS功能的方案往往会遇到数据冲突的问题。
  数据冲突的情况往往集中在主键的冲突上。在数据库的表中,往往存在着一个主键,这个主键作为各项记录的唯一标识,是不能重复的。将这个主键作为一张表的标识列,从1开始,逐步递增,命名为MAINID,是最通用的做法。其他的表往往是将这个MAINID作为一个外键索引,通过它来定位其中的各条记录。由于几台服务器之间相互独立,这个MAINID很可能相同。在将具有相同MAINID的数据导入到同一个数据库时,如果不作事先的处理,将肯定出现数据冲突。针对这种情况,提出了自己编写数据转换接口的方案,将各异地同构数据库里面的数据作适应性的转换后再导入到同一服务器中。
作者的解决方式是采用NewID=OldID+ChangeMent,其中,NewID是修改后的MAINID,也就是入到目标库后对应的MAINID(新主键);OldID是该项数据在源数据库中的MAINID(旧主键),ChangeMent是上面计算出来的MAINID的增量。详细的解决方案可参考:http://diangong.jdzj.com/article/2009-3-31/6824-1.htm

看完这篇论文后,发现这个问题还有可深入探讨价值,上文作者提到的场景还算理想。设想一个应用同时部署在美国和中国(数据库和应用服务都是完全一样),但为了提高数据库的交互速度,如果是中国ip访问该网站则数据取自或写入中国的数据库中;同理非国内ip访问操作的数据则取自或写入美国的数据库。这种方式极大的提高了访问速度,但是也面临一个严峻的问题-数据同步问题,而且要实时同步。

前提美国和中国的数据库表结构是一样的,如何解决合并后表的主键冲突问题?这种业务往往都是很复杂的,一般一次操作可能会涉及好几张表(假如5张表),一个表(A)的主键会做为另一个表(B)的外键,同样另一个表(B)主键会作为其它表的外键,根据业务这5张表会有一个关联关系。如果此时还采用增量的方式,显然解决不了这个问题,先不谈增量的计算难度较高,另外每次同步都要计算增量在时间上消耗也是很高的,显然满足不了需求。

面对这个问题大家有什么好的想法?????

如何解决主键冲突的问题?

如果采用奇偶数来区分可不可以,方案明朗有没有。假如数据库采用的是oracle,此时的主键一般是通过sequence来实现的,我们完全可以让它increment增量为2,美国库的初始值为0,按2递增,(0,2,4,6.......),而中国库的初始值为1,也按2递增(1,3,5,7.....)。

下面面临的问题就是一个数据实时传输、存储的问题。

例如:若要将A服务器的数据实时同步到B数据库上

B:
create table book_test1(
name varchar2(100)
);
//////////////////////////////////////////////////////////////////

A:(笔记本)
建表
create table book_test(
name varchar2(100)
);

首先 D:\oraclexe\app\oracle\product\10.2.0\server\NETWORK\ADMIN\tnsnames.ora 加上
other =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 196.168.196.121)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = XE)
)
)
(注意:和在瑞达时用oracle9i客户端配一个远程数据库的一个本地别名链接生成的代码如上面的other,此时other将会出现在pl/sql的database选项中)

定义DB Link:
create public database link book_test_com
connect to 用户名
identified by 密码
using 'other';

测试时可用 select * from book_test1@book_test_com
-----------------------
建立synonym(同义):远程数据库在本地的一个映射

create or replace synonym local_book
for yangli.book_test1@book_test_com;

----------------------------
将更新的记录放到映射表,系统会自动将其更新的远程的数据库中
create or replace trigger tri_book
after insert on book_test
for each row
declare
begin
insert into local_book(name) values (:new.name);
end;


如果调试不通可能是由于下列的问题导致:

1.IP错误。
在设置URL时错误,例如:jdbc:oracle:thin:@192.168.0.36:1521:sharp
数据库服务器不正确:ping 服务器IP是否正确。不正确,将URL更改为正确
端口号错误:一般不会错误。
进行一下操作:在DOS上键入sqlplus,检查oracle是否开启
一却正常,执行下面第2步。

2. 防火墙
如果机器上安装有放火墙,可能是服务器端口号屏蔽而造成的。关闭防火墙后,尝试重新连接。
仍然不行,执行第3步。

3. 数据库监听未启动 修改PC上注册表中的ImagePath值。
重新手动启动数据库监听

上述分享只起到一个抛砖引玉的效果,具体应用肯定要结合业务,重新设计,有兴趣的同学可以一块讨论交流。

分享到:
评论

相关推荐

    mysql异地数据库无错迁移工具

    完美无错的mysql数据库迁移工具,简体中文版,迁移后直接可用 操作简单。

    数据库异地备份--将服务器数据库文件备份到本地电脑

    在服务器上建立一个共享文件夹,通过代码中的数据库备份sql语句将数据库备份到共享文件夹下,再通过代码中的命令将服务器共享文件夹下的备份文件取到本地磁盘。一键操作,欢迎交流。

    SQLSERVER数据库异地备份说明--经过验证

    经过测试的 SQLSERVER 数据库 异地备份 详细说明; 参照说明操作 即可实现;

    EDB数据库,MDB数据库,mysql数据库记账软件

    1.MYsql是基于网络服务器的,经常异地使用的比较适合,而且易语言对于MYsql支持库比较全,操作便捷,易懂~!,缺点是网络的速度可能有点慢(重点在钞票上)。2.Access的mdb数据库易语言对于这玩意的支持库不怎么好用...

    Linux MySQL数据库本地备份及异地备份

    Linux MySQL数据库本地备份及异地备份,包含操作说明,linux执行脚本,传输说明,及sshpass安装说明,及使用说明,安装说明,可随时评论区提问

    SQL_server_2005数据库异地备份步骤

    能够实现 数据库异地 进行备份,且按照 时间计划 对数据库进行异地的自动备份操作步骤,自己测试所制作。

    expdp异地备份全过程(非常详细)

    详细记录了expdp异地备份过程,测试成功, 并后附可选参数介绍

    SQL数据库备份恢复助手V2.6

    《SQL数据库备份恢复助手》完全免费、纯“绿色化”、无需安装、操作便捷,完美支持本地/局域网(远程)数据库自动/手动备份。可自由组合的无限复合式备份任务,支持备份文件ZIP压缩后通过Lan/Ftp/Email传输存储,Email...

    linux远程连接oracle数据库

    通过win7远程连接linux服务器上的oracle

    数据库备份打包及远程ftp程序

    自己用 delphi7开发,一直使用的一个定时执行数据库备份,压缩打包和异地远程ftp备份的小程序.支持 oracle,mysql,sql server 3种数据库.可以同时设置多个数据库备份方案,设定不同的定时执行方式等.也可以把多个备份...

    MySQL数据库相关知识

    教程名称:MySQL数据库相关知识课程目录:【】mysql异地数据库备份实例代码【】MySQL数据库双机热备份如何实现【】MySQL数据库备份的简单知识【】MySQL数据库恢复过程【】SQL索引失效的5种情况分析【】windows下如何...

    SQL数据库备份恢复助手 V2.8.8 官方绿色安全版.zip

    2、全面支持(32/64位)Windows操作系统、SQL Server 2000(含MSDE)以上及超大数据库; 3、自动备份任务数量无限制,可将相应数据库及备份模式进行随意组合; 4、自动/手工备份本地或局域网(远程)SQL Server...

    SQL2005,SQL2008 数据库镜像工具

    SQL2005以后增加了数据库镜像功能,这是一个非常实用,非常强大的功能,对数据库的异地备份,故障转提供了非常强劲的功能,不过对镜像的操作需要很多专业的知识,这个程序可以帮助你轻松的对数据库做镜像,你只用设好两台...

    SQL Serve数据库发布和订阅(主从数据库同步)

    针对网络上的sql server的发布和订阅,进行了验证,发现只是进行了基本的发布和订阅操作,但是对使用环境和使用前提都没做出说明,此文档增加了对环境设置的操作步骤

    linux下oracle数据库自动定时备份迁移

    Linux下Oracle数据库自动备份迁移 通过linux下Crontab实现定时任务,结合oracle自动备份脚本实现oracle数据库的备份操作,结合linux下Scp服务实现备份文件的异地存储,从而减少了人为备份的繁琐工作和服务器损坏造成...

    EDB数据库MDB数据库mysql数据库记账软件源码分享-易语言

    1.MYsql是基于网络服务器的,经常异地使用的比较适合,而且易语言对于MYsql支持库比较全,操作便捷,易懂~!,缺点是网络的速度可能有点慢(重点在钞票上) 2.Access的mdb数据库易语言对于这玩意的支持库不怎么好用...

    SQL数据库自动备份恢复助手 v2.6

    《SQL数据库备份恢复助手》完全免费、纯“绿色化”、无需安装、操作便捷,完美支持本地/局域网(远程)数据库自动/手动备份。可自由组合的无限复合式备份任务,支持备份文件ZIP压缩后通过Lan/Ftp/Email传输存储,Email...

    易语言-EDB数据库,MDB数据库,mysql数据库记账软件

    1.MYsql是基于网络服务器的,经常异地使用的比较适合,而且易语言对于MYsql支持库比较全,操作便捷,易懂~!,缺点是网络的速度可能有点慢(重点在钞票上) 2.Access的mdb数据库易语言对于这玩意的支持库不怎么好用...

    数据库备份策略说明.doc

    比如:误操作删除数据等 2、异机容灾备份 该备份模式,能比较好的规避单机故障问题。 3、异地容灾备份 该备份模式,规避大规模IDC故障(比如:火灾、地震、空调故障等)、数据安全问题 二、备份频率 1、主站www、bbs...

Global site tag (gtag.js) - Google Analytics