DBLINKWord格式文档下载.docx
《DBLINKWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《DBLINKWord格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
swdx_nsrxx
13.insert
swdx_nsrxx(nsrsbh,nsrmc,jgdm,zgydm,is_tb)select
t.nsrsbh,t.nsrmc,t.nsr_swjg_dm,t.zgswry_dm,'
14.
15.insert
swdx_nsrphone(nsrsbh,lbbh,tel)
select
t.nsrsbh,'
001'
t.TEL_NSR_CW
16.insert
002'
t.TEL_NSR_FR
17.insert
003'
t.TEL_NSR_QT
18.
19.delete
xt_czy
20.insert
xt_czy(czy_id,
czy_mc,
jg_code,
czy_lxdh,
is_zgy,is_tb,is_jgczy,CZY_YXBZ)
distinct
(t.zgswry_dm),
t.zgswry_mc,
t.nsr_swjg_dm,
t.tel_zgy,'
'
0'
Y'
21.insert
distinct(t.nsr_swjg_dm),t.nsr_swjg_mc,t.nsr_swjg_dm,'
22.
23.end;
24.
25.
26.
27.--创建任务(每分钟执行一次)
28.DECLARE
X
NUMBER;
29.BEGIN
30.
SYS.DBMS_JOB.SUBMIT
31.
(
32.
job
=>
33.
what
'
proc_sjtb;
34.
next_date
to_date('
09-12-2008
00:
00'
dd/mm/yyyy
hh24:
mi:
ss'
)
35.
interval
TRUNC(sysdate)
+
1
+2
/
(24)'
36.
);
37.END;
38.
39.
40.--执行任务
41.--RUN(参数)是我们建立任务的时候自动生成的,指定任务号方可启动任务和删除任务
42.
43.begin
44.
SYS.DBMS_JOB.RUN(25);
45.end;
46.
47.--删除任务
48.begin
49.
sys.DBMS_JOB.REMOVE(23);
50.end;
[转]oracle数据库同步技术
oracle数据库同步技术
高级复制
什么是复制?
简单地说复制就是在由两个或者多个数据库系统构成的一个分布式数据库环境中拷贝数据的过程。
高级复制,是在组成分布式数据库系统的多个数据库中复制和维护数据库对象的过程。
Oracle高级复制允许应用程序更新数据库的任何副本,并将这些更改自动传递到其他数据库,同时确保全局事务处理的一致性和数据完整性。
同步复制,复制数据在任何时间在任何复制节点均保持一致。
如果复制环境中的任何一个节点的复制数据发生了更新操作,这种变化会立刻反映到其他所有的复制节点。
这种技术适用于那些对于实时性要求较高的商业应用中。
异步复制,所有复制节点的数据在一定时间内是不同步的。
如果复制环境中的其中的一个节点的复制数据发生了更新操作,这种改变将在不同的事务中被传播和应用到其他所有复制节点。
这些不同的事务间可以间隔几秒,几分种,几小时,也可以是几天之后。
复制节点之间的数据临时是不同步的,但传播最终将保证所有复制节点间的数据一致。
一、实现数据库复制的前提条件
1、数据库支持高级复制功能
您可以用system身份登录数据库,查看v$option视图,如果其中Advancedreplication为TRUE,则支持高级复制功能;
否则不支持。
2、数据库初始化参数要求
①、db_domain=
指明数据库的域名(默认的是WORLD),这里可以用您公司的域名。
②、global_names=true
它要求数据库链接(databaselink)和被连接的数据库名称一致。
现在全局数据库名:
db_name+”.”+db_domain
③、有跟数据库job执行有关的参数
job_queue_processes=1
job_queue_interval=60
distributed_transactions=10
open_links=4
第一行定义SNP进程的启动个数为n。
系统缺省值为0,正常定义范围为0~36,根据任务的多少,可以配置不同的数值。
第二行定义系统每隔N秒唤醒该进程一次。
系统缺省值为60秒,正常范围为1~3600秒。
事实上,该进程执行完当前任务后,就进入睡眠状态,睡眠一段时间后,由系统的总控负责将其唤醒。
如果修改了以上这几个参数,需要重新启动数据库以使参数生效。
二、实现数据库同步复制的步骤
假设在Internet上我们有两个数据库:
一个叫深圳(shenzhen),一个叫北京(beijing)。
具体配置见下表:
数据库名shenzhenbeijing
数据库域名
数据库sid号shenzhenbeijing
Listener端口号15211521
服务器ip地址10.1.1.10010.1.1.200
1、确认两台数据库之间可以互相访问,在tnsnames.ora里设置数据库连接字符串。
①、例如:
深圳这边的数据库连接字符串是以下的格式
beijing=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.1.200)(PORT=1521))
)
(CONNECT_DATA=
(SERVICE_NAME=beijing)
运行$tnspingbeijing
出现以下提示符:
Attemptingtocontact(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.1.200)(PORT=1521))
OK(n毫秒)
表明深圳数据库可以访问北京数据库。
②、在北京那边也同样配置,确认$tnspingshenzhen是通的。
2、改数据库全局名称,建公共的数据库链接。
①、用system身份登录shenzhen数据库
SQL>
alterdatabaserenameglobal_nameto;
用system身份登录beijing数据库:
②、用system身份登录shenzhen数据库
createpublicdatabaselinkusing'
beijing'
测试数据库全局名称和公共的数据库链接
select*fromglobal_name@;
返回结果为就对了。
shenzhen'
3、建立管理数据库复制的用户repadmin,并赋权。
createuserrepadminidentifiedbyrepadmindefaulttablespaceuserstemporarytablespacetemp;
executedbms_defer_sys.register_propagator('
repadmin'
grantexecuteanyproceduretorepadmin;
executedbms_repcat_admin.grant_admin_any_repgroup('
grantcommentanytabletorepadmin;
grantlockanytabletorepadmin;
②、同样用system身份登录beijing数据库,运行以上的命令,管理数据库复制的用户repadmin,并赋权。
说明:
repadmin用户名和密码可以根据用户的需求自由命名。
4、在数据库复制的用户repadmin下创建私有的数据库链接。
①、用repadmin身份登录shenzhen数据库
createdatabaselinkconnecttorepadminidentifiedbyrepadmin;
测试这个私有的数据库链接:
②、用repadmin身份登录beijing数据库
测试这个私有的数据库链接
5、创建或选择实现数据库复制的用户和对象,给用户赋权,数据库对象必须有主关键字。
假设我们用ORACLE里举例用的scott用户,dept表。
①、用internal身份登录shenzhen数据库,创建scott用户并赋权
createuserscottidentifiedbytigerdefaulttablespaceuserstemporarytablespacetemp;
grantconnect,resourcetoscott;
grantexecuteonsys.dbms_defertoscott;
②、用scott身份登录shenzhen数据库,创建表dept
createtabledept
(deptnonumber
(2)primarykey,
dnamevarchar2(14),
locvarchar2(13));
③、如果数据库对象没有主关键字,可以运行以下SQL命令添加:
altertabledeptadd(constraintdept_deptno_pkprimarykey(deptno));
④、在shenzhen数据库scott用户下创建主关键字的序列号,范围避免和beijing的冲突。
createsequencedept_noincrementby1startwith1maxvalue44cyclenocache;
(说明:
maxvalue44可以根据应用程序及表结构主关键字定义的位数需要而定)
⑤、在shenzhen数据库scott用户下插入初始化数据
insertintodeptvalues(dept_no.nextval,'
accounting'
newyork'
research'
dallas'
commit;
⑥、在beijing数据库那边同样运行以上①,②,③
⑦、在beijing数据库scott用户下创建主关键字的序列号,范围避免和shenzhen的冲突。
createsequencedept_noincrementby1startwith45maxvalue99cyclenocache;
⑧、在beijing数据库scott用户下插入初始化数据
sales'
chicago'
operations'
boston'
6、创建要复制的组scott_mg,加入数据库对象,产生对象的复制支持
①、用repadmin身份登录shenzhen数据库,创建主复制组scott_mg
executedbms_repcat.create_master_repgroup('
scott_mg'
scott_mg组名可以根据用户的需求自由命名。
②、在复制组scott_mg里加入数据库对象
executedbms_repcat.create_master_repobject(sname=>
scott'
oname=>
dept'
type=>
table'
use_existing_object=>
true,gname=>
参数说明:
sname实现数据库复制的用户名称
oname实现数据库复制的数据库对象名称
(表名长度在27个字节内,程序包名长度在24个字节内)
type实现数据库复制的数据库对象类别
(支持的类别:
表,索引,同义词,触发器,视图,过程,函数,程序包,程序包体)
use_existing_objecttrue表示用主复制节点已经存在的数据库对象
gname主复制组名
③、对数据库对象产生复制支持
executedbms_repcat.generate_replication_support('
产生支持scott用户下dept表复制的数据库触发器和程序包)
④、确认复制的组和对象已经加入数据库的数据字典
selectgname,master,statusfromdba_repgroup;
select*fromdba_repobject;
7、创建主复制节点
①、用repadmin身份登录shenzhen数据库,创建主复制节点
executedbms_repcat.add_master_database
(gname=>
master=>
use_existing_objects=>
true,copy_rows=>
false,propagation_mode=>
'
asynchronous'
master加入主复制节点的另一个数据库
copy_rowsfalse表示第一次开始复制时不用和主复制节点保持一致
propagation_mode异步地执行
②、确认复制的任务队列已经加入数据库的数据字典
select*fromuser_jobs;
8、使同步组的状态由停顿(quiesced)改为正常(normal)
①、用repadmin身份登录shenzhen数据库,运行以下命令
executedbms_repcat.resume_master_activity('
false);
②、确认同步组的状态为正常(normal)
selectgname,master,statusfromdba_repgroup;
③、如果这个①命令不能使同步组的状态为正常(normal),可能有一些停顿的复制,运行以下命令再试试(建议在紧急的时候才用):
true);
9、创建复制数据库的时间表,我们假设用固定的时间表:
10分钟复制一次。
begin
dbms_defer_sys.schedule_push(
destination=>
interval=>
sysdate+10/1440'
next_date=>
sysdate);
end;
dbms_defer_sys.schedule_purge(
sysdate,
delay_seconds=>
0,
rollback_segment=>
②、用repadmin身份登录beijing数据库,运行以下命令
'
sysdate+10/1440'
10、添加或修改两边数据库的记录,跟踪复制过程
如果你想立刻看到添加或修改后数据库的记录的变化,可以在两边repadmin用户下找到push的job_number,然后运行:
execdbms_job.run(job_number);
三、异常情况的处理
1、检查复制工作正常否,可以在repadmin用户下查询user_jobs
selectjob,this_date,next_date,what,brokenfromuser_jobs;
正常的状态有两种:
任务闲——this_date为空,next_date为当前时间后的一个时间值
任务忙——this_date不为空,next_date为当前时间后的一个时间值
异常状态也有两种:
任务死锁——next_date为当前时间前的一个时间值
任务死锁——next_date为非常大的一个时间值,例如:
4001-01-01
这可能因为网络中断照成的死锁
解除死锁的办法:
$ps–ef|greporale
找到死锁的刷新快照的进程号ora_snp*,用kill–9命令删除此进程
然后进入repadmin用户SQL>
操作符下,运行命令:
job_number为用selectjob,this_date,next_date,whatfromuser_jobs;
命令查出的job编号。
2、增加或减少复制组的复制对象
①、停