- 浏览: 602900 次
- 性别:
- 来自: 杭州,长沙
文章分类
- 全部博客 (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 1603SQL Developer 启动时报错: Un ... -
提供大家一个pl/sql developer 8 完全破解补丁(不是loader.exe)
2009-11-10 18:01 9850本人亲自下载测试,完全可用,完美破解,支持目前官方提供的最新版 ... -
Oracle:查找表的主键,外键,唯一性约束,索引
2009-11-04 14:26 29891、查找表的所有索引(包括索引名,类型,构成列): sele ... -
如何启动或关闭数据库的归档(ARCHIVELOG)模式
2009-11-03 13:52 1351Oracle数据库可以运行在2种模式下:归档模式(archiv ... -
oracle子递归查询语句的几个有用的属性
2009-10-20 12:59 18411.如何正确排序: siblings 2.展现 ... -
oralce存储过程输入数据java List示例
2009-08-03 17:48 3214一:java代码: 1,Bean pub ... -
oracle创建表空间,创建用户
2009-07-22 17:28 1254//创建临时表空间 create temporary tabl ... -
Oracle动态游标入门
2009-07-13 10:14 2571一、最简单的一个动态游标:CREATE OR REPLACE ... -
用java调用oracle存储过程
2009-07-10 11:11 771一:无返回值的存储过程 存储过程为: CREATE OR ... -
oracle job详解
2009-07-07 16:17 2089一、设置初始化参数 job ... -
存储过程中使用dblink,碰到dblink死锁解决方案
2009-07-06 18:03 2454CREATE OR REPLACE PROCEDURE syn ... -
Oracle预定义的21个系统异常类型!
2009-07-06 17:07 1121命名的系统异常 产生原因 ... -
oracle游标使用
2009-07-03 19:07 1349游标: 用来查询数据库,获取记录集合(结果集)的指针,可 ... -
oracle存储过程,游标及循环应用实例
2009-07-03 18:13 7585最近在项目中做了一个关于系统与系统之间数据同步的业务,之前使用 ... -
如何让你的SQL运行得更快
2009-07-01 16:40 724人们在使用SQL时往往会陷入一个误区,即太关注于所得的结果是否 ... -
用一个实例讲解Oracle的自定义聚集函数
2009-07-01 16:29 1038Oracle数据库的定制功能十分强大。Oracle不但允许用 ... -
对一大表建立索引时应当注意的事项及提高性能
2009-07-01 16:22 1122一、注意事项: 首先,应当考虑表空间和磁盘空间是否足够。我们 ... -
Oracle 函数大全(字符串函数,数学函数,日期函数,逻辑运算函数,其他函数)
2009-07-01 11:42 836SQL中的单记录函数 1.ASCII 返回与指定的字符对应的十 ... -
oracle db_link 和触发器实现不同数据库表的同步
2009-06-30 19:35 2140---创建dblink,dblink_test名称,(被同步数 ...
相关推荐
利用oracle快照dblink解决数据库表同步问题.txt
利用oracle job可以定期让oracle执行数据库的差异同步。与dblink搭配使用,效果更好。
oracle数据库之间同步数据 dbLink +job方式
Oracle之dblink的配置 Oracle之dblink的配置 Oracle之dblink的配置 Oracle之dblink的配置
执行存储过程,通过指定目标数据库登录信息,动态生成dblink,打开游标,按批次插入本地指定表中,每批次1万条数据。同步记录和日志信息写在自动生成的sync_log表中。同步完成后自动删除动态生成的存储过程、dblink...
Linux下ORACLE 使用dblink连接mysql_lijilinjy的专栏-CSDN博客.mhtml
oracle 创建dblink的详细步骤,以及使用oracle快照快速的刷新,保持本地与远程数据库的同步
巧用dblink结合oracle快照实现两台服务器的数据同步
Oracle创建DBlink连接MYSQL数据库
以迁移scott用户下所有的表为例演示Oracle使用dblink导用户下的所有表数据
本文详细描述了在oracle10g或11g中使用dblink访问sql server,使用oracle的透明网关来访问异构的数据库,方便一些习惯使用oracle的开发人员操作sql server数据库
本周由于公司一个系统的oracle数据库需要采集另一个系统mysql数据库的数据,于是对oracle通过dblink连接mysql进行了研究,测试环境是单实例oracle 10g 64位,折腾了半天搞定了,但是生产环境是10g rac,原本以为会很...
DBLink oracle数据库连接 及简单操作代码
oracle通过ODBC建立dblink访问SqlServer数据库配置
oracle通过DBlink连接mysql搭建过程
oracle 使用dblink方式 连接远程数据库,内有详细描述,亲测可以
oracle使用dblink在两个数据库中比对数据库表的行数是否一致
oracle dblink的应用的详细代码设定
oracle通过odbc方式,连接到sqlserver数据库。比透明网关方式更加简单
oracle,oracle_dblink详解