关于触发器、存储过程和DBlink的综合运用
需求描述:
需要在两个不同oracl数据库实例中进行数据逻辑处理。如果A实例中的表有新数据插入或者数据更新,那么在B实例中执行与之相关的存储过程。
先假设A数据用户中表TEST有变动,那么触发器触发调用实例B中的存储过程改写TEST_LOG表
A中操作如下:
1.建表
-------------------------------------------------------------------
create table TEST
(
T_ID NUMBER(4),
T_NAME VARCHAR2(20),
T_AGE NUMBER(2),
T_SEX CHAR(1)
);
-------------------------------------------------------------------
2.建立与B对应的DBLINK
-------------------------------------------------------------------
create database link INFOSYSTEM
connect to infosystem identified by infosystem
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.249)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORCL)
)
)';
------------------------------------------------------------------
3.建立触发器
------------------------------------------------------------------
CREATE OR REPLACE TRIGGER test_trigger
AFTER DELETE OR INSERT OR UPDATE ON test
DECLARE
v_type VARCHAR2(15);
BEGIN
IF INSERTING THEN
v_type := 'INSERT';
DBMS_OUTPUT.PUT_LINE('记录已经成功插入,并已记录到日志');
ELSIF UPDATING THEN
v_type := 'UPDATE';
DBMS_OUTPUT.PUT_LINE('记录已经成功更新,并已记录到日志');
ELSIF DELETING THEN
v_type := 'DELETE';
DBMS_OUTPUT.PUT_LINE('记录已经成功删除,并已记录到日志');
END IF;
my_pro@infosystem(v_type);
END;
----------------------------------------------------------------
B中操作如下:
1.建表
----------------------------------------------------------------
create table TEST_LOG
(
L_USER VARCHAR2(15),
L_TYPE VARCHAR2(15),
L_DATE VARCHAR2(30)
);
----------------------------------------------------------------
2.建存储过程
注意一定要加上PRAGMA AUTONOMOUS_TRANSACTION;让这个存储过程有自治的事务控制,不然会影响A的事务控制
----------------------------------------------------------------
create or replace procedure my_pro(v_type varchar2)
as
PRAGMA AUTONOMOUS_TRANSACTION;
begin
INSERT INTO test_log VALUES(user,v_type,
TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss'));
commit;
end;
---------------------------------------------------------------
最后我们在A中输入以下测试语句:
INSERT INTO test VALUES(101,'zhao',22,'M');
UPDATE test SET t_age = 30 WHERE t_id = 101;
DELETE test WHERE t_id = 101;
SELECT * FROM test;
SELECT * FROM test_log@INFOSYSTEM;
结果可能如下:
TEST无数据
TEST_LOG数据
1 AAAPF0AALAAABq8AAA INFOSYSTEM DELETE 2009-06-12 13:45:30
2 AAAPF0AALAAABq8AAL INFOSYSTEM INSERT 2009-06-12 13:45:30
3 AAAPF0AALAAABq8AAM INFOSYSTEM UPDATE 2009-06-12 13:45:30
分享到:
相关推荐
### Oracle存储过程、函数与DBLink详解 ...存储过程提供了强大的数据库处理能力,而DBLink则使得不同数据库实例之间的交互变得更加方便和高效。掌握这些技术对于提高数据库应用程序的性能和可维护性具有重要意义。
执行存储过程,通过指定目标数据库登录信息,动态生成dblink,打开游标,按批次插入本地指定表中,每批次1万条数据。同步记录和日志信息写在自动生成的sync_log表中。同步完成后自动删除动态生成的存储过程、dblink...
dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink
### Oracle DBLink创建过程及快照同步方法 #### 一、Oracle DBLink概念与创建步骤 DBLink(Database Link)是Oracle提供的一种机制,用于在不同的Oracle数据库实例之间建立连接,实现跨数据库查询、更新等功能。它...
2. 编写存储过程:如`MYPROC.prc`,在这个过程中,使用DBLink查询远程数据库的更新,然后在本地执行相应的更新操作。 3. 创建Job:使用`DBMS_SCHEDULER`包中的函数,设定Job的执行时间和频率,指定执行的PL/SQL块或...
Oracle 通过 DBlink 连接 MySQL 搭建过程是一个复杂的过程,需要安装和配置多个组件,包括 unixODBC、mysql-connector-odbc 和 Oracle 环境变量。本文将详细说明这个过程,帮助读者了解如何使用 DBlink 连接 Oracle...
动态DBLINK通常通过PL/SQL过程或函数中的`DBMS_DB_LINK`包进行创建和管理,增加了灵活性但同时也引入了更多的管理复杂性。 ### DBLINK的应用场景 DBLINK在多种业务场景中发挥着重要作用: 1. **跨库查询**:...
该存储过程实现源数据库按照时间同步更新计算库的过程 实现表的同步以及动态表某期间的数据同步。 该存储过程主要演示了: 1.dblink创建和dblink的使用; 2.如何使用字典表和游标实现选择性数据同步。
在Oracle数据库环境中,当我们在存储过程中使用DBLink同义词时,可能会遇到“PLS-00201: 必须声明标识符”的错误。这个错误通常表明编译器无法识别你引用的对象,可能是由于权限问题或者对象定义未正确导入。下面...
DBLink使得数据交互和分布式查询变得简单。在本文中,我们将深入探讨DBLink的创建和使用方法。 首先,创建DBLink的先决条件是本地数据库用户必须拥有相应的权限。有三种与DBLink相关的权限: 1. CREATE DATABASE ...
### 利用Oracle快照dblink解决数据库表同步问题 #### 概述 在数据库管理领域,特别是当涉及跨数据库的表同步时,Oracle提供...此外,通过灵活地设置快照的刷新策略和触发器,可以根据业务需求定制最适合的同步方案。
Oracle 数据库 Synonym 和 DBLink Oracle 数据库中有两个重要的概念:同义词(Synonym)和数据库连接(DBLink)。这两个概念都是为了方便数据库的使用和管理而设计的。 同义词(Synonym) 同义词是 Oracle 数据库...
使用 DB Link 可以查询、删除和插入远程数据库中的数据,方法与操作本地数据库相同,只需要在表名后添加 @dblink 服务器。 DB Link 的优点 使用 DB Link 可以实现不同的数据库服务器之间的数据共享和交换,提高了...
通过DBLink,用户可以查询远程数据库中的表,并执行远程数据库上的存储过程。但需要注意的是,DBLink通常是单向的连接。 创建DBLink之前,必须保证以下几点: 1. 本地数据库到远程数据库之间的网络连接正常,可以...
### DBlink的应用 #### 一、DBlink简介与配置 DBLink是Oracle数据库中的一个非常重要的特性,主要用于在两个或...通过本文的介绍,希望能帮助读者更好地理解和应用Oracle DBLink技术,提升数据库管理的效率和灵活性。
- **安全性增强**:为了进一步提高安全性,可以在创建DBLink时指定使用SSL加密传输数据,确保数据在传输过程中的安全。 - **定期审查**:建议定期审查所有DBLink的使用情况和权限设置,及时撤销不再需要的DBLink或者...
本文记录了一次在Oracle 10g 64位环境中,通过DBLink连接到MySQL 5.5的过程,并在面临RAC环境中的问题时找到了解决方案。 首先,Oracle 10g 64位版本的HSODBC(异构服务)可能出现问题,表现为HSODBC文件大小为0,...
在提供的部分代码中,我们看到了一系列关于创建dblink和同义词的操作示例: 1. **授予权限**:首先,通过`grant create database link to ods;`和`grant create synonym to ods;`语句,管理员向用户ods授予了创建...
dblink可以分为公有dblink和私有dblink两类,公有dblink使用public修饰关键字,在create和drop的时候都需要使用public关键字。公有dblink对所有人开放,在该dblink之上创建的同义词也会随之对所有人开放。私有dblink...
Oracle之dblink的配置 Oracle之dblink的配置 Oracle之dblink的配置 Oracle之dblink的配置