我有一个桌面PC网络(Windows 7),这些桌面PC在地理位置上彼此分开(与LAN连接)。
网络有一个Oracle后端。
我想在每台PC上本地安装一个数据库(其中大约12个,目前正在考虑SQLite,但对其他可能性开放)。
我需要保证本地数据库始终保持同步,并始终与Oracle数据库保持同步,或者至少只要有网络连接(网状拓扑)就保持同步。
同步只涉及一个表。
对于这个问题,有哪些可行的有效解决方案?最好事先与你合作过。
答案 0 :(得分:2)
由于我不知道这个领域的知识,我不确定这会完全解决你的问题,但是阅读这个问题我意识到你需要一个数据库复制软件包,所以我想建议你是否可以研究一下SymmetricDS 为什么我建议这样做?来自其官方网站的基本介绍。 SymmetricDS是可免费使用的开源软件
SymmetricDS是用于多主数据库的开源软件 复制,过滤同步或跨越的转换 异构环境中的网络。它支持多种 具有单向或双向异步数据的订户 复制。它使用Web和数据库技术来复制表 在关系数据库之间,如果需要,几乎实时。该 软件旨在扩展到大量数据库,工作 跨越低带宽连接,并承受网络时间 中断。
通过使用数据库触发器,SymmetricDS可确保数据更改 被捕获并保持原子性。支持数据库供应商 通过数据库方言层提供,实现 MySQL,Oracle,SQL Server,SQL Server Azure,PostgreSQL,DB2, Informix,Interbase,Firebird,HSQLDB,H2,Apache Derby,Greenplum, 和SQLite包括在内。
可以将同步配置为定期推送数据或提取数据。 SymmetricDS允许在两个或更多层节点之间进行同步,如以下场景中可能需要的那样:
希望我的回答有帮助!
答案 1 :(得分:-4)
你需要一个PHP脚本来检查一行中一个表的变化。 $ dbArray是一个包含数据库的所有Computernames的数组。
$dbArray[0]="Comp1";
$dbArray[1]="Comp2";
$checkvalue="";
foreach ($dbArray as $value){
$db=mysqli_connect($value,"Username","Password");
mysqli_set_charset($db,"utf8");
mysqli_select_db($db,"DB_NAME");
$sql = "SELECT * FROM TABLE_NAME WHERE id=1";
$result = mysqli_query($db,$sql);
while ($row = mysqli_fetch_assoc($result)){
if($row["Rowname"]!=$checkvalue&&$checkvalue!=""){
UpdateData ($value);
}else{
//Value did not change
}
}
}
你需要一个函数UpdateData来交换数据。
function UpdataData ($ComputerChancedData){
}
该功能必须从计算机$ComputerChancedData
读取数据并将其写入所有非$ComputerChancedData
的计算机。
// function UpdateData
// Here have to be the Code which gets the new Value
$checkvalue="";
foreach ($dbArray as $value){
if($value!=$ComputerChancedData){
$db=mysqli_connect($value,"Username","Password");
mysqli_set_charset($db,"utf8");
mysqli_select_db($db,"DB_NAME");
$sql = "UPDATE TABLE_NAME SET ROW_NAME='$NEWVALUE' WHERE id=1";
$result = mysqli_query($db,$sql);
}
}
因为必须在每分钟重新加载,所以必须重新加载Javascript:
<script>
(function(){(setTimeout(function(){window.location.href="servername/seitenname.php";},60000))});
</script>
编辑:我使用MySqli作为此脚本
EDIT2:所有数据库必须具有相同的用户名和密码。如果不是,您必须使用正确的用户创建新用户。