第一個(gè)表結(jié)構(gòu)有問題:我理解的應(yīng)該是id為一個(gè)字段,menbers為一個(gè)字段(表B的外鍵)
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、網(wǎng)站空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、枝江網(wǎng)站維護(hù)、網(wǎng)站推廣。
id menbers(id和menbers為聯(lián)合主鍵)
1 1
1 2
1 3
1 6
1 8
2 2
...
我不理解你表A menber字段s是怎能存儲(chǔ)的,不是數(shù)組吧?這個(gè)我不清楚。
查詢的時(shí)候直接select A.id B.name from A , B where A.menbers = B.id;就行
如果你希望知道用戶表的結(jié)構(gòu)的修改時(shí)間,
你可以到系統(tǒng)表中去找,比如:sysobjects,syscolumns
如果你希望或者表中數(shù)據(jù)的修改時(shí)間,那么沒有的,只有自己維護(hù)一個(gè)數(shù)據(jù)修改列,在程序中維護(hù),或者通過觸發(fā)器維護(hù)。
軟件說明
通過etl工具定時(shí)將SqlServer指定的表數(shù)據(jù)同步到oracle數(shù)據(jù)庫(kù)
在數(shù)據(jù)庫(kù)建立增刪改的觸發(fā)器。觸發(fā)器將變更放到臨時(shí)表里。
通過etl工具讀取臨時(shí)表同步給oracle
優(yōu)點(diǎn):比較實(shí)時(shí)
缺點(diǎn):影響到業(yè)務(wù)系統(tǒng),因?yàn)樾枰跇I(yè)務(wù)系統(tǒng)建立觸發(fā)器
實(shí)例說明:
例如在sqlserver有一張用戶表(sys_user)需定時(shí)同步oracle數(shù)據(jù)庫(kù)的用戶表,
包括新增、刪除、修改同步
給同步的表建三類觸發(fā)器:
insert觸發(fā)器:向表中插入數(shù)據(jù)時(shí)被觸發(fā);
update觸發(fā)器:修改表中數(shù)據(jù)時(shí)被觸發(fā);
delete觸發(fā)器:從表中刪除數(shù)據(jù)時(shí)被觸發(fā)。
以sqlserver的用戶表舉例,
Sqlserver的sys_user表,有兩個(gè)字段id,name
具體流程:
以新增數(shù)據(jù)舉例
? 一、在sqlserver新建觸發(fā)器trigger_sysuser_insert
if (object_id('trigger_sysuser_insert') is not null)
drop trigger trigger_sysuser_insert
go
create trigger trigger_sysuser_insert
on sys_user --表名
for insert --插入后觸發(fā)
--instead of insert --插入前觸發(fā),使用插入前觸發(fā)時(shí),不執(zhí)行默認(rèn)插入
as
--開始執(zhí)行邏輯
declare @id int, @name varchar(20);
select @id = id, @name = name from sys_user; -------------- inserted 存放了當(dāng)前插入的值
--select @name,@age
---創(chuàng)建臨時(shí)表
if not exists (select * from sysobjects where id = object_id('##sys_user_insert')
and OBJECTPROPERTY(id, 'IsUserTable') = 1)
create table ##sys_user_insert
(
id int,
name varchar(32)
);
insert into ##sys_user_insert (id,name) values(@id,@name);
go
在sys_user新增數(shù)據(jù)時(shí)會(huì)被觸發(fā),將新增的數(shù)據(jù)加入臨時(shí)表##sys_user_insert,此時(shí)
的臨時(shí)表 ##sys_user_insert會(huì)增加一條記錄
? 二、配置elt流程
節(jié)點(diǎn)1 從臨時(shí)表讀取數(shù)據(jù),寫入數(shù)據(jù)流
節(jié)點(diǎn)2 從數(shù)據(jù)流獲取數(shù)據(jù)寫入oracle
節(jié)點(diǎn)3 從sqlserver的臨時(shí)表刪除已經(jīng)被同步的記錄
? 三、建立作業(yè)調(diào)度
設(shè)置調(diào)度周期
適用增量數(shù)據(jù)同步
在要同步的源表里有時(shí)間戳字段,每當(dāng)數(shù)據(jù)發(fā)生新增,時(shí)間戳?xí)涗洶l(fā)生變化的時(shí)間,etl工具根據(jù)時(shí)間范圍定時(shí)同步數(shù)據(jù)
優(yōu)點(diǎn):基本不影響業(yè)務(wù)系統(tǒng)
缺點(diǎn):要求源表必須有時(shí)間戳這一列,適用增量場(chǎng)景,修改、刪除不太適用
定時(shí)清空oracle數(shù)據(jù)源,將sqlserver的數(shù)據(jù)全盤拷貝到oracle數(shù)據(jù)源。一般用于數(shù)據(jù)量不大,實(shí)時(shí)性要求不高的場(chǎng)景。
優(yōu)點(diǎn):基本不影響業(yè)務(wù)系統(tǒng),開發(fā)、部署都很簡(jiǎn)單
缺點(diǎn):效率低
Etl流程
結(jié)論
準(zhǔn)能現(xiàn)場(chǎng)數(shù)據(jù)同步,涉及增、刪、改的同步,比較適用觸發(fā)器的方式進(jìn)行數(shù)據(jù)同步,但觸發(fā)器仍會(huì)存在失效的情況,若現(xiàn)場(chǎng)有數(shù)據(jù)質(zhì)量系統(tǒng),定期數(shù)據(jù)稽核,查缺補(bǔ)漏,保證兩邊數(shù)據(jù)庫(kù)的一致性;