达梦数据库操作手册
12月15日
达梦数据库安装
服务器安装数据库安装注意问题数据库的安装路径不要直接放在操作系统的/目录相同的磁盘上,可以安装在/dmdb/dm,但是/dmdb要单独挂载在一块硬盘上。
根据业务需要及数据量,数据文件放在磁盘空间较大的分区下。
安装步骤
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所在位置
方括号内为key文件所在位置默认路径,回车选择默认路径。
3.选择安装类型
选择Typical,输入1。
4. 选择安装路径
例如,将达梦安装在/dmdb/dm,输入路径。
5.确认安装路径
输入Y(或y)。
6. 选择初始化数据库
输入Y(或y)确定初始化数据库。
7. 选择不安装实例数据库
输入N。
8. 选择数据文件路径
例如,数据文件路径设置为/dbdata/dmdata,输入路径。
9. 确认数据文件路径
输入Y
10. 修改初始化数据库参数
选择Y,对数据库参数进行修改。参数设置为大小写敏感,页大小32K,簇大小16页,空串(‘’)按NULL处理,修改参数如下(红色字体为输入):
11. 选择不修改管理员、审计员密码
12. 确认安装
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. 建立数据库、登录和用户
CREATEDATABASEEMSDATAFILE'EMS.dbf'SIZE128;
CREATELOGINd5000IDENTIFIEDBY"d5000"DEFAULTDATABASEEMS;
CREATELOGINexpmanIDENTIFIEDBY"technari"DEFAULTDATABASEEMS;
CREATEDATABASEHISDBDATAFILE'HISDB.dbf'SIZE128;
CREATELOGINalarmIDENTIFIEDBYALARMDEFAULTDATABASEHISDB;
CREATELOGINhisdbIDENTIFIEDBYHISDBDEFAULTDATABASEHISDB;
CREATELOGINsysconfigIDENTIFIEDBYSYSCONFIGDEFAULTDATABASEHISDB;
CREATELOGINcontextIDENTIFIEDBYCONTEXTDEFAULTDATABASEHISDB;
CREATELOGINrtdbIDENTIFIEDBYRTDBDEFAULTDATABASEHISDB;
CREATELOGINhisreportIDENTIFIEDBYHISREPORTDEFAULTDATABASEHISDB;
CREATELOGINstaticsIDENTIFIEDBYSTATICSDEFAULTDATABASEHISDB;
CREATELOGINYXFXIDENTIFIEDBYYXFXDEFAULTDATABASEHISDB;
SetcurrentdatabaseEMS;
CREATEUSEREMS;
GRANTDBATOEMS;
CREATEUSERexpman;
GRANTDBATOexpman;
CREATEUSERHISDB;
GRANTDBATOHISDB;
CREATEUSERSTATICS;
GRANTDBATOSTATICS;
ALTERUSEREMS.emsRELATEDBYd5000;
ALTERUSEREMS.expmanRELATEDBYexpman;
ALTERUSEREMS.hisdbRELATEDBYhisdb;
ALTERUSEREMS.staticsRELATEDBYstatics;
SetcurrentdatabaseHISDB;
CREATEUSERalarm;
GRANTDBATOalarm;
CREATEUSERhisdb;
GRANTDBATOhisdb;
CREATEUSERsysconfig;
GRANTDBATOsysconfig;
CREATEUSERcontext;
GRANTDBATOcontext;
CREATEUSERrtdb;
GRANTDBATOrtdb;
CREATEUSERhisreport;
GRANTDBATOhisreport;
CREATEUSERstatics;
GRANTDBATOstatics;
CREATEUSERYXFX;
GRANTDBATOYXFX;
ALTERUSERHISDB.alarmRELATEDBYALARM;
ALTERUSERHISDB.hisdbRELATEDBYHISDB;
ALTERUSERHISDB.sysconfigRELATEDBYSYSCONFIG;
ALTERUSERHISDB.contextRELATEDBYCONTEXT;
ALTERUSERHISDB.rtdbRELATEDBYRTDB;
ALTERUSERHISDB.hisreportRELATEDBYHISREPORT;
ALTERUSERHISDB.staticsRELATEDBYSTATICS;
ALTERUSERHISDB.YXFXRELATEDBYYXFX;
2. 使用脚本建立数据库,或者使用备份文件还原数据库
使用物理bak文件还原数据库的方法详见-> 物理还原数据库部分,使用逻辑备份DMP文件还原数据库详见 -> 逻辑还原数据库部分。
达梦数据库备份还原
物理还原数据库物理还原,即使用物理备份BAK文件还原数据库,还原到的目的数据库的建库参数要和原始数据库一致,包括页大小、簇大小、大小写敏感。
还原数据库时,要求当前对该数据库没有连接访问,可以通过关闭所有应用,或者修改达梦的端口号来实现,具体参见1.3节。
使用SQL语句还原以系统管理员用户登录数据库
./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;
使用达梦客户端还原
使用客户端进行还原,同样使用上面的方式进行还原,只是操作简单。
以SYSDBA登录到数据库后,脱机要还原的数据库
成功脱机会弹出提示信息,如果报错“当前对象被占用”, 按照1.3中的方法确认数据库是否有连接访问。
还原数据库选择备份文件还原完成后会给出提示信息进行数据库联机清除数据库访问
当数据库在脱机时,如果报错“当前对象被占用”,说明当前数据库连接中存在联机正在访问所要还原的数据库,通过以下方式查找相关数据库连接:
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进行数据库备份
以系统管理员用户登录数据库./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 DATABASEEMS FULLTOEMS_BAK1 ;
2.2.使用达梦客户端备份
1. 以SYSDBA登录数据库,在需要备份的数据库上右击->备份
2. 填写备份名称及选择备份类型
逻辑备份与还原数据库
达梦数据库的逻辑备份还原工具用于
3.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
导出一个用户
./expdb [userid]/[password]@mdb owner=[username] file=out.dmp
例:./expdb SYSDBA/SYSDBA/EMS@mdb owner=EMS file=out.dmp log=out.log
导出整个数据库
./expdb [userid]/[password]/[dbname]@mdb file=out.dmp log=out.log
例:./expdb SYSDBA/SYSDBA/EMS@mdb file=out.dmp log=out.log
导出表结构
./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
导出一张表的部分内容
DM6在6月份的版本之后提供了备份一张表中部分内容的功能,即expdb工具支持了query参数,通过该参数可以按照一定的条件导出部分数据,如下:
导出一天的历史采样数据:
./expdb HISDB/HISDB@his tables=yc_hs_500281,yc_hs_5000282 query=”where occur_time>=’-12-1’and occur_time<’-12-2’”file=yc_hs.dmp
3.2 逻辑还原
达梦的逻辑还原工具在还原过程中是以追加的方式插入数据的,一旦出现违反唯一性约束的数据,当前表的导入立刻停止。所以在导入的过程中建议先将原表删除。
1. 导入整个DMP文件
./impdb [userid]/[password]@mdb file=out.dmp log=imp.log
导入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
导入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
导入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查看达梦数据库进程是否存在来确认是否完全停止,通过上述命令,没有返回如下信息说明数据库停止成功:
2. 阵列库停止
由于阵列库中数据库资源是由操作系统HA软件来控制,此处也分为两个方面。
只重启数据库
此时操作同单机库,停止后会由HA软件自动启动数据库。
完全停止数据库
此时需要停止操作系统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_12.log):
tail –f /dmdb/dm/log/dm_12.log
出现如下信息说明数据库启动完毕:
-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命令查看双机启动状态,如下状态说明数据库已经启动。
二、数据库无法连接问题定位
当数据库出现无法连接的情况时,通过如下的步骤确定数据库问题
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正常运行,会返回如下消息:
其中:
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命令查看数据库主机
其中红色部分说明主机运行在db02上,连接到db02,进入到/dmdb/dm/bin目录下,开始排查问题:
1)检查dmserver进程是否存在
返回如上红色部分信息,说明达梦服务进程正在运行:
如果达梦进程不在,结合HA问题排查部分,确认出现问题的资源。
2)达梦进程存在,使用isql工具连接数据库,在/dmdb/dm/bin目录下执行:
返回login success,说明数据库可以正常连接,并无异常,需要检查应用和网络方面故障。
返回login failed,说明数据库无法连接,使用如下命令查看数据库当前连接数:
一区连接数不能超过500,三区连接数不能超过1000,如果超过这两个值,说明是由于应用建立的连接数超过数据库配置上限导致。需要排查存在连接泄露的应用程序。
3)在上步骤中,如果连接数据库没有异常,查看达梦数据库检查点日志,进入到/dmdb/dm/log目录下,达梦服务运行日志格式为dm_年月.log,该日志每个一分钟会进行一次日志记录,每一次的日志记录内容如下:
查看日志最前端日期,是否和系统当前日期接近,如果不接近,说明数据库检查点卡住。数据库检查点卡住,一般是有两方面的问题原因:
磁盘无法访问,此时检测下数据文件所在磁盘是否可以正常读写,以及测试下读写的速度。数据库本身问题,如果磁盘没有问题,需要数据库来分析问题,此时为了尽快恢复系统,可以通过手动生成core文件先恢复系统,后期有数据库厂家分析core文件来确定问题原因。恢复系统过程如下。
此时需要重启数据库,为了分析数据库异常问题,此时需要生成一个core文件,协助分析问题,先获取dmserver的进程号,再杀掉服务,如下:
Core文件生成完毕后,dmserver进程会退出,并由HA将达梦服务启动,数据库启动时,可以查看达梦服务日志,如dm_05.log,启动时数据库会进行恢复检查,直至出现如下信息,数据库才恢复完毕:
三、数据库性能问题排查
数据库出现性能问题时,通常存在如下几方面问题:
数据库整体运行慢部分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/test1213
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语句执行正常,但是部分表无法全表查询的问题。该问题,一般是由于相关的表可能存在没有提交的事务,导致全表查询无法返回结果。针对此类问题可以通过如下的方法进行查询:
selecta.saddr,a.cpu_time_call,a.app_name,a.sql_text
fromsystem.sysdba.v$session a,system.sysdba.v$lock b
wherea.trx_id=b.trx_id;
反复执行上述语句,如果结果集中相同内容长时间存在,就可能相关的数据表出现了未提交的事务。如果无法查到未提交的程序,可以选择使用dm_close_connect存储过程主动断开数据库连接,使用方法:
Select dm_close_connect(‘SADDR’);
其中的参数SADDR取自上述查询出来的SADDR字段。
一三区同步问题排查
一三区同步功能中,一区dmserver服务会将接收到的相关操作先记录入缓存文件中,缓存文件存储在/dbbak/asyn_send中,三区asyn_server进程接收一区发送的文件,三区缓存文件存放在/dbbak/asyn_recv中。当发现一三区同步不正常时,通过如下的方法检查:
查看一区/dbbak/asyn_send目录文件个数,正常情况下只会存在一个log文件在一区登录到数据库中,执行如下SQL,查看一三区同步速度:
返回的结果中,读的速度是向三区传输的速度,写的速度是在本地缓存的速度,理论上读的速度应该大于登录写的速度。
查看一区数据库系统日志/dmdb/dm/log/dm_05.log(以年月结尾),如果出现信息:
说明隔离装置不通,需要检查网络。
也可以在三区查看同步速度,在/dmdb/dm/bin目录下执行
./asyn_server enable_show_net_flow
执行完毕后,在/dmdb/dm/asyn_log/asyn_server_0513.log目录中会记录如下信息: