故障诊断

  本文介绍SinoDB数据库的日常维护、数据库异常情况初步诊断及应急处理。

  当发现数据库有任何异常现象时,请根据本文中的内容进行初步判断,如果判定为与数据库相关的问题,请保留好现场(保留现场的方法请根据本文的”如何保存数据库现场“执行),并请提前准备好如下的信息,以支持星瑞格支持工程师能更快更有效分析解决问题:

  1、数据库的版本信息与序列号

  使用 sinodbms 用户登陆输入 onstat -V 与 oninit -version 获得数据库版本信息。例如:

$ onstat -V
Sinoregal SinoDB Dynamic Server Version 16.8.FC8U0X3 Software Serial Number AAA#B000000
$ oninit -version
Program Name:           oninit
Build Version:          16.8.FC8U0X3
Build Number:           N088
Build Host:             build_base
Build OS:               Linux 2.6.18-128.el5
Build Date:             Thu Aug 17 20:17:30 CST 2023
Build Timestamp:        17-Aug-2023.20:09:44UTC-06
GLS Version:            glslib-6.00.FC9

  2、操作系统平台和版本信息

  该信息可通过敲入命令 uname -a 来获得。

  3、数据库信息日志的内容

  如果已知信息日志的位置(通常称为 online.log 文件),则可忽略下面的步骤(1)至(5)。

  (1) 以 sinodbms 用户登陆进入 SinoDB 数据库;

  (2) 在命令行状态下敲入 env|grep SINODBMSXDIR,找出 SINODBMSDIR所对应的值,例如:SINODBMSDIR=/sinodbms;

  (3) 在命令行状态下敲入 env|grep ONCONFIG,找出 ONCONFIG 所对应的值,例如:ONCONFIG=onconfig.sinodb;

  此例中,onconfig,bill 为数据库配置文件。

  (4) 进入$SINODBMSDIR/etc,例如:cd /sinodbms/etc,然后用 pwd 命令确认当前目录是否正确,例如:如果正确的话,应为/sinnodbms/etc;

  (5) 敲入 more onconfig.sinodb|grep MSGPATH,输出中 MSGPATH 右边对应的文件即为信息日志的路径和文件名,例如:

MSGPATH /sinodbms/online.sinodb.log   # System message log file path

  online.sinodb.log 即为所需的数据库信息日志文件。

一、如何保存数据库现场

  当通过初步判定系统异常与数据库相关时,在联系星瑞格技术支持服务之前请尽可能的保留现场,具体操作步骤如下:

  1、记录下系统反馈的错误信息,包括现象及错误代码;

  2、在命令行敲入 onstat –a > a.out

  3、在命令行敲入 onstat –g all > all.out

  4、在命令行敲入 onstat –g stk all > stkall.out

  如果系统允许有一定的等待处理时间的话(即可以不马上重启机器恢复业务的),请立即拨打 400 热线或星瑞格技术支持工程师确认后再进行相应操作,而不要立即重启机器,。

二、如何观察数据库模式是否正常

  使用 onstat –命令可以观察数据库的模式是不是处于正常在线的状态,如正常时应有类似下面的输出结果:

Sinoregal SinoDB Dynamic Server Version 16.8.FC8U0X3 -- On-Line -- Up 70 days 17:32:50 -- 1355616 Kbytes

  如果系统状态为 on-line 证明是正常在线的,否则系统可能正处于另外的模式中,可能有的状态有 Initialization,Quiescent,Fast Recovery,Shutting Down等。除了 on-line 模式之外,如果在未对系统进行任何特殊操作而系统长期处于非on-line 的状态,或者在状态后带有括号,括号内包含有 CKPT,LONGTX,LBU 的话,请立即与星瑞格技术支持联系。

  如果输出类似于如下的信息,证明数据库目前的状态是处于 off-line 状态,即为通常所说的宕机模式,业务已经处于停止状态:

shared memory not initialized for SINODBMSSERVER 'sinodb'

三、如何观察数据库逻辑日志是否正常

  在命令行状态下敲入 onstat –l 可以获得数据库日志的信息,其中包含有逻辑日志的使用情况。输出内容与下面的类似:

Sinoregal SinoDB Dynamic Server Version 16.8.FC8U0X3 -- On-Line -- Up 00:02:33 -- 1355616 Kbytes

Physical Logging
Buffer bufused  bufsize  numpages   numwrits   pages/io
  P-2  30       64       6          1          6.00
      phybegin         physize    phypos     phyused    %used   
      2:53             1023945    672822     30         0.00    

Logical Logging
Buffer bufused  bufsize  numrecs    numpages   numwrits   recs/pages pages/io
  L-2  0        32       316        48         31         6.6        1.5     
        Subsystem    numrecs    Log Space used
        OLDRSAM      315        61576         
        HA           1          44            

address          number   flags    uniqid   begin                size     used    %used
463c4f88         7        U-B----  7        3:53               102390   102390   100.00
4618cf68         8        U-B----  8        3:102443           102390   102390   100.00
46269f40         9        U-B----  9        3:204833           102390   102390   100.00
46269fa8         10       U-B----  10       3:307223           102390   102390   100.00
463a8450         11       U-B----  11       3:409613           102390   102390   100.00
463a84b8         12       U-B----  12       3:512003           102390   102390   100.00
463a8520         13       U---C-L  13       3:614393           102390    56266    54.95
463a8588         14       A------  0        3:716783           102390        0     0.00
463a85f0         15       A------  0        3:819173           102390        0     0.00
463a8658         16       A------  0        3:921563           102390        0     0.00
 10 active, 10 total

  在这个输出中,最主要的是要观察逻辑日志的标志(flags)列,在标志列中有可能出现的标志有:A、F、U、B、C、L,分别代表的含义如下:

  • A:新增加的逻辑日志;
  • F:空闲的可使用的逻辑日志;
  • U:已使用的或正在使用的逻辑日志;
  • B:已经备份的逻辑日志;
  • C:当前正在使用的逻辑日志;
  • L:包含有最后的检查点记录的逻辑日志。

  当逻辑日志正常时,每使用完一个会自动切换到下一个,然后将使用完毕的上一个逻辑日志进行备份,备份完毕标志会有 B 出现在 flags 列上,如果发现有类似如下的输出信息:

     ……flags……
     U------
     U------
     U---C-L
     U-B----
     U-B----
     ……

  即如果发现在标志中有一个以上的逻辑日志标志只是含有 U 的标志,而不是正常的 U-B----或者含有 C 或 L,那么说明日志备份可能出现了异常,需要立即查看备份是否正常,具体步骤参见“如何从数据库备份日志观察备份是否正常”的指导步骤来执行。

四、如何从数据库日志观察备份是否正常

  在数据库中,专门有一个日志记录 onbar 备份的情况,通过查阅这个备份日志,可以配合存储管理器和备份设备来判定备份的正常与否,具体查验步骤如下:

  1、如果已知数据库配置文件的位置(通常称为 onconfig 文件),则可忽略下面的步骤(1)至(3)。

  (1) 以 sinodbms 用户登陆进入 SinoDB 数据库;

  (2) 在命令行状态下($)敲入 env|grep SINODBMSDIR,找出 SINODBMSDIR 所对应的值,例如:SINODBMSDIR=/sinodbms;

  (3) 在命令行状态下($)敲入 env|grep ONCONFIG,找出 ONCONFIG 所对应的值,例如 ONCONFIG=onconfig.sinodb;

  此例中,onconfig.sinodb 为数据库配置文件。

  (4) 进入$SINODBMSDIR/etc,例如:cd /sinodbms/etc,然后用 pwd 命令确认当前目录是否正确,例如:如果正确的话,应为/sinodbms/etc;

  (5) 敲入 more onconfig.sinodb|grep BAR_ACT_LOG,输出中 BAR_ACT_LOG 右边对应的文件即为备份日志的路径和文件名,例如:

  BAR_ACT_LOG  /sinodbms/tmp/bar_act.log # ON-Bar Log file - not in /tmp please

  bar_act.log 即为所需的数据库备份日志文件。

  用 vi 命令打开 bar_act.log 文件,并用:$命令跳到文件的最后,查看日志的内容,看是否有错误信息,象 Error 或者 XBSA Error 等类似的信息。如果无法判定,请立即与星瑞格技术支持联系。

五、如何观察数据库 CHUNK 或 DBSPACE 是否正常

  在命令行状态下敲入 onstat –d 可以获得有关数据库空间使用情况的输出,结果类似于:

Sinoregal SinoDB Dynamic Server Version 16.8.FC8U0X3 -- On-Line -- Up 00:17:31 -- 1355616 Kbytes

Dbspaces
address          number   flags      fchunk   nchunks  pgsize   flags    owner    name
46269028         1        0x20001    1        1        2048     N  BA    sinodbms rootdbs
463a8770         2        0x1        2        1        2048     N  BA    sinodbms plogdbs
463a89b0         3        0x1        3        1        2048     N  BA    sinodbms llogdbs
463a8bf0         4        0x2001     4        1        16384    N TBA    sinodbms tempdbs1
47369028         5        0x2001     5        1        16384    N TBA    sinodbms tempdbs2
47369268         6        0x2001     6        1        16384    N TBA    sinodbms tempdbs3
473694a8         7        0x2001     7        1        16384    N TBA    sinodbms tempdbs4
473696e8         8        0x8001     8        1        2048     N SBA    sinodbms sbdbs1
47369928         9        0x1        9        1        4096     N  BA    sinodbms datadbs1
47369b68         10       0x1        10       1        2048     N  BA    sinodbms datadbs2
 10 active, 2047 maximum

Chunks
address          chunk/dbs     offset     size       free       bpages     flags pathname
46269268         1      1      0          1024000    1006385               PO-B-D /home/sinodbms/dbs/rootdbs
4736a028         2      2      0          1024000    2                     PO-B-D /home/sinodbms/dbs/plogdbs
4736b028         3      3      0          1024000    47                    PO-B-D /home/sinodbms/dbs/llogdbs
4736c028         4      4      0          32000      31947                 PO-B-- /home/sinodbms/dbs/tempdbs1
4736d028         5      5      0          32000      31947                 PO-B-- /home/sinodbms/dbs/tempdbs2
4736e028         6      6      0          32000      31947                 PO-B-- /home/sinodbms/dbs/tempdbs3
4736f028         7      7      0          32000      31947                 PO-B-- /home/sinodbms/dbs/tempdbs4
47370028         8      8      0          512000     477465     477465     POSB-D /home/sinodbms/dbs/sbdbs1
                                 Metadata 34482      25659      34482   
47371028         9      9      0          512000     507015                PO-B-D /home/sinodbms/dbs/datadbs1-1
47372028         10     10     0          512000     509947                PO-B-D /home/sinodbms/dbs/datadbs2-1
 10 active, 32766 maximum

NOTE: The values in the "size" and "free" columns for DBspace chunks are
      displayed in terms of "pgsize" of the DBspace to which they belong.


Expanded chunk capacity mode: always

  重点观察其中的标志(flags)列,如果标志列中出现“D”的话,证明此行所对应的 CHUNK 或 DBSPACE 出现异常,处于不可用状态,此时请立即联系程师检查对应设备,并拨打 400 热线寻求星瑞格技术支持。

六、如何通过数据库信息日志初步判定问题的可能原因

  数据库信息日志(即通常所讲的 online.log 文件)是数据库运行情况的实时记录文件,在这个日志中会记录下许多信息,包括数据库模式的转变、检查点记录、数据库参数的改变、I/O 错误等记录信息。通过经常查看信息日志的内容不仅可以及时发现数据库系统已发生的问题,也可初步判定问题的可能原因。

  如果数据库是正常状态的话(即通过 onstat -看到数据库是 on-line 状态的话),可以使用命令 onstat -m 来获取最近的 20 行信息日志文件中的内容;

  如果通过 onstat -m 无法看到或者想得到更多的信息,可以直接使用 vi 打开日志文件进行查看。

下面是通过观察信息日志来初步判定问题原因的方法:

  1、如果信息日志中出现有 I/O error 的信息,可初步断定为 I/O 错误,大部分为硬件问题,此时请根据日志中 Action:中提到的动作做相应处理,如果不能确定请及时拨打 400 热线与星瑞格技术中心联系。

  2、如果信息日志中出现有类似 out of virtual shared memory 的信息,可初步确认为操作系统问题,请及时拨打 400 热线进行咨询处理。

  3、如果信息日志中出现有 Assert Failed 信息,请立即拨打 400 热线联系星瑞格技术支持中心分析协助解决。

七、紧急处理方案

  当发现应用不能正常运行时,请按下面的步骤进行紧急处理:

  1、用 sinodbms 用户登陆系统并进入应用所在的数据库环境;

  2、在命令行敲入 onstat -,根据本手册中的“如何观察数据库模式是否正常”看数据库是否处于在线的正常状态;

  3、根据本手册中的“如何通过数据库信息日志初步判定问题的可能原因”来初步断定问题的可能原因;

  4、按照“如何保存数据库现场”中的步骤尽可能地保留现场;

  5、立即联系星瑞格技术工程师寻求支持。