『壹』 Oracle 和 sql 兩個資料庫,實時同步數據,可以怎麼做
用ESB工具吧,金蝶中間件、IBM都有這種,可以進行數據同步的操作。
當然,他們是收費的。金蝶中間件的便宜點,IBM的貴點,同樣,性能上有些區別,不過區別不是很大。
不想花錢,就修改你的應用系統唄。
『貳』 Oracle資料庫,實現兩個表結構完全一致的資料庫數據同步,實時同步這兩個資料庫下所有表,請大神指點!
真實的應用環境下不會使用觸發器來實現這個功能。一般使用OGG、DSG這樣的第三方同步工具。
『叄』 如何實現不同平台oracle資料庫同步
ETL工具把,或者自己用某種語言來實現
考察一下SymmetricsDS吧, 開源的資料庫同步工具。功能完善, 針對不同廠商資料庫間的同步, 同種資料庫更是小菜。 優點:
基於觸發器觸發數據同步, 穩定可靠, 及時同步。 針對異構資料庫之間,也能通過豐富的數據轉換實現。 缺點:
SymmetricsDS自身的配置表有30、40個, 和業務表放在一起比較礙眼。靠觸發器觸發, 如果業務有觸發器,需要整合在一起。 英文文檔,
資料較少。文檔比較全面, 該有的都有說明,但是感覺實例較少, 比如數據沖突的處理, 還用數據轉換, 都有說明,但是沒有太多例子,
需要啃文檔,自己一點點嘗試。我們採用的是oracle, mysql 兩個主資料庫,同步到同一個從資料庫的結構。
Oracle的schema和從資料庫的Schema有不少差別, 需要進行轉換, 目前運行良好, 比較穩定。
自己寫ETL腳本,或者用Golden Gate。
『肆』 求推薦一款oracle資料庫同步軟體
i2Active為您提供高可用和實時數據整合方案,協助Oracle資料庫系統保持7*24小時運作,滿足最終用戶連續可用的要求。幫助您在企業范圍內快速分發或收集關鍵數據,以便及時和准確的決策。
『伍』 關於 ORACLE 資料庫 數據同步(實時同步和非同步同步)
做個資料庫鏈接,A表插入數據以後就往B表插入,用觸發器實現
在任何實時數據同步和復制中,需要考慮如下幾個關鍵問題:
事務一致性:在復制目標端需要按照源端相同的事務環境進行提交,確保目標上數據一致性。
檢查點機制:在抽取和負責時都需要記錄檢查點位置,確保網路故障或GG本身故障下仍然能夠完整復制。
可靠數據傳輸:需要保證數據傳輸的完整性,請求和應答,同時提供數據加密和傳輸過程中的壓縮。
『陸』 如何實現兩個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"
『柒』 linux下oracle資料庫同步方案
stream,dataguard,Golden Gate
stream 現在oracle已經不再提供技術支持,
所以推薦使用dataguard,通過log日誌傳輸保證主備庫數據一致性,文檔較多。
而golden gate是oracle另一款數據同步工具,需要license。實驗可以考慮使用。
『捌』 如何跨Oracle資料庫實現表級別的實時同步
一. 前言
這個問題是上一篇文章《Oracle跨資料庫實現定時同步指定表中的數據》中所提問題的進一步延伸。考慮到對數據的實時性要求比較高,設置成定時同步,有點不妥,需要改善升級更改為實時同步。
下面介紹到的方式,嚴格意義上說,並沒有實現實時同步。是通過Oracle資料庫創建同義詞+DBlink的方式,來建立遠程映射。在查看數據時,直接去遠程查詢源庫中的表。
而我一直關注的是如何進行同步數據,卻沒有考慮到可以建立映射。另外,還有一點就是需要交代,就是同步到目標資料庫中的表,不進行增刪改操作,只進行查詢的操作,這也是可以使用同義詞方式解決問題的關鍵。
這種解決思路的出現,多虧了在CSDN問答時,熱心網友的回答,下面就是問題詳情描述。
二. 問題描述
有兩個Oracle資料庫,分別布置在不同的伺服器上,系統均為windows2003;
這里暫且說成是一個主資料庫和從資料庫:
(1) 主資料庫:oracle_A;
(2) 從資料庫:oracle_B;
在oracle_A中有一個表table_A與oracle_B中的表table_B結構相同;
我是處在oracle_B,oracle_A資料庫分配給我有一個訪問oracle_A表table_A的用戶,該用戶只擁有查詢的許可權;
另外,需要說明的一點,就是在oracle_B處,只需對table_B表進行查詢的操作,不進行其他增刪改的操作。
場景介紹完了,我的問題的是,如何在oracle_A中表table_A發生變化時,實時更新同步到oracle_B的table_B中?
我原來的處理方式:
通過建立遠程連接DBLink+JOB定時任務+存儲過程的方式,實現了定時同步更新,但不能做到實時同步。
三. 採用同義詞+DB_Link的方式結果步驟
之所以能夠選擇採用同義詞的方式,處理這個問題。主要還是源於在問題描述中提到一個點,那就是我們只需要對同步後的表進行查詢操作。這點是使用同義詞方式的重要要素。
下面詳細模擬一下整個實驗測試的過程:
(1)首先在Oracle_A端創建一個對table_A只有查詢功能的用戶
<1> 創建用戶
sqlplus /nolog
conn /as sysdba;
create user username identified by password;
<2> 查看所有的用戶列表
用戶創建完成後,查看用戶是否創建成功
select * from all_users;
<3>授予許可權
為了能夠保證能夠登陸,必須賦予如下許可權
--授予username用戶創建session的許可權,即登陸許可權
grant create session to username;
--授予username用戶使用表空間的許可權
grant unlimited tablespace to username;
--oracle對許可權管理比較嚴謹,普通用戶之間也是默認不能互相訪問的,需要互相授權.
--如果scott用戶要授權給username用戶查看自己的test表的許可權;
sqlplus scott/tiget@localhost:1521/orcl
--授予username用戶查看指定的許可權
grant select on test to username;
--撤銷許可權
基本語法同grant,關鍵字為revoke;
(2)驗證用戶是否可以成功登錄,並進行訪問授權的表
--使用sqlplus登錄,並進行查詢
sqlplus username/password@localhost:1521/orcl;
select * from scott.test;
注意:查詢表時,務必帶上用戶名,說明是哪個用戶下的表。
(3)創建遠程連接DB_Link
<1> 創建遠程連接 db_link
create public database link db32connect to tian_test identified by "tian_test" using '192.168.56.6:1521/ORCL'
<2> 測試遠程連接是否成功
select * from tian_smart.zh_item_news@db32;
(4)在Oracle_B端創建同義詞
<1> 使用sqlplus登錄自己的用戶
sqlplus tian_smart/tian_smart@localhost:1521/orcl
<2> 創建同義詞
create or replace public synonym TEST1130 for scott.TEST@db32;
<3> 查詢測試
select * from TEST1130;
可以看到這與在Oracle_A源資料庫中查到的table_A表中的數據一樣.
注意事項:
當遠程查詢的資料庫中包含BLOB欄位時,會報出如下錯誤.
ORA-22992: 無法使用從遠程表選擇的 LOB 定位器
當出現這個錯誤的時候,那是因為跨庫連接查詢中的表中存在BLOB類型的欄位,所以一定要注意,所有表中存在blob類型欄位,
不能用 select * from 連接的表
不能將blob類型的欄位出現在腳本中。
如果這些blob類型的欄位一定要導過來,可以先建立臨時表再插入本地表,方法如下.在pl/sql中執行
第一步 建臨時表
create global temporary table foo ( X BLOB )
on commit delete rows;
第二步 插入本地表
insert into foo select blobcolumn from remoteTable@dl_remote ;
『玖』 有沒有ORACLE與MYSQL數據同步的工具
阿里巴巴的otter(只能從MySQL到Oracle)。
其實我覺得可以自己寫反而更方便些!
可以在Linux中設定定時任務,從MySQL中取數據同步到Oracle中。