實現跨資料庫表同步的方法
描述:資料庫A中的表table1,實時同步到資料庫B
1、在資料庫A中設定訪問資料庫B的連結伺服器。
2、在兩個資料庫之間表中,選擇一個表,對其新增、刪除、修改操作設定觸發器,通過觸發器實現資料同步到其他資料庫的表。
-建立觸發器,同步遠端表_新增操作
CREATE TRIGGER SYN_RemoteTable_Insert
ON Table
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
INSERT [vRemoteTable] SELECT * FROM inserted
END
GO
--建立觸發器,同步遠端表_同步操作
CREATE TRIGGER [dbo].[SYN_RemoteTable_Update]
ON Table
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE vRemoteTable set ID=u.ID,Name=u.Name
FROM inserted u where u.ID=vRemoteTable.ID
END
--建立觸發器,同步遠端表_刪除操作
CREATE TRIGGER [dbo].[SYN_RemoteTable_Delete]
ON Table
AFTER DELETE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ID int;
select top 1 @ID=IsNull(ID,-1) from deleted;
delete vRemoteTable where
END
GO
1. 雙方啟動MSDTC服務
MSDTC服務提供分散式事務服務,如果要在資料庫中使用分散式事務,必須在參與的雙方伺服器啟動MSDTC(Distributed Transaction Coordinator)服務。
2. 開啟雙方135埠
MSDTC服務依賴於RPC(Remote Procedure Call (RPC))服務,RPC使用135埠,保證RPC服務啟動,如果伺服器有防火牆,保證135埠不被防火牆擋住。
使用“telnet IP 135 ”命令測試對方埠是否對外開放。也可用埠掃描軟體(比如Advanced Port Scanner)掃描埠以判斷埠是否開放。
3. 保證連結伺服器中語句沒有訪問發起事務伺服器的操作
在發起事務的伺服器執行連結伺服器上的查詢、檢視或儲存過程中含有訪問發起事務伺服器的操作,這樣的操作叫做環回(loopback),是不被支援的,所以要保證在連結伺服器中不存在此類操作。
4. 在事務開始前加入set xact_abort ON語句
對於大多數 OLE DB 提供程式(包括 SQL Server),必須將隱式或顯示事務中的資料修改語句中的 XACT_ABORT 設定為 ON。唯一不需要該選項的情況是在提供程式支援巢狀事務時。
5. MSDTC設定
開啟“管理工具――元件服務”,以此開啟“元件服務――計算機”,在“我的電腦”上點選右鍵。在MSDTC選項卡中,點選“安全配置”按鈕。
在安全配置視窗中做如下設定:
l選中“網路DTC訪問”
l在客戶端管理中選中“允許遠端客戶端”“允許遠端管理”
l在事務管理通訊中選“允許入站”“允許出站”“不要求進行驗證”
l保證DTC登陸賬戶為:NT Authority/NetworkService
6. 連結伺服器和名稱解析問題
建立連結sql server伺服器,通常有兩種情況:
l第一種情況,產品選”sql server”
EXEC sp_addlinkedserver
@server='linkServerName',
@srvproduct = N'SQL Server'
這種情況,@server (linkServerName)就是要連結的sqlserver伺服器名或者ip地址。
l第二種情況,訪問介面選“Microsoft OLE DB Provider Sql Server”或“Sql Native Client”
EXEC sp_addlinkedserver
@server=' linkServerName ',
@srvproduct='',
@provider='SQLNCLI',
@datasrc='sqlServerName'
這種情況,@datasrc(sqlServerName)就是要連結的實際sqlserver伺服器名或者ip地址。
Sql server資料庫引擎是通過上面設定的伺服器名或者ip地址訪問連結伺服器,DTC服務也是通過伺服器名或者ip地址訪問連結伺服器,所以要保證資料庫引擎和DTC都能通過伺服器名或者ip地址訪問到連結伺服器。
資料庫引擎和DTC解析伺服器的方式不太一樣,下面分別敘述
6.1 資料庫引擎
第一種情況的@server或者第二種情況的@datasrc設定為ip地址時,資料庫引擎會根據ip地址訪問連結伺服器,這時不需要做名稱解析。
第一種情況的@server或者第二種情況的@datasrc設定為sql server伺服器名時,需要做名稱解析,就是把伺服器名解析為ip地址。
有兩個辦法解析伺服器名:
一是在sql server客戶端配置中設定一個別名,將上面的伺服器名對應到連結伺服器的ip地址。
二是在“C:/WINDOWS/system32/drivers/etc/hosts”檔案中增加一條記錄:
xxx.xxx.xxx.xxx 伺服器名
作用同樣是把伺服器名對應到連結伺服器的ip地址。
6.2 DTC
不管哪一種情況,只要@server設定的是伺服器名而不是ip地址,就需要進行名稱解析,辦法同上面第二種辦法,在hosts檔案中增加解析記錄,上面的第一種辦法對DTC不起作用。
如果@server設定的是ip地址,同樣不需要做域名解析工作。
相關推薦
實現跨資料庫表同步的方法
描述:資料庫A中的表table1,實時同步到資料庫B 1、在資料庫A中設定訪問資料庫B的連結伺服器。 2、在兩個資料庫之間表中,選擇一個表,對其新增、刪除、修改操作設定觸發器,通過觸發器實現資料同步到其他資料庫的表。 -建立觸發器,同步遠端表_新增操作CREATE TRIGG
使用Navicat實現MySQL資料庫 表結構同步
專案開發時,一般會有兩個(或以上)的資料庫,一個開發庫和一個正式庫,在開發庫修改的表結構如何才能快速同步到正式庫中呢?如果手動一個個欄位或屬性去修改,實在太麻煩,而且容易遺漏,這更不是一個搞IT的人該用的手段! 有了Navicat,就能快速實現資料庫的同步,包括結構同步,資
java程式碼實現MySQL資料庫表千萬條資料去重
準備工作: 1.資料庫表:datatest5 2.欄位: id 主鍵自增,val 重複值欄位併為val建立索引 3.設定innodb緩衝池大小 show variables like "%_buffer%"; SET GLOBAL innod
SQL語句實現跨資料庫訪問
SQL語句實現跨資料庫訪問 第一步: 啟用Ad Hoc Distributed Queries語句: exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'Ad
SA_JOB_QUEUE查詢佇列狀態表(查詢資料庫表的方法)
SA_JOB_QUEUE查詢佇列狀態表 今天突然有人問了我一個問題,我們系統的佇列狀態表在哪一個表中,瞬間懵逼,這對一個時刻操縱著資料庫的人來說是多麼大的打擊。然後我立馬找到user_tables的這個表(這個是查詢當前使用者下的所有的表)。 select * from user_table
PowerDesigner 連線oracle直接生成資料庫表的方法
創建於 2012-05-08 遷移自個人的百度空間 -------------------------------- 首先機子要裝有oracle驅動程式(在裝oracle伺服器端或客戶端就自動安裝上的oracle的驅動程式) 然後依據下面步驟: 1、database-
(Java實現)資料庫表結構掃描,壞行壞列掃描實現
(Java實現)Cache資料庫表結構掃描,壞行壞列掃描實現 最近接觸了Cache資料庫,需要將海量資料通過sqoop抽取到hadoop平臺。但是發現一個問題,Cache資料庫是一個後關係型資料,底層是按照global進行存存的,表結構的定義通過preside
QueryRunner類實現對資料庫表中資料的增刪改查以及八種結果集
update()方法實現增刪改 QueryRunner的update方法 update(Connection conn, String sql, Object… params) 能夠實現對錶中資料的增刪改,返回int型別的數值,表
SQL SERVER 資料庫表同步複製 筆記 SqlServer2008 資料庫同步的兩種方式 (釋出、訂閱)
SQL SERVER 資料庫表同步複製 筆記 同步複製可執行在不同版本的SQL Server服務之間 環境模擬需要兩臺資料庫192.168.1.1(釋出),192.168.1.10(訂閱) 1、在釋出和訂閱機中建立兩個相同的賬戶(如: sqladmin),使用者名稱和密碼都一致,隸屬於administr
南瓜先生-------java三種實現跨域請求的方法
1.第一種:JQuery中的getJson,簡單明瞭。 $.getJson(url+'callback=?',data, function(data){ callback(data); }) 2.帶jsonp的ajax非同步請求。 $(function()
php 如何在HTML頁面中實現對資料庫表資料的增刪改查
上一篇詳細說明了如何將資料庫中的資料列印到html頁面上,本篇將介紹如何在HTML頁面的表格裡進行對資料庫內容的增刪改查還是借用上一篇的頁面,在此基礎上增加了操作按鈕:<!doctype html><html><head><meta charset="utf-8"
SqlYog 匯出mysql資料庫表結構方法
工具:sqlyog 01.連線需要匯出資料結構的庫 02.選擇資料庫,---右擊-----在建立資料庫架構html 03.選擇要匯出的表-----建立
PHP實現跨域的解決方法
PHP實現跨域解決方法 如果要實現跨域通過設定Access-Control-Allow-Origin來實現跨域。 例如:客戶端的域名是client.runoob.com,而請求的域名是server.runoob.com。 如果直接使用ajax訪問,會有以下錯誤: XMLHtt
(JDBC)利用Java反射編寫一個萬能的資料庫表查詢方法
在用JDBC的過程中,我們可能會根據實際需求來編寫N個查詢方法(特別是新手),這樣雖然簡單,但是會產生大量的重複程式碼。且不容易維護。那麼有沒有辦法,只編寫一個方法呢? 通過分析,不難發現,對於查詢,我們發現除了SQL語句的變動意外,就是實體
SqlYog 匯出mysql資料庫表結構方法
工具:sqlyog 01.連線需要匯出資料結構的庫 02.選擇資料庫,---右擊-----在建立資料庫架構html 03.選擇要匯出的表-----建立 04.選擇儲存位置 05.正在匯出 06.匯出成功 07.彈出視窗,-----可以點選每個連線, --
JS工具函式封裝:使用隱藏iframe實現跨域表單提交
程式碼如下: /* * 使用隱藏的iframe傳送表單提交 * Author: 鄧智容 * Created: 2017-06-19, Last-Modified: 2017-06-19 * 依賴 jQuery或者 Zepto * * * o
利用oracle快照dblink解決資料庫表同步問題
本例項已完全通過測試,單向,雙向同步都可使用. --名詞說明:源——被同步的資料庫 目的——要同步到的資料庫 前6步必須執行,第6以後是一些輔助資訊. --1、在目的資料庫上,建立dblinkdrop public database link dblink_orc92_182;Crea
shell指令碼實現mysql資料庫表和表結構的對比
在專案維護和開發中,經常需要知道兩個資料庫之間有哪些差異,如兩個資料庫中資料表有什麼不同(表的名稱,數量),相同的表字段是否相同(欄位數目,約束,欄位型別,大小等),有各種資料庫管理工具可以實現這一點,但是別人的東西用起來總是沒有自己的順手(比如有的工具直接生成
利用ES6-Promise()方法封裝原始jsonp實現跨域請求公用方法(告別使用JQuery封裝好的jsonp)
在專案中,經常需要用到jsonp實現跨域請求,假如使用JQuery封裝好的jsonp方法,是很容易實現的,缺點:需要引入JQuery庫。 $.ajax({ url : './package.json', type : 'get',
利用JDBC連線實現跨伺服器跨資料庫跨表資料傳輸
如題 我現在有兩個伺服器 A和B 我現在要把A伺服器上的某一個庫裡面的所有的表及結構及資料 匯入另外一個伺服器上,實現原理利用原始JDBC 完成 程式碼類: 回家再擼 目前在公司 。。 下班 哈哈 晚上吃了點飯 就回來