注册
达梦数据库实践指南:集群安装、常用sql
培训园地/ 文章详情 /

达梦数据库实践指南:集群安装、常用sql

輝。 2025/08/06 57 0 0

基础管理

服务管理

注册服务
./dm_service_installer.sh -t dmserver -p DMSERVER -dm_ini /dm/data/DAMENG/dm.ini
-t注册的服务类型	
-p注册的服务名后缀

附:

DM的建库命令
/dm/bin/dminit \
    path=/dm/data2 \
    db_name=TESTDB2 \
    log_size=256 \
    rlog_postfix_name=redo2 \
    sysdba_pwd=Dameng123 \
    sysauditor_pwd=Dameng123 \
    buffer=800

删除dm服务
/dm/script/root/dm_service_installer.sh -n 服务名

举例
./dm_service_uninstaller.sh -n DmServiceDMSERVER

服务名的查看可以由dmservice.sh看到或者

systemctl status DmServiceDMSERVER.service

可以通过命令查看服务的状态

systemctl status DmServiceDMSERVER.service

集群安装

环境变量的设置

export DM_HOME="/dm"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dm/bin"
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool

归档的管理

alter database mount;
alter database archivelog;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/dm/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=10240';

select arch_mode from v$database; 归档状态查询
select * from v$dm_arch_ini; 归档配置
select * from v$arch_status; 归档状态,主备集群数据同步会用到

select * from v$rlog_file;
select sf_archivelog_delete_before_time(sysdate-10);

在操作恢复时,归档日志正常应该包含联机日志redo,但在异常kill数据库进程时,有可能造成归档日志的丢失,需要在还原之前做归档的修复

备份还原

备份
dmrman
disql sysdba/Dameng123
shutdown immediate;
backup database '/dm/data/DAMENG/dm.ini'  backupset '/dm/backup/fullbak';

还原
1.
restore database to '/dm/data/DAMENG' from backupset '/dm/backup/fullbak';
restore database to '/dm/data/DAMENG/dm.ini' from backupset '/dm/backup/fullbak';
restore database to '/dm/data/DAMENG/dm.ini' overwrite from backupset '/dm/backup/fullbak'; --如果原先存在则覆盖

2.冷备的话可以不用做修复
repair archivelog database '/dm/data/DAMENG/dm.ini';

3.
recover database '/dm/data/DAMENG/dm.ini' update db_magic;



报错
1.数据库没有关
RMAN> backup database '/dm/data/DAMENG/dm.ini'  backupset '/dm/backup/fullbak';
backup database '/dm/data/DAMENG/dm.ini' backupset '/dm/backup/fullbak';
file dm.key not found, use default license!
==============================Error Stack==============================
RMAN-137:服务器正在运行或者存在其他进程正在操作同一个库

du -sh * | sort -hr

systemctl stop DmServiceDMSERVER.service

清理原先的环境

[root@localhost data]# pwd
/dm/data
[root@localhost data]# rm -rf DAMENG/

配置文件的准备

样本文件的目录
/dm/samples/ini_script/UTF-8

搭建步骤
1、主机环境准备好,配置好 dm.ini、dmmal.ini、dmarch.ini、dmwatcher.ini
dm.ini 中需要开启归档和 MAL:

ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID 
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
INSTANCE_NAME=DM01	

1.dmmal.ini

mal.ini 配置(主备配置相同):
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
 MAL_INST_NAME = DM01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
 MAL_HOST = 192.168.75.128 #MAL 系统监听 TCP 连接的 IP 地址
 MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口   MAL系统监听TCP连接的端口
# MAL_INST_HOST = 192.168.88.2 #实例的对外服务 IP 地址
 MAL_INST_PORT = 5236 # 实 例 的 对 外 服 务 端 口 , 和 dm.ini 中 的PORT_NUM 一致
 MAL_DW_PORT = 5240 #实例本地的守护进程监听 TCP 连接的端口
 MAL_INST_DW_PORT= 5238 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
 MAL_INST_NAME = DM02
 MAL_HOST = 192.168.75.129
 MAL_PORT = 5337
# MAL_INST_HOST = 192.168.75.3
 MAL_INST_PORT = 5237
 MAL_DW_PORT = 5240
 MAL_INST_DW_PORT= 5238

注意点:
1.从库修改dm.ini的实例名和端口

2.dmarch.ini

dmarch.ini 主备的归档配置不同,其他都相同
[ARCHIVE_REALTIME] 
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DM02 #实时归档目标实例名(主机和备份配置不同,配置向备机同步)
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~4294967294M

注意点:
1.在备库上这个参数要改成ARCH_DEST=DM01 

3.dmwatcher.ini

[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 888888 #守护系统唯一 OGUID 值(这里要和数据库的 OGUID一致,OGUID 是写入控制文件的)
INST_INI = /dm/data/DAMENG/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

scp dm.ini dmmal.ini dmarch.ini dmwatcher.ini dmdba@192.168.75.129:/dm/data/DAMENG
scp -r /dm/backup/fullbak dmdba@192.168.75.129:/dm/backup
scp -r dmmonitor.ini dmmonitor_confirm.ini dmdba@192.168.75.129:~

启动

1.从库
disql sysdba/Dameng123:5237
dmserver dm.ini mount如果误操作只能删除  主库也需要到mount的状态
2.更改主库的状态和配置文件中的这个值相同INST_OGUID
sp_set_oguid(888888);
alter database primary;
3.更改从库的操作
sp_set_oguid(888888);
alter database standby;
4.通过守护启动数据库
dmwatcher /dm/data/DAMENG/dmwatcher.ini

关闭

如果使用手动方式关闭数据守护系统,请严格按照以下顺序执行:
1. 如果启动了确认监视器,先关闭确认监视器(防止自动接管)
2. 关闭备库守护进程(防止重启实例)
3. 关闭主库守护进程(防止重启实例)
4. Shutdown 主库
5. Shutdown 备库

相关命令

show查看守护的状态

监视器的部署

dmmonitor.ini

MON_DW_CONFIRM = 1   #为1代表确认监视器,可以后台启动,为0
MON_LOG_PATH = /dm/dmmonitor/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[GRP1]    
MON_INST_OGUID = 888888
MON_DW_IP = 192.168.75.128:5240
MON_DW_IP = 192.168.75.129:5240


gpr1这个名称要和数据守护的名称一致

dmmonitor /home/dmdba/dmmonitor.ini

注册相关服务

/dm/script/root/dm_service_installer.sh -t dmserver -p DM02 -dm_ini /dm/data/DAMENG/dm.ini
/dm/script/root/dm_service_installer.sh -t dmwatcher -p DM02 -watcher_ini /dm/data/DAMENG/dmwatcher.ini
/dm/script/root/dm_service_installer.sh -t dmmonitor -p DMMON -monitor_ini /home/dmdba/dmmonitor_confirm.ini

/dm/script/root/dm_service_installer.sh -t dmserver -p DM01 -dm_ini /dm/data/DAMENG/dm.ini
/dm/script/root/dm_service_installer.sh -t dmwatcher -p DM01 -watcher_ini /dm/data/DAMENG/dmwatcher.ini


卸载
/dm/script/root/dm_service_uninstaller.sh -n DmServiceDM01
/dm/script/root/dm_service_uninstaller.sh -n DmServiceDM01

/dm/script/root/dm_service_uninstaller.sh -n DmMonitorServiceDMMON

systemctl start DmServiceDM02
systemctl start DmWatcherServiceDM02
systemctl start DmMonitorServiceDMMON

常用sql

已执行超过2秒的活动SQL

select * from (
SELECT sess_id,sql_text,datediff(ss,last_send_time,sysdate) Y_EXETIME,SF_GET_SESSION_SQL(SESS_ID) fullsql,clnt_ip
 FROM V$SESSIONS WHERE STATE='ACTIVE')
 where Y_EXETIME>=2;

锁查询

select o.name,l.* from v$lock l,sysobjects o where l.table_id=o.id and blocked=1;

阻塞查询

--阻塞查询
with locks as(
  select o.name,l.*,s.sess_id,s.sql_text,s.clnt_ip,s.last_send_time  from v$lock l,sysobjects o,v$sessions s
  where l.table_id=o.id and l.trx_id=s.trx_id ),
 lock_tr as (   select trx_id wt_trxid,row_idx blk_trxid from locks where blocked=1),
 res as(    select sysdate stattime,t1.name,t1.sess_id wt_sessid,s.wt_trxid,
     t2.sess_id blk_sessid,s.blk_trxid,t2.clnt_ip,SF_GET_SESSION_SQL(t1.sess_id) fulsql,
     datediff(ss,t1.last_send_time,sysdate) ss,t1.sql_text wt_sql  from lock_tr s,locks t1,locks t2
    where t1.ltype='OBJECT'  and t1.table_id<>0   and t2.ltype='OBJECT'  and t2.table_id<>0
     and s.wt_trxid=t1.trx_id  and s.blk_trxid=t2.trx_id)
select distinct wt_sql,clnt_ip,ss,wt_trxid,blk_trxid  from res;

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服