#实例启停

# 数据库实例状态

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

  • NOMOUNT:启动数据库实例, 此时读取参数文件,但是不加载数据库。
  • MOUNT:启动数据库实例,读取控制文件,加载数据库,但是数据库处于关闭状态。
  • OPEN:启动数据库实例,加载并打开数据库。

# 启动数据库实例

数据库实例可以直接启动到NOMOUNT、MOUNT和OPEN三种状态中的任意一种,也可以通过ALTER DATABASE方式将数据库实例从NOMOUNT状态依次调整到MOUNT状态和OPEN状态。

# 启动到NOMOUNT状态

$ nohup yasdb nomount &
 
SQL> SELECT status FROM V$INSTANCE;
 
STATUS   
---------
STARTED

Note

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

# 启动到MOUNT状态

可在OS命令行直接启动数据库到MOUNT状态,或在数据库运行过程中切换到MOUNT状态。

#启动到mount状态
$ nohup yasdb mount &
--运行过程中切换到mount状态
SQL> ALTER DATABASE MOUNT;

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

SELECT status FROM V$INSTANCE;
 
STATUS   
---------
MOUNTED 

# 启动到OPEN状态

可在OS命令行直接启动数据库到OPEN状态,或在数据库运行过程中切换到OPEN状态。

#启动到open状态
$ nohup yasdb open &
--运行过程中切换到open状态
SQL> ALTER DATABASE OPEN;

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

SELECT status FROM V$INSTANCE;
 
STATUS   
---------
OPEN 

Caution

可以使用yasql工具连接到一个空闲实例,但是空闲实例不能直接进行数据启动到NOMOUNT、MOUNT和OPEN的操作,即在空闲实例下,不能使用STARTUP NOMOUNT、STARTUP MOUNT、STARTUP OPEN以及ALTER DATABASE NOMOUNT、ALTER DATABASE MOUNT和ALTER DATABASE OPEN等命令来启动数据库实例。

# 启动实例失败场景

# 环境变量未设置或错误

以下为YashanDB实例成功启动的三个关键环境变量,设置错误将导致无法启动到NOMOUNT及之后状态:

  • YASDB_HOME:YashanDB默认软件目录
  • YASDB_DATA:YashanDB默认数据目录
  • LD_LIBRARY_PATH:YashanDB依赖包目录

其中,YASDB_DATA未配置,或服务器上存在多个数据库实例时,使用yasdb nomount -D '实例指向数据文件目录',而不是nohup yasdb nomount &来启动实例。

# 控制文件验证失败

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及之后阶段。

# 数据库打开模式

YashanDB在MOUNT状态下,准备OPEN打开时,可以根据不同场景配置数据库的打开模式为readwrite、resetlogs或者readonly。

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

  • readwrite:用于正式生产环境,数据库完整事务的读写操作;数据库打开时如果不设置打开模式参数,则默认为readwrite。
  • resetlogs:用于数据库发生故障时,如果需要进行不完全恢复操作,使用resetlogs模式打开,打开后需要重新设置日志号。
  • readonly:用于高可用的主备部署环境,备库以readonly模式打开,支撑只读业务。

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

SELECT  database_id,database_name,open_mode FROM  V$DATABASE;
 
    DATABASE_ID DATABASE_NAME    OPEN_MODE       
--------------- ---------------- -----------------
      569377301 yasdb            READ_WRITE   

其中,主备模式下还需要关注主备角色的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

Caution

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

# 数据库实例关闭

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

  • SHUTDOWN NORMAL:等待事务正常结束后关闭,没有时间限制,通常建议选择这种方式来关闭数据库,此方式也为YashanDB默认的关库模式。
  • SHUTDOWN IMMEDIATE:立即中断当前用户的连接,同时强行终止用户的当前执行中的事务,将未完成的事务回退,并关闭数据库。
  • SHUTDOWN ABORT:强制中断所有数据库操作并关闭数据库,这种关闭方式可能会丢失一部分数据,影响数据库完整性。

示例

SHUTDOWN NORMAL;
SHUTDOWN IMMEDIATE;
SHUTDOWN ABORT;

Caution

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

# 使用yasboot工具启停

除可使用上述命令手动执行实例启停外,YashanDB还支持使用yasboot工具远端启停某个节点实例,前提是该节点位于OM(YashanDB运维管理工具)管理的数据库集群范围内。

yasboot支持:

  • 数据库集群粒度启停节点
  • 数据库组粒度启停节点
  • 无需连接yasom,进程启停本机的节点

示例

#集群节点启停
$ yasboot cluster stop -c yashandb
$ yasboot cluster start -c yashandb -m nomount
$ yasboot cluster restart -c yashandb -m mount

#组节点启停
$ yasboot group stop -c yashandb -g 1
$ yasboot group start -c yashandb -g 2 -m nomount
$ yasboot group restart -c yashandb -g 3 -m mount

#节点启停
$ yasboot node stop -c yashandb -n 1-1
$ yasboot node start -c yashandb -n 2-1 -m nomount
$ yasboot node restart -c yashandb -n 3-1 -m mount

#进程管理启停本机的节点进程,进程启停不依赖于yasom和yasagent
$ yasboot process yasdb stop -c yashandb
$ yasboot process yasdb start -c yashandb
$ yasboot process yasdb stop -c yashandb -n 1-1
$ yasboot process yasdb start -c yashandb -m nomount -n 2-1
$ yasboot process yasdb restart -c yashandb -m mount -n 3-1