程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> oracle建立dblink以及建立定時任務

oracle建立dblink以及建立定時任務

編輯:Oracle教程

oracle建立dblink以及建立定時任務


最近在弄一個事,具體是我們要定時插數據到別人的數據庫的中間表裡

首先要做的是建立一個到對方數據庫的oracle dblink,這是為了可以訪問他們的數據庫,這樣我們才能將數據插入到他們中間表。所以我們需要他們中間表的數據庫的IP、用戶、密碼、中間表的表名,具體可以查看數據庫安裝路徑下的\product\10.2.0\client_1\network\admin\tnsnames.ora文件

例如:

TestDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.19.27.21)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = TESTDB) TESTDB -------- 實例名
)
)

在PL/SQL工具裡輸入:

create database link link名稱

connect to 對方數據庫用戶名 identified by 對方數據庫用戶密碼
using '對方數據庫ip:端口/實例名';

例如:

create database link DLTEST
connect to PMS identified by PMS
using '176.2.39.25:1521/TESTDB';

可用 select * from dual@DLTEST; 來測試是否連接成功

\

通過select * from 表名@DLTEST; 來訪問該數據庫表<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+1eLR+aOsztLDx7XEb3JhY2xlIGRibGlua77NtLS9qLPJuabBy6OsvdPPwsC00OjSqrS0vajSu7j2tqjKscjOzvHAtMO/zOyw0dfUvLq1xLHtyv2+3bLlyOu1vbbUt721xNbQvOSx7cDvoaM8L3A+Cgo8cD6y6dGvuMNkYmxpbmvPwsr9vt2/4rXEy/nT0LHto7pzZWxlY3QgdGFibGVfbmFtZSBmcm9tIHVzZXJfdGFibGVzQERMVEVTVDs8L3A+CjxwPsm+s/1kYmxpbmujukRST1AgUFVCTElDIERBVEFCQVNFIExJTksKCkRMVEVTVDs8L3A+CjxwPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9wPgo8cD48L3A+CjxwPgrV4rj2yrG68m9yYWNsZbXEtqjKsda00NDIzs7xSk9Czt7SycrHztK1xNfuvNHRodTxoaPO0rDRzayyvbXEvcWxvrfF1NrSu7j2tOa0orn9s8zW0KOsyLu689Taucy2qLXEyrG85Mil1rTQ0NXiuPa05rSiuf2zzL7NT0vBy6GjPC9wPgrA/cjno7oKPHA+Q1JFQVRFIE9SIFJFUExBQ0UgUFJPQ0VEVVJFIGRpbmdzaGl0ZXN0X3Byb2MgIElTPGJyPgpCRUdJTjxicj4KICBJTlNFUlQgSU5UTyAKse3D+0BETFRFU1Qgc2VsZWN0ICogZnJvbSDX1Ly6se07PGJyPgogIENPTU1JVDs8YnI+CkVYQ0VQVElPTjxicj4KICBXSEVOIE9USEVSUyBUSEVOPGJyPgogICAgREJNU19PVVRQVVQuUFVUX0xJTkUo"Exception happened,data was rollback');
ROLLBACK;
END;

接下來定制定時任務,

假設我們要每隔兩分鐘向表 表名@DLTEST 中插入一條記錄,這裡我們只需要每隔2分鐘執行一次存儲過程dingshitest_proc即可。

在PL/SQL的command window輸入以下語句:

SQL> var job_num number;
SQL> begin
2 dbms_job.submit(:job_num,'dingshitest_proc;',SYSDATE,'sysdate+1/24/60');
3 end;
4 / ------------以/作為結束

\

執行完後一定要記得點擊提交按鈕,

查看定時任務:select * from dba_jobs a where a.WHAT like "%dingshitest_proc%';

刪除定時任務:在命令窗口下執行SQL> exec dbms_job.remove(961);


下面來講講定時任務的時間間隔怎麼算的。

第一種調度任務需求的日期算法比較簡單,即'SYSDATE+n',這裡n是一個以天為單位的時間間隔。

描述 Interval參數值 每天運行一次 'SYSDATE + 1' 每小時運行一次 'SYSDATE + 1/24' 每10分鐘運行一次 'SYSDATE + 10/(60*24)' 每30秒運行一次 'SYSDATE + 30/(60*24*60)' 每隔一星期運行一次 'SYSDATE + 7' 不再運行該任務並刪除它 NULL

第二種調度任務需求相對於第一種就需要更復雜的時間間隔(interval)表達式


描述 INTERVAL參數值 每天午夜12點 'TRUNC(SYSDATE + 1)' 每天早上8點30分 'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)' 每星期二中午12點 'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24' 每個月第一天的午夜12點 'TRUNC(LAST_DAY(SYSDATE ) + 1)' 每個季度最後一天的晚上11點 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24' 每星期六和日早上6點10分 'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)'

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved