同一个数据库,但是有两个用户,这两个用户中有一个相同的表,怎么实现这两个表的数据同步?
1.同时操作同一个表就行了么
2.定时备份
--假设是将 用户名1的表A 同步到 用户名2的表B
--按以下流程:
--用户名2登录后创建下面同存储过程
CREATE OR REPLACE PROCEDURE SP_表数据同步 AS
BEGIN
--删除表数据
EXECUTE IMMEDIATE 'TRUNCATE TABLE B';
--插入表数据
insert into B
select * from 用户名1.A;
commit;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;
--创建同步任务
declare
job_id pls_integer;
begin
sys.dbms_job.submit(job => job_id, what => 'SP_表数据同步;', next_date => to_date('10-04-2018', 'dd-mm-yyyy'), interval => 'TRUNC(SYSDATE + 1)');
commit;
end;
/* job时间周期:
每天运行一次 'SYSDATE + 1'
每小时运行一次 'SYSDATE + 1/24'
每10分钟运行一次 'SYSDATE + 10/(60*24)'
每30秒运行一次 'SYSDATE + 30/(60*24*60)'
每隔一星期运行一次 'SYSDATE + 7'*/
可以用kettle工具定时抽取,就算是不同库也可以解决
知道一种方法,是自己操作的,实现同步,也就是再操作库的时候,生成一个sql文件,之后,执行就可以了;
同时操作同一个表就行了么
创建同步任务
declare
job_id pls_integer;
begin
sys.dbms_job.submit(job => job_id, what => 'SP_表数据同步;', next_date => to_date('10-04-2018', 'dd-mm-yyyy'), interval => 'TRUNC(SYSDATE + 1)');
commit;
end;
个人觉得用存储过程是最佳选择。
给两个用户的表赋权限就可以了
方法一、创建同义词
方法二、将表赋权给用户 带上用户名操作
方法三、赋权建立 视图
在同一个库中,通过同义词或者视图实现是比较方便的。根据需求是双向同步还是单向同步,来授予不同权限。
没必要同步,看哪个是数据写入的,给读取的那个用户授权就可以了