一. 概述
在目標(biāo)數(shù)據(jù)庫(kù)中向源數(shù)據(jù)庫(kù)建立一個(gè)database link遠(yuǎn)程連接,之后編寫一個(gè)存儲(chǔ)過程恩静,用于將源數(shù)據(jù)庫(kù)中的數(shù)據(jù)同步到目標(biāo)數(shù)據(jù)庫(kù)骤铃,再編寫一個(gè)Oracle定時(shí)任務(wù),最后在該定時(shí)任務(wù)中執(zhí)行上述存儲(chǔ)過程惠桃,即可實(shí)現(xiàn)定時(shí)同步浦夷。
二. 具體實(shí)現(xiàn)步驟
(1)在目標(biāo)機(jī)上使用sqlplus登錄
<pre><code>
sqlplus tianzhi_smart/tianzhi_smart@10.2.200.133:1521/orcl
</code></pre>
(2)建立遠(yuǎn)程連接database link
用如下命令建立DB Link:
<pre>
create public database link db21
connect to scott
identified by "tiger"
using '192.168.56.6:1521/ORCL';
</pre>
注意事項(xiàng):
- 創(chuàng)建遠(yuǎn)程連接的類型必須為public;
- 在創(chuàng)建dblink時(shí),要注意辜王,有時(shí)候可能會(huì)報(bào)用戶名和密碼錯(cuò)誤劈狐,但實(shí)際上我們所輸入的賬戶信息是正確的,此時(shí)就注意將密碼的大小寫按服務(wù)器上所設(shè)置的輸入呐馆,并在賬號(hào)密碼前號(hào)加上雙引號(hào)(服務(wù)器版本不同造成的)肥缔。
(2)創(chuàng)建存儲(chǔ)過程
<pre>
create or replace procedure UPDATETEST
as
begin
delete from TEST01;
insert into TEST01 (ID, NAME, SAL) select ID, NAME, SAL from TEST@db21;
dbms_output.put_line('同步成功!');
end;
/
</pre>
(3)創(chuàng)建任務(wù)JOB
<pre>
SQL> variable job1 number;
SQL>
SQL>
begin
dbms_job.submit(:job1,'UPDATETEST;',sysdate,'sysdate+1');
end;
/
</pre>
說明:
- 定時(shí)任務(wù)調(diào)用執(zhí)行存儲(chǔ)過程,執(zhí)行時(shí)間間隔為1天,1/1440為一分鐘汹来。
- 時(shí)間不要設(shè)太短续膳,否則很吃內(nèi)存,會(huì)造成電腦卡死收班。
(4)運(yùn)行任務(wù)JOB
<pre>
SQL> begin
2 dbms_job.run(:job1);
3 end;
4 /
</pre>
(5)刪除任務(wù)JOB
<pre>
SQL> begin
dbms_job.remove(:job1);
end;
/
</pre>
三. 工作心得
(1) 磨刀不誤砍柴工
對(duì)于此類步驟清楚坟岔,條理清晰的問題,在執(zhí)行過程中闺阱,一定要確保每一步的執(zhí)行結(jié)果都是正確的炮车,千萬(wàn)不要等到執(zhí)行到最后一步時(shí),才去檢驗(yàn)是否存在問題酣溃。
如果不對(duì)前面的步驟進(jìn)行檢驗(yàn)瘦穆,只等到最后一步出現(xiàn)問題的時(shí)候才去檢查。不僅不能明確問題出現(xiàn)的準(zhǔn)確位置赊豌,而且還得倒著層層往前查找問題扛或。如果問題是出現(xiàn)第一步,那之后肯定會(huì)連環(huán)出問題碘饼,這樣不僅可能會(huì)需要大幅進(jìn)行修改熙兔,而且還會(huì)很影響狀態(tài)悲伶,費(fèi)工費(fèi)時(shí)。
而如果沒進(jìn)行一步住涉,就檢驗(yàn)清楚麸锉,將戰(zhàn)場(chǎng)打掃干凈。來(lái)一個(gè)干掉一個(gè)舆声,后面即使出現(xiàn)問題花沉,也是屬于各個(gè)擊破,不至于搞成被群毆的下場(chǎng)媳握。
(2) 書到用時(shí)方恨少
這兩天公司項(xiàng)目處于上線調(diào)試階段碱屁,由于項(xiàng)目需要部署在集團(tuán)公司機(jī)房,而集團(tuán)公司又距離公司有一定的距離蛾找,同時(shí)集體公司機(jī)房為了確保安全又是與外界隔離開來(lái)的娩脾。所以,在部署調(diào)試階段打毛,出現(xiàn)問題柿赊,都只能是現(xiàn)場(chǎng)進(jìn)行解決,而不能再是帶回公司進(jìn)行解決隘冲。
而出現(xiàn)問題時(shí)闹瞧,我一直有一個(gè)感受。那就是通過上網(wǎng)搜索或者詢問別人的方式展辞,基本都可以想出來(lái)一個(gè)笨方法奥邮。而笨方法一般都是屬于套路性的方式,代碼重復(fù)率很高罗珍。
人都有偷懶的心理洽腺,為了少干點(diǎn)活兒,都會(huì)想一些巧方法覆旱。而我想出來(lái)的巧方法蘸朋,一般都是知道有這種方式,但就是不知道如何具體去用扣唱。比如AOP藕坯,設(shè)計(jì)模式,涉及到復(fù)雜邏輯的存儲(chǔ)過程等噪沙。
由于平時(shí)學(xué)的少炼彪,學(xué)的不夠深入,雖然知道正歼,但等到真到用的時(shí)候辐马,卻兩眼抓黑,無(wú)處下手局义,真有一種摔頭捶胸之感。
(3) 主動(dòng)學(xué)習(xí)專業(yè)技能,物質(zhì)基礎(chǔ)決定上層建筑
一直在工作之外录煤,逍遙地干著輕松愉快的事兒,完全不顧及工作技能上的不足∈冈ǎ現(xiàn)在倒好,由于技能實(shí)力不足,有問題有任務(wù)時(shí),不能及時(shí)杠上特愿,都快要危及到自己的飯碗了。如果飯碗丟了勾缭,還拿什么談詩(shī)和遠(yuǎn)方。
別看上面的解決過程簡(jiǎn)單目养,昨天就是為了解決這個(gè)數(shù)據(jù)庫(kù)同步的問題俩由,愣是折騰到凌晨十二點(diǎn)半。堅(jiān)持日更千字不間斷的我癌蚁,愣是不得不中斷一天』锰荩現(xiàn)在看來(lái),這完全是可以避免的努释。如果平時(shí)注意多多積累專業(yè)知識(shí)碘梢,主動(dòng)學(xué)習(xí)專業(yè)技能,提升學(xué)習(xí)和適應(yīng)能力伐蒂,遇到此類問題肯定是可以在不到一個(gè)小時(shí)的時(shí)間內(nèi)就處理掉煞躬,而我愣是折騰了將近一天的時(shí)間。
平時(shí)看似在工作之外的時(shí)間逸邦,多花了時(shí)間做自己感興趣的事情恩沛,看似是有效利用了時(shí)間,但雖然工作上出現(xiàn)的問題越來(lái)越多缕减,才發(fā)覺自己其實(shí)在不恰當(dāng)?shù)臅r(shí)間段內(nèi)做了應(yīng)該分散開來(lái)的應(yīng)該做的事情雷客。導(dǎo)致沒有利用完整的時(shí)間去進(jìn)行充電學(xué)習(xí)。而專業(yè)技能上不來(lái)桥狡,工作上問題得不到及時(shí)解決搅裙,只得去加班,去熬夜解決裹芝,這不是自己工作努力的表現(xiàn)部逮。這都是平時(shí)不注意學(xué)習(xí)的結(jié)構(gòu),而平時(shí)不注意積累局雄,到最后只會(huì)低效的工作拖累甥啄,浪費(fèi)大量的時(shí)間。
總之炬搭,工作之外的時(shí)間蜈漓,主動(dòng)學(xué)習(xí)專業(yè)技能穆桂,不是在占用業(yè)余時(shí)間,從長(zhǎng)遠(yuǎn)來(lái)看融虽,是在節(jié)約業(yè)余時(shí)間享完。因?yàn)橐院蠹寄芴嵘耍ぷ餍侍岣吡擞卸睿炊鴷?huì)留出更多的業(yè)余時(shí)間去做自己想做的事情般又。工作技能提高了,才能保證好自己的飯碗巍佑,才能去更加隨性的追求自己的詩(shī)和遠(yuǎn)方茴迁。
適當(dāng)?shù)臅r(shí)間,干正確的事兒萤衰。說的就是這個(gè)道理堕义。一句話,守不住飯碗脆栋,其他的都是扯淡倦卖!