1. SQL SERVER2012同步Oracle數據
我理解的是,你的需求是將oracle中變化的數據同步到sqlserver中。
我提供的解決方案是使用oracle的ogg,就是goldengate來實現。
首先,這個需求是跨庫跨平台的,一般sqlserver都裝在win上,而oracle都裝在linux上(當然,也有linux版的sqlserver,oracle也能裝在win上,但是實現的方法和結果是一樣的),但是對於ogg來講無所謂,ogg的特點就是可以跨庫跨平台跨版本來同步數據。
源端是oracle,目標端是sqlserver,可以使用11版本的ogg來同步數據,該版本功能夠用,bug也相對少了,我做運維也經常用。
使用ogg的注意事項如下:
源端oracle庫的同步表必須有主鍵。
源端oracle庫必須是force logging,必須開附加日誌。
初始化數據的時候,可以使用ogg自己的initload功能,省的還得用sqlserver的同步助手,費勁。
oracle和sqlserver支持的欄位類型不要太特殊了,比如oracle的lob欄位,sqlserver的各種text欄位啥的,這些特有的欄位,ogg支持不是很好,而對於int、varchar等通用的欄位就沒問題了。
最後,希望能幫到你,但是ogg這個東西對你來說可能是新的,所以你要用的話,得先學學,有問題可以問我。
2. oracle ogg是什麼
Golden Gate(簡稱OGG)提供異構環境下交易數據的實時捕捉、變換、投遞。
1、OGG原理
OGG是一種基於日誌的結構化數據復制軟體,通過捕獲源資料庫online redo log (在線重做日誌)或archive log(歸檔日誌)獲得數據變化,形成tail(隊列文件 ),再將這些tail通過網路協議,傳輸到目標資料庫,目標端通過解析,插入至目標端資料庫,從而實現源端與目標端數據同步。
2、OGG的特性:
1)、對生產系統影響小:實時讀取交易日誌,以低資源佔用實現大交易量數據實時復制;
2)、以交易為單位復制,保證交易一致性:只同步已提交的數據;
3)、高性能,智能的交易重組和操作合並,使用資料庫本地介面訪問,並行處理體系,靈活的拓撲結構:支持一對一、一對多、多對一、多對多和雙向復制等。
3、工作機制
(2)ogg可以連接什麼資料庫擴展閱讀
1)、每個GoldenGate實例可支持5000個Extract和Replicat進程;
2)、每個Extract和Replicat需要25-50M或更多的內存,這取決於系統的事物量和事物大小;
3)、GoldenGate實際使用的物理內存由操作系統控制和管理,GoladenGate 緩存管理器利用操作系統內存管理功能的優勢,確保GoladenGate進程持續和有效的工作;
參考資料
Oracle官網-Golden Gate
3. 不同版本的資料庫可以使用ogg嗎
可以的。。。
4. OGG現狀是有兩個源端 兩個源資料庫,一個目標端一個目標資料庫,兩個
跨數據源訪問可以使用OPENDATASOURCE
下面是個跨SQLServer查詢的示例
Select TableA.*,TableB.* From OPENDATASOURCE(
'SQLOLEDB',
'Data Source=ServerA;User ID=UserID;Password=Password'
).databaseAName.dbo.TableA
Left Join
OPENDATASOURCE(
'SQLOLEDB',
'Data Source=ServerB;User ID=UserID;Password=Password'
).databaseBName.dbo.TableB On TableA.key=TableB.key
下面是個查詢的示例,它通過用於 Jet 的 OLE DB 提供程序查詢 Excel 電子表格。SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
-------------------------------------
SQL語句實現跨Sql server資料庫操作實例 - 查詢遠程SQL,本地SQL資料庫與遠程SQL的數據傳遞
(1)查詢192.168.1.1的資料庫(TT)表test1的數據select * from opendatasource('sqloledb','server=192.168.1.1;uid=sa;pwd=123456;database=TT').TT.dbo.test1
(2)從192.168.1.2的資料庫(TT)表test2插入192.168.1.1資料庫(TT)的表test1去insert into opendatasource('sqloledb','server=192.168.1.1;uid=sa;pwd=123456;database=TT').TT.dbo.test1 (id,[name],password) select id,[name],password
from opendatasource('sqloledb','server=192.168.1.2;uid=sa;pwd=123456;database=TT').TT.dbo.test2
希望對你有幫主,望採納,謝謝!
5. ogg12.2.0.1.1可以用與oracle11.2.0.1的同步嗎
ogg 版本和 oracle資料庫版本不需要統一,ogg 12.2.0.1.1可以用於 oracle 11.2.0.1的同步,不過,如果你要使用集成模式,資料庫版本必須高於11.2.0.3的版本。經典模式不限制。
6. Oracle goldengate ogg要怎麼實現主備庫切換啊
Oracle Goldengate目前支持主被動式的雙向配置,換而言之OGG可以將來自於激活的主庫的數據變化完全復制到從庫中,從庫在不斷同步數據的同時已經為計劃內的和計劃外的outages做好了故障切換的准備,也就是我們說的Live Standby。這里我們重點介紹一下配置Oracle Goldengate Live Standby系統的步驟,和具體的故障切換過程。
如果自己搞不定可以找ASKMACLEAN專業ORACLE資料庫修復團隊成員幫您恢復!
SQL>connclinic/clinic
Connected.
SQL>droptabletv;
createtabletv(t1intprimarykey,t2int,t3varchar2(30));
Tabledropped.
SQL>
Tablecreated.
SQL>dropsequenceseqt1;
;
Sequencedropped.
SQL>SQL>
Sequencecreated.
declare
rndnumber(9,2);
begin
foriin1..100000loop
insertintotvvalues(seqt1.nextval,i*dbms_random.value,'MACLEANISTESTING');
commit;
endloop;
end;
/
/*以上腳本在primary主庫的某個應用賬戶下創建了測試用的數據,
接著我們可以使用各種工具將數據初始化到從庫中,如果在這個過程中
希望實時在線數據遷移的話,可以參考《Goldengate實現在線數據遷移》
*/
/*注意我們在LiveStandby的環境中往往需要復制sequence序列,以保證切換到備庫時業務可以正常進行*/
/*初始化備庫數據後,確保已與主庫完全一致*/
primary:
SQL>selectsum(t2)fromtv;
SUM(T2)
----------
2498624495
SQL>selectlast_numberfromuser_sequences;
LAST_NUMBER
-----------
100001
standby:
SQL>selectsum(t2)fromtv;
SUM(T2)
----------
2498624495
SQL>selectlast_numberfromuser_sequences;
LAST_NUMBER
-----------
100001
以上完成准備工作後,我們可以進入到正式配置Goldengatelivestanby的階段,包括以下步驟:
配置由主庫到備庫的extract、replicat、datapump,該步驟同普通的單向復制沒有太大的區別
配置由備庫到主庫的extract、replicat、datapump
啟動由主庫到備庫的extract、replicat、datapump
接下來我們會實踐整個配置過程:
1.
創建由主庫到備庫的extract、datapump、replicat
GGSCI(rh2.oracle.com)10>dbloginuseridmaclean
Password:
.
GGSCI(rh2.oracle.com)11>addtrandataclinic.*
.TV
GGSCI(rh2.oracle.com)4>addextractextstd1,tranlog,beginnow
EXTRACTadded.
GGSCI(rh2.oracle.com)5>addexttrail/d01/ext/cl,megabytes100,extractextstd1
EXTTRAILadded.
GGSCI(rh2.oracle.com)7>viewparamsextstd1
--IdentifytheExtractgroup:
EXTRACTextstd1
--:
useridmaclean,passwordmaclean
--:
EXTTRAIL/d01/ext/cl
--Specifysequencestobecaptured:
SEQUENCEclinic.seqt1;
--Specifytablestobecaptured:
TABLEclinic.*;
--:
--TABLEEXCLUDE
GGSCI(rh2.oracle.com)17>addextractpumpstd1,exttrailsource/d01/ext/cl,beginnow
EXTRACTadded.
GGSCI(rh2.oracle.com)98>addrmttrail/d01/rmt/cl,megabytes100,extractpumpstd1
RMTTRAILadded.
GGSCI(rh2.oracle.com)129>viewparamspumpstd1
--Identifythedatapumpgroup:
EXTRACTpumpstd1
useridmaclean,passwordmaclean
--:
useridmaclean,passwordmaclean
RMTHOSTrh3.oracle.com,MGRPORT7809
--:
RMTTRAIL/d01/rmt/cl
--Passdatathroughwithoutmapping,filtering,conversion:
PASSTHRU
sequenceclinic.seqt1;
Tableclinic.*;
在備庫上配置由主庫到備庫的replicat:
GGSCI(rh3.oracle.com)4>addreplicatrepstd1,exttrail/d01/rmt/cl,beginnow
REPLICATadded.
GGSCI(rh3.oracle.com)49>viewparamsrepstd1
--IdentifytheReplicatgroup:
REPLICATrepstd1
--:
ASSUMETARGETDEFS
--:
useridmaclean,passwordmaclean
--Specifytablesfordelivery:
MAPclinic.*,TARGETclinic.*;
--:
--MAPEXCLUDE
2.
創建由備庫到主庫的extract、datapump、replicat
GGSCI(rh3.oracle.com)51>dbloginuseridmaclean
Password:
.
GGSCI(rh3.oracle.com)52>addtrandataclinic.*
.TV.
/*不要忘記在備庫端的相關表加上追加日誌*/
GGSCI(rh3.oracle.com)53>addextractextstd2,tranlog,beginnow
EXTRACTadded.
GGSCI(rh3.oracle.com)54>addexttrail/d01/ext/cl,megabytes100,extractextstd2
EXTTRAILadded.
GGSCI(rh3.oracle.com)58>viewparamsextstd2
--IdentifytheExtractgroup:
EXTRACTextstd2
--:
useridmaclean,passwordmaclean
--:
EXTTRAIL/d01/ext/cl
--Specifysequencestobecaptured:
SEQUENCEclinic.seqt1;
--Specifytablestobecaptured:
TABLEclinic.*;
--:
--TABLEEXCLUDE
GGSCI(rh3.oracle.com)59>addextractpumpstd2,exttrailsource/d01/ext/cl,beginnow
EXTRACTadded.
GGSCI(rh3.oracle.com)60>addrmttrail/d01/rmt/cl,megabytes100,extractpumpstd2
RMTTRAILadded.
GGSCI(rh3.oracle.com)63>viewparamspumpstd2
--Identifythedatapumpgroup:
EXTRACTpumpstd2
useridmaclean,passwordmaclean
--:
useridmaclean,passwordmaclean
RMTHOSTrh2.oracle.com,MGRPORT7809
--:
RMTTRAIL/d01/rmt/cl
--Passdatathroughwithoutmapping,filtering,conversion:
PASSTHRU
sequenceclinic.seqt1;
Tableclinic.*;
在主庫上配置replicat:
GGSCI(rh2.oracle.com)136>addreplicatrepstd2,exttrail/d01/rmt/cl,beginnow,checkpointtablemaclean.ck
REPLICATadded.
GGSCI(rh2.oracle.com)138>viewparamsrepstd2
--IdentifytheReplicatgroup:
REPLICATrepstd2
--:
ASSUMETARGETDEFS
--:
useridmaclean,passwordmaclean
--Specifytablesfordelivery:
MAPclinic.*,TARGETclinic.*;
--:
--MAPEXCLUDE
3.
完成以上OGG配置後,可以啟動主庫到備庫的extract、pump、以及replicat:
GGSCI(rh2.oracle.com)141>startextstd1
SendingSTARTrequesttoMANAGER...
EXTRACTEXTSTD1starting
GGSCI(rh2.oracle.com)142>startpumpstd1
SendingSTARTrequesttoMANAGER...
EXTRACTPUMPSTD1startingGGSCI(rh3.oracle.com)70>startrepstd1
SendingSTARTrequesttoMANAGER...
REPLICATREPSTD1starting
/*如果你是在offline狀態下配置的話,那麼此時可以啟用應用了*/
接下來我們嘗試做有計劃的主備庫切換演練:
1.
首先停止一切在主庫上的應用,這一點和DataGuardSwitchover一樣。在保證沒有活動事務的情況下,才能切換干凈。
2.
在主庫端使用LAG等命令了解extract的延遲,若返回如"AtEOF,nomorerecordstoprocess"的信息,則說明所有事務均已被抽取。
GGSCI(rh2.oracle.com)144>lagextstd1
...
Lastrecordlag:0seconds.
AtEOF,nomorerecordstoprocess.
在EOF的前提下關閉extract:
GGSCI(rh2.oracle.com)146>stopextstd1
...
Requestprocessed.
3.
同樣對pump使用LAG命令,若返回如"AtEOF,nomorerecordstoprocess"的信息,則說明已抽取的數據都被發送到備庫了。
GGSCI(rh2.oracle.com)147>lagpumpstd1
...
Lastrecordlag:3seconds.
AtEOF,nomorerecordstoprocess.
在EOF的前提下,關閉datapump
GGSCI(rh2.oracle.com)148>stoppumpstd1
...
Requestprocessed.
3.
檢查備庫端replicat的同步情況,如返回"AtEOF,nomorerecordstoprocess.",則說明所有記錄均被復制。
GGSCI(rh3.oracle.com)71>lagrepstd1
...
Lastrecordlag:5seconds.
AtEOF,nomorerecordstoprocess.
在EOF的前提下關閉replicat
GGSCI(rh3.oracle.com)72>stoprepstd1
...
Requestprocessed.
4.
緊接著我們可以在備庫上為業務應用用戶賦予必要的insert、update、delete許可權,啟用各種觸發器trigger及cascadedelete約束等;
以上手段在主庫上對應的操作是收回應用業務的許可權,disable掉各種觸發器及cascadedelete約束,
之所以這樣做是為了保證在任何時候扮演備庫角色的資料庫均不應當接受任何除了OGG外的手動的或者應用驅動的業務數據變更,
以保證主備庫間的數據一致。
5.
修改原備庫上的extract的啟動時間到現在,已保證它不去抽取那些之前的重做日誌
GGSCI(rh3.oracle.com)75>alterextstd2,beginnow
EXTRACTaltered.
GGSCI(rh3.oracle.com)76>startextstd2
SendingSTARTrequesttoMANAGER...
EXTRACTEXTSTD2starting
若之前沒有啟動由備庫到主庫的pump和replicat的話可以在此時啟動:
GGSCI(rh3.oracle.com)78>startpumpstd2
SendingSTARTrequesttoMANAGER...
EXTRACTPUMPSTD2starting
GGSCI(rh2.oracle.com)161>startrepstd2
SendingSTARTrequesttoMANAGER...
REPLICATREPSTD2starting
6.此時我們可以正式啟動在原備庫現在的主庫上的應用了
接下來我們嘗試回切到原主庫上:
1.前提步驟與之前的切換相似,首先停止在原備庫上的任何應用,
之後使用LAG命令確認extract和replicat的進度,在確認後關閉extract和replicat。
完成在主庫上的維護工作:包括賦予許可權,啟用觸發器等等。
2.修改原主庫上的extract的開始時間為當前,保證它不去處理之前的重做日誌:
GGSCI(rh2.oracle.com)165>alterextractextstd1,beginnow
EXTRACTaltered.
3.此時我們已經可以啟動在原主庫現在的主庫上的應用了
4.啟動最早配置的由主庫到備庫的extract、pump、replicat:
GGSCI(rh2.oracle.com)166>startextstd1
SendingSTARTrequesttoMANAGER...
EXTRACTEXTSTD1starting
GGSCI(rh2.oracle.com)171>startpumpstd1
SendingSTARTrequesttoMANAGER...
EXTRACTPUMPSTD1starting
GGSCI(rh3.oracle.com)86>startrepstd1
SendingSTARTrequesttoMANAGER...
REPLICATREPSTD1starting
以上完成了OGG的LiveStandby中主備庫之間的計劃內的切換Switchover,That'sGreat!
7. dblink與ogg的區別
兄弟,我也是因為需求,需要在同一個庫中為兩個庫中建立dblink,但是一直提示,解析失敗,你是怎麼建的