資料庫同步

2021-07-25 08:13:50 字數 4203 閱讀 5011

上次發布訂閱實現資料庫同步,這次用觸發器+**實現了按表的同步。

思路是:1,需同步的a。b兩個表都建立觸發器,和同步表a-trigger,b_trigger。在對錶增刪改的時候,用觸發器記錄存放在同步表中。

2,定時讀取兩個同步表,然後將更改記錄更新到對方的表中。

實現:1 觸發器:建立乙個和a結構一樣的同步表,並新加乙個字段,用來存放操作的型別,如:update,insert,delete。然後在a表上建立觸發器,將對a的增刪改記錄存放到這個同步表中。

use db 

---建立同步表

select top 1 * into unit_trigger from unit;

----刪除臨時表中的資料

delete from unit_trigger;

select * from unit_trigger;

---在臨時表中增加記錄 操作型別的字段 type_trigger

alter table unit_trigger add type_trigger varchar(20);

go----建立插入觸發器

if exists(select name from sysobjects where name='unit_insert_trigger' and type='tr')

drop trigger unit_insert_trigger;

gocreate trigger unit_insert_trigger

on unit

after insert

as begin

insert into probedb.dbo.unit_trigger(c1,c2,c3,type_trigger)

(select c1,c2,c3,'insert' from inserted);

endgo

--建立更改觸發器

if exists(select name from sysobjects where name='unit_update_trigger' and type='tr')

drop trigger unit_update_trigger;

gocreate trigger unit_update_trigger

on unit

after update

as begin

insert into probedb.dbo.unit_trigger (c1,c2,c3,type_trigger)

(select c1,c2,c3,'update' from inserted);

endgo

--建立刪除觸發器

if exists(select name from sysobjects where name='unit_delete_trigger' and type='tr')

drop trigger unit_delete_trigger;

gocreate trigger unit_delete_trigger

on unit

after delete

as begin

insert into probedb.dbo.unit_trigger(c1,c2,c3,type_trigger)

(select c1,c2,c3,'delete' from deleted);

end

2,提取資料並插入

1)編寫實體類,bean

2)編寫dao

public class unitdao 

conn.commit();

} catch (sqlexception e) finally

if(statem!=null)

} catch (sqlexception e)

} return unitlist; }

/*** 清空觸發器記錄表中的資料

* @param conn

*/public void cleartrigger(connection conn,string tbtriggername) catch (sqlexception e)

try catch (sqlexception e) }

/*** 向觸發器表中插入資料

*/public void inserttrigger(connection conn,string tbtriggername,listunittriggerlist) catch (sqlexception e)

}} /**

* 按主鍵查詢資料

* @param conn

* @return

*/public unit selectbykey(connection conn,string tablename, string c1)

} catch (sqlexception e)

return unit; }

/*** 插入一條記錄

* @param conn

* @return

*/public boolean insert(connection conn,string tablename ,unit unit)

} catch (sqlexception e) catch (sqlexception e1)

e.printstacktrace();

} return flag;

} /**

* 更新資料

* @param conn

* @return

*/public boolean update(connection conn,string tablename,unit unit)

} catch (sqlexception e) catch (sqlexception e1)

e.printstacktrace();

} return flag; }

/*** 刪除一條資料

* @param conn

* @return

*/public boolean deletebykey(connection conn,string tablename,unit unit)

} catch (sqlexception e) catch (sqlexception e1)

e.printstacktrace();

} return flag; }

public list readunit(connection conn,string tablename)

conn.commit();

} catch (sqlexception e) finally

if(statem!=null)

} catch (sqlexception e)

} return unitlist; }

}

3) 提取資料並更新
public class unitaccess  implements runnable

writeunit(connb,tablenameb, tbtriggernameb, unitlista);

writeunit(conna,tablenamea, tbtriggernamea, unitlistb);

} public void writeunit(connection conn,string tablename,string tbtriggername,listunitlist)

else

break;

case "update":

unit unitupdate = unitdao.selectbykey(conn ,tablename,unit.getf_dwbh());

if( unitupdate == null)

else

break;

case "delete":

unitdao.deletebykey(conn,tablename, unit);

break;

}}

/***3 刪除更新產生的trigger資料

*/unitdao.cleartrigger(conn,tbtriggername);

/*** 4.恢復trigger 原先的資料

*/if(!unittriggerlist.isempty())

}}

資料庫同步

sql server 2005 同步複製技術 以下實現複製步驟 以快照複製為例 執行平台sql server 2005 一 準備工作 1 建立乙個 windows 使用者,設定為管理員許可權,並設定密碼,作為發布快照檔案的有效訪問使用者。2 在sql server下實現發布伺服器和訂閱伺服器的通訊正...

django 資料庫同步

我們簡單介紹下django 資料庫同步的工具 1.syncdb django自帶了乙個簡易的資料庫同步工具 syncdb manage.py syncdb 根據models.py建立資料庫表 manage.py validate 檢驗資料模型 是否正確 manage.py sql 顯示表建立的sql...

Django同步資料庫

問題描述 使用django部署web應用時,同步資料庫遇到問題 root localhost chickenrun manage.py syncdb nameerror name amdin is not defined 直接去python的直譯器中,檢測django.contrib.admin 環...