databus(大踏步是什么意思)

http://www.itjxue.com  2023-01-28 04:59  来源:未知  点击次数: 

databus是读取oracle日志吗

概述

目标

在Oracle上实现databus化的主要目的是提供一个机制获取选中表的时间线一致的变化流。一些必要和不必要:

数据库在相同的顺序中的变化应该是可以重放的。确保最后变化的影像和数据库上的一样。

如果在一个时间周期内在行上发生了多个变化,没有必要获取每个中间状态的变化,只要在某个确定的点的最后的影像是可用的,就足够了。

概念

ora_rowscn

每个Oracle表有一个虚假的列叫 ora_rowscn,它包含了一个被修改行的最大scn号。默认的oracle的ora_rowscn是块级的,但是可以通过设置 rowdependencies 为on,就变成了行级。默认的块级是当数据有修改是都共同修改同一个块的SCN,如果是行级的化是每个表都有一个,比较影响效率。

安装组件

这个章节列出了与流转相关的主要的组件。当然在整体功能中还需要其他的组件,但是其他的组件不影响深入的理解。

每个源表添加一个 txn 列。说源表foo最初有三列(A,B,C),为了databus化需要在基础表上添加一个txn列。这个列是索引的。

每个数据库都创建了一个sy$txlog表。它跟踪数据库中的databus化源表的事务处理变化。它主要的列有(scn, txn, mask, timestamp)。

每个源表上有一个insert/update的前置触发器,它做两件事情:

使用sync_core.getTxn()得到当前的事务ID并插入到源表的txn列。

新增或修改一行时sy$txlog表的Txn 设置为新的txnid,scn初始化为无穷大(99999999),和一个新的mask。

有一个合并工作每N秒在后台运行一次(当前为2秒),它更新sy$txlog表的行scn=Infinity记录的scn为ora_rowscn。

流转

这是从一个事务启动到它提交和提交之后发生的一些列步骤。

Txn T1启动使源表S1的行R1有了一个更新。

S1上的前置更新触发器引起了以下的发生:

sync_core.gettxn() 被调用并且将获取到的txn id(T1)更新到R1的txn列。

sy$txlog表添加一个新记录R2,它的scn=INFINITY,txn=T1,mask标明被更新的是S1。

Txn T1提交。在这个时候S1的ora_rowscn 被更新且sy$txlog的R2的ora_rowscn被更新成txn提交的SCN号。R2的SCN列保持INFINITY。

合并工作在N秒后调用。它查询sy$txlog表的SCN=INFINITY的记录并更新它为SCN=ora_rowscn。因此,R2.scn就变成了和ora_rowscn一样的值。

常见问题

用Txn排序能确保事件的正确顺序吗?

不可以,事件流必须用SCN号排序。用Txn排序可能会导致一个错误的结束状态。原因就是Txn是在事务开始的时候填充。SCN列是根据ora_rowscn是在提交的时候指派。正确的更新顺序要以提交的时间为根据。

为什么需要一个scn列?为什么不直接使用sy$txlog.ora_rowscn?

ora_rowscn列不能是索引。因此需要一个可以索引的scn列。后台的合并任务保持这个列更新为ora_rowscn的值。

为什么ora_rowscn列用在sy$txlog上,而不是源表上?

技术上,每个表都有一个ora_rowscn列。为了ora_rowscn在行级准确,rowdependencies 必须设置在表一级。这个是非常浪费的设置。因此,不是在每一张表上使用它。而只在sy$txlog表上使用。通过共享sy$txlog表和源码的txn列的更新,保证事务提交的同时sy$txlog表的ora_rowscn被更新。

表,视图,序列

sy$scn_seq序列:

描述:为sy$txlog表生成txnid。

定义在:database/*/createSchema/schema/cdsddl.sqssy$sources表:

描述:维护一个databus源的持久映射为一个bit数字。

定义在:database/*/createSchema/schema/cdsddl.tab支持最大数字为126个源,因为源的位掩码必须是一个数字。

描述

name

Databus源的名字

bitnum

在sy$txlog表mask列与这个源相对应的bit数字约束:

sy$sources_pk - name的主键约束,在database/*/createSchema/schema/cdsddl.con中声明。

索引:

sy$sources_I1 - bitnum的辅助索引,在database/*/createSchema/schema/cdsddl.ind中声明。

sy$txlog表:

描述:databus源的更新日志。这个表被源表的insert/update触发器更新。

定义在:database/*/createSchema/schema/cdsddl.tab其他

启用 rowdependencies

描述

txn

事务id(通过sy$scn_req生成)

scn

系统变化号,事务第一个变化的ora_rowscn

mask

在事务更新中获取的源掩码;查看sy$sources

ts

事务的时间戳

约束:

sy$txlog_pk - txn列上的主键约束,声明在:database/*/createSchema/schema/cdsddl.con索引:

sy$txlog_I1 - scn列上的辅助索引;声明在:database/*/createSchema/schema/cdsddl.indsync_core_settings表:

描述:维护databus的设置;

定义在:database/*/createSchema/schema/cdsddl.tab列

描述

RAISE_DBMS_ALERTS

如果是'N',禁用signal_beep的有条件的警报

Databus 源视图:

描述:定义一个表的视图通过databus暴露表.

定义在:database/*/createSchema/schema/cdsddl.vwcreate or replace force view sy$T as

select

txn,

f1,

f2,

:

:

from

T

存储过程

sync_core 包:

描述:databus核心方法。

定义在:database/*/createSchema/schema/cdsddl.prc1包变量:

变量名

描述

lastTxID

最新事务ID,DBMS_TRANSACTION.LOCAL_TRANSACTION_ID,在getTxn()中用于确定事务边界。

currentTxn

sy$txlog表最后一个更新/添加的记录的txn列的值。

currentMask

sy$txlog表最后一个更新/添加的记录的mask列的值。

source_bits

从databus源名字映射到一个bitmask(位掩码)

包方法:

方法原型

描述

function getScn(v_scn in number, v_ora_rowscn in number) return numberImplements infinity == v_scn ? v_ora_rowscn : v_scnfunction getMask(source in varchar) return number返回databus源名字对应的bitmask(位掩码)

function getTxn(source in varchar) return number表示source正在被一个事务更新。相应的更新sy$txlog。返回事务的txn。

procedure coalesce_log

更新sy$txlog表中所有没有设置相应的ora_rowscn值的所有记录。这是需要的,因为ora_rowscn是在事务提交的时候生成的,换句话说,在sy$txlog表的记录添加后生成。

procedure signal_beep

提出了一个sy$alert警告,如果sync_core_settings表的RAISE_DBMS_ALERTS设置为'Y'。

unconditional_signal_beep

提出一个sy$alert警告。

sync_alert包:

描述:管理来自databus源警报的日常工作。

定义在:database/*/createSchema/schema/cdsddl.prc。

包变量:

变量名字

描述

is_registered

Boolean标记:sy$alert警报是否注册

包方法:

方法原型

描述

function registerSourceWithVersion(source in varchar, version in number) return number注册一个带版本号的源:注册之后,所有发生在这个源上的事件都被waitForEvent返回;如果源不存在返回null(否则返回源)。

procedure unregisterAllSources

不注册所有源,访问这个之后,时间不再被waitForEvent返回。

function waitForEvent(maxWait in number) return varchar等待一个时间不超过指定的时间(秒)。返回与时间相关的消息。

Jobs

J_COALESCE_LOG

描述:每两秒运行一次sync_core.coalesce_log。

定义在:database/*/createSchema/schema/cdsddl.prcJ_CALL_SIGNAL

描述:每秒调用一次sync_core.unconditional_signal_beep定义在:database/*/createSchema/schema/cdsddl.prc触发器

T是databus源的名字(sy$sources的name)

CREATE TRIGGER T_DATABUS_TRG

before insert or update on T

referencing old as old new as new

for each row

begin

if (updating and :new.txn 0) then :new.txn := -:new.txn; else :new.txn := sync_core.getTxn('T'); end if; end;Pull Queries (拉取查询)

定期查询

配置设置:chunkedScnThreshold == -1, useRowChunking = N/A查询参数

sinceScn - 从relay/client读取的最后的SCN。

SELECT /*+ first_rows LEADING(tx) */ sync_core.getScn(tx.scn, tx.ora_rowscn) scn, tx.ts event_timestamp, src.*FROM sy$src, sy$txlog tx

WHERE src.txn=tx.txn AND tx.scn :sinceScn AND tx.ora_rowscn :sinceScn行分块查询

配置设置:chunkedScnThreshold 0, useRowChunking = true查询参数

sinceScn - 从relay/client读取的最后的SCN。

rowsPerChunk - 数据块大小(在sy$txlog中的行)SELECT scn, event_timestamp, src.*

FROM sy$src,

( SELECT /*+ first_rows LEADING(tx) */ sync_core.getScn(tx.scn, tx.ora_rowscn) scn, tx.ts event_timestamp, tx.txn, row_number() OVER (ORDER BY TX.SCN) rFROM sy$txlog tx ");

WHERE tx.scn :sinceScn AND tx.ora_rowscn :sinceScn AND tx.scn 9999999999999999999999999999) t WHERE src.txn = t.txn AND r= :rowsPerChunk ORDER BY r

什么是总线?简要说明AB、DB、CB的含义及其性能?

总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类,计算机的总线可以划分为数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制信号。

总线是一种内部结构,它是cpu、内存、输入、输出设备传递信息的公用通道,主机的各个部件通过总线相连接,外部设备通过相应的接口电路再与总线相连接,从而形成了计算机硬件系统。在计算机系统中,各个部件之间传送信息的公共通路叫总线,微型计算机是以总线结构来连接各个功能部件的。

地址总线AB(Address Bus):用来指定在RAM(Random Access Memory)之中储存的数据的地址。

一种计算机总线,是CPU或有DMA能力的单元,用来沟通这些单元想要访问(读取/写入)计算机内存组件/地方的物理地址。数据总线的宽度,随可寻址的内存组件大小而变,决定有多少的内存可以被访问。

1、地址总线AB是专门用来传送地址的,由于地址只能从CPU传向外部存储器或I/O端口,所以地址总线总是单向三态的,这与数据总线不同。

地址总线的位数决定了CPU可直接寻址的内存空间大小,比如8位微机的地址总线为16位,则其最大可寻址空间为2^16=64KB,16位微型机的地址总线为20位,其可寻址空间为2^20=1MB。一般来说,若地址总线为n位,则可寻址空间为2^n位。

2、控制总线CB(Control Bus):将微处理器控制单元(Control Unit)的信号,传送到周边设备。

控制总线(ControlBus)简称CB。控制总线主要用来传送控制信号和时序信号。控制信号中,有的是微处理器送往存储器和输入输出设备接口电路的,比如:读/写信号、片选信号、中断响应信号等;也有是其它部件反馈给CPU的,比如:中断申请信号、复位信号、总线请求信号、设备就绪信号等。

因此,控制总线的传送方向由具体控制信号而定,一般是双向的,控制总线的位数要根据系统的实际控制需要而定。实际上控制总线的具体情况主要取决于CPU。

控制总线是连接在一起并完成和实现它们之间的通讯与数据传送的,因此总线的概念是理解PC和主板的组成结构、工作原理及部件之间相互关系统的基础。

这些控制信息包括CPU对内存和输入输出接口的读写信号,输入输出接口对CPU提出的中断请求或DMA请求信号,CPU对这些输入输出接口回答与响应信号,输入输出接口的各种工作状态信号以及其他各种功能控制信号。控制总线来往于CPU、内存和输入输出设备之间。

3、数据总线DB(Data Bus):在CPU与RAM之间来回传送需要处理或是需要储存的数据。

数据总线(DataBus)。规范了一个大的集成应用系统中同构系统、异构系统等方面进行数据共享和交换实现方法,系统间数据交换标准。可用于微处理与内存,微处理器与输入输出接口之间传送信息。数据总线的宽度是决定计算机性能的一个重要指标。目前,微型计算机的数据总线大多是32位或64位。

业务实体数据交换:各个子系统在架构分层上都有业务实体层,数据交换机制在业务实体层建立了一层对所有应用系统透明的层。子系统之间,无论其实现的具体技术方案是什么,都可通过业务实体层进行共享和交互,这也就建立了可在子系统间进行持续集成和业务扩展的结构,从而实现一个可扩展的完整的一体化信息系统。

WebService数据交换:是一种Web服务标准,Web服务提供在异构系统间共享和交换数据的方案,也可用于在产品集成中使用统一的接口标准进行数据共享和交换。

扩展资料

技术指标

1、总线的带宽(总线数据传输速率)

总线的带宽指的是单位时间内总线上传送的数据量,即每秒钟传送MB的最大稳态数据传输率?[2]??。与总线密切相关的两个因素是总线的位宽和总线的工作频率,它们之间的关系:

总线的带宽=总线的工作频率*总线的位宽/8;

或者 总线的带宽=(总线的位宽/8 )/总线周期。

2、总线的位宽

总线的位宽指的是总线能同时传送的二进制数据的位数,或数据总线的位数,即32位、64位等总线宽度的概念。总线的位宽越宽,每秒钟数据传输率越大,总线的带宽越宽。

3、总线的工作频率

总线的工作时钟频率以MHZ为单位,工作频率越高,总线工作速度越快,总线带宽越宽。

参考资料来源:百度百科-总线

参考资料来源:百度百科-地址总线

参考资料来源:百度百科-控制总线

参考资料来源:百度百科-数据总线

计算机的总线一般分为哪三类???

计算机的总线分为:控制总线、数据总线和地址总线。

1、控制总线:主要用来传送控制信号和时序信号。

2、数据总线:是双向三态形式的总线,即它既可以把CPU的数据传送到存储器或输入输出接口等其它部件,也可以将其它部件的数据传送到CPU。

3、地址总线:是由CPU 或有DMA 能力的单元,用来沟通这些单元想要存取(读取/写入)。

电脑内存元件/地方的实体位址。

总线是一种内部结构,它是cpu、内存、输入、输出设备传递信息的公用通道,主机的各个部件通过总线相连接,外部设备通过相应的接口电路再与总线相连接,从而形成了计算机硬件系统。

在计算机系统中,各个部件之间传送信息的公共通路叫总线,微型计算机是以总线结构来连接各个功能部件的。

扩展资料:

计算机总线是一组能为多个部件分时共享的信息传送线,用来连接多个部件并为之提供信息交换通路。总线不仅是一组信号线,从广义上讲,总线是一组传送线路及相关的总线协议。

a、主板的总线

在计算机科学技术中,人们常常以MHz表示的速度来描述总线频率。计算机总线的种类很多,前端总线的英文名字是Front Side Bus,通常用FSB表示,是将CPU连接到北桥芯片的总线。计算机的前端总线频率是由CPU和北桥芯片共同决定的。

b、硬盘的总线

一般有SCSI、ATA、SATA等几种。SATA是串行ATA的缩写,为什么要使用串行ATA就要从PATA——并行ATA的缺点说起。

我们知道ATA或者说普通IDE硬盘的数据线最初就是40根的排线,这40根线里面有数据线、时钟线、控制线、地线,其中32根数据线是并行传输的(一个时钟周期可以同时传输4个字节的数据),因此对同步性的要求很高。

参考资料来源:百度百科——总线

数据总线的共享与交换

数据总线(DataBus)。规范了一个大的集成应用系统中同构系统、异构系统等方面进行数据共享和交换实现方法。 系统间数据交换标准

1.业务实体数据交换:各个子系统在架构分层上都有业务实体层,数据交换机制在业务实体层建立了一层对所有应用系统透明的层。子系统之间,无论其实现的具体技术方案是什么,都可通过业务实体层进行共享和交互,这也就建立了可在子系统间进行持续集成和业务扩展的结构,从而实现一个可扩展的完整的一体化信息系统。

2.WebService数据交换:是一种Web服务标准,Web服务提供在异构系统间共享和交换数据的方案,也可用于在产品集成中使用统一的接口标准进行数据共享和交换。

系统间数据交换方式

1.业务实体层的数据交换,这是同构子系统系统间最直接和最高效的交换方案。在同构子系统间通过定义数据对象接口层,通过DTO进行传输,或者直接在数据库中进行数据表的连接或访问,达到同构子系统间的数据共享和交换。例如征管系统内各个子系统间的数据共享和交换、业务系统和数据挖掘间的数据共享。

2.WebService数据交换,在异构子系统间,同时存在数据不集中的情况下,必须使用有效的技术手段来保证异构的数据共享和交换。WebService是基于Web的标准服务,其不受传输协议或硬件的限制,也不受子系统具体实现技术的限制。而且现在较先进完备的应用系统或产品都提供了基于WebService的集成接口。这就解决了异构子系统间的数据共享和交换。WebService也可以解决跨网络和行业系统的数据交换,这需要对方接口单位同样具备WebService服务。

3.格式化文件数据交换,它是与外部系统文件传输,业务上的内部系统和外部信息交换需求,要求提供相应的数据共享和交换技术机制。这类问题通常使用基于文件系统的技术方案解决,例如文件报送、文件交换等。可举例说明:税、库、银三者之间就存在实时和非实时的数据交换,这种交换优化的方案就是使用文件通过Socket进行交换。此类技术实现一般采用底层技术

数据总线可以传输数据信息,不能传输地址信息吗

数据总线 (DataBus):顾名思义数据总线主要用于传送数据信息的,并不能用于传送地址信息。地址信息在地址总线(AddressBus)中传输。

(责任编辑:IT教学网)

更多

推荐网站策划文章