你可以分三個來寫,分別用來監視insert\delete\update三個(這樣寫容易完成),我下面寫一個,你其它有可以參照下面這個來寫
--插入行的情況
CREATE TRIGGER [填入觸發器名] ON [dbo].[表名]
FOR INSERT
AS
insert [另外一個資料庫名].[dbo].[表名] select * from inserted
你也可以參照料我下面這段,寫在一起,但比較麻煩,我就不具體按你要求的寫了羅.
CREATE trigger [資料庫A.tr_user] on [user]
/* 觸發器 在資料庫A的user表建立一個名字tr_user的觸發器 */
for update,insert,delete
/*監視 修改 插入 刪除*/
as
if not exists (select * from deleted)
/* 如果deleted表為空,那麼 */
insert 資料庫B..[user](username,userpass,landtime) select username,password,lastlogin from inserted
/* 將inserted表(就是對於觸發器來說剛剛被插入的集合)插入到B.user */
else if not exists (select * from inserted)--刪除
/* 否則 如果 inserted集合為空 */
delete 資料庫B..[user] where id in (select userid from deleted)
/* 那麼刪除B.user下id是deleted集合中出現的id 這里用了in */
else--更新
update [user]
set
[user].username=i.username,
[user].userpass=i.password
from 資料庫B..[user] as [user],
inserted as i
where [user].id=i.userid
/* update就很明顯了,凡是updated的都來更新,保持一樣就可以了 */
alter table 資料庫B..[user] ENABLE TRIGGER [資料庫B.tr_user]
Ⅱ 如何實現oracle兩個資料庫之間的同步
為方便完成指定數據表的同步操作,可以採用dblink與merge結合的方法完成。
操作環境: 此資料庫伺服器ip為192.168.196.76,有center與branch兩個庫,一般需要將center的表數據同步到branch,center為源庫,branch為目標庫,具體步驟如下:
1.在源庫創建到目標庫的dblink
create database link branch --輸入所要創建dblink的名稱,自定義
connect to dbuser identified by 「password」 --設置連接遠程資料庫的用戶名和密碼
using '192.168.196.76/branch'; --指定目標資料庫的連接方式,可用tns名稱
在創建dblink時,要注意,有時候可能會報用戶名和密碼錯誤,但實際上我們所輸入的賬戶信息是正確的,此時就注意將密碼的大小寫按伺服器上所設置的輸入,並在賬號密碼前號加上雙引號(伺服器版本不同造成的)。
2.成功後驗證dblink
select * from tb_bd_action@branch; --查詢創建好的brach庫
正常情況下,如果創建dblink成功,可採用該方式訪問到遠程資料庫的表.
3.通過merge語句完成表數據同步
此例中需要將center庫中的tb_sys_sqlscripe表同步到branch,簡單的語法如下:
merge into tb_sys_sqlscripe@branch b using tb_sys_sqlscripe c on (b.pk=c.pk) --從center將表merge到branch,同步的依據是兩個表的pk
when matched then update set b.sqlscripe=c.sqlscripe,b.author=c.author --如果pk值是相同則將指定表的值更新到目標表
when not matched then --如果pk值不一至,則將源表中的數據整條插入到目標表中
insert values (c.pk, c.fk, c.createtime, c.lastmodifytime,c.author,c.mole,c.deleteflag, c.scripttype);
commit; --記得merge後必須commit,否則更改未能提交
4.為方便每次需要同步時自動完成同步工作,可將該語句做成存儲過程或腳本來定時執行或按要求手動執行,簡單說一下創建腳本的方法:
a.創建merge文件夾
b.先將merge語句寫完整後,存到merge.sql文件中
c.新建merge.bat文件,編輯後寫入以下內容
sqlplus user/password@serverip/database @"%cd%\merge.sql"
Ⅲ Sql資料庫同步怎麼做(資料庫數據同步)
哪個資料庫?Mysql還是Mssql?MSSQL數據同步利用資料庫復制技術實現數據同步更新(來自網路,也是非常完美的教程)復制的概念復制是將一組數據從一個數據源拷貝到多個數據源的技術,是將一份數據發布到多個存儲站點上的有效方式。使用復制技術,用戶可以將一份數據發布到多台伺服器上,從而使不同的伺服器用戶都可以在許可權的許可的范圍內共享這份數據。復制技術可以確保分布在不同地點的數據自動同步更新,從而保證數據的一致性。SQL復制的基本元素包括出版伺服器、訂閱伺服器、分發伺服器、出版物、文章SQL復制的工作原理SQLSERVER主要採用出版物、訂閱的方式來處理復制。源數據所在的伺服器是出版伺服器,負責發表數據。出版伺服器把要發表的數據的所有改變情況的拷貝復制到分發伺服器,分發伺服器包含有一個分發資料庫,可接收數據的所有改變,並保存這些改變,再把這些改變分發給訂閱伺服器SQLSERVER復制技術類型SQLSERVER提供了三種復制技術,分別是:
1、快照復制(呆會我們就使用這個)
2、事務復制
3、合並復制只要把上面這些概念弄清楚了那麼對復制也就有了一定的理解。接下來我們就一返飢步一步來實現復制的步驟。
第一先來配置出版伺服器(1)選中指定[伺服器]節點(2)從[工具]下拉菜單的[復制]子菜單中選擇[發布、訂閱伺服器和分發]命令(3)系統彈出一個對話框點[下一步]然後看著提示一直操作到完成。(4)當完成了出版伺服器的設置以後系統會為該伺服器的樹形結構中添加一個復制監視器。同時也生成一個分發資料庫
第二創建出版物(1)選中指定的伺服器(2)從[工具]菜單的[復制]子菜單中選擇[創建和管理發布]命令。此時系統會彈出一個對話框(3)選擇要創建出版物的資料庫,然後單擊[創建發布](4)在[創建發布向導]的提示對話框中單擊[下一步]系統就會彈出一個對話框。對話框上的內容是復制的三個類型。我們現在選第一個也就是默認的快照發布(其他兩個大家可以去看看幫助)(5)單擊[下一步]系統要求指定可以訂閱該發布的資料庫伺服器類型,SQLSERVER允許在不同的數據正帶庫如ORACLE或ACCESS之間進行數據復制。但是在這里我們選擇運行""的資料庫伺服器(6)單擊[下一步]系統就彈出一個定義文章的對話框也就是選擇要出版的表(7)然後[下一步]直到操作完成。當完成出版物的創建後創建出版物的資料庫也就變成了一個共享資料庫。
第三設計訂閱(1)選中指定的訂閱伺服器(2)從[工具]下拉菜單中選擇[復制]子菜單的[請求訂閱](3)按照單擊[下一步]操作直到系統會提示檢查SQLSERVER代理服務的運行狀態,執行復制操作的前提條件是SQLSERVER代理服務必須已經啟動。(4)單擊[完成]。完成訂閱操作。完成上面的步驟其實復制也就是成功了。但是如何來知道復制是否成功了呢?這里可以通過這種舉世蘆方法來快速看是否成功。展開出版伺服器下面的復制——發布內容——右鍵發布內容——屬性——擊活——狀態然後點立即運行代理程序接著點代理程序屬性擊活調度把調度設置為每一天發生,每一分鍾,在0:00:00和23:59:59之間。接下來就是判斷復制是否成功了打開
採納哦
Ⅳ 如何同步sql server里的數據
有時由於項目開發的需要,必須將SQLServer2005中的某些表同步到Oracle資料庫中,由其他其他系統來讀取這些數據。不同資料庫類型之間的數據同步我們可以使用鏈接伺服器和SQLAgent來實現。假設我們這邊(SQLServer2005)有一個合同管理系統,其中有表contract 和contract_project是需要同步到一個MIS系統中的(Oracle9i)那麼,我們可以按照以下幾步實現資料庫的同步。
1.在Oracle中建立對應的contract 和 contract_project表,需要同步哪些欄位我們就建那些欄位到Oracle表中。
這里需要注意的是Oracle的數據類型和SQLServer的數據類型是不一樣的,那麼他們之間是什麼樣的關系拉?我們可以在SQLServer下運行:
SELECT *
FROM msdb.dbo.MSdatatype_mappings
SELECT *
FROM msdb.dbo.sysdatatypemappings
來查看SQLServer和其他資料庫系統的數據類型對應關系。第一個SQL語句是看SQL轉Oracle的類型對應,而第二個表則更詳細得顯示了各個資料庫系統的類型對應。根據第一個表和我們的SQLServer中的欄位類型我們就可以建立好Oracle表了。
SQLServer和Oracle的對應
2.建立鏈接伺服器。我們將Oracle系統作為SQLServer的鏈接伺服器加入到SQLServer中。
Ⅳ SQLSERVER跨資料庫數據同步(sqlserver資料庫雙向同步)
A、B兩個資料庫在同一個伺服器上?
可以用觸發器實現,如果A、B資料庫的數據都會變化的話,那麼兩邊都要建立觸發器,比如A庫a表上建立觸發器(增刪改都需要,只舉插入觸旦滑發器的例子)
select@欄位1=欄位1,@欄位2=欄位2,@主鍵=主鍵...
frominserted
ifexists(select*fromB.dbo.awhere主鍵=@主鍵)
begin
--如果有重復的數據怎麼處理?是報錯,還是不做任何處理直接return,在這禪遲輪里寫語句
end
insertintoB.dbo.a(欄位1,欄位2....)
values(@欄位1,@欄位2....)
如果不在同一台伺服器上,用觸發器就不太保險,因為如果其中一台伺服器出了故障,對表的增刪改操作都會出問題,賀信除非你能保證兩台伺服器都能運行正常,或者可以在很短的時間內排除故障。
Ⅵ 如何同步ORACLE和sqlserver的數據
1.在Oracle中建立對應的contract 和 contract_project表,需要同步哪些欄位我們就建那些欄位到Oracle表中。
這里需要注意的是Oracle的數據類型和SQLServer的數據類型是不一樣的,那麼他們之間是什麼樣的關系拉?我們可以在SQLServer下運行:
SELECT *
FROM msdb.dbo.MSdatatype_mappings
SELECT *
FROM msdb.dbo.sysdatatypemappings
來查看SQLServer和其他資料庫系統的數據類型對應關系。第一個SQL語句是看SQL轉Oracle的類型對應,而第二個表則更詳細得顯示了各個資料庫系統的類型對應。根據第一個表和我們的SQLServer中的欄位類型我們就可以建立好Oracle表了。
SQLServer和Oracle的對應
2.建立鏈接伺服器。我們將Oracle系統作為SQLServer的鏈接伺服器加入到SQLServer中。
具體做法參見我以前的文章http://www.cnblogs.com/studyzy/archive/2006/12/08/690307.html
3.使用SQL語句通過鏈接伺服器將SQLServer數據寫入Oracle中。
比如我們建立了鏈接伺服器MIS,而Oracle中在MIS用戶下面建立了表contract_project,那麼我們的SQL語句就是:
DELETE FROM MIS..MIS.CONTRACT_PROJECT
--清空Oracle表中的數據
INSERT into MIS..MIS.CONTRACT_PROJECT--將SQLServer中的數據寫到Oracle中
SELECT contract_id,project_code,actual_money
FROM contract_project
如果報告成功,那麼我們的數據就已經寫入到Oracle中了。用
SELECT *
FROM MIS..MIS.CONTRACT_PROJECT
查看Oracle資料庫中是否已經有數據了。
4.建立SQLAgent,將以上同步SQL語句作為執行語句,每天定時同步兩次。
這樣我們的同步就完成了。
這里需要注意的是MIS..MIS.CONTRACT_PROJECT 這里必須要大寫,如果是小寫的話會造成同步失敗。