---使用触发器实现本地表的同步和日志记录
--知识点:触发器trigger,存储过程proc
--基本查看sql
select * from user_tables --查看所有的表
select * from user_triggers --查看所有的触发器。
select * from USER_PROCEDURES --查看所有的存储过程。
--1.1.建表TEST(需要同步的表)
-------------------------------------------------------------------
--drop table Test --删除表。
--select * from test --查看表数据
--delete from test --清空表数据
create table TEST
(
T_ID NUMBER(4),
T_NAME VARCHAR2(20),
T_AGE NUMBER(2),
T_SEX CHAR(1)
);
--1.2建表TEST_BACK(与test表同步的表)
create table TEST_BACK
(
T_ID NUMBER(4),
T_NAME VARCHAR2(20),
T_AGE NUMBER(2),
T_SEX CHAR(1)
);
--1.3 日志表。
create table LOG_TEST
(
L_USER VARCHAR2(15),
L_TYPE VARCHAR2(15),
L_DATE VARCHAR2(30)
);
-------------------------------------------------------------------
--2.建立与B对应的DBLINK
-------------------------------------------------------------------
--drop public database link mydblink;
--Create public DATABASE LINK mydblink CONNECT TO zddxgltest IDENTIFIED BY PW123456 USING '172.16.17.7:1521/orcl';
------------------------------------------------------------------
--3.建立触发器
------------------------------------------------------------------
--开启屏幕监听:
--sql>set serveroutput on;
CREATE OR REPLACE TRIGGER test_trigger
AFTER DELETE OR INSERT OR UPDATE ON test for each row -- for each row是为了使用:new和old
DECLARE
v_type VARCHAR2(15);
BEGIN
IF INSERTING THEN
v_type := 'INSERT '||:new.T_ID;--oracle添加链接字符串使用||
DBMS_OUTPUT.PUT_LINE('记录'||:new.T_ID||'已经成功插入,并已记录到日志');--添加 只有new
INSERT INTO TEST_BACK VALUES(:new.T_ID,:new.T_NAME,:new.T_AGE,:new.T_SEX);--同步表。
ELSIF UPDATING THEN
v_type := 'UPDATE '||:old.T_ID;
DBMS_OUTPUT.PUT_LINE('记录'||:old.T_ID||'已经成功更新,并已记录到日志');--更新有new和old
UPDATE TEST_BACK T SET T.T_NAME = :new.T_NAME,T.T_AGE = :new.T_AGE,T.T_SEX =:new.T_SEX where T.T_ID = :old.T_ID;--注意末尾的;号
ELSIF DELETING THEN
v_type := 'DELETE '||:old.T_ID;
DBMS_OUTPUT.PUT_LINE('记录'||:old.T_ID||'已经成功删除,并已记录到日志');--删除只有old
DELETE FROM TEST_BACK T where T.T_ID = :old.T_ID;--注意末尾的;号
END IF;
my_pro(v_type);--记录日志。
END;
------------------------------------------------------------------
----------------------------------------------------------------
--2.建存储过程(注意一定要加上PRAGMA AUTONOMOUS_TRANSACTION;让这个存储过程有自治的事务控制,不然会影响A的事务控制)
----------------------------------------------------------------
create or replace procedure my_pro(v_type varchar2)
as
PRAGMA AUTONOMOUS_TRANSACTION;
begin
INSERT INTO LOG_TEST VALUES(user,v_type,TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss'));--操作日志。
commit;
end;
---------------------------------------------------------------
--最后我们在A中输入以下测试语句:
INSERT INTO test VALUES(34,'zhao',22,'M');
UPDATE test SET t_name = '3ddd0' WHERE t_id = 34;
DELETE test WHERE t_id = 34;
SELECT * FROM test;
SELECT * FROM LOG_TEST;
SELECT * FROM TEST_BACK;
分享到:
相关推荐
3. 数据同步:利用物化视图日志记录的信息,定期或实时地刷新物化视图,将源数据的变化同步到目标数据库。 4. 确保一致性:通过设置触发器或定时任务,确保在源数据发生变化时,物化视图能及时得到刷新,维持数据...
- 创建触发器`t_state`,用于在更新表`[user]`时自动设置`state`字段为1,表示该条记录已发生变化,需要同步到目标服务器。 2. **建立连接服务器**: - 使用`sp_addlinkedserver`存储过程添加链接服务器`srv_lnk`...
3. 错误处理:在同步过程中,应设定合理的错误处理机制,如重试、记录错误日志等,确保数据的完整性和一致性。 五、安全性和稳定性 1. 访问控制:确保只有授权的用户和应用程序能访问和修改数据。 2. 数据备份:...
- **分布式**: 支持多台主机间的日志同步与分析,提高了系统的覆盖范围和灵活性。 ##### 3. LASL系统的总体架构 - **控制与分析系统**: 负责管理移动Agent模块,并集中分析各个Agent送来的数据,对入侵情况进行告...
- **触发器和日志**:在MySQL中设置触发器记录更改,或使用日志表记录操作,然后在SQLite端解析这些记录进行同步。 6. **技术实现**: 这个源代码可能包含以下组件: - **数据读取模块**:从MySQL读取需要同步的...
例如,洛阳中心对某条记录的修改还未同步到淮安中心,而淮安中心已经对该记录进行了本地修改。这种“同时”实际上是基于网络延迟定义的,时间范围涵盖了binlog解析和数据传输所需的时间。 - insert操作冲突:两个...
### Oracle CDC (Change ...通过以上介绍,我们可以看到 Oracle CDC 提供了一种强大的工具来实现实时数据同步,无论是用于本地数据库还是跨数据库实例的数据同步。这对于现代企业的数据集成和同步需求具有重要的意义。
7. **日志和报告**:软件会详细记录每次同步和备份的操作,生成报告供用户查看,以便追踪文件状态和诊断问题。 8. **故障恢复**:如果在同步过程中出现错误,SyncBackFree提供了恢复功能,能从错误中恢复到之前的...
其设计和实现考虑了高性能、高可用性以及低侵入性,使得在各种复杂的业务环境中都能有效工作。此外,Canal还支持多种数据同步模式,如单表同步、全量+增量同步等,满足不同业务的需求。 总结来说,阿里巴巴Canal是...
### Oracle DBLink创建过程及快照同步...此外,通过设置适当的刷新策略和使用触发器,可以进一步提高数据同步的效率和准确性。需要注意的是,在实际应用过程中,还需要考虑网络延迟、数据量大小等因素对性能的影响。
这种方法旨在确保局域网内的所有设备拥有精确一致的时间,这对于多台设备协作工作、日志记录、网络通信等场景至关重要。 描述中提到的是在Windows XP系统下创建自动校时任务的步骤。首先,用户在C盘根目录创建一个...
5. 触发器和存储过程:用户可以直接在SQLite Expert中编写和管理触发器和存储过程,这对于实现复杂业务逻辑和数据库自动化操作非常方便。 6. 权限管理:该工具提供了对数据库用户的权限控制,可以设置不同的访问...
实例137 使用线程局部变量实现线程同步 177 实例138 简单的线程通信 179 实例139 简单的线程死锁 180 实例140 解决线程的死锁问题 182 6.3 线程的进阶 183 实例141 使用阻塞队列实现线程同步 183 实例142 新建有...
6.6.2 使用字段和索引创建新表 133 6.6.3 通过加入索引来修改现有表 136 6.7 小 结 136 第7章 使用VBA处理Access中的错误 138 7.1 Access中的错误消息 138 7.2 使用错误处理程序的不同方法 139 7.3 ...
6. 复制技术数据捕获方法:Oracle10g数据复制使用多种方法捕获数据,包括基于触发器的方法、基于日志的方法、基于时间戳的方法和基于API的方法。基于触发器的方法依赖于在业务数据表中创建的触发器来触发复制操作。...
6.6.2 使用字段和索引创建新表 133 6.6.3 通过加入索引来修改现有表 136 6.7 小 结 136 第7章 使用VBA处理Access中的错误 138 7.1 Access中的错误消息 138 7.2 使用错误处理程序的不同方法 139 7.3 Access运行...