- 浏览: 615928 次
- 性别:
- 来自: 杭州,长沙
文章分类
- 全部博客 (279)
- Java (30)
- Jsp、Servlet (18)
- Web前端 (56)
- Oracle (31)
- SqlServer (1)
- Jetty (3)
- Tomcat (6)
- Weblogic (11)
- Websphere (2)
- Struts2 (13)
- Spring (5)
- Ibatis (8)
- Hibernate (3)
- Webservice (1)
- C/C++ (2)
- Linux (13)
- Android (1)
- 正则表达式 (3)
- 网络组建 (3)
- 软件工程 (11)
- IDE使用技巧 (20)
- Windows操作技巧 (18)
- 养生之道 (1)
- 杂七杂八 (15)
- 心理保健 (1)
最新评论
-
50854319:
elements[i] = tagArr[i]; 这个需要修改 ...
document.getElementsByName在IE下的bug解决 -
mengsina:
通过楼主的介绍,能够启动client了。但是又遇到了cisco ...
(转)Cisco Systems, Inc. VPN使用过程中常见问题解决方案 -
zzz_robinson:
谢谢,关闭-启动-启动。这个循序对的,否则每次都提示服务没打开 ...
(转)Cisco Systems, Inc. VPN使用过程中常见问题解决方案 -
wuchunjiesp:
总算解决了,THANK楼主,空值问题是TYPE里面参数类型定义 ...
(原创)Ibatis2调用数据库存储过程的相关示例 -
wuchunjiesp:
存储里面是这样的
FOR I IN 1..P_GOODSDI ...
(原创)Ibatis2调用数据库存储过程的相关示例
--名词说明:源——被同步的数据库
目的——要同步到的数据库
前6步必须执行,第6以后是一些辅助信息.
--1、在目的数据库上,创建dblink
drop public database link dblink_orc92_182;
Create public DATABASE LINK dblink_orc92_182 CONNECT TO bst114 IDENTIFIED BY password USING ''orc92_192.168.254.111'';
--dblink_orc92_182 是dblink_name
--bst114 是 username
--password 是 password
--''orc92_192.168.254.111'' 是远程数据库名
--2、在源和目的数据库上创建要同步的表(最好有主键约束,快照才可以快速刷新)
drop table test_user;
create table test_user(id number(10) primary key,name varchar2(12),age number(3));
--3、在目的数据库上,测试dblink
select * from test_user@dblink_orc92_182; //查询的是源数据库的表
select * from test_user;
--4、在源数据库上,创建要同步表的快照日志
Create snapshot log on test_user;
--5、创建快照,在目的数据库上创建快照
Create snapshot sn_test_user as select * from test_user@dblink_orc92_182;
--6、设置快照刷新时间(只能选择一种刷新方式,推荐使用快速刷新,这样才可以用触发器双向同步)
快速刷新
Alter snapshot sn_test_user refresh fast Start with sysdate next sysdate with primary key;
--oracle马上自动快速刷新,以后不停的刷新,只能在测试时使用.真实项目要正确权衡刷新时间.
完全刷新
Alter snapshot sn_test_user refresh complete Start with sysdate+30/24*60*60 next sysdate+30/24*60*60;
--oracle自动在30秒后进行第一次完全刷新,以后每隔30秒完全刷新一次
--7、手动刷新快照,在没有自动刷新的情况下,可以手动刷新快照.
手动刷新方式1
begin
dbms_refresh.refresh(''sn_test_user'');
end;
手动刷新方式2
EXEC DBMS_SNAPSHOT.REFRESH(''sn_test_user'',''F''); //第一个参数是快照名,第二个参数 F 是快速刷新 C 是完全刷新.
--8.修改会话时间格式
ALTER SESSION SET NLS_DATE_FORMAT = ''YYYY-MM-DD HH24:MI:SS'';
--9.查看快照最后一次刷新时间
SELECT NAME,LAST_REFRESH FROM ALL_SNAPSHOT_REFRESH_TIMES;
--10.查看快照下次执行时间
select last_date,next_date,what from user_jobs order by next_date;
--11.打印调试信息
dbms_output.put_line(''use ''||''plsql'');
--12.如果你只想单向同步,那么在目的数据库创建以下触发器(当源数据库表改变时,目的数据库表跟着改变,但目的数据库表改变时,源数据库表不改变).
create or replace trigger TRI_test_user_AFR
after insert or update or delete on sn_test_user
for each row
begin
if deleting then
delete from test_user where id=:old.id;
end if;
if inserting then
insert into test_user(id,name)
values(:new.id,:new.name);
end if;
if updating then
update test_user set name=:new.name where id=:old.id;
end if;
end TRI_test_user_AFR;
--13.如果你想双向同步,请在源数据库中执行前6步,并在双方都创建以下触发器(当源数据库表改变时,目的数据库表跟着改变,目的数据库表改变时,源数据库表也改变)
CREATE OR REPLACE TRIGGER BST114.TRI_TEST_USER_AFR
AFTER DELETE OR INSERT OR UPDATE
ON BST114.SN_TEST_USER
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
declare
tmp_id number(10):=-1;
begin
dbms_output.put_line(''begin'');
if inserting then
--select id into tmp_id from test_user where id=:new.id;
for p in(select id from test_user where id=:new.id)
loop
tmp_id:=p.id;
end loop;
dbms_output.put_line(tmp_id||''===------------'');
if (tmp_id=-1) then
insert into test_user(id,name,age)
values(:new.id,:new.name,:new.age);
end if;
end if;
if updating then
dbms_output.put_line(''updated'');
for p in(select name,age from test_user where id=:old.id)
loop
if (p.name!=:new.name) or (p.age!=:new.age) then
update test_user set name=:new.name,age=:new.age where id=:old.id;
end if;
end loop;
end if;
if deleting then
dbms_output.put_line(''deleted'');
delete from test_user where id=:old.id;
end if;
dbms_output.put_line(''end'');
end TRI_test_user_AFR;
--为防止双向同步触发器死循环,所以要在触发器中增加一些判断,阻止死循环.
--以上同步原理
1.首先创建一个dblink,可以访问远程数据库
2.在本地创建一个快照,映射远程数据表,当远程数据表有变化时,会反应到快照中.
3.由于快照类似于视图表,所以在本地为快照创建一个触发器,当快照有变化时,会触发相应事件.
4.在触发器中写同步数据的代码.
--附:快照刷新时间参数说明
一天的秒数=24小时*60分钟*60钞
所以要想在30秒后刷新,参数应该这样写 sysdate+30/(24*60*60)
1分钟==sysdate+60/(24*60*60)
一天的分钟数=24小时*60分钟
一分钟也可以这样写 sysdate+1/(24*60)
30分钟==sysdate+30/(24*60)
60分钟==sysdate+60/(24*60)
以此类推
1小时==sysdate+1/24==sysdate+60/(24*60)
1天==sysdate+1
一个月==sysdate+30
发表评论
-
Oracle分页查询语句
2010-04-27 17:42 0Oracle的分页查询语句基 ... -
sqldeveloper2.1启动报无法创建jvm实例错误的解决方法
2010-02-25 13:48 1677SQL Developer 启动时报错: Un ... -
提供大家一个pl/sql developer 8 完全破解补丁(不是loader.exe)
2009-11-10 18:01 9916本人亲自下载测试,完全可用,完美破解,支持目前官方提供的最新版 ... -
Oracle:查找表的主键,外键,唯一性约束,索引
2009-11-04 14:26 30171、查找表的所有索引(包括索引名,类型,构成列): sele ... -
如何启动或关闭数据库的归档(ARCHIVELOG)模式
2009-11-03 13:52 1382Oracle数据库可以运行在2种模式下:归档模式(archiv ... -
oracle子递归查询语句的几个有用的属性
2009-10-20 12:59 19081.如何正确排序: siblings 2.展现 ... -
oralce存储过程输入数据java List示例
2009-08-03 17:48 3299一:java代码: 1,Bean pub ... -
oracle创建表空间,创建用户
2009-07-22 17:28 1291//创建临时表空间 create temporary tabl ... -
Oracle动态游标入门
2009-07-13 10:14 2612一、最简单的一个动态游标:CREATE OR REPLACE ... -
用java调用oracle存储过程
2009-07-10 11:11 806一:无返回值的存储过程 存储过程为: CREATE OR ... -
oracle job详解
2009-07-07 16:17 2129一、设置初始化参数 job ... -
存储过程中使用dblink,碰到dblink死锁解决方案
2009-07-06 18:03 2527CREATE OR REPLACE PROCEDURE syn ... -
Oracle预定义的21个系统异常类型!
2009-07-06 17:07 1152命名的系统异常 产生原因 ... -
oracle游标使用
2009-07-03 19:07 1392游标: 用来查询数据库,获取记录集合(结果集)的指针,可 ... -
oracle存储过程,游标及循环应用实例
2009-07-03 18:13 7621最近在项目中做了一个关于系统与系统之间数据同步的业务,之前使用 ... -
如何让你的SQL运行得更快
2009-07-01 16:40 771人们在使用SQL时往往会陷入一个误区,即太关注于所得的结果是否 ... -
用一个实例讲解Oracle的自定义聚集函数
2009-07-01 16:29 1076Oracle数据库的定制功能十分强大。Oracle不但允许用 ... -
对一大表建立索引时应当注意的事项及提高性能
2009-07-01 16:22 1158一、注意事项: 首先,应当考虑表空间和磁盘空间是否足够。我们 ... -
Oracle 函数大全(字符串函数,数学函数,日期函数,逻辑运算函数,其他函数)
2009-07-01 11:42 910SQL中的单记录函数 1.ASCII 返回与指定的字符对应的十 ... -
oracle db_link 和触发器实现不同数据库表的同步
2009-06-30 19:35 2178---创建dblink,dblink_test名称,(被同步数 ...
相关推荐
### 利用Oracle快照dblink解决数据库表同步问题 #### 概述 在数据库管理领域,特别是当涉及跨数据库的表同步时,Oracle提供的多种工具和技术为DBA(数据库管理员)提供了极大的便利。其中,Oracle快照(Snapshot)与...
本文将深入探讨如何利用Oracle的Job和DBLink功能进行高级数据库同步技术,以确保数据的一致性和实时性。 首先,让我们了解Oracle Job。Job是Oracle的一个调度工具,它允许用户在特定时间或按固定频率执行数据库操作...
执行存储过程,通过指定目标数据库登录信息,动态生成dblink,打开游标,按批次插入本地指定表中,每批次1万条数据。同步记录和日志信息写在自动生成的sync_log表中。同步完成后自动删除动态生成的存储过程、dblink...
2. **查询源数据库表**:使用DB Link,我们可以查询源数据库scott用户下的所有表。例如: ```sql SELECT table_name FROM all_tables@scott_dblink WHERE owner = 'SCOTT'; ``` 这将返回scott用户拥有的所有表名...
Linux下ORACLE 使用dblink连接mysql_lijilinjy的专栏-CSDN博客.mhtml
### Oracle数据库之间同步数据:dbLink + Job方式 在Oracle数据库管理中,有时我们需要实现不同数据库之间的数据同步。本文将详细介绍如何通过dbLink与Job相结合的方式实现这一目标。 #### 一、dbLink简介 dbLink...
Oracle之dblink的配置 Oracle之dblink的配置 Oracle之dblink的配置 Oracle之dblink的配置
Oracle快照(Snapshot)是一种存储表的静态副本的方法,常用于实现本地数据库与远程数据库之间的数据同步。 ##### 1. 创建快照日志 首先,在本地数据库中创建一个用于记录变化的快照日志: ```sql CREATE TABLE ...
为了实现Oracle数据库与SQLServer数据库之间的数据交换,可以通过多种方式实现连接,其中一种较为简便的方法是利用Oracle提供的ODBC(Open Database Connectivity)机制来建立DBLink。这种方式相较于使用透明网关...
使用 DBlink 连接 Oracle 和 MySQL 数据库 Oracle 通过 DBlink 连接 MySQL 搭建过程是一个复杂的过程,需要安装和配置多个组件,包括 unixODBC、mysql-connector-odbc 和 Oracle 环境变量。本文将详细说明这个过程...
巧用dblink结合oracle快照实现两台服务器的数据同步
oracle通过ODBC建立dblink访问SqlServer数据库配置
### Oracle 10g 或 11g 通过 DBLink 访问 SQL Server 数据库 #### 概述 本文档详细介绍了如何在Oracle 10g或11g环境中使用DBLink来访问SQL Server数据库的方法。这种方法对于那些习惯于使用Oracle进行数据库操作的...
Oracle 数据库 Synonym 和 DBLink Oracle 数据库中有两个重要的概念:同义词(Synonym)和数据库连接(DBLink)。这两个概念都是为了方便数据库的使用和管理而设计的。 同义词(Synonym) 同义词是 Oracle 数据库...
Oracle dblink 是 Oracle 数据库中用于连接不同数据库实例的工具,允许用户在多个数据库之间进行数据查询、更新和传输。它的主要应用场景是在分布式环境中,当需要从一个数据库访问另一个远程数据库的数据时。以下是...
总结起来,通过Oracle的DBLink连接MySQL虽然涉及多个层面的配置,但通过正确地识别和解决问题,如HSODBC问题、监听配置问题以及字符集设置,可以成功建立跨数据库的连接。在面对RAC这样的高可用性环境时,需要更细致...
DBLink oracle数据库连接 及简单操作代码
Oracle数据库的DBLINK(数据库链接)是一种连接两个不同Oracle数据库实例的机制,允许用户在一个数据库中执行查询或操作另一个数据库的数据。在Oracle中,DBLINK是实现跨数据库交互的重要工具,尤其在分布式数据库...
- **跨库查询**:利用DBLink可以轻松地实现跨数据库的数据查询和处理,这对于数据分析和报表生成非常有用。 #### 知识点五:DBLink的安全性考虑 - **权限管理**:由于DBLink涉及到不同数据库之间的数据访问,因此...
### Oracle使用DBLink连接远程数据库详解 #### 一、DBLink简介 在Oracle数据库中,DBLink(Database Link)是一种非常实用的功能,它允许用户在一个数据库(本地数据库)中访问另一个数据库(远程数据库)的数据。...