oracle 触发器 oracle dblink和merge实现双机热备

--添加修改删除时触发
CREATE OR REPLACE TRIGGER iudTagFun
  after insert or update or delete
ON usertest FOR EACH ROW --触发的表
BEGIN
  if inserting then -- 触发insert
  INSERT INTO usertestinfo
    (id,
     login_name,
     full_name,
     dept_id,
     state,
     type,
     sys_update_time)
  VALUES
    (:new.cn,
     :new.login_name,
     :new.full_name,
     :new.dept_code,
     1,
     1,
     sysdate);
     end if;
     if updating then
    update usertestinfoset  login_name=:new.login_name,full_name=:new.full_name,dept_id=:new.dept_code where id=:old.cn;
    end if;
    if deleting then --触发delete然后做一件事
    delete from portal_um_user where id=:old.cn;
    end if;
END;

dblink+merge双机热备实例

 
--查询是否已经存在权限
select * from user_sys_privs where privilege like upper('%DATABASE LINK%'); 

--没有权限创建选权限用dba创建 ydc=用户名
grant CREATE PUBLIC DATABASE LINK,
DROP PUBLIC DATABASE LINK to ydc;
 
--创建DBlink连接
create public database link dblink02    
connect to scott identified by admin  
using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)
(HOST = 192.168.18.128)
(PORT = 1521)))
(CONNECT_DATA =(SERVICE_NAME = orcl)))';

--查询连接是否成功
select * from T_CLOB@dblink01

select * from Test01@dblink02
 
--删除DBlink
drop  public database link  dblink01


--建表语句

create table Test01
(
  id    VARCHAR2(100),
  name varchar2(100),
  password varchar2(100) 
)
insert into Test01 values('1','王总','admin');
insert into Test01 values('2','王总','admin');
insert into Test01 values('3','王总','admin');

select * from Test01


--Merger数据备份

--第一行 命名目标表并给别名T1
MERGE INTO Test01@dblink02 T1
--第二行 using子句提供merge操作的数据源,命名T
USING (select id,name,password from test01) T
--第三行 on子句指定合并的条件
ON ( T1.ID = T.ID)
--第四行 when matched then 子句判定条件符合则对表T1做什么改变(或删除)
WHEN MATCHED THEN UPDATE SET  T1.NAME = T.NAME --更新字段
--第五行 when not matched then 子句判断条件不符合则插入的操作
WHEN NOT MATCHED THEN INSERT VALUES (T.ID, T.name, T.password); -- 添加新字段

 --创建一个存储过程 
create or replace procedure p_test as 
begin 
--第一行 命名目标表并给别名T1
MERGE INTO Test01@dblink02 T1
--第二行 using子句提供merge操作的数据源,命名T
USING (select id,name,password from test01) T
--第三行 on子句指定合并的条件
ON ( T1.ID = T.ID)
--第四行 when matched then 子句判定条件符合则对表T1做什么改变(或删除)
WHEN MATCHED THEN UPDATE SET  T1.NAME = T.NAME --更新字段
--第五行 when not matched then 子句判断条件不符合则插入的操作
WHEN NOT MATCHED THEN INSERT VALUES (T.ID, T.name, T.password); -- 添加新字段
  
end;
 
--开启定时任务
Declare 
  i Integer; 
Begin 
   dbms_job.submit(i,'p_test;',Sysdate,'sysdate+1/24'); 
end; 

 -- 4.运行执行计划 
Declare 
  jobno Integer; 
Begin 
-- 查找计划号 
Select t.JOB into jobno From User_Jobs t ; 
-- 运行制定的执行计划 
dbms_job.run(jobno); 
end; 

 -- 5.查看任务队列情况 
select job,next_date,next_sec,failures,broken from user_jobs; 

  --6.查看任务执行情况 
select id,name from test01 order By id; 

 -- 7.停止执行计划 
Declare 
  jobno Integer; 
Begin 
  -- 查找计划号 
  Select t.JOB into jobno From User_Jobs t ; 
  -- 停止计划,不再继续执行 
  --dbms_job.broken(jobno,True); 
  -- 停止计划,并在两分钟后继续执行 
  dbms_job.broken(jobno,True,Sysdate+(2/24/60)); 
end; 

  --8.删除执行计划 
Declare 
  jobno Integer; 
Begin 
  -- 查找计划号 
  Select t.JOB into jobno From User_Jobs t ; 
  dbms_job.remove(jobno); 
end; 



 

猜你喜欢

转载自blog.csdn.net/weixin_42749765/article/details/81564935