#BUILD DATABASE
# 通用描述
BUILD DATABASE用于在HA架构的主备模式中,在备机上创建standby数据库,对备机成功执行本语句的前提是:
- 主机数据库已OPEN,并处于归档模式。
- 备机已安装数据库软件,且启动实例到NOMOUNT状态(增量build中的备机须为OPEN状态)。
- 主备机上网络及权限畅通,相关配置参数值已正确设置。
- 满足CREATE DATABASE语句的所有约束条件。
有关HA架构主备模式的详细操作描述请参考高可用。
本语句涵盖了YashanDB需要进行build操作的各种场景:
全量build:用于新建或重建备机的初始化
由备机分别对自身发起build(BUILD DATABASE)
由主机向多备机同时发起build(BUILD DATABASE TO STANDBY或BUILD DATABASE TO REMOTE)
由备机向多备机同时发起build(BUILD DATABASE TO REMOTE)
增量build:用于异常备机的快速修复
- 由主机向存在gap的备机发起build(BUILD DATABASE INCREMENTAL TO STANDBY或BUILD DATABASE INCREMENTAL TO REMOTE)
- 由备机向存在gap的备机发起build(BUILD DATABASE INCREMENTAL TO REMOTE)
- 由主机向need repair的备机发起build(BUILD DATABSE REPAIR STANDBY)
通过V$BACKUP_PROGRESS视图可查询某个build操作过程的进度信息。
分布式部署中用户无法执行本语句。
Note:
1.对于某个级联备集群,其上级备机对等于本文所描述的主机,级联备机对等于本文所描述的备机,具有与主备集群相同的语法、功能及约束。
2.本语句执行过程中将主机服务器(或者某个备机服务器)上的控制文件、数据文件、redo日志文件和归档日志文件在线传输到备机服务器对应目录 ,过程中出现任何例外将抛出错误并中断操作,但已经传输的文件不会被清除,再次运行本语句前,需在备机上进行手工清除。
3.对于同时发起的多备机并行build,当某一个备机build操作失败时,所有的备机build操作都将失败。
# 语句定义
build database::=
# build database
该语句后面无任何选项时,表示本操作在备机上执行,将主机服务器文件在线传输到备机服务器。
示例
--在某个备机上执行
BUILD DATABASE;
# build database to standby
本操作一般在主机上执行,用于指定多个不同备机,将主机服务器文件同时在线传输到这些备机服务器。
standby_name
指定备机的DB_UNIQUE_NAME(通过V$ARCHIVE_DEST视图获得该值),在一个HA集群中,DB_UNIQUE_NAME唯一标识了一台备机服务器。
多个standby_name之间以,
分隔,且不可以重复。
*
指定与该主机连接的所有的备机。 示例
BUILD DATABASE TO STANDBY (standby1_name, standby2_name);
# 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;