databus(大踏步是什么意思)
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)中传输。