|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
两个到底是哪一个给出了MySQL这个名字至今依然是个迷,包括开发者在内也不知道。数据|数据库在Internet上运作数据库常常会有如许的需求:把遍及天下各乡村类似的数据库使用一致起来,一个节点的数据改动不但表现在当地,还反应到远端。复制手艺给用户供应了一种疾速会见共享数据的举措。
1、完成数据库复制的条件前提
1、数据库撑持初级复制功效
您能够用system身份登录数据库,检察v$option视图,假如个中Advancedreplication为TRUE,则撑持初级复制功效;不然不撑持。
2、数据库初始化参数请求
①、db_domain=test.com.cn
指明数据库的域名(默许的是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秒。现实上,该历程实行完以后义务后,就进入眠眠形态,就寝一段工夫后,由体系的总控卖力将其叫醒。
假如修正了以上这几个参数,必要从头启动数据库以使参数失效。
2、完成数据库同步复制的步骤
假定在Internet上我们有两个数据库:一个叫深圳(shenzhen),一个叫北京(beijing)。
详细设置见下表:
数据库名shenzhenBeijing数据库域名test.com.cntest.com.cn数据库sid号shenzhenbeijingListener端标语15211521服务器ip地点10.1.1.20010.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_nametoshenzhen.test.com.cn;
用system身份登录beijing数据库:
SQL>alterdatabaserenameglobal_nametobeijing.test.com.cn;
②、用system身份登录shenzhen数据库
SQL>createpublicdatabaselinkbeijing.test.com.cnusingbeijing;
测试数据库全局称号和大众的数据库链接
SQL>select*fromglobal_name@beijing.test.com.cn;
前往 了局为beijing.test.com.cn就对了。
用system身份登录beijing数据库:
SQL>createpublicdatabaselinkshenzhen.test.com.cnusingshenzhen;
测试数据库全局称号和大众的数据库链接
SQL>select*fromglobal_name@shenzhen.test.com.cn;
前往了局为shenzhen.test.com.cn就对了。
3、创建办理数据库复制的用户repadmin,并赋权。
①、用system身份登录shenzhen数据库
SQL>createuserrepadminidentifiedbyrepadmindefaulttablespaceusers
temporarytablespacetemp;
SQL>executedbms_defer_sys.register_propagator(repadmin);
SQL>grantexecuteanyproceduretorepadmin;
SQL>executedbms_repcat_admin.grant_admin_any_repgroup(repadmin);
SQL>grantcommentanytabletorepadmin;
SQL>grantlockanytabletorepadmin;
②、一样用system身份登录beijing数据库,运转以上的命令,办理数据库复制的用户
repadmin,并赋权。
申明:repadmin用户名和暗码能够依据用户的需求自在定名。
4、在数据库复制的用户repadmin下创立公有的数据库链接。
①、用repadmin身份登录shenzhen数据库
SQL>createdatabaselinkbeijing.test.com.cnconnecttorepadminidentifiedbyrepadmin;
测试这个公有的数据库链接:
SQL>select*fromglobal_name@beijing.test.com.cn;
前往了局为beijing.test.com.cn就对了。
②、用repadmin身份登录beijing数据库
SQL>createdatabaselinkshenzhen.test.com.cnconnecttorepadminidentifiedby
repadmin;
测试这个公有的数据库链接
SQL>select*fromglobal_name@shenzhen.test.com.cn;
前往了局为shenzhen.test.com.cn就对了。
5、创立或选择完成数据库复制的用户和工具,给用户赋权,数据库工具必需有主关头字。
假定我们用ORACLE里举例用的scott用户,dept表。
①、用internal身份登录shenzhen数据库,创立scott用户并赋权
SQL>createuserscottidentifiedbytigerdefaulttablespaceuserstemporary
tablespacetemp;
SQL>grantconnect,resourcetoscott;
SQL>grantexecuteonsys.dbms_defertoscott;
②、用scott身份登录shenzhen数据库,创立表dept
SQL>createtabledept
(deptnonumber(2)primarykey,
dnamevarchar2(14),
locvarchar2(13));
③、假如数据库工具没有主关头字,能够运转以下SQL命令增加:
SQL>altertabledeptadd(constraintdept_deptno_pkprimarykey(deptno));
④、在shenzhen数据库scott用户下创立主关头字的序列号,局限制止和beijing的抵触。
SQL>createsequencedept_noincrementby1startwith1maxvalue44
cyclenocache;
(申明:maxvalue44能够依据使用程序及表布局主关头字界说的位数必要而定)
⑤、在shenzhen数据库scott用户下拔出初始化数据
SQL>insertintodeptvalues(dept_no.nextval,accounting,newyork);
SQL>insertintodeptvalues(dept_no.nextval,research,dallas);
SQL>commit;
⑥、在beijing数据库何处一样运转以上①,②,③
⑦、在beijing数据库scott用户下创立主关头字的序列号,局限制止和shenzhen的抵触。
SQL>createsequencedept_noincrementby1startwith45maxvalue99cycle
nocache;
⑧、在beijing数据库scott用户下拔出初始化数据
SQL>insertintodeptvalues(dept_no.nextval,sales,chicago);
SQL>insertintodeptvalues(dept_no.nextval,operations,boston);
SQL>commit;
6、创立要复制的组scott_mg,到场数据库工具,发生工具的复制撑持
①、用repadmin身份登录shenzhen数据库,创立主复制组scott_mg
SQL>executedbms_repcat.create_master_repgroup(scott_mg);
申明:scott_mg组名能够依据用户的需求自在定名。
②、在复制组scott_mg里到场数据库工具
SQL>executedbms_repcat.create_master_repobject(sname=>scott,oname=>dept, type=>table,use_existing_object=>true,gname=>scott_mg);
参数申明:
sname完成数据库复制的用户称号
oname完成数据库复制的数据库工具称号
(表名长度在27个字节内,程序包名长度在24个字节内)
type完成数据库复制的数据库工具种别
(撑持的种别:表,索引,同义词,触发器,视图,历程,函数,程序包,程序包体)
use_existing_objecttrue暗示用主复制节点已存在的数据库工具
gname主复制组名
③、对数据库工具发生复制撑持
SQL>executedbms_repcat.generate_replication_support(scott,dept,table);
(申明:发生撑持scott用户下dept表复制的数据库触发器和程序包)
④、确认复制的组和工具已到场数据库的数据字典
SQL>selectgname,master,statusfromdba_repgroup;
SQL>select*fromdba_repobject;
7、创立主复制节点
①、用repadmin身份登录shenzhen数据库,创立主复制节点
SQL>executedbms_repcat.add_master_database
(gname=>scott_mg,master=>beijing.test.com.cn,use_existing_objects=>true,
copy_rows=>false,propagation_mode=>asynchronous);
参数申明:
gname主复制组名
master到场主复制节点的另外一个数据库
use_existing_objecttrue暗示用主复制节点已存在的数据库工具
copy_rowsfalse暗示第一次入手下手复制时不必和主复制节点坚持分歧
propagation_mode异步地实行
②、确认复制的义务行列已到场数据库的数据字典
SQL>select*fromuser_jobs;
8、使同步组的形态由停留(quiesced)改成一般(normal)
①、用repadmin身份登录shenzhen数据库,运转以下命令
SQL>executedbms_repcat.resume_master_activity(scott_mg,false);
②、确认同步组的形态为一般(normal)
SQL>selectgname,master,statusfromdba_repgroup;
③、假如这个①命令不克不及使同步组的形态为一般(normal),大概有一些停留的复制,运转以下命令再尝尝(倡议
在告急的时分才用):
SQL>executedbms_repcat.resume_master_activity(scott_mg,true);
9、创立复制数据库的工夫表,我们假定用流动的工夫表:10分钟复制一次。
①、用repadmin身份登录shenzhen数据库,运转以下命令
SQL>begin
dbms_defer_sys.schedule_push(
destination=>beijing.test.com.cn,
interval=>sysdate+10/1440,
next_date=>sysdate);
end;
/
SQL>begin
dbms_defer_sys.schedule_purge(
next_date=>sysdate,
interval=>sysdate+10/1440,
delay_seconds=>0,
rollback_segment=>);
end;
/
②、用repadmin身份登录beijing数据库,运转以下命令
SQL>begin
dbms_defer_sys.schedule_push(
destination=>shenzhen.test.com.cn,
interval=>sysdate+10/1440,
next_date=>sysdate);
end;
/
SQL>begin
dbms_defer_sys.schedule_purge(
next_date=>sysdate,
interval=>sysdate+10/1440,
delay_seconds=>0,
rollback_segment=>);
end;
/
10、增加或修正双方数据库的纪录,跟踪复制历程
假如你想立即看到增加或修正后数据库的纪录的变更,能够在双方repadmin用户下找到push的job_number,然
运转:
SQL>execdbms_job.run(job_number);
3、非常情形的处置
1、反省复制事情一般否,能够在repadmin用户下查询user_jobs
SQL>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>操纵符下,运转命令:
SQL>execdbms_job.run(job_number);
申明:job_number为用selectjob,this_date,next_date,whatfromuser_jobs;命令查出的job编号。
2、增添或削减复制组的复制工具
①、中断主数据库节点的复制举措,使同步组的形态由一般(normal)改成停留(quiesced)
用repadmin身份登录shenzhen数据库,运转以下命令
SQL>executedbms_repcat.suspend_master_activity(gname=>scott_mg);
②、在复制组scott_mg里到场数据库工具,包管数据库工具必需有主关头字。
SQL>executedbms_repcat.create_master_repobject(sname=>scott,oname=>emp,
type=>table,use_existing_object=>true,gname=>scott_mg);
对到场的数据库工具发生复制撑持
SQL>executedbms_repcat.generate_replication_support(scott,emp,table);
③、在复制组scott_mg里删除数据库工具。
SQL>executedbms_repcat.drop_master_repobject(scott,dept,table);
④、从头使同步组的形态由停留(quiesced)改成一般(normal)。
SQL>executedbms_repcat.resume_master_activity(scott_mg,false);
mysqld进程在一个写入当中被杀死;计算机的意外关闭(例如,如果计算机掉电);一个硬件错误。 |
|