如何實現兩個oracle資料庫的資料同步

2021-03-12 01:03:50 字數 3917 閱讀 9102

1樓:匿名使用者

為方便完成指定資料表的同步操作,可以採用dblink與merge結合的方法完成。

62616964757a686964616fe4b893e5b19e31333337613762

操作環境: 此資料庫伺服器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.

module,c.deleteflag, c.scripttype);

***mit;               --記得merge後必須***mit,否則更改未能提交

4.為方便每次需要同步時自動完成同步工作,可將該語句做成儲存過程或指令碼來定時執行或按要求手動執行,簡單說一下建立指令碼的方法:

a.建立merge資料夾

b.先將merge語句寫完整後,存到merge.sql檔案中

c.新建merge.bat檔案,編輯後寫入以下內容

sqlplus user/password@serverip/database @"%cd%\merge.sql"

2樓:千鋒教育

datagurd:

主要備來

庫的方式,就是資料庫對自資料庫的備bai份方式,主要是解決容災的。du

流復zhi制:

主要是利用oracle的歸檔日誌,dao進行增量備份來實現的,不僅可以配置只複製某些表,還可以配置僅複製某些表上的ddl或dml。可以複製到表,使用者,資料庫級別。

高階複製:

主要是基於觸發器的原理來觸發資料同步的,因此,高階複製無法實現使用者,資料庫級別的物件複製,只能做些表、索引和儲存過程的複製。

3樓:王蘆詩涵

1、首先在抄oracle_b上做dblink連線oracle_a2、然後

襲做個儲存過程

大致bai如下:

1、找到table_db主鍵,duselect 主鍵 from table_db@dblink minus select table_db from table_db找到差異zhi資料

2、然後插入到oracle_b,再寫個daojob.定時執行這個儲存過程

4樓:匿名使用者

--建立連結伺服器

exec sp_addlinkedserver 'itsv ', ' ', 'sqloledb ', '遠端伺服器名或ip地址 '

exec sp_addlinkedsrvlogin 'itsv ', 'false ',null, '使用者名稱 ', '密碼 '

--查詢示例

select * from itsv.資料庫名.dbo.表名

--匯入示例

select * into 表 from itsv.資料庫名.dbo.表名

--以後不再使用時刪除連結伺服器

exec sp_dropserver 'itsv ', 'droplogins '

--連線遠端/區域網資料(openrowset/openquery/opendatasource)

--1、openrowset

--查詢示例

select * from openrowset( 'sqloledb ', 'sql伺服器名 '; '使用者名稱 '; '密碼 ',資料庫名.dbo.表名)

--生成本地表

select * into 表 from openrowset( 'sqloledb ', 'sql伺服器名 '; '使用者名稱 '; '密碼 ',資料庫名.dbo.表名)

--把本地表匯入遠端表

insert openrowset( 'sqloledb ', 'sql伺服器名 '; '使用者名稱 '; '密碼 ',資料庫名.dbo.表名)

select *from 本地表

--更新本地表

update b

set b.列a=a.列a

from openrowset( 'sqloledb ', 'sql伺服器名 '; '使用者名稱 '; '密碼 ',資料庫名.dbo.表名)as a inner join 本地表 b

on a.column1=b.column1

--openquery用法需要建立一個連線

--首先建立一個連線建立連結伺服器

exec sp_addlinkedserver 'itsv ', ' ', 'sqloledb ', '遠端伺服器名或ip地址 '

--查詢

select *

from openquery(itsv, 'select * from 資料庫.dbo.表名 ')

--把本地表匯入遠端表

insert openquery(itsv, 'select * from 資料庫.dbo.表名 ')

select * from 本地表

--更新本地表

update b

set b.列b=a.列b

from openquery(itsv, 'select * from 資料庫.dbo.表名 ') as a

inner join 本地表 b on a.列a=b.列a

--3、opendatasource/openrowset

select *

from opendatasource( 'sqloledb ', 'data source=ip/servername;user id=登陸名;password=密碼 ' ).test.dbo.

roy_ta

--把本地表匯入遠端表

insert opendatasource( 'sqloledb ', 'data source=ip/servername;user id=登陸名;password=密碼 ').資料庫.dbo.

表名select * from

5樓:匿名使用者

可以用treesoft, 資料定時同步,資料維護功能都具備。

6樓:

執行定時的 exp 資料庫a, 然後 imp 資料庫b

急!兩個oracle資料庫如何做資料交換

用資料庫快照就能實現啊.oracle快照原理及實現總結 oracle資料庫的快照是一個表,它包含有對一個本地或遠端資料庫上一個或多個表或檢視的查詢的結果。對於中大型資料庫,業務資料庫裡所有的資料同步到另外一個處理伺服器上最佳的選擇還是使用snapshot方式,即快照的方式。由於工作需要,今天需要將業...

oracle資料庫如何收費,Oracle資料庫如何收費

oracle資料庫在非商用時不收費。oracle資料庫在商用時有兩種收費方式。oracle的license許可購買有兩種 按照使用者數和cpu個數 即無線使用者版 特殊情況 當前oracle 11g的user license無限使用期的 為人民幣3千5左右。按照使用者個數 按50個user lice...

oracle資料庫如何刪除約束,資料庫中怎樣刪除約束

用system使用者登入後,使用drop語句就可以刪除 根據錯誤提示的約束名稱,然後disable掉試試。alter table table name disable constraint constraint name alter table 約束基於的表名 drop constraint 約束名...