在ORCAL中实现数据库的复制

在ORCAL中实现数据库的复制,第1张

在ORCAL中实现数据库的复制,第2张

在互联网上操作数据库,往往需要全国各城市同类数据库应用的统一,这样一个节点的数据变化不仅反映在本地,还会反映到远端。复制技术为用户提供了一种快速访问共享数据的方法。
1。数据库复制的先决条件
1。数据库支持高级复制功能
您可以以system身份登录数据库,查看v$option视图。如果高级复制为真,则支持高级复制功能;否则,它不受支持。
2。数据库初始化参数要求
①,db _ domain = test.com.cn
表示数据库的域名(默认为WORLD),这里可以使用贵公司的域名。
②,global_names = true
它要求数据库链接和连接的数据库名称一致。
现在是全局数据库名称:db _ name+"。+db _ domain
③、有与数据库作业执行相关的参数
job _ queue _ processes = 1
job _ queue _ interval = 60
Distributed _ transactions = 10
open _ links = 4
第一行定义SNP进程的起始数为n,系统默认值为0,正常定义范围为0 ~ 36。可以根据任务的数量配置不同的值。
第二行定义系统每n秒唤醒一次进程。系统默认值为60秒,正常范围为1 ~ 3600秒。事实上,该进程在执行完当前任务后会进入睡眠状态。经过一段时间的睡眠后,系统的总控制器会负责将其唤醒。
如果上述参数被修改,您需要重新启动数据库以使参数生效。
二。实现数据库同步复制的步骤
假设我们在互联网上有两个数据库:一个叫深圳,一个叫北京。
具体配置见下表:
数据库名称深圳北京数据库域名test.com.cn test.com.cn数据库sidNo。深圳北京监听器端口号1521 1521服务器ip地址10.1.1.200 10.1.1.200
1。确认两个数据库可以互相访问,在tnsnames.ora
①中设置数据库连接字符串,例如, 深圳这里的数据库连接字符串是以下格式
Beijing =[/Br/](description =[/Br/](address _ list =[/Br/](address =(protocol = TCP)(host = 10 . 1 . 1 . 200)(port = 1521))[/Br/][/Br/](connect _ data =[/Br/](service _ name = Beijing)[/Br/]][/Br]]]Br/]出现以下提示:[/Br/]尝试联系
②北京也配置了,确认$ tnspinning深圳连接。
2。更改数据库的全局名称,并构建一个公共数据库链接。
①、登录深证数据库为system
SQL > alter database rename global _ name为shenzhen.test.com.cn;
以system:
SQL > alter database rename global _ name改为beijing.test.com.cn;
②。以system
SQL >身份登录深圳数据库,使用@ # Beijing @ #创建公共数据库链接beijing.test.com.cn;
测试数据库全局名称和公共数据库链接
SQL > select * from global_name@beijing.test.com.cn;
只需将结果作为beijing.test.com.cn返回即可。
以system身份登录北京数据库:
SQL >使用@ # shen @ #创建公共数据库链接;测试数据库全局名称和公共数据库链接
SQL > select * from global_name@shenzhen.test.com.cn;
只需将结果作为shenzhen.test.com.cn返回即可。
3。建立并授权用户repadmin管理数据库复制。
①、以system
SQL >创建repadmin默认表空间用户标识的用户repadmin
临时表空间temp
SQL > execute DBMS _ defer _ sys . register _ propagator(@ # repadmin @ #);
SQL >授权repadmin执行任何过程;
SQL >执行DBMS _ repcat _ admin . grant _ admin _ any _ rep group(@ # repadmin @ #);
SQL > grant comment any table to repadmin;
SQL > grant lock any table to repadmin;
②。以system身份登录北京数据库,运行上述命令,管理数据库复制用户
repadmin,并对其进行授权。
注意:repadmin用户名和密码可以根据用户需要自由命名。
4。在数据库复制的用户repadmin下创建一个私有数据库链接。
①以repadmin身份登录深圳数据库
SQL >创建数据库链接beijing.test.com.cn连接repadmin标识的repadmin;
测试此专用数据库链接:
SQL > select * from global_name@beijing.test.com.cn;
只需将结果作为beijing.test.com.cn返回即可。
②以repadmin身份登录北京数据库
SQL >创建数据库链接shenzhen.test.com.cn连接到
repadmin标识的repadmin;
测试此专用数据库链接
SQL > select * from global_name@shenzhen.test.com.cn;
只需将结果作为shenzhen.test.com.cn返回即可。
5。为数据库复制创建或选择用户和对象,并授权用户。数据库对象必须有主关键字。
假设我们在ORACLE中使用scott用户dept表作为示例。
①以内部身份登录深圳数据库,创建scott用户并empower
SQL >创建由Tiger默认表空间用户标识的用户Scott Temporary
表空间Temp
SQL >将connect,resource授予scott。
SQL >将sys.dbms_defer上的execute授予scott
②以scott身份登录深圳数据库,创建表Dept
SQL > Create Table Dept
(Deptno Number(2)主键,
DNAME VARCHAR2 (14),
Loc VARCHAR2 (13)。
③如果数据库对象没有主键,可以运行以下SQL命令进行添加:
SQL > alter table dept add(constraint dept _ deptno _ PK primary key(deptno));
④在深圳数据库中创建scott用户下主键的序列号,避免与北京冲突。
SQL > create sequence dept _ no递增1 start with 1 max value 44
cycle nocache;
(注意:maxvalue 44可以根据应用定义的位数和表结构的主键来确定)
⑤。在深圳数据库中插入scott用户下的初始化数据
SQL >插入到Dept值(Dept _No. Nextval,@ # Accounting @ #,@ # New York
SQL >插入到Dept值(dept_no.nextval,@#research@#,@ # Dallas @ #);
SQL >提交;
⑥。在北京数据库中运行上述①、②、③
⑥。在北京数据库中创建scott用户下的主键的序列号,以免范围和深圳冲突。
SQL > create sequence dept _ no递增1从45 maxvalue 99 cycle开始
nocache;
⑧、在北京数据库中插入scott用户下的初始化数据
SQL >插入到dept值(dept _no. nextval,@ # sales @ #,@ # Chicago @ #);
SQL>insert into dept值(dept_no.nextval,@#operations@#,@ # Boston @ #);
SQL >提交;
6。创建要复制的组scott_mg,加入数据库对象,为对象生成复制支持
①以repadmin身份登录深圳数据库,创建主复制组Scott _ mg
SQL > ExecuteDBMS _ Repcat。create _ Master _ rep group(@ # Scott _ mg @
注:Scott _ mg组名可以根据用户需要自由命名。
②。添加数据库对象
SQL > Execute DBMS _ Repcat。create _ Master _ Report(sname = > @ # Scott @ #,oname = > @ # Dept @ #,type = > @ # table @ #,use _
参数描述:
用于数据库复制的sname的用户名
用于数据库复制的oname的数据库对象的名称
(表名长度在27个字节以内,包名长度在24个字节以内)
用于数据库复制的type数据库对象类别
(支持的类别:表, index,synonym,trigger,view,procedure,function,package,Package body)
use _ existing _ object true表示使用主复制节点上已经存在的数据库对象gname。 主复制组名称
③。为数据库对象生成复制支持
SQL > ExecuteDBMS _ Repcat。Generate _ Replication _ Support(@ # Scott @ #,@ # Dept @ #)
(描述:生成支持Scott用户下Dept表复制的数据库触发器和包)
④。确认复制的组和对象已加入数据库的数据字典
SQL > Select GNAME,Master,Status from DBA _ REP Group
SQL > select * from DBA _ repo object;
7。创建主复制节点
①。以repadmin身份登录深圳数据库,创建主复制节点
SQL > execute DBMS _ rep cat . 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_object true表示已经与主复制节点存在的数据库对象
Copy_rows false表示复制不需要与主复制节点首次一致
propagation _ mode异步执行
②。确认已将复制的任务队列添加到数据库
SQL>select * from user_jobs的数据字典中;
8。将同步组的状态从停顿更改为正常
①。以repadmin身份登录深圳数据库,运行以下命令
SQL >执行DBMS _ rep cat . resume _ master _ activity(@ # Scott _ mg @ #,false
②,确认同步组状态正常
SQL >从DBA _ rep组中选择gname,master,status;
③如果该①命令不能使同步组的状态正常,则可能有一些暂停的复制。运行以下命令并重试(建议仅在紧急情况下使用
):
SQL > execute DBMS _ Repcat。resume _ Master _ Activity(@ # Scott _ MG @ #
9。创建复制数据库的时间表。我们假设一个固定的时间表:每10分钟复制一次。
①以repadmin身份登录深圳数据库,运行以下命令
SQL > begin
DBMS _ defender _ 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,
roll back _ segment = > @ # @ #);
end;
/

②以repadmin身份登录北京数据库,运行以下命令
SQL > begin
DBMS _ defender _ sys . schedule _ push(
destination = > @ # shenzhen.test.com.cn @ #,
interval = > @ # sysdate+10/1440 @ #,
end;
/

SQL > begin
DBMS _ defer _ sys . schedule _ purge(
next _ date = > sysdate,
interval = > @ # sysdate+10/1440 @ #,
delay_seconds => 0,
roll back _ segment = > @ # @ #);
end;/br/]/
10。添加或修改两边数据库的记录,跟踪复制过程
如果想立刻看到添加或修改数据库的记录变化,可以在两边repadmin users下找到push job_number,但是
run:
SQL > exec DBMS _ job . run .
III .异常情况的处理
1。检查复制是否正常工作。可以查询user _ jobs
SQL > select job,this _ date,next _ date,what,breaked from user _ jobs repadmin user;
正常状态有两种:
任务空闲-this _ date是空,next_date是当前时间之后的一个时间值
任务繁忙-this _ date不是空,Next_date是当前时间之后的一个时间值
异常状态也有两种:
任务死锁-next _ date是当前时间之前的一个时间值
任务死锁-next _ date是一个非常大的时间值, 例如:4001-01-01
这可能是由于网络中断引起的死锁
解决死锁的方法:
$ PS–ef | greprale
发现死锁的更新快照的进程号ora_snp*,使用kill–9命令删除此进程
,然后输入repadmin用户SQL >操作符并运行命令:
SQL > exec DBMS _ job . run(job _ 1
描述:job_number是指select job,this _ date,next _ date,what from user _ jobs命令找到的作业编号。
2。增加或减少复制组的复制对象
①。停止主数据库节点的复制,将同步组的状态从正常改为静止
以repadmin身份登录深圳数据库,运行以下命令
SQL > execute DBMS _ rep cat . suspend _ master _ activity(gname = > @ # Scott _ mg @ #);
②。将数据库对象添加到复制组scott_mg,以确保数据库对象必须具有主键。
SQL > execute DBMS _ rep cat . create _ master _ repo object(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 >执行DBMS _ rep cat . drop _ master _ repo object(@ # Scott @ #,@#dept@#,@ # table @ #);
④再次将同步组的状态从停顿更改为正常。
SQL >执行DBMS _ rep cat . resume _ master _ activity(@ # Scott _ mg @ #,false);

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 在ORCAL中实现数据库的复制

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情