Oracle数据库之间数据同步

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle数据库之间数据同步

项目中开发库与测试数据库分离,其中某些系统表数据与基础资料数据经常需要进行同步,为方便完成指定数据表的同步操作,可以采用dblink结合dbjob方法完成,简单方便。

操作环境:此Oracle数据库服务器ip为ip1,有dbcenter与dbbranch两个库,一般需要将dbcenter的表数据同步到dbbranch,dbcenter为源库,dbbranch为目标库,具体步骤如下:

1.在源库创建到目标库的dblink

create public database link dbcenter

connect to username identified by userpassword

using '

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = ip1)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = orcl)

)

)

' ;

在创建dblink时,要注意,有时候可能会报用户名和密码错误,但实际上我们所输入的账户信息是正确的,此时就注意将密码的大小写按服务器上所设置的输入,并在账号密码前号加上双引号(服务器版本不同造成的)。

2.成功后验证dblink

select sysdate from dual@dbcenter;

3.建立存储过程获取数据

create or replace procedure job_sync() is

begin

Select * from test@dbcenter;

end job_sync;

4.为方便每次需要同步时自动完成同步工作,采用oraclejobs完成定时工作:

--oracle 定时器

declare

job number;

begin

dbms_job.submit(job, 'job_sync;', sysdate,'sysdate+1/(24*60)'); commit;

end;

begin

dbms_job.run(11);

commit;

end;

6.job相关参数信息

select * from user_jobs;——查看调度任务

select * from dba_jobs_running;——查看正在执行的调度任务select * from dba_jobs;——查看执行完的调度任务

定时器的参数说明:

myjob参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作;what参数是将被执行的PL/SQL代码块,这里指的是一个存储过程,注意名字后面的分号;next_date参数指识何时将运行这个工作。写Job的时候可以不指定该值;

interval参数何时这个工作将被重执行。

关于interval的设置,参考以下几个例子:

1、每分钟执行

Interval => TRUNC(sysdate,’mi’) +1 / (24*60)

2、每天定时执行

例如:每天的凌晨2点执行

Interval => TRUNC(sysdate) + 1 +2 / (24)

3、每周定时执行

例如:每周一凌晨2点执行

Interval => TRUNC(next_day(sysdate,2))+2/24 --星期一,一周的第二天

4、每月定时执行

例如:每月1日凌晨2点执行

Interval =>TRUNC(LAST_DAY(SYSDATE))+1+2/24

5、每季度定时执行

例如每季度的第一天凌晨2点执行

Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 2/24 6、每半年定时执行

例如:每年7月1日和1月1日凌晨2点

Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24

7、每年定时执行

例如:每年1月1日凌晨2点执行

Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+2/24

例子:

--oracle 定时器

declare

job number;

begin

dbms_job.submit(job, 'job_proc;', sysdate,'sysdate+1/(24*60)');

commit;

end;

begin

dbms_job.run(11);

commit;

end;

--job_queue_processes=0不会执行,=10才会执行oracle10以后自动被设置成了0,所以需要用到下面的操作开启job功能

select * from v$parameter where name='job_queue_processes';

alter system set job_queue_processes = 10;

相关文档
最新文档