#BUILD DATABASE

# 通用描述

BUILD DATABASE用于在主备高可用部署环境中,在备机上创建standby数据库,对备机成功执行本语句的前提是:

  • 主机数据库已OPEN,并处于归档模式。
  • 备机已安装数据库软件,且启动实例到NOMOUNT状态(增量build中的备机须为OPEN状态)。
  • 主备机上网络及权限畅通,相关配置参数值已正确设置。
  • 满足CREATE DATABASE语句的所有约束条件。

有关主备高可用架构的详细操作描述请参考高可用

本语句涵盖了YashanDB需要进行build操作的各种场景:

通过V$BACKUP_PROGRESS视图可查询某个build操作过程的进度信息。

Note

1.在级联备环境中,级联备机的上级备机对等于本文所描述的主机,级联备机对等于本文所描述的备机,具有与主备机相同的语法、功能及约束。

2.本语句执行过程中将主机服务器(或者某个备机服务器)上的控制文件、数据文件、redo日志文件和归档日志文件在线传输到备机服务器对应目录 ,过程中出现任何例外将抛出错误并中断操作,但已经传输的文件不会被清除,再次运行本语句前,需在备机上进行手工清除。

3.对于同时发起的多备机并行build,当某一个备机build操作失败时,所有的备机build操作都将失败。

4.共享集群部署中不支持增量build,不支持repair修复备份,不支持并行build。

5.分布式部署中用户无法执行本语句。

# 语句定义

build database::=

syntax
BUILD DATABASE INCREMENTAL TO STANDBY standby_name REMOTE standby_address REPAIR STANDBY standby_name TO STANDBY ( standby_name , * ) REMOTE ( standby_address , ) DISCONNECT FROM SESSION

# build database

该语句后面无任何选项时,表示本操作在备机上执行,将主机服务器文件在线传输到备机服务器。

示例

--在某个备机上执行
BUILD DATABASE;

# build database to standby

本操作一般在主机上执行,用于指定多个不同备机,将主机服务器文件同时在线传输到这些备机服务器。

standby_name

指定备机的DB_UNIQUE_NAME(通过V$ARCHIVE_DEST视图获得该值),在一个HA集群中,DB_UNIQUE_NAME唯一标识了一台备机服务器。

多个standby_name之间以 , 分隔,且不可以重复。

*

指定与该主机连接的所有的备机。

示例


-- 指定对应的备机DB_UNIQUE_NAME执行build。
BUILD DATABASE TO STANDBY (standby1_name, standby2_name);

-- 指定 * 符号即为该主机的所有备机执行build。
BUILD DATABASE TO STANDBY (*);

# build database to remote

本操作可以在主机或备机上执行,用于指定多个不同IP,将本机服务器文件同时在线传输到这些服务器。

当某个备机出现异常时,为避免影响主机的业务,可以在一个正常同步备机上执行本语句,通过指定IP地址在线传输服务器文件到异常备机进行修复。

standby_address

指定备机的IP地址,需为address:port格式的一个有效地址,例如127.0.0.1:1689

多个standby_name之间以,指定,且不可以重复。

YashanDB支持指定一个未与主机建立复制链路的IP地址,此时主机仍可以连接该备机且执行build操作(由于未建立链路,该备机只是创建standby库,而不会加入HA集群),但需遵循该主机所处HA集群环境的一切限制,例如指定的IP个数不能超过备机最大限制数量。

示例

BUILD DATABASE TO REMOTE ('127.0.0.1:2901', '127.0.0.1:2902');

# build database incremental to standby

当备机与主机间存在较大gap时,在主机上通过standby_name指定备机执行本语句可以快速修复异常备机,缩小主备之间的差距。

本操作每次只能指定一个备机,且指定的备机必须是一个正常open状态的备机(通过V$REPLICATION_STATUS视图查看备机的状态)。

Caution

1.本操作会自动重启备机,清理控制文件,且build过程中备机处于非open状态,谨慎使用。

2.如操作过程中途失败,只能对备机进行全量build修复。

示例

BUILD DATABASE INCREMENTAL TO STANDBY standby1_name;

# build database incremental to remote

当备机与主机间存在较大gap时,在主机上通过standby_address指定备机执行本语句可以快速修复异常备机,缩小主备之间的差距。

为了避免影响主机的业务,也可以在某个正常的同步备机或者主备差距较小的备机上执行本语句。

本操作每次只能指定一个IP地址(通过standby_address指定),且指定的备机必须是一个正常open状态的备机(通过V$REPLICATION_STATUS视图查看备机的状态)。

Caution

1.本操作会自动重启备机,清理控制文件,且build过程中备机处于非open状态,谨慎使用。

2.如操作过程中途失败,只能对备机进行全量build修复。

示例

BUILD DATABASE INCREMENTAL TO REMOTE '127.0.0.1:1689';

# build databse repair standby

当某个备机为need repair状态(通过V$REPLICATION_STATUS视图查看备机的状态)时,在主机上通过standby_name指定备机执行本语句可以快速修复异常备机。

本操作每次只能指定一个备机,且指定的备机必须是某些异常类型(通过V$REPLICATION_STATUS视图查看备机的异常类型)的need repair状态,例如主机归档被清理等,其他的异常只能通过全量build修复,更详细的描述请查看高可用手册备机异常修复

示例

BUILD DATABASE REPAIR STANDBY standby1_name;

# disconnect from session

本选项表示不需要等待build操作完成之后再返回succeed,此时build操作由后台线程完成,用户的会话线程不会阻塞。不指定本选项表示用户会话等待build操作完成之后才返回succeed。

示例

--在主机上执行
BUILD DATABASE TO STANDBY (standby1_name, standby2_name) DISCONNECT FROM SESSION;