TimesTen 数据库复制学习:9. 更改Active Standby Pair

2024-02-04 13:38

本文主要是介绍TimesTen 数据库复制学习:9. 更改Active Standby Pair,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在Active Standby Pair中复制DDL语句

在以下的例子中,active master为cachedb2, standby master为cachedb1

在Active Standby Pair复制数据库对象

DDLReplicationLevel 连接属性可以控制复制对象的行为。
DDLReplicationLevel = 1:不复制表,索引和同义词的create 和 drop,只复制复制表的添加和删除列操作
DDLReplicationLevel = 2: 缺省,复制表,索引和同义词的create 和 drop;DDLReplicationAction 必须设置为INCLUDE(缺省)
DDLReplicationLevel = 3:除了2 的所有行为外,还复制视图,序列,ttCacheUidPwdSet,以及可以为一个表加一个非空的列

控制复制的行为

以下是DDLReplicationLevel = 2 的情形(缺省)

cachedb2> call ttconfiguration;
......
< DDLReplicationAction, INCLUDE >
< DDLReplicationLevel, 2 >cachedb2> create table a1(a int, primary key(a));
cachedb1> select * from a1;
cachedb2> insert into a1 values(1);
cachedb1> select * from a1;
< 1 >
cachedb2> drop table a1;
cachedb1> select * from a1;2206: Table TTHR.A1 not foundcachedb2> create table a2(a int);
17061: When DDLReplicationAction='INCLUDE' tables must be created with a primary key or a unique constraint on non-nullable column(s)cachedb2> ALTER SESSION SET ddl_replication_action='EXCLUDE'; <- 只是不复制DML,DDL仍复制Session altered.
cachedb2> call ttconfiguration('DDLReplicationAction');
< DDLReplicationAction, EXCLUDE >
cachedb2> create table a1(a int, primary key(a));
cachedb1> select * from a1;
cachedb2> insert into a1 values(1);
cachedb1> select * from a1;cachedb2>  create table a2(a int);
cachedb1> select * from a2;cachedb1> repschemes;Replication Scheme Active Standby:Master Store: CACHEDB2 on TIMESTEN-HOLMaster Store: CACHEDB1 on TIMESTEN-HOLExcluded Tables: <- 注意这里TTHR.A1TTHR.A2Excluded Cache Groups:NoneExcluded sequences:NoneStore: CACHEDB1 on TIMESTEN-HOLPort: (auto)Log Fail Threshold: (none)Retry Timeout: 120 secondsCompress Traffic: DisabledStore: CACHEDB2 on TIMESTEN-HOLPort: (auto)Log Fail Threshold: (none)Retry Timeout: 120 secondsCompress Traffic: DisabledStore: _ORACLE from TIMESTEN-HOLPort: (auto)Log Fail Threshold: (none)Retry Timeout: 120 secondsCompress Traffic: Disabledcachedb2> ALTER ACTIVE STANDBY PAIR INCLUDE TABLE a1;
cachedb2> insert into a1 values(3);
cachedb1> select * from a1;
< 3 >cachedb2> repschemes;Replication Scheme Active Standby:Master Store: CACHEDB2 on TIMESTEN-HOLMaster Store: CACHEDB1 on TIMESTEN-HOLExcluded Tables:TTHR.A2Included Tables: <- 注意这里TTHR.A1Excluded Cache Groups:NoneExcluded sequences:NoneStore: CACHEDB1 on TIMESTEN-HOLPort: (auto)Log Fail Threshold: (none)Retry Timeout: 120 secondsCompress Traffic: DisabledStore: CACHEDB2 on TIMESTEN-HOLPort: (auto)Log Fail Threshold: (none)Retry Timeout: 120 secondsCompress Traffic: DisabledStore: _ORACLE from TIMESTEN-HOLPort: (auto)Log Fail Threshold: (none)Retry Timeout: 120 secondsCompress Traffic: Disabledcachedb2> create index idx on a1(a);
17063: CREATE INDEX can only refer to empty tables when DDLReplicationLevel > 1

先不复制一个表,后续又将其加入到复制计划中

cachedb2> drop table a2;
cachedb2> ALTER SESSION SET ddl_replication_action='exclude';Session altered.cachedb2> create table a2(a int not null);
cachedb1> select * from a2;
cachedb2> ALTER ACTIVE STANDBY PAIR INCLUDE TABLE a2;8000: No primary or unique index on non-nullable column found for replicated table TTHR.A2
cachedb2> CREATE UNIQUE INDEX ixnewtab ON a2(a);
cachedb2> ALTER ACTIVE STANDBY PAIR INCLUDE TABLE a2;

下面例子说明了,如果一个表最初不在复制计划中,然后又加入复制计划,此表必须为空

cachedb2> ALTER SESSION SET ddl_replication_action='exclude';Session altered.cachedb2> create table a2(a int, primary key(a));
cachedb2> insert into a2 values(1);
cachedb2> insert into a2 values(2);
cachedb2> ALTER ACTIVE STANDBY PAIR INCLUDE TABLE a2;
17059: Replicated INCLUDE TABLE failed for (TTHR.A2) because the table is not empty
cachedb2> delete from a2;
cachedb2> ALTER ACTIVE STANDBY PAIR INCLUDE TABLE a2;

可以自动复制的对象

以下的对象在DDLReplicationLevel = 2或3时可以自动复制
* Create, alter, or drop a user with the CREATE USER, ALTER USER, or DROP USER statements.
* Grant or revoke privileges from a user with the GRANT or REVOKE statements.
* Alter a table to add or drop a column with the ALTER TABLE … ADD COLUMN or ALTER TABLE … DROP COLUMN statements. These are the only ALTER TABLE clauses that are replicated. However, when DDLReplicationLevel=2, you cannot alter a table to add a NOT NULL column to a table that is part of a replication scheme with the ALTER TABLE … ADD COLUMN NOT NULL DEFAULT statement. You can execute this statement if DDLReplicationLevel=3.
* Create or drop a table, including global temporary tables with the CREATE TABLE or DROP TABLE statements. The new table is also included in the active standby pair.
* Create or drop a synonym with the CREATE SYNONYM or DROP SYNONYM statements.
* Create or drop an index with the CREATE INDEX or DROP INDEX statements.

以下的对象仅在 DDLReplicationLevel = 3时可以自动复制
* 视图
* 序列(sequence)
* ttCacheUidPwdSet 操作

以上的复制操作均不需要停止复制代理。

对于物化视图的操作,更改autorefresh mode,PL/SQL都不会复制
如果需要创建PL/SQL函数,需要在所有的数据库中执行create语句并赋权

只有在空表创建的索引才会被复制,如果需要复制索引,可以将DDLReplicationLevel设为1,然后在所有数据库上手工建立

对于active standby pair的其它更改操作

以下的操作必须先停止复制代理:
* Include or exclude a cache group.
* Add or drop a subscriber.
* Change values in the STORE clause.
* Change network operations (ADD ROUTE or DROP ROUTE clause).

以上操作的过程如下:
1. 在active上停rep agent
2. 如果ASP包含缓存组,在active上停cache agent
3. 使用ALTER ACTIVE STANDBY PAIR修改复制schema
4. 在active上启动rep agent
5. 如果ASP包含缓存组,在active上启动cache agent
6. destroy所有的standby和subscriber
7. 使用ttRepAdmin 克隆standby
8. 启动standby上的rep agent
9. 等待standby的状态自动变为STANDBY(ttRepStateGet )
10. 如果ASP包含缓存组,在standby上启动cache agent
11. 通过standby克隆subsc
12. 启动subscriber上的复制代理

这篇关于TimesTen 数据库复制学习:9. 更改Active Standby Pair的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/677692

相关文章

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

如何通过try-catch判断数据库唯一键字段是否重复

《如何通过try-catch判断数据库唯一键字段是否重复》在MyBatis+MySQL中,通过try-catch捕获唯一约束异常可避免重复数据查询,优点是减少数据库交互、提升并发安全,缺点是异常处理开... 目录1、原理2、怎么理解“异常走的是数据库错误路径,开销比普通逻辑分支稍高”?1. 普通逻辑分支 v

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

C#文件复制异常:"未能找到文件"的解决方案与预防措施

《C#文件复制异常:未能找到文件的解决方案与预防措施》在C#开发中,文件操作是基础中的基础,但有时最基础的File.Copy()方法也会抛出令人困惑的异常,当targetFilePath设置为D:2... 目录一个看似简单的文件操作问题问题重现与错误分析错误代码示例错误信息根本原因分析全面解决方案1. 确保

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

MySQL 临时表与复制表操作全流程案例

《MySQL临时表与复制表操作全流程案例》本文介绍MySQL临时表与复制表的区别与使用,涵盖生命周期、存储机制、操作限制、创建方法及常见问题,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小... 目录一、mysql 临时表(一)核心特性拓展(二)操作全流程案例1. 复杂查询中的临时表应用2. 临时

MySQL 数据库表与查询操作实战案例

《MySQL数据库表与查询操作实战案例》本文将通过实际案例,详细介绍MySQL中数据库表的设计、数据插入以及常用的查询操作,帮助初学者快速上手,感兴趣的朋友跟随小编一起看看吧... 目录mysql 数据库表操作与查询实战案例项目一:产品相关数据库设计与创建一、数据库及表结构设计二、数据库与表的创建项目二:员