问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

两个一样的oracle 数据库怎么实现数据定期同步?

发布网友 发布时间:2022-04-08 21:56

我来回答

3个回答

懂视网 时间:2022-04-09 02:18

 自己写了个数据同步的方法,两个数据库之间的数据同步,自己可以通过调用存储过程,添加作业实现定时同步数据。

CREATE OR REPLACE PROCEDURE Data_sync_Common(tableName in varchar2) is
 v_sql  VARCHAR2(20000); --????SQL
 pk_col_name VARCHAR2(800); --主键SQL
 insert_col_name_A VARCHAR2(20000); --A表字段
 insert_col_name_B VARCHAR2(20000); --B表字段
 update_col_name VARCHAR2(20000); --更新字段
 dsql  VARCHAR2(20000);
 local_col_in VARCHAR2(20000);
 TYPE cur_type IS REF CURSOR;
 cur_not_contain_col cur_type;
 CURSOR CR1 IS

 -- select ‘alter table ‘||table_name||‘ disable constraint ‘||constraint_name as dsql
 SELECT table_name, constraint_name
 FROM user_constraints
 WHERE constraint_type = ‘R‘
 AND table_name = upper(tableName);
BEGIN
 SELECT to_char(WMSYS.WM_CONCAT(‘‘‘‘ || column_name || ‘‘‘‘))
 INTO local_col_in
 FROM user_tab_cols
 WHERE table_name = upper(tableName);

 dsql := ‘SELECT * FROM user_tab_cols@testjob_dblink1 WHERE table_name=‘‘‘ ||
  upper(tableName) || ‘‘‘ AND column_name not IN(‘ || local_col_in || ‘)‘;
 dbms_output.put_line(dsql);
 OPEN cur_not_contain_col FOR dsql;

 SELECT REPLACE(to_char(WMSYS.WM_CONCAT(‘ AND a.‘ || cu.COLUMN_NAME ||
      ‘=b.‘ || cu.COLUMN_NAME)),
   ‘,‘,
   ‘‘)
 INTO pk_col_name
 FROM user_cons_columns cu, user_constraints au
 WHERE cu.constraint_name = au.constraint_name
 AND au.constraint_type = ‘P‘
 AND au.table_name = upper(tableName);

 IF (pk_col_name IS NULL) OR (LENGTH(pk_col_name) < 6) THEN
 SELECT REPLACE(to_char(WMSYS.WM_CONCAT(‘ and a.‘ || cu.COLUMN_NAME ||
      ‘=b.‘ || cu.COLUMN_NAME)),
   ‘,‘,
   ‘‘)
 INTO pk_col_name
 FROM user_cons_columns cu, user_constraints au
 WHERE cu.constraint_name = au.constraint_name
 AND au.constraint_type = ‘U‘
 AND au.table_name = upper(tableName);
 END IF;

 SELECT to_char(WMSYS.WM_CONCAT(‘b.‘ || column_name))
 INTO insert_col_name_B
 FROM user_tab_cols
 WHERE table_name = upper(tableName);

 SELECT to_char(WMSYS.WM_CONCAT(‘a.‘ || column_name))
 INTO insert_col_name_A
 FROM user_tab_cols
 WHERE table_name = upper(tableName);

 SELECT to_char(WMSYS.WM_CONCAT(‘a.‘ || column_name || ‘=b.‘ ||
     column_name))
 INTO update_col_name
 FROM user_tab_cols
 WHERE table_name = upper(tableName)
 AND column_name NOT IN
  (SELECT cu.COLUMN_NAME
  FROM user_cons_columns cu, user_constraints au
  WHERE cu.constraint_name = au.constraint_name
  AND au.constraint_type = ‘P‘
  AND au.table_name = upper(tableName));

 v_sql := ‘MERGE INTO ‘ || upper(tableName) || ‘@testjob_dblink1 a USING ‘ || upper(tableName) ||
  ‘ b‘ || ‘
  ON (‘ || substr(pk_col_name, 6, length(pk_col_name)) || ‘)‘;
 dbms_output.put_line(update_col_name);
 IF (update_col_name IS NOT NULL) AND (LENGTH(update_col_name) > 0) THEN
 v_sql := v_sql || ‘ when matched then
 update set ‘ || update_col_name;
 END IF;
 v_sql := v_sql || ‘
  when not matched then
  insert (‘ || insert_col_name_A || ‘) values( ‘ ||
  insert_col_name_B || ‘)‘;


 dbms_output.put_line(v_sql);
 EXECUTE immediate(v_sql);
 EXCEPTION
 WHEN OTHERS THEN
 dbms_output.put_line(sqlerrm);

END Data_sync_Common;
-----------------------------调用上述存储过程
CREATE OR REPLACE PROCEDURE DATA_sync is
BEGIN
data_sync_common(‘TEST_SYNC‘);
COMMIT;
EXCEPTION 
 WHEN OTHERS THEN 
 ROLLBACK ;
END DATA_sync;

 

oracle数据表数据同步公用方法

标签:

热心网友 时间:2022-04-08 23:26

  两个一样的oracle ,定期同步,说白了就是主备用数据库数据同步的问题;
  如果数据库A和数据库B是建立在两*立的数据库服务器上,那么采用dblink方式是一种可行的方式,
  第一种方式:前提是数据库A和数据库B本地网是24小时互通的同时对数据同步实时性有比较高的要求,那么可以建立DBLINK,在两个库都建触发器,不管当前在哪个库发生数据更新的时候实时同步数据到目标数据库;
  第二种方式:如果数据同步的实时性要求不高,则可以通过定制存储过程的方式(给两个库的数据表加时间戳或者更新标志,)定时同步数据;
  第三种方式:通过给两个数据库的数据表加更新标志字段,以第一种方式为主以满足实时性的要求,以第二种方式为辅弥补可能存在的触发器执行更新未成功的情况。
  以上的方案都是从数据层面所做的处理,对于数据实时同步还是会存在一定的风险,那么双机热备应该说是最好的选择了。

热心网友 时间:2022-04-09 00:44

为了不影响源数据性能可以用物化视图来从源数据库取数据。根据源表中的序列来同步目标表的数据。这个可以建个job定时来跑。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
亚马逊海外购现身移动端 选品与PC端同步 36个常去的美国海淘网站,支持支付宝和直邮中国 草莓是凉性还是热性水果 草莓会不会吃上火 兰德酷路泽4.0l油耗多少? 兰德酷路泽4000油耗百公里是多少 斤两再下是什么 两钱后面的单位是什么 人体有几大系统,分别是什么作用? 事业单位工人身份有职称怎么退休 枪手丧尸幸存者怎么解锁喷火器 找山东查分数的网站? 窗帘罗马杆品牌哪个好,贵不贵 窗帘罗马杆大概的价格是多少? 快手极速版是真的还是假的? 北京地区罗马杆 窗帘配件 在什么地方批发啊 知道的说一声啊 越详细越好 谢谢 罗马杆去哪里买比较好啊 网上购买的窗帘和罗马杆在哪里提货 快手极速版是电信诈骗吗 济南哪里有卖窗帘架子跟杆子的 长沙批发窗帘罗马杆,比如内包塑梅花铁杆,双线铁杆,纳米6代,葫芦轨道,铝罗马杆还有布帘配件一起批发的 太原窗帘罗马杆轨道哪里有 涿州市哪里有卖窗帘罗马杆和轨道的 在江苏徐州做窗帘罗马杆一般都到哪里去进货? 上海奉贤哪里有专门卖罗马杆,窗帘轨道的?麻烦告诉一下 郑州哪有卖窗帘杆的,就是罗马杆 罗马杆或者轨道哪种店里用 用手机qq上传视频怎么剪裁? 用几摄氏度的水蒸蛋最适合? 蒸鸡蛋羹一个蛋黄加多少水,应用什么温度的水 蒸一个鸡蛋羹加多少水 蒸蛋用冷水还是热水 今年山东高考查分热线电话,及查分网址 如何查询山东高考成绩 山东的高考成绩怎么查? 山东高考查分数怎么查 甘肃省武威市凉州区羊下坝镇信用社有妇用创业无息贷款吗? 山东高考成绩查询方式有哪些? 一只股票从1元涨到10元,年增涨了百分比是多少? 山东省高考查分数电话和查分网站是什么? 山东省的高考成绩能查了吗?怎么查? 一级注册结构工程师专业考试的形式 国际贸易理论与实务到底该复习什么。 自考《国际贸易理论与实务》哪几章最重要 学生餐食谱大全及做法 我是才毕业的毕业生 在会计师事务所做审计 刚来,别人叫我做验资报告,但是我什么都不会 白银万兴会计师事务所(特殊普通合伙)怎么样? 会计师事务所对事业单位年检验资报告,要范文,会计事务出具的报告 我就是会计师事务所的审计助理,项目经理让我写的,我以前没写过,求帮助!!! 哪位在会计师事务所工作的朋友,请帮个忙,提供一份派生分立审计报告和验资报告范文,十分感谢! 包头中鹿会计师事务所怎么样? 荡秋千是什么运动?是平移还是旋转?