#控制文件管理
控制⽂件是YashanDB最关键的物理⽂件之⼀,是数据库实例挂载的⼊⼝。它记录了数据库的物理结构(例如数据库名、数据⽂件和重做⽇志⽂件的位置和名称、创建时间戳)以及状态信息(例如当前⽇志序列号、检查点SCN、归档⽇志信息、RMAN备份信息),充当数据库实例启动、运⾏和恢复操作所必需的核⼼信息。数据库启动时必须读取控制⽂件以定位其他⽂件并验证完整性,并在运⾏过程中不断更新以反映数据库结构变化和当前状态,是数据库⼀致性维护和故障恢复的基⽯。
YashanDB中,数据库每个实例节点上的控制文件数及文件存储路径配置相互独立,相关配置由配置参数CONTROL_FILES指定,默认配置如下:
| 相关配置 | 默认值 |
|---|---|
| 控制文件数量 | 3个 互为副本,最多支持8个 |
| 控制文件名称 | 单机部署、存算一体分布式集群部署:ctrl1、ctrl2、ctrl3 共享集群/分布式集群部署:ctrlfile0、ctrlfile1、ctrlfile2 |
| 控制文件存储路径 | 单机部署、存算一体分布式集群部署:$YASDB_DATA/dbfiles 共享集群/分布式集群部署:+DG0/dbfiles |
在实际使用中,应根据实际的磁盘空间规划、容灾需求、IO性能优化方案等自定义规划控制文件数量及其存放路径,具体配置方式如下:
安装数据库时
(推荐)在{集群名称}.toml文件中指定配置参数CONTROL_FILES配置控制文件的数量及各个文件的存放路径。
单机或存算一体分布式集群部署时,可以在{集群名称}.toml文件中指定建库参数CTRL_FILE_NUM配置控制文件的数量,但单纯只指定CTRL_FILE_NUM时所有控制文件的存放路径均为$YASDB_DATA/dbfiles。
安装完成后
对于已有数据库,可通过配置参数CONTROL_FILES调整控制文件的数量及各个文件的存放路径。
新建数据库时,在执行CREATE DATABASE时可通过CONTROLFILES关键字指定控制文件的数量及各个文件的存放路径。
控制文件的信息由数据库自动维护,不允许手动操作控制文件,否则会导致数据库出现预期外的异常。
本文主要介绍安装完成后如何查看控制文件配置、调整已有控制文件的路径、增/减文件副本、备份与恢复控制文件以及常见的异常处理等。
# 查看控制文件信息
# 通过配置参数查看
通过配置参数CONTROL_FILES可以查看控制文件信息,且数据库处于NOMOUNT、MOUNT或OPEN任意阶段均可。
以安装用户登录数据库所在服务器,执行如下命令即可查询相应信息。
# 场景1:查看全局的控制文件配置
$ yasboot cluster config show -c yashandb -q CONTROL_FILES
# 场景2:查看指定节点的控制文件配置(本文以1-1节点为例)
$ yasboot node config show -c yashandb --node-id 1-1 -q CONTROL_FILES
# 通过视图查看
通过GV$CONTROLFILE/V$CONTROLFILE视图可以查看全局或当前节点的控制文件信息,要求数据库处于MOUNT或OPEN阶段。
单机部署中,通过动态视图仍只能查询当前节点上的相关信息。
SELECT ID,NAME,BLOCK_SIZE,FILE_SIZE_BLKS,BYTES FROM V$CONTROLFILE;
ID NAME BLOCK_SIZE FILE_SIZE_BLKS BYTES
---- ------------------------------------------------- ------------ -------------- -----------
0 /data/yashan/yasdb_data/db-1-1/dbfiles/ctrl1 8192 3507 28729344
1 /data/yashan/yasdb_data/db-1-1/dbfiles/ctrl2 8192 3507 28729344
2 /data/yashan/yasdb_data/db-1-1/dbfiles/ctrl3 8192 3507 28729344
# 调整现有控制文件的路径
出于以下影响因素考量,可按需调整现有控制文件的路径:
控制文件所在路径磁盘空间不足。
为避免I/O瓶颈,将控制文件分散到不同的物理磁盘上。
为提高系统容灾能力,将控制文件放在不同的物理磁盘。
Warn:
请勿单独在操作系统层面移动控制文件。
# 前提条件
调整现有控制文件的路径需重启待调整配置的目标数据库节点(后文简称“目标节点”)。
如需移动现有控制文件至其他路径,必须严格遵守如下操作顺序:
修改控制文件路径配置(CONTROL_FILES参数)。
关闭目标节点。
移动对应的物理文件至目标路径。
启动目标节点。
在目标节点所在服务器上为目标控制文件规划并创建新存储路径(单次操作可调整多个文件的路径),YashanDB的安装用户(即yashan)需具备对应路径的全部权限。
# 操作步骤
本文以调整运行状态下的测试环境的现有控制文件ctrl3的路径为例,实际操作时需将路径、用户等示例值替换为实际值。
以安装用户登录数据库安装服务器。
获取目标节点相关信息。
# 查看节点ID $ yasboot cluster status -c yashandb -d # 查看目标节点的控制文件配置(本文以1-1节点为例) $ yasboot node config show -c yashandb --node-id 1-1 -q control_files +---------------------------------------------------------------------------------------------------------------------------------+ | parameters | area | default_value | current_value | +---------------------------------------------------------------------------------------------------------------------------------+ | CONTROL_FILES | (控制文件1, 控制文件2, …控制文件n) | ('?/dbfiles/ctrl1', '?/dbfiles | ('?/dbfiles/ctrl1', '?/dbfiles/ctrl | | | | /ctrl2', '?/dbfiles/ctrl3') | 2', '?/dbfiles/ctrl3') | +---------------+------------------------------------------+--------------------------------+-------------------------------------+修改目标节点的控制文件配置参数。
# 修改目标节点的控制文件配置参数,将ctrl3的路径修改为新规划的目标路径 $ yasboot node config set -c yashandb --node-id 1-1 -k control_files -v ('/data/yashan/yasdb_data/db-1-1/dbfiles/ctrl1','/data/yashan/yasdb_data/db-1-1/dbfiles/ctrl2','/data/yashan/yasdb_data/db-1-1/backup/ctrl3')此时不会校验新路径是否存在、是否可访问。
关闭目标节点。
$ yasboot node stop -c yashandb -n 1-1以安装用户登录目标节点所在服务器。
在操作系统层面移动物理文件ctrl3。
$ mv /data/yashan/yasdb_data/db-1-1/dbfiles/ctrl3 /data/yashan/yasdb_data/db-1-1/backup/ctrl3在操作系统层面,检查确认物理文件ctrl3的存储路径。
ls -l /data/yashan/yasdb_data/db-1-1/dbfiles/ctrl1 ls -l /data/yashan/yasdb_data/db-1-1/dbfiles/ctrl2 ls -l /data/yashan/yasdb_data/db-1-1/backup/ctrl3启动目标节点。
$ yasboot node start -c yashandb -n 1-1如果数据库节点启动成功,表示修改控制文件路径成功。如果启动失败并提示控制文件相关异常,请查阅控制文件相关异常处理。
以DBA用户连接并登录数据库目标节点。
$ yasql sales/********@192.168.1.2:1688在数据库层面,检查确认控制文件ctrl3的存储路径。
SELECT ID,NAME,BLOCK_SIZE,FILE_SIZE_BLKS,BYTES FROM V$CONTROLFILE; ID NAME BLOCK_SIZE FILE_SIZE_BLKS BYTES ---- ------------------------------------------------- ------------ -------------- ----------- 0 /data/yashan/yasdb_data/db-1-1/dbfiles/ctrl1 8192 3507 28729344 1 /data/yashan/yasdb_data/db-1-1/dbfiles/ctrl2 8192 3507 28729344 2 /data/yashan/yasdb_data/db-1-1/backup/ctrl3 8192 3507 28729344
# 新增控制文件
出于以下影响因素考量,可按需增加控制文件副本数:
为提高容错能力、防止单点故障,可以增加副本数。
为满足更严格的高可用需求,在关键生产环境中增加更多的副本数。
# 前提条件
新增控制文件副本需重启待调整配置的目标数据库节点(后文简称“目标节点”)。
在目标节点所在服务器上为新控制文件副本规划并创建新存储路径(单次操作可新增多个文件副本),YashanDB的安装用户(即yashan)需具备对应路径的全部权限。
根据现有控制文件数确认新副本的文件名,文件名格式为ctrlN(通常,N按控制文件总数顺序编号)。
# 操作步骤
本文以为运行状态下的测试环境新增1个控制文件副本ctrl4为例,实际操作时需将路径、用户等示例值替换为实际值。
以安装用户登录数据库安装服务器。
获取目标节点相关信息。
# 查看节点ID $ yasboot cluster status -c yashandb -d # 查看目标节点的控制文件配置(本文以1-1节点为例) $ yasboot node config show -c yashandb --node-id 1-1 -q control_files +---------------------------------------------------------------------------------------------------------------------------------+ | parameters | area | default_value | current_value | +---------------------------------------------------------------------------------------------------------------------------------+ | CONTROL_FILES | (控制文件1, 控制文件2, …控制文件n) | ('?/dbfiles/ctrl1', '?/dbfiles | ('?/dbfiles/ctrl1', '?/dbfiles/ctrl | | | | /ctrl2', '?/dbfiles/ctrl3') | 2', '?/dbfiles/ctrl3') | +---------------+------------------------------------------+--------------------------------+-------------------------------------+修改目标节点的控制文件配置参数。
# 修改目标节点的控制文件配置参数,新增1个控制文件的信息 $ yasboot node config set -c yashandb --node-id 1-1 -k control_files -v ('/data/yashan/yasdb_data/db-1-1/dbfiles/ctrl1','/data/yashan/yasdb_data/db-1-1/dbfiles/ctrl2','/data/yashan/yasdb_data/db-1-1/dbfiles/ctrl3','/data/yashan/yasdb_data/db-1-1/backup/ctrl4')此时不会校验新文件是否存在、路径是否可访问。
关闭目标节点。
$ yasboot node stop -c yashandb -n 1-1以安装用户登录目标节点所在服务器。
在操作系统层面,基于已有控制文件在目标路径下复制生成新的文件ctrl4。
$ cp /data/yashan/yasdb_data/db-1-1/dbfiles/ctrl3 /data/yashan/yasdb_data/db-1-1/backup/ctrl4在操作系统层面,检查确认物理文件ctrl4。
ls -l /data/yashan/yasdb_data/db-1-1/dbfiles/ctrl3 ls -l /data/yashan/yasdb_data/db-1-1/backup/ctrl4启动目标节点。
$ yasboot node start -c yashandb -n 1-1如果数据库节点启动成功,表示修改控制文件路径成功。如果启动失败并提示控制文件相关异常,请查阅控制文件相关异常处理。
以DBA用户连接并登录数据库目标节点。
$ yasql sales/********@192.168.1.2:1688在数据库层面,检查确认控制文件ctrl4。
SELECT ID,NAME,BLOCK_SIZE,FILE_SIZE_BLKS,BYTES FROM V$CONTROLFILE; ID NAME BLOCK_SIZE FILE_SIZE_BLKS BYTES ---- ------------------------------------------------- ------------ -------------- ----------- 0 /data/yashan/yasdb_data/db-1-1/dbfiles/ctrl1 8192 3507 28729344 1 /data/yashan/yasdb_data/db-1-1/dbfiles/ctrl2 8192 3507 28729344 2 /data/yashan/yasdb_data/db-1-1/dbfiles/ctrl3 8192 3507 28729344 3 /data/yashan/yasdb_data/db-1-1/backup/ctrl4 8192 3507 28729344
# 备份与恢复控制文件
调整现有控制文件的路径、新增控制文件副本均属于保障控制文件高可用的方式。同时,也可以通过备份与恢复进一步提高控制文件的高可用能力。
在YashanDB中,备份与恢复控制文件通过备份与恢复整个数据库实现,具体操作请查阅备份与恢复。
# 删除控制文件
出于以下影响因素考量,可按需减少控制文件副本数(一般不推荐):
- 磁盘资源紧张,减少非必要副本。
Warn:
必须保留至少1个控制文件。
# 前提条件
删除控制文件副本需重启待调整配置的目标数据库节点(后文简称“目标节点”)。
# 操作步骤
本文以为运行状态下的测试环境删除1个控制文件副本为例,实际操作时需将路径、用户等示例值替换为实际值。
以安装用户登录数据库安装服务器。
获取目标节点相关信息。
# 查看节点ID $ yasboot cluster status -c yashandb -d # 查看目标节点的控制文件配置(本文以1-1节点为例) $ yasboot node config show -c yashandb --node-id 1-1 -q control_files +---------------------------------------------------------------------------------------------------------------------------------+ | parameters | area | default_value | current_value | +---------------------------------------------------------------------------------------------------------------------------------+ | CONTROL_FILES | (控制文件1, 控制文件2, …控制文件n) | ('?/dbfiles/ctrl1', '?/dbfiles | ('?/dbfiles/ctrl1', '?/dbfiles/ctrl | | | | /ctrl2', '?/dbfiles/ctrl3') | 2', '?/dbfiles/ctrl3') | +---------------+------------------------------------------+--------------------------------+-------------------------------------+修改目标节点的控制文件配置参数。
# 修改目标节点的控制文件配置参数,删除控制文件ctrl3的信息 $ yasboot node config set -c yashandb --node-id 1-1 -k control_files -v ('/data/yashan/yasdb_data/db-1-1/dbfiles/ctrl1','/data/yashan/yasdb_data/db-1-1/dbfiles/ctrl2')按需删除物理文件ctrl3。
重启目标节点使配置生效。
$ yasboot node restart -c yashandb -n 1-1以DBA用户连接并登录数据库目标节点。
$ yasql sales/********@192.168.1.2:1688检查确认控制文件信息。
SELECT ID,NAME,BLOCK_SIZE,FILE_SIZE_BLKS,BYTES FROM V$CONTROLFILE; ID NAME BLOCK_SIZE FILE_SIZE_BLKS BYTES ---- ------------------------------------------------- ------------ -------------- ----------- 0 /data/yashan/yasdb_data/db-1-1/dbfiles/ctrl1 8192 3507 28729344 1 /data/yashan/yasdb_data/db-1-1/dbfiles/ctrl2 8192 3507 28729344
# 常见异常处理
YashanDB在实例启动时进行控制文件校验,出现如下情况时,实例将无法启动到MOUNT及之后阶段:
控制文件实际路径与CONTROL_FILES参数配置路径不一致
启动数据库实例时,若出现类似
failed to open file …… , errno 2, error message "No such file or directory"报错则说明控制文件实际路径与CONTROL_FILES参数配置路径不一致,解决方法如下:方法一:在操作系统层面调整控制文件的路径,或通过现有文件在提示信息对应的路径下生成相应的新文件。
方法二:启动实例到NOMOUNT阶段后修改CONTROL_FILES参数,再重新启动实例。
控制文件中的数据库版本与实例版本不一致
启动数据库实例时,若出现类似
database version x.x.x incompatible with YashanDB version x.x.x提示则说明控制文件中的数据库版本与实例版本不一致,请根据实际情况选择是否进行版本升级。控制文件组成员的数据库ID不一致
启动数据库实例时,若出现类似
database id of the control file does not match other control files提示则说明控制文件组成员的数据库ID不一致,通常出现在同1台服务器上存在多个数据库实例的场景,CONTROL_FILES参数可能误配成了其他数据库的控制文件,将其修改为正确的控制文件路径即可。全套控制文件均与数据库不匹配
启动数据库实例时,若出现类似
invalid file: ……, the reason: mismatching with the control file提示则说明全套控制文件均与数据库不匹配,解决方法如下:方法一:在操作系统层面找到正确的控制文件并将其移动至正确路径。
方法二:启动实例到NOMOUNT阶段后修改CONTROL_FILES参数,再重新启动实例。
方式三:恢复最新的可用备份集。
所有控制文件均已丢失或损坏
若所有控制文件的物理文件均已丢失或损坏,则只能通过恢复最新的可用备份集解决。

