Oracle高级复制.docx
- 文档编号:8801219
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:16
- 大小:21.94KB
Oracle高级复制.docx
《Oracle高级复制.docx》由会员分享,可在线阅读,更多相关《Oracle高级复制.docx(16页珍藏版)》请在冰豆网上搜索。
Oracle高级复制
一、试验环境:
A机:
IP:
10.1.8.201
OS:
WindowsServer2003StandardEditionSP1;
DB:
Oracle10gEnterpriseEditionRelease10.1.0.2.0;
数据库字符集:
NLS_CHARACTERSETZHS16GBK
B机:
IP:
10.1.9.49
OS:
WindowsServer2003StandardEditionSP1;
DB:
Oracle10gEnterpriseEditionRelease10.1.0.2.0;
数据库字符集:
NLS_CHARACTERSETZHS16GBK
二、试验步骤:
1.初始化参数设置
A机:
db_domain=
global_names=true
job_queue_processes=10#缺省值
open_links=4#缺省值
B机:
db_domain=
global_names=true
job_queue_processes=10#缺省值
open_links=4#缺省值
2.配置数据库连接
数据库名:
A、B:
orcl
数据库域名:
A、B:
数据库sid号:
A、B:
orcl
Listener端口号:
A、B:
1521
确认两个数据库之间可以互相访问,在tnsnames.ora里设置数据库连接字符串。
A机:
ORCL_49=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.9.49)(PORT=1521))
)
(CONNECT_DATA=
(SERVICE_NAME=)
)
)
tnspingorcle_49测试连通
B机:
ORCL_201=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.8.201)(PORT=1521))
)
(CONNECT_DATA=
(SERVICE_NAME=)
)
)
tnspingorcle_201测试连通
3.用system用户连接数据库,改数据库全局名称,建公共的数据库链接。
A机:
alterdatabaserenameglobal_nameto;
B机:
alterdatabaserenameglobal_nameto;
A机:
createpublicdatabaselinkusing'orcl_49';
select*fromglobal_name@;--验证数据库连接
B机:
createpublicdatabaselinkusing'orcl_201';
select*fromglobal_name@;--验证数据库连接
4.用system用户连接数据库,建立管理数据库复制的用户repadmin,并赋权
A、B机:
createuserrepadminidentifiedbyrepadmindefaulttablespaceuserstemporarytablespacetemp;
executedbms_defer_sys.register_propagator('repadmin');
grantexecuteanyproceduretorepadmin;
executedbms_repcat_admin.grant_admin_any_repgroup('repadmin');
executedbms_repcat_admin.grant_admin_any_schema(username=>'"REPADMIN"');
grantcommentanytabletorepadmin;
grantlockanytabletorepadmin;
grantselectanydictionarytorepadmin;
5.用repadmin用户连接数据库,下创建私有的数据库链接
A机:
createdatabaselinkconnecttorepadminidentifiedbyrepadmin;
select*fromglobal_name@;--验证数据库连接
B机:
createdatabaselinkconnecttorepadminidentifiedbyrepadmin;
select*fromglobal_name@;--验证数据库连接
6.创建实现数据库复制的用户和对象,给用户赋权,表必须有主关键字。
A机:
--用sys连接数据库,创建用户并授权
createusertestuseridentifiedbytestuserdefaulttablespaceuserstemporarytablespacetemp;
grantconnect,resourcetotestuser;
grantexecuteonsys.dbms_defertotestuser;
--用testuser连接数据库,创建表测试表dept
createtabledept
(deptnonumber
(2)primarykey,
dnamevarchar2(14),
locvarchar2(13));
--创建主关键字的序列号,范围避免和B机的冲突
createsequencedept_noincrementby1startwith1maxvalue44cyclenocache;
--插入初始化数据
insertintodeptvalues(dept_no.nextval,'accounting','newyork');
insertintodeptvalues(dept_no.nextval,'research','dallas');
commit;
B机:
--用sys连接数据库,创建用户并授权
createusertestuseridentifiedbytestuserdefaulttablespaceuserstemporarytablespacetemp;
grantconnect,resourcetotestuser;
grantexecuteonsys.dbms_defertotestuser;
--用testuser连接数据库,创建表测试表dept
createtabledept
(deptnonumber
(2)primarykey,
dnamevarchar2(14),
locvarchar2(13));
--创建主关键字的序列号,范围避免和B机的冲突
createsequencedept_noincrementby1startwith45maxvalue99cyclenocache;
--插入初始化数据
insertintodeptvalues(dept_no.nextval,'sales','chicago');
insertintodeptvalues(dept_no.nextval,'operations','boston');
commit;
7.创建要复制的组testuser_mg,加入数据库对象,产生对象的复制支持
A机:
--用repadmin身份登录orcl数据库,创建主复制组testuser_mg:
executedbms_repcat.create_master_repgroup('testuser_mg');
--在复制组testuser_mg里加入数据库对象:
executedbms_repcat.create_master_repobject(sname=>'testuser',oname=>'dept',type=>'table',use_existing_object=>true,gname=>'testuser_mg');
参数说明:
sname实现数据库复制的用户名称;
oname实现数据库复制的数据库对象名称;
type实现数据库复制的数据库对象类别;
use_existing_objecttrue表示用主复制节点已经存在的数据库对象;
gname主复制组名;
--对数据库对象产生复制支持:
executedbms_repcat.generate_replication_support('testuser','dept','table');
--确认复制的组和对象已经加入数据库的数据字典:
selectgname,master,statusfromdba_repgroup;
select*fromdba_repobject;
8.创建主复制节点
A机:
--用repadmin身份登录orcl数据库,创建主复制节点
executedbms_repcat.add_master_database(gname=>'testuser_mg',master=>'',use_existing_objects=>true,copy_rows=>false,propagation_mode=>'asynchronous');
参数说明:
gname主复制组名;
master加入主复制节点的另一个数据库;
use_existing_objecttrue表示用主复制节点已经存在的数据库对象;
copy_rowsfalse表示第一次开始复制时不用和主复制节点保持一致;
propagation_mode异步地执行;
--确认复制的任务队列已经加入数据库的数据字典
select*fromuser_jobs;
9.使同步组的状态由停顿(quiesced)改为正常(normal)
A机:
--用repadmin连接数据库,运行以下命令
executedbms_repcat.resume_master_activity('testuser_mg',true);
--确认同步组的状态为正常(normal)
selectgname,master,statusfromdba_repgroup;
10.创建复制数据库的时间表,10分钟复制一次
A机:
--用repadmin身份登录数据库,运行以下命令
begin
dbms_defer_sys.schedule_push( destination=>'',
interval=>'sysdate+10/1440',
next_date=>sysdate);
end;
/
begin
dbms_defer_sys.schedule_purge( next_date=>sysdate,
interval=>'sysdate+10/1440',
delay_seconds=>0,
rollback_segment=>'');
end;
/
B机:
--用repadmin身份登录数据库,运行以下命令
begin
dbms_defer_sys.schedule_push( destination=>'',
interval=>'sysdate+10/1440',
next_date=>sysdate);
end;
/
begin
dbms_defer_sys.schedule_purge( next_date=>sysdate,
interval=>'sysdate+10/1440',
delay_seconds=>0,
rollback_segment=>'');
end;
/
11.添加或修改两边数据库的记录,跟踪复制过程
如果你想立刻看到添加或修改后数据库的记录的变化,可以在两边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用户运行命令:
execdbms_job.run(job_number);
说明:
job_number为用selectjob,this_date,next_date,whatfromuser_jobs;命令查出的job编号。
2.增加或减少复制组的复制对象
①、停止主数据库节点的复制动作,使同步组的状态由正常(normal)改为停顿(quiesced)
用repadmin身份登录数据库,运行以下命令
executedbms_repcat.suspend_master_activity(gname=>'testuser_mg');
②、在复制组testuser_mg里加入数据库对象,保证数据库对象必须有主关键字。
executedbms_repcat.create_master_repobject(sname=>'testuer',oname=>'emp',type=>'table',use_existing_object=>true,gname=>'testuser_mg');
对加入的数据库对象产生复制支持
executedbms_repcat.generate_replication_support('testuser','emp','table');
③、在复制组scott_mg里删除数据库对象。
executedbms_repcat.drop_master_repobject('testuser','dept','table');
④、重新使同步组的状态由停顿(quiesced)改为正常(normal)。
executedbms_repcat.resume_master_activity('scott_mg',false);
准备工作
在进行复制之前需要准备的东西很多,当然最基础就是网络必须畅通,之后需要收集一些复制环境的基本信息:
1.需要复制的数据库站点的数量
2.每个站点的Oracle版本号
3.每个需要复制的数据库的大小
4.每个数据库所使用的字符集
5.每个需要复制的数据所用的方案名
收集完环境信息,可以开始建立总部的集中数据库,集中数据库要求版本高于所有主战点的版本,最好所有的数据库都是用相同的字符集。
建好库后为每个主站点的备份数据分别建一个表空间,表空间大于需要复制的数据量,至于预留以后的发展空间视实际情况而定。
为每个主站点的对应复制数据建立方案,如果各个主站点所使用的方案名不同,在集中数据库站点分别建立名称相同的对应方案。
否则为各主站点的复制数据分别建立相应的方案名。
实际情况是后者,各营业部的数据库都是用Oracle的方案名,这里我们建立三个对应方
案:
SHORACL、HZORACL和WHORACL。
所有数据库的版本都是9i。
基本概念
复制之前先解释一下复制中的几个概念:
1.主站点(MaterSite):
在复制过程中提供数据源的站点。
如上图中的上海数据库站点。
2.实体化视图站点(MaterializedViewSite):
实体化视图复制中的目标站点。
如上图中的北京数据库站点。
3.多主体站点复制(MultimasterReplication):
复制环境中的站点都是主站点,对复制的数据库对象有相同的管理权限。
4.实体化视图复制(MaterializedViewReplication):
一个主体站点提供源复制对象,一个实体化视图站点拷贝主站点数据。
5.实体化视图(MaterializedView):
在实体化视图站点为每个复制表或者视图建立一个对应的表保存相应的数据,该表只能通过Oracle的复制机制进行增删改数据的操作。
6.快速刷新、完全刷新和强制刷新:
复制过程中的三种刷新方式。
快速刷新只复制源数据对象的改变部分;完全刷新每次都拷贝一遍源数据对象;强制刷新是数据库的一个折衷方案,如果快速刷新失败则使用完全刷新。
7.主体组(MasterGroup):
主体站点中被复制的源数据对象的集合。
8.实体化视图组(MaterializedViewSite):
实体化视图站点中复制对象的集合。
9.实体化视图日志(MaterializedViewLog):
实体化视图复制中使用快速刷新时记录主体源数据对象操作日志的表。
同步复制和异步复制就不解释了,本例采用每天一次的异步复制。
进行复制
配置好本地服务名分别为:
上海站点:
SH,杭州站点:
HZ,武汉站点:
WH,北京站点:
BJ,进入没有登录的sqlplus,让我们开始复制!
一.设置主站点。
这里以上海主站点设置为例。
1.连接主站点,创建复制管理员并授予相应的权限,复制管理员是管理整个复制环境并创建复制对象的用户。
只有数据管理员可以建立主体组和实体化视图组。
connectsystem/passwd@SH
createuserrepadminidentifiedbyrepadmin;
begin
dbms_repcat_admin.grant_admin_any_schema(
username=>’repadmin’);
end;
/
grantcommentanytabletoREPADMIN;
grantlockanytabletoREPADMIN;
后面的两个grant语句使复制管理员可以为任何表建立实体化视图日志。
如果想改用户可以使用视图管理器,还需要下面的命令:
grantselectanydictionarytoREPADMIN;
2.注册传播方,传播方会将主体站点的延迟事务队列推入其他主体站点或者实体化视图站点。
begin
dbms_defer_sys.register_purpagator(username=>’repadmin’);
end;
3.调度清除作业,该作业会定时清除延迟事务队列并用传播方将延迟事务推入其他主体站点或者实体化视图站点。
先更换用户:
disconnect;
connectrepadmin/repadmin@SH;
begin
dbms_defer_sys.schedule_purge(
next_date=>sysdate,interval=>’sysdate+1’,delay_seconds=>0);
end;
next_date:
下一次执行日期,sysdate表示立即。
interval:
间隔时段,sysdate+1表示间隔一天,sysdate+1/24表示间隔一小时
delay_seconds:
当延迟队列没有延迟事件时停止被次清除操作的延迟时间。
4.为实体化视图站点建立复制代理。
创建复制代理用户并授予视图接受方权限。
复制代理是复制接收方连接主体站点的用户
disconnect;
connectsystem/passwd@SH;
createuserproxy_bjoracleidentifiedbyproxy_bjoracle;
begin
dbms_repcat_admin.register_user_repgroup(
user_name=>’proxy_bjoracle,
privilege_type=>’proxy_snapadmin’,list_of_gnames=>NULL);
end;
/
grantselect_catalog_roletoproxy_bjoracle;
disconnect;
connectrepadmin/repadmin@SH;
begin
dbms_repcat.create_master_repgroup(gname=>’sh_rep’);
end;
/
6.向主体组中添加复制对象
a)添加表:
begin
dbms_repcat.create_master_repobject(
gname=>’sh_rep’,
type=>’TABLE’,
oname=>’CREDIT_CARD’
sname=>’SHORACL’
use_existing
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 高级 复制