达梦数据库操作手册

达梦数据库操作手册

2013年12月15日

达梦数据库安装

  • 服务器安装
  1.  数据库安装注意问题

数据库的安装路径不要直接放在操作系统的/目录相同的磁盘上,可以安装在/dmdb/dm,但是/dmdb要单独挂载在一块硬盘上。

根据业务需要及数据量,数据文件放在磁盘空间较大的分区下。

  1.  安装步骤

1.2.1 图形化界面安装

1. 为DMInstall.bin赋予可执行权限

                   chmod  +x  DMInstall.bin                                

2. 运行DMInstall.bin,进行数据库安装

                   ./DMInstall.bin                                          

3.  接受安装许可协议

4. 查看版本信息

5. 选择安装的key文件

6. 选择安装类型

7. 选择安装路径,及勾选高级配置选项

8. 进行高级选项数据库配置,页大小32K,簇大小16页,大小写敏感 -> “是”,UNICODE字符集 ->“否”,空串‘’按NULL处理 -> “是”

9. 修改系统管理员密码,此处不需要修改

10. 开始菜单文件夹建立

11. 完成安装配置,显示安装小结

12. 完成安装,修改安装目录下dm.ini文件中的部分参数,详见1.2.3节内容。

1.2.2 字符形式安装

某些情况下,无法使用图形话界面连接到服务器上,此时安装达梦数据库可以使用字符界面安装。

1.运行达梦安装文件

         ./DMInstall.bin   -i                                                      

如果提示权限不够,进行授权,执行:

         chmod    +x   DMInstall.bin                                             

2. 开始安装,根据提示输入dm.key所在位置

Welcome to DM Install Program                                                      

Please Input the Path of the Key File[/home/d5000/dm_install/dm.key]:

方括号内为key文件所在位置默认路径,回车选择默认路径。

3.选择安装类型

Expiration Date: unlimited

Server Series: Enterprise Edition

Server Type: Trial Edition

Customer Name: 国电南瑞

Authorized User Number: 1

Concurrency User Number: unlimited

Installation Type:

1 Typical

2 Server

3 Client

4 Custom

Please Input the number of the Installation Type [1 Typicail]:

选择Typical,输入1。

4. 选择安装路径

Please Input the install path [/opt/dmdbms]:

例如,将达梦安装在/dmdb/dm,输入路径。

5.确认安装路径

Please Confirm the install path (Y/y,N/n) [Y/y]:

输入Y(或y)。

6. 选择初始化数据库

Whether to Initialize the Database (Y/y,N/n) [Y/y]:

输入Y(或y)确定初始化数据库。

7. 选择不安装实例数据库

Install Demo Database(Y/y,N/n) [N/n]:

输入N。

8. 选择数据文件路径

Please Input the data install path [/dmdb/dm/data]:

例如,数据文件路径设置为/dbdata/dmdata,输入路径。

9. 确认数据文件路径

Please Confirm the data install path (Y/y,N/n) [Y/y]:

输入Y

10. 修改初始化数据库参数

Whether to Modify DataBase Initiation Parameter (Y/y,N/n) [N/n]:

选择Y,对数据库参数进行修改。参数设置为大小写敏感,页大小32K,簇大小16页,空串(‘’)按NULL处理,修改参数如下(红色字体为输入):

Whether to Modify DataBase Initiation Parameter (Y/y,N/n) [N/n]:Y

Data Page Size, only 4k,8k,16k,32k [8]32

Data File Extent Size, only 16 pages or 32 pages [16]16

String case sensitive: Y sensitive;N no sensitive [N]Y

UNICODE Support: 0 no support;1 support [0]0

Empty String('') as NULL: Y yes;N no [N]Y

11. 选择不修改管理员、审计员密码

Whether to Modify SYSDBA Password (Y/y,N/n) [N/n]:N

Whether to Modify SYSAUDITOR Password (Y/y,N/n) [N/n]:N

12. 确认安装

Pre-Installation Summary

Installation Location: /dmdb/dm

Data Installation Location: /dbdata/dmdata

Require Space: 371M

Available Space: 105G

Data Require Space: 315M

Data Available Space: 31G

Version Information: Enterprise Edition

Expire Data: unlimited

Installation Type: Typical

Confirm to Install?(Y/y,N/n) [Y/y]:Y

13. 完成安装,修改安装目录下dm.ini文件中的部分参数,详见1.2.3节内容。

1.2.3 参数修改

1. 安装目录下dm.ini的修改

需要添加的参数:

#FOR OBJECT LIMIT

      TOTAL_OBJECT_NUM_LIMIT   = 100000

    OBJECT_NUM_LIMIT          = 50000

#FOR FAST UPDATE

       BCP_WITH_LOG             = 1

      CTAB_SEL_WITH_PK             = 1

ENABLE_FAST_UPDATE           = 1

#for SQL TRACE

      SVR_LOG                 = 100000

    SVR_LOG_FILE_NUM             = 10

    SQL_LOG_MASK                 =  31

需要修改的参数:

  MEMORY_POOL                 = 100

BUFFER                        = 200000 (内存为32G设置为20万)

MAX_BUFFER                   = 250000

DBUF_MODE                    = 0   

WORKER_THREADS              = 16

CHKPNT_INTERVAL               = 60

CHKPNT_FLUSH                = 20

IO_THR_GROUPS                 = 8  

MAX_SESSIONS                  = 500

BAK_POLICY                     = 1

PWD_POLICY                    = 0

IGNORE_MUTATING_CHECK        = 1

注:参数与简要说明

TOTAL_OBJECT_NUM_LIMIT:数据库中所有对象最大数量

OBJECT_NUM_LIMIT :  

2. 修改/etc/dm_svc.conf文件

内容如下:

debug = (0)

mdb = (192.168.200.1)   //IP地址请以工程实际为准

his = (192.168.200.1)      //IP地址请以工程实际为准

primary_key=(off,precision,context,interval,percent,frequence)

show_sql=(0)

配置文件中关键字的说明:

debug:为调试选项,取值为0(不打印日志)、1(打印日志到屏幕)、2(打印日志到文件)、3(打印日志到屏幕和文件)。如果设置成打印到文件,那么DCI会把接口调用打印到应用所在目录下的dmoci.log中。

mdb:模型数据库服务名。

his:历史数据库服务名。

primary_key:关键字重命名,如果应用中使用到了达梦SQL中保留的关键单词,那么把该单词加入到该配置项中便可,否则会引起语法分析的错误。

show_sql:是否显示调用DCI执行的SQL语句,该参数只有在debug参数大于0时才有效

1.3 通过拷贝方式安装数据库

在linux系统下,可以通过拷贝方式搭建数据库环境,但是要求安装程序目录和数据文件目录和原始服务器完全一致。

数据库数据文件存放的位置,可以通过达梦安装目录下/bin/dm.ini中的CTL_PATH1参数确定。

如果需要设置开机自启动,方法如下:

1. 将dmserverd、dmagentd文件拷贝到/etc/rc.d/init.d目录中

2. 在rc3.d和rc5.d目录下建立启动连接,分别在目录下执行命令:

      ln  -s  /etc/rc.d/init.d/dmserverd   S98dmserverd                               

      ln  -s  /etc/rc.d/init.d/dmagentd   S98dmagentd                                

在rc0.d和rc6.d目录下建立停止服务链接,分别在目录下执行:

      ln  -s  /etc/rc.d/init.d/dmserverd  K02dmserverd                               

      ln  -s  /etc/rc.d/init.d/dmagentd  K02dmagentd                                

  • 客户端安装

2.1 使用DMInstall.bin文件安装

使用DMInstall.bin文件进行安装,界面与服务器的安装界面相同,在选择安装类型时选择为-> 客户端。

客户端安装在/home/d5000/dm/dmClient目录下,拷贝bin目录下的isql、expdb、impdb到/home/d5000/dm/dmClient目录下,将expdb\impdb重命名为exp\imp

最后修改目录权限

           chown  –R  d5000:d5000  dm                                         

2.2 通过拷贝方式安装

拷贝方式安装,直接拷贝到相同路径下即可以使用。

【注意问题】

安装完客户端,在d5000用户下使用isql工具时报错:找不到libdmapi.so文件,是由于在使用d5000用户登录操作系统使用isql工具时,调用库文件是要去/home/d5000/*/lib下查找,需要在该目录下存在达梦的动态库才可以使用isql工具,如果没有达梦的动态库可以拷贝libdmapi.so、libdmdci.so、libdmucvt.so、libdmcrypto_engine.so、libdmoci.so文件到该目录下,同时cp  libdmoci.so  libclntsh.so。

三、D5000系统数据库环境建立

1. 建立数据库、登录和用户

CREATE DATABASE EMS DATAFILE 'EMS.dbf' SIZE 128;

CREATE LOGIN d5000 IDENTIFIED BY "d5000" DEFAULT DATABASE EMS;

CREATE LOGIN expman IDENTIFIED BY "technari" DEFAULT DATABASE EMS;

CREATE DATABASE HISDB DATAFILE 'HISDB.dbf' SIZE 128; 

CREATE LOGIN alarm IDENTIFIED BY ALARM DEFAULT DATABASE HISDB;

CREATE LOGIN hisdb IDENTIFIED BY HISDB DEFAULT DATABASE HISDB;

CREATE LOGIN sysconfig IDENTIFIED BY SYSCONFIG DEFAULT DATABASE HISDB;

CREATE LOGIN context IDENTIFIED BY CONTEXT DEFAULT DATABASE HISDB;

CREATE LOGIN rtdb IDENTIFIED BY RTDB DEFAULT DATABASE HISDB;

CREATE LOGIN hisreport IDENTIFIED BY HISREPORT DEFAULT DATABASE HISDB;

CREATE LOGIN statics IDENTIFIED BY STATICS DEFAULT DATABASE HISDB;

CREATE LOGIN YXFX IDENTIFIED BY YXFX DEFAULT DATABASE HISDB;

Set current database EMS; 

CREATE USER EMS;

GRANT DBA TO EMS;

CREATE USER expman;

GRANT DBA TO expman;

CREATE USER HISDB;

GRANT DBA TO HISDB;

CREATE USER STATICS;

GRANT DBA TO STATICS;

ALTER USER EMS.ems RELATED BY d5000;

ALTER USER EMS.expman RELATED BY expman;

ALTER USER EMS.hisdb RELATED BY hisdb;

ALTER USER EMS.statics RELATED BY statics;

Set current database HISDB; 

CREATE USER alarm;

GRANT DBA TO alarm;

CREATE USER hisdb;

GRANT DBA TO hisdb;

CREATE USER sysconfig;

GRANT DBA TO sysconfig;

CREATE USER context;

GRANT DBA TO context;

CREATE USER rtdb;

GRANT DBA TO rtdb;

CREATE USER hisreport;

GRANT DBA TO hisreport;

CREATE USER statics;

GRANT DBA TO statics;

CREATE USER YXFX;

GRANT DBA TO YXFX;

ALTER USER HISDB.alarm RELATED BY ALARM;

ALTER USER HISDB.hisdb RELATED BY HISDB;

ALTER USER HISDB.sysconfig RELATED BY SYSCONFIG;

ALTER USER HISDB.context RELATED BY CONTEXT;

ALTER USER HISDB.rtdb RELATED BY RTDB;

ALTER USER HISDB.hisreport RELATED BY HISREPORT;

ALTER USER HISDB.statics RELATED BY STATICS;

ALTER USER HISDB.YXFX RELATED BY YXFX;

2. 使用脚本建立数据库,或者使用备份文件还原数据库

使用物理bak文件还原数据库的方法详见-> 物理还原数据库部分,使用逻辑备份DMP文件还原数据库详见 -> 逻辑还原数据库部分。

达梦数据库备份还原

  • 物理还原数据库

物理还原,即使用物理备份BAK文件还原数据库,还原到的目的数据库的建库参数要和原始数据库一致,包括页大小、簇大小、大小写敏感。

还原数据库时,要求当前对该数据库没有连接访问,可以通过关闭所有应用,或者修改达梦的端口号来实现,具体参见1.3节。

    1. 使用SQL语句还原
  1. 以系统管理员用户登录数据库

         ./isql  SYSDBA/SYSDBA@127.0.0.1                                     

@符号后为数据库的IP地址。

2.  脱机所要还原的数据库

         SQL>ALTER DATABASE [数据库名] SET OFFLINE;                           

例:ALTER DATABASE EMS SET OFFLINE;

如果报错当前对象被占用,按照1.3中的方法确认数据库是否有连接访问。

3.  还原数据库

         SQL>RESTORE DATABASE [数据库名] FULL FROM ‘备份文件绝对路径’;        

例:RESTORE DATABASE EMS FULL FROM ‘/dbdata/dmdata/EMS_BAK1.bak’;

4.  数据库联机

         SQL>ALTER DATABASE [数据库名] SET ONLINE;                           

5. 关联用户与登录,如还原EMS数据库,需使用SYSDBA登录数据库执行如下SQL:

SET CURRENT DATABASE EMS;

ALTER USER EMS RELATED BY D5000;

ALTER USER EXPMAN RELATED BY EXPMAN;

ALTER USER HISDB RELATED BY HISDB;

ALTER USER STATICS RELATED BY STATICS;

    1. 使用达梦客户端还原

使用客户端进行还原,同样使用上面的方式进行还原,只是操作简单。

  1. 以SYSDBA登录到数据库后,脱机要还原的数据库

成功脱机会弹出提示信息,如果报错“当前对象被占用”, 按照1.3中的方法确认数据库是否有连接访问。

  1. 还原数据库

  1. 选择备份文件

  1. 还原完成后会给出提示信息

  1. 进行数据库联机

    1. 清除数据库访问

当数据库在脱机时,如果报错“当前对象被占用”,说明当前数据库连接中存在联机正在访问所要还原的数据库,通过以下方式查找相关数据库连接:

isql登录数据库:

         ./isql  SYSDBA/SYSDBA@127.0.0.1                                         

执行查询:

         select  *  from  v$session;                                              

该查询会返回当前数据库中的连接信息,包含登录用户、登录的IP地址等信息,通过这些信息可以先关闭相应的连接再进行数据库脱机操作。

在某些情况下,可能不方便关闭所有的连接,此时我们可以通过修改数据库的访问端口号来拒绝应用对数据库的访问。修改达梦安装目录下bin/dm.ini文件,其中的PORT_NUM为数据库端口号,修改为其他值即可,如22345,重启数据库后参数生效。但是需要注意,此时访问数据库的端口后也要使用修改后的值,例如,使用isql登录数据库命令如下:

         ./isql  SYSDBA/SYSDBA@127.0.0.1:22345                                    

  • 物理备份数据库

2.1. 通过isql进行数据库备份

  1. 以系统管理员用户登录数据库

         ./isql  SYSDBA/SYSDBA@127.0.0.1                                     

@符号后为数据库的IP地址。

2.  备份数据库

         SQL>BACKUP DATABASE [数据库名] FULL TO [备份文件名] ;                           

详细语法格式如下:

BACKUP DATABASE <数据库名> [FULL|INCREMENT ] TO <备份名> [BAKFILE ‘<备份路径>’] [BACKUPINFO ‘<备份描述>’] [MAXSIZE <限制大小>] [IDENTIFIED BY <密钥>[WITH ENCRYPTION]] [COMPRESSED];

例:BACKUP  DATABASE  EMS  FULL  TO  EMS_BAK1 ;

2.2. 使用达梦客户端备份

1. 以SYSDBA登录数据库,在需要备份的数据库上右击->备份

2. 填写备份名称及选择备份类型

  • 逻辑备份与还原数据库

达梦数据库的逻辑备份还原工具用于

3.1 逻辑备份工具

  1. 导出单张表或多张表

   ./expdb [userid]/[password]@mdb  tables=[table1],…  file=out.dmp  log=out.log    

该工具到userid用户默认的数据库中去查找需要备份的表,如果涉及到跨数据库查找,需要在密码后面再添加数据库名。

   ./expdb [userid]/[password]/[dbname]@mdb tables=[table1],… file=out.dmp log=out.log

例:./expdb d5000/d5000@mdb  tables=substation,breaker  file=out.dmp

  1. 导出一个用户

   ./expdb  [userid]/[password]@mdb  owner=[username]  file=out.dmp            

例:./expdb SYSDBA/SYSDBA/EMS@mdb  owner=EMS  file=out.dmp  log=out.log                                                    

  1. 导出整个数据库

   ./expdb  [userid]/[password]/[dbname]@mdb  file=out.dmp  log=out.log                                                           

例:./expdb SYSDBA/SYSDBA/EMS@mdb file=out.dmp log=out.log

  1. 导出表结构

   ./expdb [userid]/[password]/[dbname]@mdb rows=n file=out.dmp  log=out.log                                                           

例:./expdb SYSDBA/SYSDBA/EMS@mdb rows=n file=out.dmp log=out.log

  1. 导出一张表的部分内容

DM6在2013年6月份的版本之后提供了备份一张表中部分内容的功能,即expdb工具支持了query参数,通过该参数可以按照一定的条件导出部分数据,如下:

导出一天的历史采样数据:

./expdb HISDB/HISDB@his tables=yc_hs_500281,yc_hs_5000282 query=”where occur_time>=’2013-12-1’ and occur_time<’2013-12-2’” file=yc_hs.dmp

3.2 逻辑还原

达梦的逻辑还原工具在还原过程中是以追加的方式插入数据的,一旦出现违反唯一性约束的数据,当前表的导入立刻停止。所以在导入的过程中建议先将原表删除。

1. 导入整个DMP文件

   ./impdb [userid]/[password]@mdb  file=out.dmp  log=imp.log                    

  1. 导入DMP文件中的部分表

   ./impdb [userid]/[password]@mdb  tables=[table1],…  file=out.dmp  log=imp.log    

该种导入方法要求使用的登录能够直接访问到tables参数后面的表。

例:./impdb d5000/d5000@mdb tables=substation file=out.dmp log=imp.log

  1. 导入DMP文件到异名数据库中

   ./impdb [userid]/[password]/[目的库]@mdb ignored=N file=out.dmp  log=imp.log    

例:将EMS库备份的文件导入到TEST数据库中

./impdb SYSDBA/SYSDBA/TEST@mdb ignoredb=n file=out.dmp log=imp.log

  1. 导入DMP文件到其他用户下

   ./impdb [userid]/[password]@mdb fromuser=user1 touser=user2 file=out.dmp  log=imp.log    

例:将EMS用户备份文件还原到SYSDBA用户下

./impdb SYSDBA/SYSDBA/EMS@mdb fromuser=EMS touser=SYSDBA file=out.dmp log=imp.log

达梦数据库代理作业设置

代理作业主要完成达梦的自动定时备份功能,下面以添加定时备份为例,介绍添加定时备份的过程。

1. 设置代理

(1)右击【代理】,选择【属性】

(3)设置作业步骤

设置定时删除备份,调用函数 SP_DEL_BAK_EXPIRED(‘EMS’,20);即删除20天前备份。

3. 设置作业调度

(1)选择调度

(2)单击【新建】,建立作业调度:

【调度类型】为反复执行,发生概率根据具体需求选择,每日频率,若执行一次选择具体执行时间。持续时间根据需求选择。

  (3)单击【确定】,建立成功。

6.单击【确定】,整个作业设置成功。

数据库维护

  • 单机库和阵列库的启动与停止

1.1关闭达梦数据库

正常关闭达梦数据库是非常重要的步骤,非正常的达梦数据库关闭可能导致数据文件损坏,从而导致达梦数据库无法再次启动。

关闭数据库需要使用root用户登录到数据库,此处分为单机库停止和阵列库停止。

1.单机库停止

进行停止数据库操作,停止数据库执行命令:

     /etc/rc.d/init.d/dmserverd stop                                             

脚本执行成功后会返回[OK],但是数据库并未完全停止,必须通过 ps –ef| grep dmserver查看达梦数据库进程是否存在来确认是否完全停止,通过上述命令,没有返回如下信息说明数据库停止成功:

kf1:/dmdb/dm/bin # ps -ef | grep dmserver

root  20557 1 2 13:03 pts/0 00:00:00  /dmdb/dm/bin/dmserver dm.ini –noconsole

2. 阵列库停止

由于阵列库中数据库资源是由操作系统HA软件来控制,此处也分为两个方面。

  1. 只重启数据库

此时操作同单机库,停止后会由HA软件自动启动数据库。

  1. 完全停止数据库

此时需要停止操作系统HA软件。停止HA时需要先停止备机节点HA,再停止主机节点HA。主备机可以通过查看/dbdata及/dbbak阵列目录挂载在的服务器确定,挂载了这两个阵列目录的服务器是主机。停止HA软件的命令为:

凝思:/etc/rc.d/init.d/openais stop

麒麟:/etc/rc.d/init.d/heartbeat stop

当返回[OK]时,说明停止成功。

1.2数据库启动

启动数据库需要使用root用户登录到数据库节点,分为单机启动和阵列库启动。

1.单机启动

执行:

           etc/rc.d/init.d/dmserverd start                                       

启动成功返回[OK]

但是数据库并未完全启动成功,通过查看数据库日志可以确定数据库是否启动完毕,数据库日志存储在/dmdb/dm/log,日志格式dm_[YYMM].log(如dm_201212.log):

           tail  –f  /dmdb/dm/log/dm_201212.log                              

出现如下信息说明数据库启动完毕:

           2012-12-14 10:37:01 database T00005792 check point end.                

2. 阵列库启动

在部署了阵列库后,数据库服务完全由操作系统HA软件来控制,如果只是重启数据库,在停止库后不需要做手动启动数据库的操作。但是如果是重启服务器后需要启动数据库服务,则只需确定HA软件已经启动即可,启动HA时先启动主机节点,待主机节点所有资源启动完毕,再启动备机节点。HA软件的启动方式:

凝思:/etc/rc.d/init.d/openais start

麒麟:/etc/rc.d/init.d/heartbeat start

HA软件启动成功返回[OK]。但是此时并未完全启动成功,可以通过crm_mon命令查看双机启动状态,如下状态说明数据库已经启动。

Online: [ his02 his01 ]
Resource Group: rsc-group
     rsc-vip-public     (ocf::heartbeat:IPaddr):  Started his02
     rsc-fso    (ocf::heartbeat:Filesystem):    Started his02
     rsc-fss    (ocf::heartbeat:Filesystem):    Started his02
     dmserver   (lsb:dmserverd):            Started his02
     rsc-dmdata (lsb:dmagentd):                       Started his02
 Clone Set: fencing [st-ssh]
     Started: [ his01  his02 ]
 Clone Set: rsc-clone-pingd [rsc-pingd]
     Started: [ his01  his02 ]

二、数据库无法连接问题定位

当数据库出现无法连接的情况时,通过如下的步骤确定数据库问题

2.1 排查是否是网络原因

ping 数据库vip地址(192.1.1.1)

ping 数据库实际地址db01(192.1.1.2)\db02(192.1.1.3)

如果vip无法ping通,db01和db02均无法ping通,有可能网络出现问题。如果db01和db02均可以ping通,有可能操作系统HA出现故障,进行操作系统HA排查,见下。

排查操作系统HA运行情况

使用root用户连接上数据库服务器db01或db02,执行crm_mon命令查看HA运行状态,如果HA正常运行,会返回如下消息:

Last updated: Mon May 13 18:55:03 2013

Stack: openais

Current DC: db02 - partition with quorum

Version: 1.1.4-ac608e3491c7dfc3b3e3c36d966ae9b016f77065

2 Nodes configured, 2 expected votes

3 Resources configured.

============

Online: [ db01 db02 ]

 Resource Group: rsc-group

     rsc-vip    (ocf::heartbeat:IPaddr):        Started db02

     rsc-filesystem     (ocf::heartbeat:Filesystem):    Started db02

     rsc-filesystem1    (ocf::heartbeat:Filesystem):    Started db02

     rsc-filesystem-bak (ocf::heartbeat:Filesystem):    Started db02

     rsc-dmserverd      (lsb:dmserverd):        Started db02

     rsc-dmagent        (lsb:dmagentd): Started db02

 Clone Set: fencing [st-ssh]

     Started: [ db02 db01 ]

 Clone Set: rsc-pingd-clone [rsc-pingd]

     Started: [ db02 db01 ]

其中:

Online表示在线运行的节点;

Resource Group: rsc-group下面各个资源后面的Started db02,表示主机运行所在服务器, Started表示资源正在运行,Failed表示检测到资源运行失败,Unmanaged表示资源处于托管状态,HA无法监控资源状态。

在遇到资源出现Unmanage状态时需要将HA重新停止,停止方法:

/etc/rc.d/init.d/openais stop (麒麟操作系统为/etc/rc.d/init.d/heartbeat stop)

返回OK,说明资源停止,通过df –h 命令查看/dbdata和/dbbak目录是否已经卸载。

在遇到资源出现Failed状态时,说明HA检测到资源异常,该类问题HA会自动处理,会将相应资源重启拉起,当然还存在启动多次认为Failed的问题,该类问题,在下面只会介绍当rsc-dmserverd服务出现异常的处理情况,其余的问题数据网络问题和阵列问题,这些问题很容易判断故障原因。

2.2 排查数据库是否可以连接

使用root用户登录到数据库服务器上,通过crm_mon命令查看数据库主机

Last updated: Mon May 13 18:55:03 2013

Stack: openais

Current DC: db02 - partition with quorum

Version: 1.1.4-ac608e3491c7dfc3b3e3c36d966ae9b016f77065

2 Nodes configured, 2 expected votes

3 Resources configured.

============

Online: [ db01 db02 ]

 Resource Group: rsc-group

     rsc-vip    (ocf::heartbeat:IPaddr):        Started db02

     rsc-filesystem     (ocf::heartbeat:Filesystem):    Started db02

     rsc-filesystem1    (ocf::heartbeat:Filesystem):    Started db02

     rsc-filesystem-bak (ocf::heartbeat:Filesystem):    Started db02

     rsc-dmserverd      (lsb:dmserverd):        Started db02

     rsc-dmagent        (lsb:dmagentd): Started db02

 Clone Set: fencing [st-ssh]

     Started: [ db02 db01 ]

 Clone Set: rsc-pingd-clone [rsc-pingd]

     Started: [ db02 db01 ]

其中红色部分说明主机运行在db02上,连接到db02,进入到/dmdb/dm/bin目录下,开始排查问题:

1)检查dmserver进程是否存在

db02:~ # ps -ef|grep dmserver

root   4919 25203  0 19:13 pts/0    00:00:00 grep dmserver

root  8974  1 58 Apr23 ?        11-13:20:07 /dmdb/dm/bin/dmserver dm.ini -noconsole

返回如上红色部分信息,说明达梦服务进程正在运行:

如果达梦进程不在,结合HA问题排查部分,确认出现问题的资源。

2)达梦进程存在,使用isql工具连接数据库,在/dmdb/dm/bin目录下执行:

db02:/dmdb/dm/bin # ./isql SYSDBA/SYSDBA@127.0.0.1

isql V6.0.2.79-Build(2013.04.11)

login success

SQL>

返回login success,说明数据库可以正常连接,并无异常,需要检查应用和网络方面故障。

返回login failed,说明数据库无法连接,使用如下命令查看数据库当前连接数:

db02:/dmdb/dm/bin # netstat -anp|grep 12345|wc -l

570

一区连接数不能超过500,三区连接数不能超过1000,如果超过这两个值,说明是由于应用建立的连接数超过数据库配置上限导致。需要排查存在连接泄露的应用程序。

3)在上步骤中,如果连接数据库没有异常,查看达梦数据库检查点日志,进入到/dmdb/dm/log目录下,达梦服务运行日志格式为dm_年月.log,该日志每个一分钟会进行一次日志记录,每一次的日志记录内容如下:

db02:/dmdb/dm/log # tail -f dm_201305.log

2013-05-13 19:23:17 database T      1169238336 check point set with type 1.

2013-05-13 19:23:17 database T      1113446720 check point start (1, 1, 20) ...

2013-05-13 19:23:17 database T      1113446720 redo log flush ...

      1. 19:23:17 database T      1113446720 system buffer flush ...

2013-05-13 19:23:18 database T      1113446720 check point end.

查看日志最前端日期,是否和系统当前日期接近,如果不接近,说明数据库检查点卡住。数据库检查点卡住,一般是有两方面的问题原因:

  1. 磁盘无法访问,此时检测下数据文件所在磁盘是否可以正常读写,以及测试下读写的速度。
  2. 数据库本身问题,如果磁盘没有问题,需要数据库来分析问题,此时为了尽快恢复系统,可以通过手动生成core文件先恢复系统,后期有数据库厂家分析core文件来确定问题原因。恢复系统过程如下。

此时需要重启数据库,为了分析数据库异常问题,此时需要生成一个core文件,协助分析问题,先获取dmserver的进程号,再杀掉服务,如下:

db02:/dmdb/dm/log # ps -ef|grep dmserver

root     8974   1 58 Apr23 ?  11-13:36:45 /dmdb/dm/bin/dmserver dm.ini -noconsole

root     20703 25203  0 19:37 pts/0    00:00:00 grep dmserver

db02:/dmdb/dm/log # kill -SIGSEGV 8974

Core文件生成完毕后,dmserver进程会退出,并由HA将达梦服务启动,数据库启动时,可以查看达梦服务日志,如dm_201305.log,启动时数据库会进行恢复检查,直至出现如下信息,数据库才恢复完毕:

2013-04-17 21:36:44 database T      2103912160  5

2013-04-17 21:36:44 database T      2103912160  6

2013-04-17 21:36:44 database T      2103912160  7

2013-04-17 21:36:44 database T      2103912160  8

2013-04-17 21:36:44 database T      2103912160  9

2013-04-17 21:36:44 database T      2103912160  10

2013-04-17 21:36:44 database T      2103912160 recovery db 13 end.

2013-04-17 21:38:16 database T      2103912160 rollback start...

2013-04-17 21:38:16 database T      2103912160 rollback end...

2013-04-17 21:38:18 database T      2103912160 check point set with type 17.

2013-04-17 21:38:18 database T      1116080448 check point start (17, 0, 100) ...

2013-04-17 21:38:18 database T      1116080448 redo log flush ...

2013-04-17 21:38:18 database T      1116080448 system buffer flush ...

2013-04-17 21:38:18 database T      1116080448 check point end.

三、数据库性能问题排查

数据库出现性能问题时,通常存在如下几方面问题:

  • 数据库整体运行慢
  • 部分SQL语句执行效率差

3.1 数据库整体响应慢问题排查

1. 排查硬件性能

如果数据库长时间出现响应慢的问题,有可能会是IO遇到瓶颈,可以通过操作系统top命令查看,查看wi%的使用大小。同时,可以使用io_test小程序进行简易测试,改程序位于达梦安装目录下tools目录下,使用方法:

./io_test 1 0 8192 /dbdata/testfiles

参数说明:

1: 一个线程

0:不停地写

8192: 每次顺序写的字节数

/dbdata/testfiles:目的文件

返回结果如下:

db01:/dmdb/dm/tools # ./io_test 1 0 8192 /dbdata/test20131213

delete file failed!

[Thread_0] running......

count start......

count end......

file offset in 10 s: 280.492188 MB [start at 0X118BE000, end at 0X2313C000]

一般阵列上10秒钟会写200MB以上,但是IP san的存储大概在100MB到200MB之间。

2. 排查数据库问题

root用户登录到数据库服务器上,查看dmserver进程的CPU,一般情况下,有一条执行耗时长的SQL,CPU使用率会上升100%(服务器多核,上限CPU个数*100%),如果CPU使用率很高说明存在执行速度慢的SQL。

查询执行性能差的语句:

使用SYSDBA登录到数据库中,执行如下SQL查询执行效率差的SQL:

Select cpu_time_call,login_name,app_name,sql_text from v$session where cpu_time_call>0;

其中:

Cpu_time_call:当前连接正在执行的SQL已经执行的时间,单位:毫秒

Login_name: 该连接的登录名

App_name:当前连接的程序名称

Sql_text:当前连接正在执行的SQL

根据查询出的结果集,确定出执行速度慢的SQL。

3.2 部分SQL语句执行效率差

数据库中出现部分语句执行效率慢的问题,需要针对具体的SQL语句进行优化,找出执行效率慢的语句的方法同上面的方法,查看v$session动态视图中cpu_time_call耗时长的语句。

有时,还会出现数据库中SQL语句执行正常,但是部分表无法全表查询的问题。该问题,一般是由于相关的表可能存在没有提交的事务,导致全表查询无法返回结果。针对此类问题可以通过如下的方法进行查询:

select  a.saddr,a.cpu_time_call,a.app_name,a.sql_text

from system.sysdba.v$session a,system.sysdba.v$lock b 

where a.trx_id=b.trx_id;

反复执行上述语句,如果结果集中相同内容长时间存在,就可能相关的数据表出现了未提交的事务。如果无法查到未提交的程序,可以选择使用dm_close_connect存储过程主动断开数据库连接,使用方法:

Select dm_close_connect(‘SADDR’);

其中的参数SADDR取自上述查询出来的SADDR字段。

一三区同步问题排查

一三区同步功能中,一区dmserver服务会将接收到的相关操作先记录入缓存文件中,缓存文件存储在/dbbak/asyn_send中,三区asyn_server进程接收一区发送的文件,三区缓存文件存放在/dbbak/asyn_recv中。当发现一三区同步不正常时,通过如下的方法检查:

  1. 查看一区/dbbak/asyn_send目录文件个数,正常情况下只会存在一个log文件
  2. 在一区登录到数据库中,执行如下SQL,查看一三区同步速度:

hd1103:/dmdb/dm/bin # LANG=zh_CN

hd1103:/dmdb/dm/bin # ./isql SYSDBA/SYSDBA

isql V6.0.2.79-Build(2012.12.18)

login success

SQL>SELECT ASYN_GET_FLOW(10);

SELECT ASYN_GET_FLOW(10);

        ASYN_GET_FLOW(10)

1       在10秒内读了7742464字节,平均每秒756K,    在10秒内写了7741440字节,平均每秒756K

1 rows got

返回的结果中,读的速度是向三区传输的速度,写的速度是在本地缓存的速度,理论上读的速度应该大于登录写的速度。

  1. 查看一区数据库系统日志/dmdb/dm/log/dm_201305.log(以年月结尾),如果出现信息:

can not connect asyn server(30.10.39.15:12343)

说明隔离装置不通,需要检查网络。

  1. 也可以在三区查看同步速度,在/dmdb/dm/bin目录下执行

./asyn_server enable_show_net_flow

执行完毕后,在/dmdb/dm/asyn_log/asyn_server_20130513.log目录中会记录如下信息:

hd3016:/dmdb/dm/asyn_log # tail -f asyn_server_20130513.log

2013-05-13 20:02:37 1159063872 10秒钟传输了695个数据包,共2389K(2.333750M)的数据,平均每秒238.9760K(0.233375M)

2013-05-13 20:02:47 1159063872 10秒钟传输了837个数据包,共7770K(7.588285M)的数据,平均每秒777.0404K(0.758829M)

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值