返回首页

gbase数据、南大通用产品文档:GBase8a

更新日期:2024年09月11日

使用gcdump 指定参数ignore-table 不导出指定
的表或视图
问题现象
use testdb;
create table t2(id int,name varchar(20),type int);
create view v2 as select * from t2;
create table t1(id int,name varchar(20),type int);
create view v1 as select * from t1;
alter table t1 drop column type;
alter table t2 drop column type;
create table t3(id int,name varchar(20),type int);
gcdump导出报错
# /opt/gcluster/server/bin/gcdump -B testdb
DROP DATABASE IF EXISTS `testdb`;
CREATE DATABASE
IF NOT EXISTS `testdb` DEFAULT CHARACTER
SET utf8;
USE `testdb`;
...
use testdb;
DROP TABLE IF EXISTS `t3`;
CREATE TABLE `t3` (
`id` int(11) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,

GBase 8a MPP Cluster 最佳实践
5 FAQ
文档版本(2022-02-11)
南大通用数据技术股份有限公司
135
`type` int(11) DEFAULT NULL
) ENGINE=EXPRESS DEFAULT CHARSET=utf8 TABLESPACE='sys_tables
pace';
2017-11-23 14:51:04.086
gcdump: Couldn't execute 'show create table `v1`':
View 'testdb.v1' references invalid table(s) or column(s) or function(s) or de
finer/invoker of view lack rights to use them (1356)
解决方法
如果需要忽略报错,不导出有问题的视图,可以加--ignore-table 参数。
$$GCLUSTER_BASE/server/bin/gcdump -B testdb --ignore-table=testdb.v
1 --ignore-table=testdb.v2
DROP DATABASE IF EXISTS `testdb`;
CREATE DATABASE
IF NOT EXISTS `testdb` DEFAULT CHARACTER
SET utf8;
...
use testdb;
DROP TABLE IF EXISTS `t3`;
CREATE TABLE `t3` (
`id` int(11) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
`type` int(11) DEFAULT NULL
) ENGINE=EXPRESS DEFAULT CHARSET=utf8 TABLESPACE='sys_tables
pace';
前提是需要事先知道哪些表或视图不需要导出,并且一个--ignore-table 参数后面
只能设置一个表。

您必须对数据库使用事务日志记录以利用需要日志记录的数据库服务器进程中所列的所有
功能。
数据库服务器管理的每个数据库均有日志记录状态。日志记录状态指示数据库是否使用事
务日志记录以及(如果使用)数据库运用哪一种日志缓冲机制。要查明数据库的事务日志
记录状态,请按监视数据库的日志记录方式中的说明,使用数据库服务器实用程序。数据
库日志记录状态将指示下列日志记录类型中的任意一种:
 未缓冲的事务日志记录
 已缓冲的事务日志记录
 符合 ANSI 的事务日志记录
 无日志记录
所有逻辑日志记录在数据库服务器将其写入磁盘上的逻辑日志之前,均经过共享内存中的
逻辑日志缓冲区。但是,数据库服务器清仓逻辑日志缓冲区的时刻对于已缓冲的事务日志
记录和未缓冲的事务日志记录是不同的。

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 281 -
未缓冲的事务日志记录
如果事务是对使用未缓冲日志记录的数据库进行的,那么逻辑日志缓冲区中的记录可保证
在落实处理期间写入磁盘。当应用程序在 COMMIT 语句之后(对于分布式事务,在
PREPARE 语句之前)重获控制权时,逻辑日志记录在磁盘上。一旦落实缓冲区中的任何
事务(即,将落实记录写入逻辑日志缓冲区),数据库服务器就立即清仓记录。
当数据库服务器清仓缓冲区时,仅将已使用的页写入磁盘。已使用的页包含那些仅部分已
满的页,但这样就浪费了一些空间。由于这个原因,相比在同一数据库服务器上的所有数
据库均使用已缓冲的日志记录这种情况而言,磁盘上的逻辑日志文件会更快地填满。
未缓冲的日志记录对于大多数数据库而言是最好的选择,因为它保证所有已落实的事务可
得以恢复。在发生故障的情况下,仅丢失在发生故障时未落实的事务。但是,有了未缓冲
的日志记录,数据库服务器会更频繁地将逻辑日志缓冲区清仓到磁盘,而缓冲区将包含更
多部分已满的页,因此它比已缓冲的日志记录会更快地填充逻辑日志。

已缓冲的事务日志记录
如果事务是对使用已缓冲日志记录的数据库进行的,那么记录尽可能久地保留(已缓冲)
在逻辑日志缓冲区中。直至发生以下情况之一,这些记录才会从共享内存中的逻辑日志缓
冲区刷新到磁盘上的逻辑日志:
 缓冲区已满。
 具有未缓冲日志记录的数据库上的落实清空了缓冲区。
 出现检查点。
 连接关闭。
如果您使用已缓冲日志记录并且发生了故障,那么不能期望数据库服务器恢复那些在发生
故障时位于逻辑日志缓冲区中的事务。因此,可能会丢失一些已落实的事务。作为对该风
险的补偿,变更期间的性能会稍有提高。只要您在发生故障的情况下可重新创建更新,那
么已缓冲日志记录最适合用于频繁更新的数据库(这时更新速度很重要)。您可调整逻辑
日志缓冲区的大小以便为您的系统在性能和因系统故障而丢失事务的风险之间找到可接受
的平衡。

符合 ANSI 的事务日志记录
符合 ANSI 标准的数据库日志记录状态表明数据库所有者使用 MODE ANSI 关键字。符
合 ANSI 标准的数据库对事务处理强制执行 ANSI 规则,始终使用未缓冲的事务日志记
录。您无法更改符合 ANSI 标准的数据库的缓冲状态。

无数据库日志记录
如果您关闭了数据库的日志记录,那么将不记录事务,但会记录其他操作。有关更多信息,
请参阅 始终记录的活动。通常,当您要装入数据或仅运行查询时,将关闭数据库的日志记
录。

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 282 -
如果您对恢复源感到满意,可以决定不对数据库使用事务日志记录,从而减少数据库服务
器处理量。例如,如果要将许多行从可恢复的源(如磁带或 ASCII 文件)装入数据库,那
么可能不需要事务日志记录,并且在不使用事务日志记录的情况下装入会进行得更快。但
是,如果其他用户在数据库中是活动的,那么您直到重新启动日志记录(这必须等待 0 级
备份)后才会拥有其事务的逻辑日志记录。

具有不同日志缓冲状态的数据库
数据库服务器上的所有数据库使用相同的逻辑日志和相同的逻辑日志缓冲区。因此,对具
有不同逻辑缓冲状态的各数据库的事务可写入相同的逻辑日志缓冲区。在这种情况下,如
果事务是对具有已缓冲日志记录的数据库和对具有未缓冲日志记录的数据库而存在的,那
么数据库服务器在缓冲区已满时或在具有未缓冲日志记录的数据库的事务完成时清空缓冲
区。

X/Open DTP 环境中的数据库日志记录
X/Open 分布式事务处理 (DTP) 环境中的数据库必须使用未缓冲日志记录。未缓冲日志记
录确保数据库服务器逻辑日志始终处于一致状态,并且可与事务管理器同步。如果在
X/Open DTP 环境中打开用已缓冲日志记录创建的数据库,数据库状态会自动更改为未缓
冲日志记录。
数据库服务器支持符合 ANSI 标准和不符合 ANSI 标准的数据库。
有关更多
信息,请参阅事务管理器。

可以使用连接管理器来监视和维护客户机连接,以及将客户机连接请求定向到连接单元中
的适当服务器。
oncmsm 实用程序用于启动连接管理器,该管理器根据系统管理员配置的服务级别协议来
管理并定向客户机连接请求。连接管理器提供负载均衡,并将客户机连接请求定向到一个
或多个连接单元。连接单元是在网格、高可用性集群、复制集或服务器集配置中排列的一
个或多个数据库服务器的集合。
表 1. 连接单元的类型和描述
连接单元类型
描述
CLUSTER
高可用性集群是由主服务器和一个或多个辅助服务器构成的一组
数据库服务器。集群中的服务器是同类服务器,即所有服务器均
使用相同的硬件和软件配置。主服务器上的数据将复制到所有辅
助数据库服务器。 一个集群中至少包含一个主服务器和一个辅
助服务器。集群中可以包含一个主服务器、一个 HDR 辅助服务
器、零或更多个共享磁盘辅助服务器(SDS 服务器),以及零或
多个远程独立辅助服务器(RSS 服务器)。
REPLSET
复制集是与 Enterprise Replication (ER) 链接的一组数据库
服务器。ER 支持在按地理分布的数据库服务器上执行异步数据
复制。可以使用 ER 复制整个数据库,也可以复制数据库与表的
子集。使用 ER 链接的服务器可以是异类服务器;即这些服务器
可能使用不同的硬件和软件配置。 复制定义复制参与者和数据
的复制方法,而复制集则组合多个复制,以构成可作为一个单元
来一起管理的集合。域是 ER 已知的所有服务器的集合。ER 域
中的节点可包含高可用性集群,从而可以有由多个集群构成的集
群。

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 420 -
连接单元类型
描述
GRID
网格是 Enterprise Replication (ER) 域中的任意一组互连服
务器,包括集群、复制集和服务器集。网格简化了大型数据库服
务器组的管理。例如,在一台服务器上创建表时,将在网格内的
所有服务器上创建该表,并且将自动同步数据。
SERVERSET
服务器集是一台或一组由第三方复制应用程序管理的服务器。这
种数据库服务器必须具有相同的数据库名称和模式,以便客户机
应用程序连接。连接管理器仅对服务器集提供可用性和负载均
衡。
连接管理器是一个守护程序,它接受来自客户机应用程序的连接请求,然后将客户机连接
到数据库服务器。连接管理器从连接单元中的每台服务器收集工作负载统计信息,并将客
户机连接定向到最合适的服务器。
当连接管理器必须在多台服务器中进行选择,以便连接客户机请求时,将根据系统管理员
确定的预配置策略来决定要连接到哪台服务器。 指定的策略根据服务器数据等待时间、
服务器故障状态或工作负载容量来定向连接请求。
连接管理器程序配置为使用 sqlhosts 文件,配置方法与 GBase 8s 数据库服务器相同。可
以配置多个连接管理器实例,以便在连接管理器发生故障时,允许从一个连接管理器实例
故障转移到另一个连接管理器实例。要避免连接管理器成为单个故障点,配置多个连接管
理器实例尤为重要。有关配置多个连接管理器实例的示例,请参阅用于故障转移的连接管
理器冗余。
因为连接单元可能包含以网格、高可用性集群、Enterprise Replication 复制集和服务器集
形式排列的多台数据库服务器,所以客户机应用程序必须可以连接到服务器的任何成员。
如果有大量服务器,可能难以确定要连接到哪台服务器。此外,也很难确定哪台服务器有
足够的可用资源可用于执行给定任务。最后,难以(如果并非不可能)了解服务器何时可
能遇到问题。使用连接管理器可解决这些问题。
连接管理器通过将客户机应用程序定向到活动量最少的服务器来均衡工作负载。连接管理
器实用程序还执行故障转移仲裁。可以配置连接管理器,以确保在高可用性集群中的主服
务器发生故障时,另一台服务器自动接管该主服务器的角色。
连接管理器执行三种角色:

基于规则的连接重定向

连接单元负载均衡

集群故障转移
基于规则的连接重定向

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 421 -
应用程序连接到连接管理器,正如连接到数据库服务器。应用程序连接到连接管理器时,
将在通信层执行连接重定向,而应用程序无需执行其他任何操作。
为了配置连接管理器,将启动名为 oncmsm 的守护程序,该程序使用名为服务级别协议
(SLA) 的定制重定向规则。 连接管理器配置并初始化之后,将接受来自客户机应用程序
的连接请求,并根据 SLA(重定向规则)将这些请求重定向到适当的服务器。
连接单元负载均衡
连接管理器可以执行负载均衡,其中重定向基于服务级别协议中设置的配置。连接管理器
连接到每个连接单元中的每台服务器,并收集有关服务器类型、未使用的工作负载容量及
服务器当前状态的统计信息。 根据这些信息,连接管理器能够将客户机连接重定向到可
用容量最高的服务器。
使用 SLA 定义中的 POLICY 参数可为连接单元设置负载均衡策略。对于网格和复制
集,必须启用数据质量 (QOD),才能利用 LATENCY、FAILURE 和 WORKLOAD 策
略。如果未设置 QOD,或者如果未定义该策略,重定向策略将仅基于工作负载。
对于高可用性集群和服务器集,该策略仅基于工作负载。
自动故障转移
可以使用连接管理器配置自动故障转移。在高可用性集群中,如果连接管理器检测到主服
务器发生故障,并且在确定超时周期期间主服务器未执行任何操作时,会将最合适的辅助
服务器转换为主服务器。
使用连接管理器配置文件中的 FOC 选项可配置连接管理器故障转移参数。如果使用多个
连接管理器来管理集群故障转移,可以通过在集群的主服务器上设置 HA_FOC_ORDER
配置参数来强制执行一致的故障转移策略。HA_FOC_ORDER 配置参数的值会替换连接到
主服务器的每个连接管理器的配置文件中 FOC ORDER= 的值。
连接管理器监视连接单元中的服务器,并帮助客户机应用程序连接到最合适的服务器。然
而,这些角色是独立的;连接管理器将客户机连接到服务器后,不会再重定向该客户机。
如果应用程序连接的数据库服务器遇到问题,那么应用程序必须再次通过连接管理器请求
连接。