oracle資料庫數據同步
❶ 關於 ORACLE 資料庫 數據同步(實時同步和非同步同步)
做個資料庫鏈接,A表插入數據以後就往B表插入,用觸發器實現
在任何實時數據同步和復制中,需要考慮如下幾個關鍵問題:
事務一致性:在復制目標端需要按照源端相同的事務環境進行提交,確保目標上數據一致性。
檢查點機制:在抽取和負責時都需要記錄檢查點位置,確保網路故障或GG本身故障下仍然能夠完整復制。
可靠數據傳輸:需要保證數據傳輸的完整性,請求和應答,同時提供數據加密和傳輸過程中的壓縮。
❷ 求助,如何在兩個ORACLE資料庫中,同步一個結構相同的表的數據
最好的辦法就是用DB_LINK
加物化視圖來實現數據同步。
當然還有像
ORACLE
STREAM
和
GLODEN
GATE來實現同步,不過這兩個用在這里有點大材小用了!
❸ 如何跨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資料庫中兩張表的數據同步問題
你所謂的許可權問題是什麼許可權,是沒有建立觸發器的許可權還是沒有在a表建立觸發器的許可權。
如果沒有建立觸發器的許可權,那麼就定時任務,每隔半個小時查詢一次,將查詢到的內容輸入一張臨時表,然後比對臨時表和b表的內容,如果b表中沒有臨時表的內容,那麼就更新(這個可以在過程中做)。如果沒有在a表建立觸發器的許可權,那麼就在之前建立。比如建立一張插入數據的時間表,或者在a表的下層表中建立觸發器等等。當然最好的辦法還是觸發器。
第一個辦法中想數據完全同步是不可能的,第二個辦法辦法稍微靠點譜。如果a,b表的所謂部分數據完全相同,那麼可以考慮直接從介面部分得到數據,也就是每半小時,從介面部分得到灌入a表的數據的前100條,這部分數據灌入a表的同時也灌入b表。大概就是這個意思。
❺ 兩個oracle資料庫之間的數據同步
首先在ORACLE_B上做dblink連接ORACLE_A,然後做個
存儲過程
,大致如下:找到table_db
主鍵
,select
主鍵
from
table_db@dblink
minus
select
table_db
from
table_db找到差異數據,然後插入到oracle_b,再寫個job.定時執行這個存儲過程
❻ 如何同步ORACLE和sqlserver的數據
有時候項目開發的需要,必須將sqlServer中的某縣表同步到Oracle資料庫匯總,有其他系統來讀取這些數據,不同資料庫類型之間的數據同步我們可以使用連接伺服器和sqlAgent來實現。加入我們澤凱有一個和聽合同管理系統,其中有表contract和contract_project是需要同步到一個MIS系統中的ORACLE,那麼我們可以按照以下步驟實現數據的同步
1.在oracle資料庫中建立對應的contract和contract_project表,需要同步那些數據欄位我們就建立那些欄位到oralce表中
需要注意哦的是oralce的數據類型和SQLServer的數據類型是不一樣的,那麼他們之間是什麼樣的關系,我們可以再sqlServer下運行:
SELECT *
FROM msdb.dbo.MSdatatype_mappings
來查看sqlServcer和oralce資料庫的的類型類型對應
2.建立連接伺服器,我們將oralce系統作為SQLserver的鏈接伺服器加入到SQLserver中
有時候我們需要在sqlsercer下訪問另外一個sqlserver資料庫上的數據或者訪問其他oracel資料庫就上的數據嗎,想要完成這些操作,我首先要創建一個資料庫鏈接。
資料庫鏈接能夠讓本地的一個sqlservwer登錄用戶勇攝到遠程的一個資料庫伺服器上,並且像操作本地資料庫一樣,那麼怎樣創建資料庫鏈接?
創建一個sqlserver對應的oracle的資料庫鏈接,
❼ 兩個一樣的oracle 資料庫怎麼實現數據定期同步
兩個一樣的oracle ,定期同步,說白了就是主備用資料庫數據同步的問題;
如果資料庫A和資料庫B是建立在兩台獨立的資料庫伺服器上,那麼採用dblink方式是一種可行的方式,
第一種方式:前提是資料庫A和資料庫B本地網是24小時互通的同時對數據同步實時性有比較高的要求,那麼可以建立DBLINK,在兩個庫都建觸發器,不管當前在哪個庫發生數據更新的時候實時同步數據到目標資料庫;
第二種方式:如果數據同步的實時性要求不高,則可以通過定製存儲過程的方式(給兩個庫的數據表加時間戳或者更新標志,)定時同步數據;
第三種方式:通過給兩個資料庫的數據表加更新標志欄位,以第一種方式為主以滿足實時性的要求,以第二種方式為輔彌補可能存在的觸發器執行更新未成功的情況。
以上的方案都是從數據層面所做的處理,對於數據實時同步還是會存在一定的風險,那麼雙機熱備應該說是最好的選擇了。
❽ oracle資料庫數據同步問題。。。
給你提供一個辦法:
可以選擇使用具有」資料庫對象比較「功能的si
object
browser
v12。
1,把其中一個資料庫中的表復制,粘貼為與另一個資料庫表名一樣的新表。
2,將兩個資料庫進行全對象比較。
3,merge。
另外,這個工具是否可以跨資料庫進行表的復制,粘貼還沒有試過,你可以試一試。
❾ 如何同步oracle數據結構
一、第一套方案
1、用新的建庫腳本創建一套新的資料庫,結構和類型都是新的;
2、用數據導入工具,將原資料庫的數據導入到新的數控裡面;
二、第二套方案
1、用新的建庫腳本創建一套新的資料庫,結構和類型都是新的;
2、用資料庫結構同步工具,將老的資料庫結構更新同步到新建的資料庫上面;
兩套方案肯定都可行,主要在工作量和工作效率上面區別太大,導數據需要工具,可以用Sqlserver提供的DTS,有的結構變動大的需要對應欄位關系,太麻煩;
所以我想到用資料庫結構同步工具來進行,記得以前就用過這個功能,我們可以在網上輕松找到oracle資料庫客戶端操作工具PLSQL Developer,這個工具除了對資料庫進行日常的維護之外,還提供很多使用的功能,同步兩個資料庫的結構,就是其中一個,操作步驟如下:
1、打開PLSQL Developer進入新創建的資料庫;
打開菜單如下圖:
這時,會把不同之處用腳本列出來,只要點擊右邊的綠色對號,同步即可;
這樣,結構一下就都改好了,很方便。
❿ 如何從oracle資料庫中把數據同步到access資料庫中要具體操作步驟,最好有截圖
首先為欲導出的資料庫建立ODBC數據源,然後啟動ACCESS,建立一個空庫;然後在命令菜單選文件,獲取外部數據,導入,文件類型選擇ODBC
database,定位ODBC數據源,選擇所需數據表,在導入的表上點擊右鍵,選擇所需的格式。OK!