1.所謂的物化視圖,
成都創(chuàng)新互聯(lián)專注于伊金霍洛企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計,成都商城網(wǎng)站開發(fā)。伊金霍洛網(wǎng)站建設(shè)公司,為伊金霍洛等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站設(shè)計,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
2手工寫TRIGER,
3.通過ORACLE的CDC工具可以實現(xiàn)同步或者異步的表的變化。
4。關(guān)于你說的表三和表一表二之間同步,俺沒有明白。猜測是對表一表二做ETL,然后放到表三中。只對增量進行抽取和轉(zhuǎn)換。如果是這樣。通過上面的一二三步之一后。對增量進行抽取和轉(zhuǎn)換。
ETL是個比較復(fù)雜也好玩的東西。多種方式可以實現(xiàn),但是相互影響較大。容易顧此失彼。比如說管理和性能的平衡問題就是其中之一。
為方便完成指定數(shù)據(jù)表的同步操作,可以采用dblink與merge結(jié)合的方法完成。
操作環(huán)境: 此數(shù)據(jù)庫服務(wù)器ip為192.168.196.76,有center與branch兩個庫,一般需要將center的表數(shù)據(jù)同步到branch,center為源庫,branch為目標庫!
兩個一樣的oracle ,定期同步,說白了就是主備用數(shù)據(jù)庫數(shù)據(jù)同步的問題;
如果數(shù)據(jù)庫A和數(shù)據(jù)庫B是建立在兩臺獨立的數(shù)據(jù)庫服務(wù)器上,那么采用dblink方式是一種可行的方式,
第一種方式:前提是數(shù)據(jù)庫A和數(shù)據(jù)庫B本地網(wǎng)是24小時互通的同時對數(shù)據(jù)同步實時性有比較高的要求,那么可以建立DBLINK,在兩個庫都建觸發(fā)器,不管當前在哪個庫發(fā)生數(shù)據(jù)更新的時候?qū)崟r同步數(shù)據(jù)到目標數(shù)據(jù)庫;
第二種方式:如果數(shù)據(jù)同步的實時性要求不高,則可以通過定制存儲過程的方式(給兩個庫的數(shù)據(jù)表加時間戳或者更新標志,)定時同步數(shù)據(jù);
第三種方式:通過給兩個數(shù)據(jù)庫的數(shù)據(jù)表加更新標志字段,以第一種方式為主以滿足實時性的要求,以第二種方式為輔彌補可能存在的觸發(fā)器執(zhí)行更新未成功的情況。
以上的方案都是從數(shù)據(jù)層面所做的處理,對于數(shù)據(jù)實時同步還是會存在一定的風險,那么雙機熱備應(yīng)該說是最好的選擇了。
datagurd:
主要備庫的方式,就是數(shù)據(jù)庫對數(shù)據(jù)庫的備份方式,主要是解決容災(zāi)的。
流復(fù)制:
主要是利用oracle的歸檔日志,進行增量備份來實現(xiàn)的,不僅可以配置只復(fù)制某些表,還可以配置僅復(fù)制某些表上的ddl或dml。可以復(fù)制到表,用戶,數(shù)據(jù)庫級別。
高級復(fù)制:
主要是基于觸發(fā)器的原理來觸發(fā)數(shù)據(jù)同步的,因此,高級復(fù)制無法實現(xiàn)用戶,數(shù)據(jù)庫級別的對象復(fù)制,只能做些表、索引和存儲過程的復(fù)制。
一、第一套方案
1、用新的建庫腳本創(chuàng)建一套新的數(shù)據(jù)庫,結(jié)構(gòu)和類型都是新的;
2、用數(shù)據(jù)導(dǎo)入工具,將原數(shù)據(jù)庫的數(shù)據(jù)導(dǎo)入到新的數(shù)控里面;
二、第二套方案
1、用新的建庫腳本創(chuàng)建一套新的數(shù)據(jù)庫,結(jié)構(gòu)和類型都是新的;
2、用數(shù)據(jù)庫結(jié)構(gòu)同步工具,將老的數(shù)據(jù)庫結(jié)構(gòu)更新同步到新建的數(shù)據(jù)庫上面;
兩套方案肯定都可行,主要在工作量和工作效率上面區(qū)別太大,導(dǎo)數(shù)據(jù)需要工具,可以用Sqlserver提供的DTS,有的結(jié)構(gòu)變動大的需要對應(yīng)字段關(guān)系,太麻煩;
所以我想到用數(shù)據(jù)庫結(jié)構(gòu)同步工具來進行,記得以前就用過這個功能,我們可以在網(wǎng)上輕松找到oracle數(shù)據(jù)庫客戶端操作工具PLSQL Developer,這個工具除了對數(shù)據(jù)庫進行日常的維護之外,還提供很多使用的功能,同步兩個數(shù)據(jù)庫的結(jié)構(gòu),就是其中一個,操作步驟如下:
1、打開PLSQL Developer進入新創(chuàng)建的數(shù)據(jù)庫;
打開菜單如下圖:
點擊菜單--工具--比較用戶對象,進入如下圖:
會列出所以的表,你可選擇單獨的表或者多個表同時操作,然后點擊目標回話,會彈出要同步的數(shù)據(jù)庫連接對象窗口,輸入用戶名和密碼等等,確定后點擊右下角的比較按鈕,這樣會出現(xiàn)如下的比較窗口:
這時,會把不同之處用腳本列出來,只要點擊右邊的綠色對號,同步即可;
這樣,結(jié)構(gòu)一下就都改好了,很方便。
一. 前言
這個問題是上一篇文章《Oracle跨數(shù)據(jù)庫實現(xiàn)定時同步指定表中的數(shù)據(jù)》中所提問題的進一步延伸??紤]到對數(shù)據(jù)的實時性要求比較高,設(shè)置成定時同步,有點不妥,需要改善升級更改為實時同步。
下面介紹到的方式,嚴格意義上說,并沒有實現(xiàn)實時同步。是通過Oracle數(shù)據(jù)庫創(chuàng)建同義詞+DBlink的方式,來建立遠程映射。在查看數(shù)據(jù)時,直接去遠程查詢源庫中的表。
而我一直關(guān)注的是如何進行同步數(shù)據(jù),卻沒有考慮到可以建立映射。另外,還有一點就是需要交代,就是同步到目標數(shù)據(jù)庫中的表,不進行增刪改操作,只進行查詢的操作,這也是可以使用同義詞方式解決問題的關(guān)鍵。
這種解決思路的出現(xiàn),多虧了在CSDN問答時,熱心網(wǎng)友的回答,下面就是問題詳情描述。
二. 問題描述
有兩個Oracle數(shù)據(jù)庫,分別布置在不同的服務(wù)器上,系統(tǒng)均為windows2003;
這里暫且說成是一個主數(shù)據(jù)庫和從數(shù)據(jù)庫:
(1) 主數(shù)據(jù)庫:oracle_A;
(2) 從數(shù)據(jù)庫:oracle_B;
在oracle_A中有一個表table_A與oracle_B中的表table_B結(jié)構(gòu)相同;
我是處在oracle_B,oracle_A數(shù)據(jù)庫分配給我有一個訪問oracle_A表table_A的用戶,該用戶只擁有查詢的權(quán)限;
另外,需要說明的一點,就是在oracle_B處,只需對table_B表進行查詢的操作,不進行其他增刪改的操作。
場景介紹完了,我的問題的是,如何在oracle_A中表table_A發(fā)生變化時,實時更新同步到oracle_B的table_B中?
我原來的處理方式:
通過建立遠程連接DBLink+JOB定時任務(wù)+存儲過程的方式,實現(xiàn)了定時同步更新,但不能做到實時同步。
三. 采用同義詞+DB_Link的方式結(jié)果步驟
之所以能夠選擇采用同義詞的方式,處理這個問題。主要還是源于在問題描述中提到一個點,那就是我們只需要對同步后的表進行查詢操作。這點是使用同義詞方式的重要要素。
下面詳細模擬一下整個實驗測試的過程:
(1)首先在Oracle_A端創(chuàng)建一個對table_A只有查詢功能的用戶
1 創(chuàng)建用戶
sqlplus /nolog
conn /as sysdba;
create user username identified by password;
2 查看所有的用戶列表
用戶創(chuàng)建完成后,查看用戶是否創(chuàng)建成功
select * from all_users;
3授予權(quán)限
為了能夠保證能夠登陸,必須賦予如下權(quán)限
--授予username用戶創(chuàng)建session的權(quán)限,即登陸權(quán)限
grant create session to username;
--授予username用戶使用表空間的權(quán)限
grant unlimited tablespace to username;
--oracle對權(quán)限管理比較嚴謹,普通用戶之間也是默認不能互相訪問的,需要互相授權(quán).
--如果scott用戶要授權(quán)給username用戶查看自己的test表的權(quán)限;
sqlplus scott/tiget@localhost:1521/orcl
--授予username用戶查看指定的權(quán)限
grant select on test to username;
--撤銷權(quán)限
基本語法同grant,關(guān)鍵字為revoke;
(2)驗證用戶是否可以成功登錄,并進行訪問授權(quán)的表
--使用sqlplus登錄,并進行查詢
sqlplus username/password@localhost:1521/orcl;
select * from scott.test;
注意:查詢表時,務(wù)必帶上用戶名,說明是哪個用戶下的表。
(3)創(chuàng)建遠程連接DB_Link
1 創(chuàng)建遠程連接 db_link
create public database link db32 connect to tianzhi_test identified by "tianzhi_test" using '192.168.56.6:1521/ORCL'
2 測試遠程連接是否成功
select * from tianzhi_smart.zh_item_news@db32;
(4)在Oracle_B端創(chuàng)建同義詞
1 使用sqlplus登錄自己的用戶
sqlplus tianzhi_smart/tianzhi_smart@localhost:1521/orcl
2 創(chuàng)建同義詞
create or replace public synonym TEST1130 for scott.TEST@db32;
3 查詢測試
select * from TEST1130;
可以看到這與在Oracle_A源數(shù)據(jù)庫中查到的table_A表中的數(shù)據(jù)一樣.
注意事項:
當遠程查詢的數(shù)據(jù)庫中包含BLOB字段時,會報出如下錯誤.
ORA-22992: 無法使用從遠程表選擇的 LOB 定位器
當出現(xiàn)這個錯誤的時候,那是因為跨庫連接查詢中的表中存在BLOB類型的字段,所以一定要注意,所有表中存在blob類型字段,
不能用 select * from 連接的表
不能將blob類型的字段出現(xiàn)在腳本中。
如果這些blob類型的字段一定要導(dǎo)過來,可以先建立臨時表再插入本地表,方法如下.在pl/sql中執(zhí)行
第一步 建臨時表
create global temporary table foo ( X BLOB )
on commit delete rows;
第二步 插入本地表
insert into foo select blobcolumn from remoteTable@dl_remote ;
本文標題:oracle的同步怎么做,oracle數(shù)據(jù)庫同步解決方案
網(wǎng)址分享:http://jinyejixie.com/article28/hsdcjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、網(wǎng)站排名、響應(yīng)式網(wǎng)站、網(wǎng)站內(nèi)鏈、網(wǎng)站收錄、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)