对于 DM8 数据库运维人员而言,日常工作常面临系统状态核查、故障应急响应、数据精准提取等多重需求,而高频 SQL 正是应对这些场景的 “核心利器”。本文总结了 DM8 运维中使用高频率的 SQL 语句,并解析其功能价值。掌握这些实用SQL,可助力运维人员,快速获取目标信息,应对基础的运维挑战,显著提升工作效率与应急处置能力。
select * from v$version;
在日常运维中,需要记录好数据库版本信息,以便于维护和管理。
select * from v$database; --数据库名
select * from v$instance; --实例名
在多实例或者集群中,通过实例名和数据库名快速判断数据库信息。
SELECT a.tablespace_name,
round(total/(1024*1024),2) Total_M,
round(free/(1024*1024),2) Free_M,
round((total - free)/(1024*1024),2) Used_M,
round((total - free)/total, 4)*100 "Used_%"
FROM
(SELECT tablespace_name,SUM(bytes) free FROM dba_free_space GROUP BY tablespace_name) a,
(SELECT tablespace_name,SUM(bytes) total,MAXBYTES FROM dba_data_files GROUP BY tablespace_name,MAXBYTES) b
WHERE a.tablespace_name = b.tablespace_name
order by 5 desc;
在日常运维中,定期检查表空间的使用率能有效避免空间不足带来的问题。
SELECT
OWNER AS "模式名",
SEGMENT_NAME AS "对象名",
SEGMENT_TYPE AS "对象类型",
TABLESPACE_NAME AS "表空间",
ROUND(BYTES / 1024 / 1024, 2) AS "大小(MB)" -- 转换为MB并保留两位小数
FROM DBA_SEGMENTS
ORDER BY "大小(MB)" DESC;
在日常运维中,查看对象大小有助于判断是否需要对大表进行转储或者瘦身。
select * from v$option;
通过该命令可以查看到数据库的一些基本信息,如实例名、IP、是否大小写、字符集等。
select * from v$license;
需要关注EXPIRED_DATE(过期时间)的值,在过期前需要联系达梦工程师更换许可。
SELECT
SESS_ID AS "会话ID",
USER_NAME AS "登录用户",
CLNT_IP AS "客户端机器名",
CLNT_TYPE AS "客户端程序",
STATE AS "会话状态",
CREATE_TIME AS "登录时间",
SQL_TEXT AS "执行的SQL"
FROM V$SESSIONS
ORDER BY CREATE_TIME DESC;
在日常运维中,可以通过监控工具和数据库命令定期检查连接情况,有助于了解数据的负载情况并对数据库优化提供方向。
SQL> show parameter buffer;
SQL> select * from V$parameter where name ='BUFFER';
SQL> select * from v$dm_ini where PARA_NAME='BUFFER';
SQL> SF_GET_PARA_VALUE(2,'COMPATIBLE_MODE');
达梦数据库提供了多个方式查看参数的当前值。
select * from v$lock where blocked=1;
在日常生产中,有阻塞会造成资源的占用,需要排查并解决。
SELECT * FROM
(
SELECT
sess_id,
sql_text,
datediff (ss, last_recv_time, SYSDATE) Y_EXETIME,
SF_GET_SESSION_SQL (SESS_ID) fullsql,
clnt_ip
FROM
V$SESSIONS
WHERE
STATE = 'ACTIVE'
)
WHERE Y_EXETIME >= 2;
通过命令可以查看运行时间大于2s的会话,可以按照实际情况修改时间,用于判断数据库是否存在慢SQL。
sp_close_session(326322120);
select * from DBA_SYS_PRIVS where GRANTEE='TEST_JOB';
select * from DBA_TAB_PRIVS where GRANTEE='TEST_JOB';
select * from DBA_ROLE_PRIVS where GRANTEE='TEST_JOB';
在日常运维中通过查看用户的系统权限、对象权限和角色权限,方便管理用户,达到用户权限最小化。
SELECT
M.CREATOR ,
S.USER_NAME,
S.SQL_TEXT ,
S.CUR_SQLSTR,
M.NAME MEM_NAME ,
M.TOTAL_SIZE/1024/1024 TOTAL_M,
M.DATA_SIZE /1024/1024 DATA_SIZE_M,
S.STATE,
S.CLNT_IP,
S.CLNT_VER,
S.CLNT_HOST,
S.APPNAME,
S.OSNAME,
S.RUN_STATUS,
S.MSG_STATUS,
S.CREATE_TIME,
S.LAST_RECV_TIME,
S.LAST_SEND_TIME,
DATEDIFF(S, LAST_RECV_TIME, SYSDATE) EXECTIME_S,
SYSDATE() INS_SYSDATE
FROM
V$MEM_POOL M,
V$SESSIONS S
WHERE
M.CREATOR = S.THRD_ID
ORDER BY TOTAL_M DESC;
在日常运维中,使用内存太大的SQL需要考虑优化,避免SQL在执行过程中占用大量系统资源。
alter database mount;
alter database archivelog;
alter database add archivelog 'dest=/dmarch ,TYPE=local,FILE_SIZE=2048,SPACE_LIMIT=102400';
alter database open;
数据库归档是备份的基础,建议磁盘空间充足的开启归档。
select * from V$ARCH_STATUS;
16. 设置某个参数的值
alter system set'BUFFER'=500 spfile;
or
sp_set_para_value(2,'BUFFER',500);
达梦数据库提供了多种修改数据参数的方式
SELECT OBJNAME AS OBJNAME,
OBJTYPE AS OBJTYPE,
TO_CHAR(FRAGPCT) AS FRAGPCT
FROM (SELECT *
FROM (SELECT OWNER||'.'||INDEX_NAME AS OBJNAME,
'INDEX/INDEX PART' AS OBJTYPE,
ROUND(100.0*(1-INDEX_USED_PAGES(OWNER,INDEX_NAME)/1.0/INDEX_USED_SPACE(OWNER,INDEX_NAME)),2) FRAGPCT
FROM DBA_INDEXES
WHERE TABLESPACE_NAME NOT IN ('TEMP',
'ROLL',
'SYSTEM')
AND OWNER NOT IN ('SYS',
'SYSAUDITOR',
'SYSSSO',
'SYSJOB',
'SCHEDULER')
AND TEMPORARY='N'
AND INDEX_TYPE != 'CLUSTER'
AND INDEX_USED_SPACE(OWNER,INDEX_NAME)>(SELECT SUM(TOTAL_SIZE)* 0.0001 FROM V$DATAFILE)
ORDER BY INDEX_USED_SPACE(OWNER,INDEX_NAME) DESC)
ORDER BY FRAGPCT DESC LIMIT 10);
在日常运维中,需要关注索引的碎片情况,防止碎片率过高影响索引的效率
SP_REBUILD_INDEX('SYSDBA', 123456);
SYSDBA为模式名字,123456为索引id
在日常运维中,可以使用重建索引来对索引的数据进行重组,使数据更加紧凑,并释放不需要的空间,从而提高访问效率和空间效率。
全库备份:
sql> backup database full backupset '/data/dmbak/';
bash> dmrman
1、数据库还原:restore database '/data/dmdata/DAMENG/dm.ini' from backupset '/data/dmbak/full_bak';
2、数据库恢复:
从归档:recover database '/data/dmdata/DAMENG/dm.ini' with archivedir '/data/dmarch';
or
从备份集:RECOVER DATABASE '/data/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/data/dmbak/full_bak'; --首选
3、更新:recover database '/data/dmdata/DAMENG/dm.ini' update db_magic;
在生产过程中,可能需要用到一些生产数据或者优化SQL,直接在生产环境上操作风险太高,可选通过快速备份然后还原到测试环境在进行操作
在日常运维中,SQL优化、资源监控、锁检查、表瘦身、用户权限管理等工作尤为常见,需要熟悉这些操作的相关命令,便于应对日常运维的突发情况。
文章
阅读量
获赞
