写点什么

YashanDB 实例启停

作者:YashanDB
  • 2025-03-11
    广东
  • 本文字数:3570 字

    阅读完需:约 12 分钟

本文内容来自 YashanDB 官网,原文内容请见 https://doc.yashandb.com/yashandb/23.3/zh/%E6%95%B0%E6%8D%AE%E5%BA%93%E7%AE%A1%E7%90%86/%E5%9F%BA%E6%9C%AC%E6%95%B0%E6%8D%AE%E5%BA%93%E7%AE%A1%E7%90%86/%E5%AE%9E%E4%BE%8B%E5%90%AF%E5%81%9C.html


本文将介绍单机及分布式部署的实例启停方式,分别为 SQL 命令方式及 yasboot 工具方式,如需了解共享集群的实例启停方式请查阅共享集群启停


数据库实例从关闭启动到正常使用,要经过 NOMOUNT、MOUNT 和 OPEN 三个阶段。


  • NOMOUNT:启动数据库实例, 此时读取参数文件,但是不加载数据库。

  • MOUNT:启动数据库实例,读取控制文件,加载数据库,但是数据库处于关闭状态。

  • OPEN:启动数据库实例,加载并打开数据库。


启动数据库实例



YashanDB 支持通过 yasboot 工具直接将数据库实例调整至 NOMOUNT、MOUNT 和 OPEN 三个阶段的任意一个,也支持通过 ALTER DATABASE 语句将数据库实例从 NOMOUNT 阶段调整到 MOUNT 阶段和 OPEN 阶段。


ALTER DATABASE 语句仅适用于单机数据库对单个实例节点执行启动实例操作,即仅改变语句执行所在节点的实例。


yasboot 工具支持进行如下粒度的启动实例操作:


  • 单机/分布式数据库集群粒度启动节点实例

  • 单机/分布式数据库节点组粒度启动节点实例

  • 单机/分布式数据库启动特定节点实例

# 启动到 NOMOUNT 阶段

可通过执行如下命令将数据库启动到 NOMOUNT 阶段:




$ yasboot cluster stop -c yashandb$ yasboot cluster start -c yashandb -m nomount
$ yasboot cluster restart -c yashandb -m nomount

$ yasboot group start -c yashandb -g 1 -m nomount
$ yasboot node start -c yashandb -n 4-1 -m nomount
复制代码


Copied!


操作成功后,可查询数据库状态已更新为 STARTED。



$ yasql sys/password@ip:port
SQL> SELECT status FROM V$INSTANCE; STATUS ---------STARTED
复制代码


Copied!


Note

数据库实例启动到 NOMOUNT 状态后,查看 V$INSTANCE 视图的 STATUS 状态值为 STARTED,而不是 NOMOUNT。

# 启动到 MOUNT 阶段

支持通过 yasboot 工具将数据库实例从任意阶段调整至 MOUNT 阶段,或通过 SQL 命令方式将数据库实例从 NOMOUNT 阶段调整至 MOUNT 阶段。


可通过执行如下命令将数据库实例启动到 MOUNT 阶段:




$ yasboot cluster stop -c yashandb$ yasboot cluster start -c yashandb -m mount
$ yasboot cluster restart -c yashandb -m mount

$ yasboot group start -c yashandb -g 1 -m mount
$ yasboot node start -c yashandb -n 4-1 -m mount

$ yasql sys/password@ip:portSQL> ALTER DATABASE MOUNT;
复制代码


Copied!


操作成功后,可查询数据库状态已更新为 MOUNTED。



$ yasql sys/password@ip:port
SQL> SELECT status FROM V$INSTANCE; STATUS ---------MOUNTED
复制代码


Copied!

# 启动到 OPEN 阶段

支持通过 yasboot 工具将数据库实例从任意阶段调整至 OPEN 阶段,或通过 SQL 命令方式将数据库实例从 NOMOUNT 或 MOUNT 阶段调整至 OPEN 阶段。


可通过执行如下命令将数据库实例启动到 OPEN 阶段:




$ yasboot cluster stop -c yashandb$ yasboot cluster start -c yashandb -m open
$ yasboot cluster restart -c yashandb -m open

$ yasboot group start -c yashandb -g 1 -m open
$ yasboot node start -c yashandb -n 4-1 -m open

$ yasql sys/password@ip:portSQL> ALTER DATABASE OPEN;
复制代码


Copied!


操作成功后,可查询数据库状态已更新为 OPEN。


SELECT status FROM V$INSTANCE; STATUS   
OPEN
复制代码


Copied!

# 启动实例失败场景

# 环境变量未设置或错误

以下为 YashanDB 实例成功启动的三个关键环境变量,设置错误将导致无法启动到 NOMOUNT 及之后阶段,请根据实际情况将环境变量调整至正确值:


  • YASDB_HOME:YashanDB 默认软件目录

  • YASDB_DATA:YashanDB 默认数据目录

  • LD_LIBRARY_PATH:YashanDB 依赖包目录,使用 yasboot sql 或 yaql 前必须先正确配置该环境变量

# 控制文件验证失败

YashanDB 在实例启动时进行控制文件校验,出现如下情况时,实例将无法启动到 MOUNT 及之后阶段:


  • 控制文件实际路径与 CONTROL_FILES 参数配置路径不一致

  • 出现此种情况时,解决方法如下:

  • 方法一:修改控制文件路径。

  • 方法二:启动实例到 NOMOUNT 阶段后修改 CONTROL_FILES 参数,再重新启动实例。

  • 控制文件中的数据库版本与实例版本不一致

  • 此种情况启动实例将提示_database version x.x.x incompatible with YashanDB version x.x.x_错误,请根据实际情况选择是否进行版本升级。

  • 控制文件组成员的数据库 ID 不一致

  • 此种情况多是由于一台服务器存在多个数据库实例时,CONTROL_FILES 参数配置了不同数据库的控制文件,将其修改为正确的控制文件路径即可。

# 数据文件丢失或损坏

  • 内置表空间数据文件丢失或损坏

  • 如出现内置表空间数据文件丢失或损坏的情况,实例将无法启动到 MOUNT 及之后阶段。

  • 此种情况下,通常可以通过恢复最新的可用备份集解决,若不存在备份集则只能通过找回文件、物理恢复等方式解决。

  • 用户数据文件丢失或损坏

  • 当用户表空间挂载的数据文件出现丢失或损坏时,通常可以通过恢复最新的可用备份集解决,若不存在备份集则可通过 YashanDB 提供的逃生通道进行应急处理,保证数据库能正常启动、打开和运行,具体操作见数据文件管理章节中数据文件损坏后的应急处理相关描述。

# redo 文件丢失或损坏

如出现 redo 文件丢失或损坏的情况,实例将无法启动到 MOUNT 及之后阶段。


此种情况下,可通过恢复最新的可用备份集解决。

# 相关进程未启动

使用 yasboot 工具调整数据库实例时须确保 yasom 和 yasagent 进程处于开启状态,否则将提示_connect: connection refused_错误。服务器重启时,yasom 和 yasagent 进程会自动关闭,可通过注册开机自启动功能于服务器重启时自动拉起 yasom 和 yasagent 进程,具体操作见初始数据库章节描述。

# 数据库打开模式

YashanDB 在 MOUNT 或 NOMOUNT 阶段下,准备调整至 OPEN 阶段时,可以通过 SQL 命令方式根据不同场景配置数据库的打开模式为 READWRITE、RESETLOGS 或者 UPGRADE。


语法为:ALTER DATABASE OPEN [READWRITE|RESETLOGS|UPGRADE]


  • READWRITE:用于正式生产环境,数据库完整事务的读写操作;数据库打开时如果不设置打开模式参数,则默认为 READWRITE。

  • RESETLOGS:用于数据库发生故障时,如果需要进行不完全恢复操作,请使用 RESETLOGS 模式打开数据库,并在打开后重新设置日志号。

  • UPGRADE:用于打开数据库升级模式,该模式下不允许建立新的会话连接。


可通过数据库视图 V$DATABASE 查看数据库打开模式。


SELECT database_id,database_name,open_mode FROM V$DATABASE;     DATABASE_ID DATABASE_NAME    OPEN_MODE       
569377301 yasdb READ_WRITE
复制代码


Copied!


其中,主备模式下还需要关注主备角色的 DATABASE_ROLE 字段。


SELECT DATABASE_NAME,LOG_MODE,OPEN_MODE,PROTECTION_MODE,DATABASE_ROLE,BLOCK_SIZE,STATUS FROM  V$DATABASE;  DATABASE_NAME LOG_MODE    OPEN_MODE   PROTECTION_MODE      DATABASE_ROLE  BLOCK_SIZE STATUS
yasdb ARCHIVELOG READ_ONLY MAXIMUM PERFORMANCE STANDBY 8192 NORMAL
复制代码


Copied!


Caution

如果执行的是完全恢复操作,此时如果使用 RESETLOGS 模式打开,数据库会报 YAS-02184 错误并关闭实例,请慎重使用该模式打开数据库。

关闭数据库实例



YashanDB 支持通过执行 SHUTDOWN 语句或使用 yasboot 工具关闭数据库实例。


SHUTDOWN 语句仅适用于单机/分布式数据库对单个实例节点执行关闭实例操作,即仅改变语句执行所在节点的实例。


yasboot 工具支持进行如下粒度的关闭操作:


  • 单机/分布式数据库集群粒度关闭节点实例

  • 单机/分布式数据库节点组粒度关闭节点实例

  • 单机/分布式数据库关闭特定节点实例

# SQL 命令方式

可在 SQL 命令行中指定如下三种方式关闭数据库实例:


  • SHUTDOWN NORMAL:等待事务正常结束后关闭,没有时间限制,通常建议选择这种方式来关闭数据库,此方式也为 YashanDB 默认的关库模式。

  • SHUTDOWN IMMEDIATE:立即中断当前用户的连接,同时强行终止用户的当前执行中的事务,将未完成的事务回退,并关闭数据库。

  • SHUTDOWN ABORT:强制中断所有数据库操作并关闭数据库,这种关闭方式可能会丢失一部分数据,影响数据库完整性。


示例


SHUTDOWN NORMAL;SHUTDOWN IMMEDIATE;SHUTDOWN ABORT;
复制代码


Copied!

# yasboot 工具方式

可通过使用 yasboot 工具关闭数据库实例:


$ yasboot cluster stop -c yashandb$ yasboot cluster stop -c yashandb -s normal$ yasboot cluster stop -c yashandb -s immediate$ yasboot cluster stop -c yashandb -s abort

$ yasboot group stop -c yashandb -g 1
$ yasboot node stop -c yashandb -n 4-1
复制代码


Copied!


其中,-s参数用于指定关库方式,可指定为 NORMAL/IMMEDIATE/ABORT 方式,省略则默认为 IMMEDIATE 方式。


Caution

一般当服务器宕机、断电,或者人为强制关库时才建议使用 ABORT 方式,否则应避免使用这种方式停止实例,防止出现数据丢失,或者数据库损坏。

发布于: 刚刚阅读数: 5
用户头像

YashanDB

关注

全自研国产新型大数据管理系统 2022-02-15 加入

还未添加个人简介

评论

发布
暂无评论
YashanDB实例启停_数据库_YashanDB_InfoQ写作社区