目录
同步复制OneWay的数据库表研究
系统环境
执行操作
首页 数据库 mysql教程 同步复制OneWay的数据库表研究

同步复制OneWay的数据库表研究

Jun 07, 2016 pm 03:48 PM
同步 复制 数据库 研究

同步复制OneWay的数据库表研究 通过使用同步复制Oneway的数据库表的研究,来更加深入的了解同步复制的原理,数据同步的步骤。 本文以OneWay的父到子为例(从子到父只是角色变了,表的变化可以类比一下)。 系统环境 父库:Oracle 11.2.0.1 64Bit、 ArcSDE10 S

同步复制OneWay的数据库表研究

       通过使用同步复制Oneway的数据库表的研究,来更加深入的了解同步复制的原理,数据同步的步骤。

       本文以OneWay的父到子为例(从子到父只是角色变了,表的变化可以类比一下)。

系统环境

       父库:Oracle 11.2.0.1 64Bit、 ArcSDE10 SP2 64Bit

       子库:SQL Server 2008 64Bit、ArcSDE10 SP2 64Bit

       两个库里面没有任何版本,STATE=0

执行操作

         1:父库:注册版本、添加GlobeID。

         2:执行复本操作,父库将相关的所有数据都导入到子库中。

       父库:VERSIONS表中添加一条同步复制版本的记录。使用同步复制产生的版本名称都是以”SYNC_SEND_ReplicaObjectiD_”为前缀的,状态为16777216(这个数字还没有具体研究过,好像Oneway和Twoway是不一样的),一开始没有编辑之前,这两条记录的STATE_ID=0。

同步复制OneWay的数据库表研究

  GDB_ITEMS表中添加一项Replica名称,默认为MyRelplica,是以XML存储,我们来看一下这个内容:子库的相关的连接参数信息,父库的相关角色等都描述的非常清楚。

同步复制OneWay的数据库表研究

         子库:导入父库的所有数据(如果不加任何条件的话),导入之后直接就是注册版本状态。我查看了子库一开始的整体数据同步(非编辑父库同步),是不走状态表和增量表的,直接将父库的基表数据导入到子库的基表中。

VERSIONS表中无任何新添加的信息。

        GDB_ITEMS表中添加一项Replica名称,默认为MyRelplica,是以XML存储,我们来看一下这个内容:父库的相关的连接参数信息,子库的相关角色等都描述的非常清楚。

同步复制OneWay的数据库表研究

3:对父库进行编辑

       我对父库进行增、删、改三种方式的编辑行为,每做一次保存一下编辑,目的是记录一下相关的编辑状态。

       父库的Versions表、States表等相关的版本表、增量表肯定发生了变化。如下Versions:

同步复制OneWay的数据库表研究

4:将父库变化的数据进行同步

       父库的Versions表中发生了一些变化,首先我们查看一下同步复制的版本名称由原来的SYNC_SEND_4177_0变为SYNC_SEND_4177_1,这说明这个数字可以记录同步的次数。

同步复制OneWay的数据库表研究

       GDB_ITEMS表中的Replica信息也发生了相关的变化

<MyGenerationNumber>1</MyGenerationNumber>
<SibGenerationNumber>0</SibGenerationNumber>
<SibMyGenerationNumber>1</SibMyGenerationNumber>
登录后复制

        GDB_REPLICALOG表里面记录了同步的相关日志信息

同步复制OneWay的数据库表研究

      子库里面我们可以看到,父库是通过版本表、增量表等信息将变化的数据同步过去的,那么我们在子库里面的相关表也同步过来了。

同步复制OneWay的数据库表研究

同步复制OneWay的数据库表研究

      从上面的A表和STATES表可以看出,尽管我在父库里面是记录了三个不同状态的操作,但是在同步过程中,子库只记录一个相关的状态,这个状态可以记录同时编辑了N个数据,这样的话势必会提高子库的数据查询分析效率。

     GDB_ITEMS表中的Replica信息也发生了相关的变化

<MyGenerationNumber>0</MyGenerationNumber>
 <SibGenerationNumber>1</SibGenerationNumber>
 <SibMyGenerationNumber>0</SibMyGenerationNumber>
<ReplicaState>esriReplicaStateSendingAcknowledgment</ReplicaState>
登录后复制
登录后复制

       同样也会更新子库中VERSIONS表的STATE_ID,将最新的ID同步更新。这样一次同步复制就完成了,那么我还是有一个疑问,系统是怎么将父库中关于某个同步要素类的变化的数据区分过去同步的,也就是他是将所有变化的数据给同步过去还是只同步最新变化的数据呢?带着这个问题我再一次做一个同步操作。

       5:对父库做第二次编辑

       我们可以看到父库里面VERSIONS表中

同步复制OneWay的数据库表研究

       然后我们再看看族系表

同步复制OneWay的数据库表研究

       其实从上面两个表我已经可以猜到系统肯定是只同步变化的数据,因为根据这两个表就能推出哪些是最新编辑的数据,因为系统记录了第一次同步之后第二次编辑之前的最新的状态值STATE_ID=55,根据这个值可以找到相关的族系名称LINEAGE_NAME=53,那么顺着这个族系名称找到最大的状态值就是最新编辑的记录的状态,从图上我们可以看到56、57、58都是最新编辑的,那么我们就可以从STATES表和增量表中将相关的信息记录出来。

5:第二次同步

      父库GDB_REPLICALOG表里面记录了同步的相关日志信息

同步复制OneWay的数据库表研究

       VERSIONS表中,果然同步版本名称又增加了1,同时更新了最新的状态值

同步复制OneWay的数据库表研究

      GDB_ITEMS表中的Replica信息也发生了相关的变化

<MyGenerationNumber>2</MyGenerationNumber>
<SibGenerationNumber>0</SibGenerationNumber>
<SibMyGenerationNumber>2</SibMyGenerationNumber>
登录后复制

      子库里面的A表和状态表

同步复制OneWay的数据库表研究

同步复制OneWay的数据库表研究

       从上面的图更加坚定我刚才的猜测,系统只同步变化的数据,原来的状态值等于52的仍然没有变化,第二次同步过来的就是53(根据状态序列)。

      GDB_ITEMS表中的Replica信息也发生了相关的变化

<MyGenerationNumber>0</MyGenerationNumber>
 <SibGenerationNumber>1</SibGenerationNumber>
 <SibMyGenerationNumber>0</SibMyGenerationNumber>
<ReplicaState>esriReplicaStateSendingAcknowledgment</ReplicaState>
登录后复制
登录后复制

       结论:通过上面对同步复制OneWay操作后数据库表信息的变化,基本上可以将这个编辑同步过程的步骤,或者系统设计的思路弄清楚,系统是根据子库父库存储的Replica的XML获取相关的角色、连接、数据描述等相关信息,然后编辑数据根据版本表、增量表将变化的数据读取然后进行相关的操作。


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1675
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
iOS 18 新增'已恢复”相册功能 可找回丢失或损坏的照片 iOS 18 新增'已恢复”相册功能 可找回丢失或损坏的照片 Jul 18, 2024 am 05:48 AM

苹果公司最新发布的iOS18、iPadOS18以及macOSSequoia系统为Photos应用增添了一项重要功能,旨在帮助用户轻松恢复因各种原因丢失或损坏的照片和视频。这项新功能在Photos应用的"工具"部分引入了一个名为"已恢复"的相册,当用户设备中存在未纳入其照片库的图片或视频时,该相册将自动显示。"已恢复"相册的出现为因数据库损坏、相机应用未正确保存至照片库或第三方应用管理照片库时照片和视频丢失提供了解决方案。用户只需简单几步

如何在PHP中处理数据库连接错误 如何在PHP中处理数据库连接错误 Jun 05, 2024 pm 02:16 PM

PHP中处理数据库连接报错,可以使用以下步骤:使用mysqli_connect_errno()获取错误代码。使用mysqli_connect_error()获取错误消息。通过捕获并记录这些错误信息,可以轻松识别并解决数据库连接问题,确保应用程序的顺畅运行。

在PHP中使用MySQLi建立数据库连接的详尽教程 在PHP中使用MySQLi建立数据库连接的详尽教程 Jun 04, 2024 pm 01:42 PM

如何在PHP中使用MySQLi建立数据库连接:包含MySQLi扩展(require_once)创建连接函数(functionconnect_to_db)调用连接函数($conn=connect_to_db())执行查询($result=$conn->query())关闭连接($conn->close())

如何在 Golang 中将 JSON 数据保存到数据库中? 如何在 Golang 中将 JSON 数据保存到数据库中? Jun 06, 2024 am 11:24 AM

可以通过使用gjson库或json.Unmarshal函数将JSON数据保存到MySQL数据库中。gjson库提供了方便的方法来解析JSON字段,而json.Unmarshal函数需要一个目标类型指针来解组JSON数据。这两种方法都需要准备SQL语句和执行插入操作来将数据持久化到数据库中。

如何在 Golang 中使用数据库回调函数? 如何在 Golang 中使用数据库回调函数? Jun 03, 2024 pm 02:20 PM

在Golang中使用数据库回调函数可以实现:在指定数据库操作完成后执行自定义代码。通过单独的函数添加自定义行为,无需编写额外代码。回调函数可用于插入、更新、删除和查询操作。必须使用sql.Exec、sql.QueryRow或sql.Query函数才能使用回调函数。

mysql:简单的概念,用于轻松学习 mysql:简单的概念,用于轻松学习 Apr 10, 2025 am 09:29 AM

MySQL是一个开源的关系型数据库管理系统。1)创建数据库和表:使用CREATEDATABASE和CREATETABLE命令。2)基本操作:INSERT、UPDATE、DELETE和SELECT。3)高级操作:JOIN、子查询和事务处理。4)调试技巧:检查语法、数据类型和权限。5)优化建议:使用索引、避免SELECT*和使用事务。

如何用 Golang 连接远程数据库? 如何用 Golang 连接远程数据库? Jun 01, 2024 pm 08:31 PM

通过Go标准库database/sql包,可以连接到MySQL、PostgreSQL或SQLite等远程数据库:创建包含数据库连接信息的连接字符串。使用sql.Open()函数打开数据库连接。执行SQL查询和插入操作等数据库操作。使用defer关闭数据库连接以释放资源。

PHP与不同数据库的连接:MySQL、PostgreSQL、Oracle和更多 PHP与不同数据库的连接:MySQL、PostgreSQL、Oracle和更多 Jun 01, 2024 pm 03:02 PM

PHP连接数据库指南:MySQL:安装MySQLi扩展,创建连接(servername、username、password、dbname)。PostgreSQL:安装PgSQL扩展,创建连接(host、dbname、user、password)。Oracle:安装OracleOCI8扩展,创建连接(servername、username、password)。实战案例:获取MySQL数据、PostgreSQL查询、OracleOCI8更新记录。

See all articles