-- 1. 刪除舊連結
DROP DATABASE LINK dblink1;
-- 2. 建立連結 (完整 TNS 描述符,避免依賴 tnsnames.ora)
CREATE DATABASE LINK dblink1
CONNECT TO csys IDENTIFIED BY "****"
USING '(DESCRIPTION =
(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.5.134)(PORT = 1521)))
(CONNECT_DATA = (SERVICE_NAME = orcl))
)';
-- 3. 驗證
SELECT * FROM codevalue@dblink1 WHERE ROWNUM < 5;
-- 4. 查看現有 DBLink
SELECT owner, object_name FROM dba_objects WHERE object_type = 'DATABASE LINK';
客戶端 sqlnet.ora 補充:若服務器無 tnsnames.ora,可在 $ORACLE_HOME/NETWORK/ADMIN/sqlnet.ora 加入 NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT) 支援 Easy Connect。
-- 主表有主鍵
CREATE MATERIALIZED VIEW LOG ON csb1 WITH PRIMARY KEY;
-- 主表無主鍵 (用 ROWID)
CREATE MATERIALIZED VIEW LOG ON csb1 WITH ROWID;
-- 查看日誌表
SELECT * FROM MLOG$_CSB1;
-- 有主鍵,FAST REFRESH 每 10 分鐘
CREATE MATERIALIZED VIEW mv_csb1
REFRESH FAST
START WITH SYSDATE
NEXT TRUNC(SYSDATE,'MI') + 10/1440 -- 10 分鐘 = 10/1440 天
AS SELECT * FROM csb1@dblink1;
-- 無主鍵,需 WITH ROWID
CREATE MATERIALIZED VIEW mv_csb1
REFRESH FAST WITH ROWID
START WITH SYSDATE
NEXT TRUNC(SYSDATE,'MI') + 10/1440
AS SELECT * FROM csb1@dblink1;
-- 1. 建立刷新存儲過程
CREATE OR REPLACE PROCEDURE refresh_mv AS
BEGIN
DBMS_MVIEW.REFRESH('MV_CSB1', 'F'); -- F=FAST, C=COMPLETE, ?=FORCE
END refresh_mv;
/
-- 2. 提交 Job (每 10 分鐘)
DECLARE
v_job NUMBER;
BEGIN
DBMS_JOB.SUBMIT(
job => v_job,
what => 'BEGIN refresh_mv; END;',
next_date => TRUNC(SYSDATE,'MI') + 10/1440,
interval => 'TRUNC(SYSDATE,''MI'') + 10/1440'
);
COMMIT;
END;
/
-- 3. 查看 Job
SELECT job, what, next_date, interval, failures FROM dba_jobs;
REFRESH COMPLETE。REFRESH FORCE。DBMS_MVIEW.REFRESH('MV_CSB1', 'F', parallelism => 4);-- 查看 MV 狀態
SELECT mview_name, refresh_mode, refresh_method, last_refresh_date, staleness
FROM user_mviews;
-- 查看刷新歷史
SELECT * FROM dba_mview_refresh_times WHERE mview_name = 'MV_CSB1';