达梦数据库操作手册

更新时间:2024-06-06 02:52:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

达梦数据库操作手册

2013年12月15日

达梦数据库安装

一、 服务器安装 1.1 数据库安装注意问题

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

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

1.2 安装步骤

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. 修改系统管理员密码,此处不需要修改

1.3 清除数据库访问

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

isql登录数据库: ./isqlSYSDBA/SYSDBA@127.0.0.1

执行查询:

select * from v$session;

该查询会返回当前数据库中的连接信息,包含登录用户、登录的IP地址等信息,通过

这些信息可以先关闭相应的连接再进行数据库脱机操作。

在某些情况下,可能不方便关闭所有的连接,此时我们可以通过修改数据库的访问端口

号来拒绝应用对数据库的访问。修改达梦安装目录下bin/dm.ini文件,其中的PORT_NUM为数据库端口号,修改为其他值即可,如22345,重启数据库后参数生效。但是需要注意,此时访问数据库的端口后也要使用修改后的值,例如,使用isql登录数据库命令如下: ./isqlSYSDBA/SYSDBA@127.0.0.1:22345

二、 物理备份数据库 2.1.通过isql进行数据库备份

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

./isqlSYSDBA/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 FULL TO EMS_BAK1 ;

2.2.使用达梦客户端备份

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

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

三、 逻辑备份与还原数据库

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

3.1 逻辑备份工具

1. 导出单张表或多张表

./expdb[userid]/[password]@mdbtables=[table1],… file=out.dmplog=out.log 该工具到userid用户默认的数据库中去查找需要备份的表,如果涉及到跨数据库查找,需要在密码后面再添加数据库名。

./expdb[userid]/[password]/[dbname]@mdbtables=[table1],…file=out.dmplog=out.log 例:./expdb d5000/d5000@mdb tables=substation,breaker file=out.dmp 2. 导出一个用户

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

例:./expdb SYSDBA/SYSDBA/EMS@mdb owner=EMS file=out.dmp log=out.log 3. 导出整个数据库

./expdb [userid]/[password]/[dbname]@mdbfile=out.dmplog=out.log 例:./expdb SYSDBA/SYSDBA/EMS@mdb file=out.dmp log=out.log 4. 导出表结构

./expdb[userid]/[password]/[dbname]@mdbrows=n file=out.dmp log=out.log 例:./expdb SYSDBA/SYSDBA/EMS@mdb rows=n file=out.dmp log=out.log 5. 导出一张表的部分内容

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.dmplog=imp.log

2. 导入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 3. 导入DMP文件到异名数据库中

./impdb [userid]/[password]/[目的库]@mdbignored=N file=out.dmp log=imp.log 例:将EMS库备份的文件导入到TEST数据库中

./impdb SYSDBA/SYSDBA/TEST@mdbignoredb=n file=out.dmp log=imp.log 4. 导入DMP文件到其他用户下

./impdb [userid]/[password]@mdbfromuser=user1 touser=user2 file=out.dmp log=imp.log 例:将EMS用户备份文件还原到SYSDBA用户下 ./impdb SYSDBA/SYSDBA/EMS@mdbfromuser=EMS log=imp.log

touser=SYSDBA

file=out.dmp

达梦数据库代理作业设置

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

1. 设置代理

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

(2)设置代理属性。其中【STMP服务器】和【Email地址】可随便填写,如果想在备份任务完成后得到通知可以写自己email地址,但所有选项不能为空,其中密码为SYSDBA用户密码,默认为SYSDBA。

(3) 刷性【代理】节点,显示出作业、警报、操作员等信息说明新建成功。

2. 设置作业

(1)右击作业,选择【新建作业】

(2)填写【作业名】

(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| grepdmserver查看达梦数据库进程是否存在来确认是否完全停止,通过上述命令,没有返回如下信息说明数据库停止成功:

kf1:/dmdb/dm/bin # ps -ef | grepdmserver

root 20557 1 2 13:03 pts/0 00:00:00 /dmdb/dm/bin/dmserver dm.ini –noconsole 2.阵列库停止

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

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

此时需要停止操作系统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: [ db01db02 ] 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: [ db02db01 ] Clone Set: rsc-pingd-clone [rsc-pingd] Started: [ db02db01 ] 其中:

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|grepdmserver root 4919 25203 0 19:13 pts/0 00:00:00 grepdmserver root 89741 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 ... 2013-05-13 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|grepdmserver root8974 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 grepdmserver 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语句执行正常,但是部分表无法全表查询的问题。该问题,一般是由于相关的表可能存在没有提交的事务,导致全表查询无法返回结果。针对此类问题可以通过如下的方法进行查询:

selecta.saddr,a.cpu_time_call,a.app_name,a.sql_text fromsystem.sysdba.v$sessiona,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中。当发现一三区同步不正常时,通过如下的方法检查:

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) 说明隔离装置不通,需要检查网络。

2. 也可以在三区查看同步速度,在/dmdb/dm/bin目录下执行 ./asyn_serverenable_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)

本文来源:https://www.bwwdw.com/article/t9d6.html

Top