oracle 高级复制 配置步骤
测试环境 linux as 4 + oracle 10.2.0.3
master : sfgame
replication_server: rep
检查安装好的数据库是否支持高级复制:
SQL> select value from v$option where parameter='Advanced replication';
VALUE
----------------------------------------------------------------
TRUE
确保返回的结果是TRUE,如果是FALSE 则表示需要重新安装oracle 的高级复制部件。
1,首先设置初始化参数
SQL> show parameter 。。查询下面参数的傎
SQL> alter system set 。。修改参数的值
--at sfgame
db_domain=sfgame.com
global_names=true
job_queue_processes=10 # 缺省值
open_links=4 # 缺省值
--at rep
db_domain=rep.com
global_names=true
job_queue_processes=10 # 缺省值
open_links=4 # 缺省值
2,配置tns使其能够相互访问
3,用system登录数据库
--at sfgame
alter database rename global_name to sfgame.com
--at rep
alter database rename global_name to to rep.com
--at sfgame
create public database link rep.com
connect to system identified by admini
USING '(DESCRIPTION = (ADDRESS_LIST =
(ADDRESS= (PROTOCOL = TCP)(Host = 118.102.16.143 )(Port = 1521)))(CONNECT_DATA =(SID = zhuzhu)(SERVER = DEDICATED)))';
--创建一个公用的数据库链接
select * from global_name@rep.com; --验证是否正确
--at rep
create public database link sfgame.com using 'sfgame';
select * from global_name@sfgame.com;
4,用system登录,创建管理复制的用户repadmin
--both site
create user repadmin identified by repadmin default tablespace users temporary
tablespace temp;
execute dbms_defer_sys.register_propagator('repadmin');
grant execute any procedure to repadmin;
execute dbms_repcat_admin.grant_admin_any_repgroup('repadmin');
execute dbms_repcat_admin.grant_admin_any_schema(username => '"REPADMIN"');
grant comment any table to repadmin;
grant lock any table to repadmin;
grant select any dictionary to repadmin;
5,用repadmin登录,在两个站点创建数据库的私有链接
--at sfgame
conn repadmin/repadmin123
create database link rep.com connect to repadmin identified by repadmin123;
select * from global_name@rep.com; -- 验证数据库连接
--at rep
conn repadmin/repadmin123
create database link sfgame.com connect to repadmin identified by repadmin123;
select * from global_name@sfgame.com; -- 验证数据库连接
6,目前我们的数据库中有相应的用户和表,所以就不用建立测试用户了,目前我们的数据库中的用户叫sfuser
--at sfgame
grant connect, resource to sfuser;
grant execute on sys.dbms_defer to sfuser;
create table tablename .... ----在两边的数据库都建立相同的表
--at rep
grant connect, resource to sfuser; ****注意必须有相同的表
grant execute on sys.dbms_defer to sfuser;
create table tablename ... ----在两边的数据库都建立相同的表
--注意如果数据库中有序列存在则要把序列分开存放
7,建立要复制的组,加入数据库对象,并产生数据库对象支持
--at sfgame
conn repadmin/repadmin123 --以repadmin身份登录
-----创建复制组 sfuser_mg (最好规范一下:username_mg,这个意思就是这个复制组都是sfuser用户的对象)
execute dbms_repcat.create_master_repgroup('sfuser_mg');
-----在复制组sfuser_mg中加入复制对象
execute dbms_repcat.create_master_repobject(sname=>'sfuser',oname=>'city', type=>'table',use_existing_object=>true,gname=>'sfuser_mg');
*******sname: 要复制的用户名称, oname:要复制的对象名称 , type:要复制的对象类型, use_existing_object 复制已经存在的数据库对象,gname:表示要加入到哪个复
制组中去
--对复制对象产生复制支持
execute dbms_repcat.generate_replication_support('sfuser','city','table');
--确认组和对象已经加入到数据库中
select gname, master, status from dba_repgroup;
select * from dba_repobject;
8,创建主复制节点
execute dbms_repcat.add_master_database (gname=>'sfuser_mg',master=>'rep.com',use_existing_objects=>true, copy_rows=>false, propagation_mode =>
'asynchronous');
***gname: 主复制组的名字
***master:加入主复制节点的另一个数据库
***use_existing_object true: 表示用主复制节点已经存在的数据库对象;
***copy_rows false:表示第一次开始复制时不用和主复制节点保持一致;
***propagation_mode 异步地执行;
--确认已经加入到复制队列中
select * from user_jobs;
9,使同步组的状态由停顿(quiesced )改为正常(normal)
execute dbms_repcat.resume_master_activity('sfuser_mg',true);
10,创建数据库的时间表 1分钟一次
----at sfgame
conn repadmin/repadmin123 -以repadmin的身份登录数据库
------推的时间
begin
dbms_defer_sys.schedule_push (destination=>'rep.com', interval=>'sysdate + 1/1440', next_date=>sysdate);
end;
/
-----清除队列中的顺序的时间
begin
dbms_defer_sys.schedule_purge (next_date => sysdate, interval => 'sysdate + 1/1440',delay_seconds => 0, rollback_segment => '');
end;
--at rep ******************如果复制是双向的那么就进行如下步骤
conn repadmin/repadmin123 -以repadmin的身份登录数据库
------推的时间
begin
dbms_defer_sys.schedule_push (destination=>'sfgame.com', interval=>'sysdate + 1/1440', next_date=>sysdate);
end;
/
-----清除队列中的顺序的时间
begin
dbms_defer_sys.schedule_purge (next_date => sysdate, interval => 'sysdate + 1/1440',delay_seconds => 0, rollback_segment => '');
end;
11,如果你想立刻看到添加或修改后数据库的记录的变化,可以在两边 repadmin 用户下找到 push 的 job_number,然后运行:
exec dbms_job.run(job_number);
##################异常处理##################################################################################
1. 检查复制工作正常否,可以在 repadmin 用户下查询user_jobs
select job,this_date,next_date,what, broken from user_jobs;
正常的状态有两种:
任务闲 —— this_date为空,next_date为当前时间后的一个时间值
任务忙 —— this_date不为空,next_date为当前时间后的一个时间值
异常状态也有两种:
任务死锁 —— next_date为当前时间前的一个时间值
任务死锁 —— next_date为非常大的一个时间值,例如:4001-01-01
这可能因为网络中断照成的死锁
解除死锁的办法:
$ps –ef|grep orale
找到死锁的刷新快照的进程号ora_snp*,用kill –9 命令删除此进程
然后进入 repadmin 用户运行命令:
exec dbms_job.run(job_number);
说明:job_number 为用 select job,this_date,next_date,what from user_jobs; 命令查出的job编号。
2,增加或是减少复制组的对象
1,停止主数据库节点的复制操作,使同步组的状态由正常(normal)改为停顿(quiesced )
conn repadmin/repadmin123 以repadmin身份登录数据库
execute dbms_repcat.suspend_master_activity (gname => 'sfuser_mg');
2,在复制组中加入数据库对象
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPOBJECT(
gname => '"SFUSER_MG"',
type => 'TABLE',
oname => '"CITY2"',
sname => '"SFUSER"',
copy_rows => TRUE,
use_existing_object => TRUE);
END;
/
3,产生复制支持
execute dbms_repcat.generate_replication_support('sfuser','city2','table');
4, 执行ddl语句时需要注意不要直接在sqlplus中执行,要通过如下语句进行
BEGIN
DBMS_REPCAT.ALTER_MASTER_REPOBJECT(
sname => '"SFUSER"',
oname => '"CITY"',
type => 'TABLE',
ddl_text => 'ALTER TABLE SFUSER.CITY
MODIFY(ID NUMBER(10))');
END;
/
5,重新使同步组的状态由停顿(quiesced )改为正常(normal)。
execute dbms_repcat.resume_master_activity('scott_mg',false); --这一步可能会报错让你重新生成复制支持,你只要重新生成复制支持就ok了
分享到:
相关推荐
本教程介绍了 Rust 的基础语法、所有权模型、函数与模块设计,以及高级特性(如错误处理、闭包和并发编程)。通过提供实用的练习和答案,帮助您快速掌握 Rust 的核心概念,为系统级编程打下扎实基础。
基于springboot+Web的毕业设计选题系统源码数据库文档.zip
# 基于Spring和MyBatis的疫情防控管理系统 ## 项目简介 本项目是一个基于Spring和MyBatis框架的疫情防控管理系统,旨在实现数据在管理员、医务人员、患者和数据上报者之间的流转。系统涵盖了用户登录、注册、信息管理、预约管理、检测结果管理等功能,支持多角色的权限管理和数据操作。 ## 项目的主要特性和功能 1. 用户管理 用户登录、注册和登出功能。 用户个人信息管理,包括核酸检测记录和预约记录。 2. 管理员管理 管理员列表管理,支持增删改查操作。 医院信息管理,支持增删改查操作。 3. 医务人员管理 核酸预约和疫苗接种预约管理。 核酸检测结果和疫苗接种结果管理。 患者信息管理。 4. 数据上报者管理 风险区域数据上报。 患者信息上报。 5. 系统安全 通过拦截器实现用户登录状态检查,未登录用户将被重定向到登录页面。
对数据集进行二分类,有数据集和源码以及模型,二分类是识别猫和不是猫的情况,可做毕业设计。
最新完美版积分商城系统,网购商城系统源码,是更新的奇偶商城系统源码, 它拥有独立代理后台,而且内附搭建教程。 企业猫搭建了下,感觉这个源码很新颖的,购买商品后可以选择直接发货还是拆红包升级购买的商品升级成别的商品。
编译好的Linux版网络调试助手,方便直接使用,免得每次都需要重新编译
office使用软件
# 基于Python和Flask的博客管理系统 ## 项目简介 本项目是一个基于Python和Flask框架的博客管理系统,旨在为用户提供一个简单易用的博客平台。用户可以注册、登录、发布博客、管理博客内容以及评论等功能。 ## 项目的主要特性和功能 1. 用户管理 用户注册和登录功能。 用户个人信息管理。 2. 博客管理 发布、编辑和删除博客文章。 博客分类和标签管理。 3. 评论系统 用户可以对博客文章进行评论。 评论的查看和管理。 4. 权限管理 管理员可以管理用户和博客内容。 普通用户只能管理自己的博客和评论。 ## 安装使用步骤 1. 环境准备 确保已安装Python 3.x。 安装Flask框架pip install Flask。 2. 数据库配置 在config.py文件中配置数据库连接信息。
基于springboot+vue的实践性教学系统源码数据库文档.zip
基于springboot二手物品交易系统源码数据库文档.zip
基于springboot餐品美食论坛源码数据库文档.zip
人工智能开发项目深度学习项目源码带指导视频词云提取方式是百度网盘分享地址
基于springboot企业员工薪酬管理系统源码数据库文档.zip
基于springboot+JavaWeb图书管理系统源码数据库文档.zip
数据库设计管理课程设计系统设计报告(powerdesign+sql+DreamweaverCS)销售管理系统设计与开发提取方式是百度网盘分享地址
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
基于springboot的小说阅读平台源码数据库文档.zip
# 基于PaddleDetection框架的人流量统计系统 ## 项目简介 本项目是一个基于PaddleDetection框架的人流量统计系统,专注于静态和动态场景下的人员计数和行人检测。项目涵盖了从数据准备、模型选择、训练、评估、优化到预测和部署的完整流程,旨在提供高效、准确的人流量统计解决方案。 ## 主要特性和功能 多模型支持支持多种模型选择,如DeepSORT、JDE和FairMOT,适用于多目标追踪场景。 模型优化提供多种优化策略,包括数据增强、可变形卷积、syncbn+ema、attention和GIoU Loss,以提升模型精度。 性能加速支持TensorRT推理加速,显著提升模型性能。 数据增强提供多种数据增强方式,如cutmix、syncbn和ema,进一步优化模型性能。 模型导出支持模型导出,便于模型部署和上线。 ## 安装使用步骤 1. 安装PaddleDetection框架 bash
基于springboot的银行信用卡额度管理系统源码数据库文档.zip
# 基于Arduino的蒸发冷却系统 ## 项目简介 本项目旨在创建一个蒸发冷却系统(即沼泽冷却器),这是一种在干燥炎热气候下提供能源效率替代空调的系统。该系统使用Arduino 2560和各种传感器来监控和控制冷却过程。 ## 项目的主要特性和功能 水位监控通过水位传感器监控水箱中的水位,并在水位过低时发出警报。 温度和湿度显示在LCD屏幕上显示空气温度和湿度。 风扇控制根据温度范围控制风扇电机。 系统开关通过用户按钮控制系统的开关。 日志记录记录电机激活和停用的时间和日期。 ## 安装使用步骤 2. 硬件连接按照项目文档中的电路图连接所有硬件组件,包括水位传感器、LCD显示屏、实时时钟模块、DHT11传感器和风扇电机。 3. 上传代码将下载的代码上传到Arduino 2560开发板。 4. 启动系统通过用户按钮启动系统,观察LCD屏幕上的温度和湿度显示,并监控水位传感器的状态。