目录
5:达梦数据库查看各个模式下表、视图、触发器、索引等信息数量
1、达梦基础运维SQL
1:达梦版本信息和授权信息
sql
SELECT * FROM v$version; -- DM7
SELECT id_code(); -- DM7,--DM8
SELECT * FROM V$LICENSE; --授权信息


2:数据库实例信息和参数信息
sql
-- 达梦数据库实例参数
SELECT '实例名称' AS 选项, INSTANCE_NAME AS 值 FROM V$INSTANCE
SELECT '字符集',
CASE SF_GET_UNICODE_FLAG()
WHEN '0' THEN 'GB18030'
WHEN '1' THEN 'UTF-8'
WHEN '2' THEN 'EUC-KR'
ELSE 'UNKNOWN'
END
UNION ALL
SELECT '页大小(单位:KB)', CAST(PAGE() / 1024 AS VARCHAR)
UNION ALL
SELECT '簇大小(单位:页数)', CAST(SF_GET_EXTENT_SIZE() AS VARCHAR)
UNION ALL
SELECT '大小写敏感',
CASE SF_GET_CASE_SENSITIVE_FLAG()
WHEN 1 THEN '是'
ELSE '否'
END;
--达梦数据库配置文件参数
SELECT PARA_NAME,PARA_VALUE FROM V$DM_INI;

2、达梦中级运维SQL
1:查看达梦数据库表空间
sql
--查看达梦数据库表空间
SELECT T.NAME AS TABLESPACE_NAME, F.PATH AS FILE_PATH
FROM V$TABLESPACE T, V$DATAFILE F
WHERE T.ID = F.GROUP_ID;
2:查看达梦数据库用户信息
sql
-- 查看所有用户的账户状态和默认表空间
SELECT USERNAME, ACCOUNT_STATUS, DEFAULT_TABLESPACE, CREATED
FROM DBA_USERS;
3:查看达梦数据库模式信息及其拥有者
sql
-- 查看模式和用户归属关系
SELECT SCH_OBJ.NAME AS SCHEMA_NAME,
USER_OBJ.NAME AS OWNER_NAME
FROM (SELECT NAME, PID FROM SYS.SYSOBJECTS WHERE TYPE$='SCH') SCH_OBJ,
(SELECT NAME, ID FROM SYS.SYSOBJECTS WHERE TYPE$='UR' AND SUBTYPE$='USER') USER_OBJ
WHERE SCH_OBJ.PID = USER_OBJ.ID
ORDER BY SCH_OBJ.NAME;
4:查看达梦数据库表结构
sql
-- DISQL中查看
DESC [schema_name.]table_name;
-- SP_TABLEDEF系统过程查看
CALL SP_TABLEDEF('schema_name', 'table_name');
-- DBMS_METADATA.GET_DDL系统包查看
SELECT DBMS_METADATA.GET_DDL('TABLE', 'table_name', 'schema_name') FROM DUAL;
5:达梦数据库查看各个模式下表、视图、触发器、索引等信息数量
sql
-- 查看各个模式下表、视图、触发器、索引等信息数量
SELECT
OWNER 模式名,
OBJECT_TYPE 对象类型,
COUNT(*) 数量
FROM
DBA_OBJECTS
WHERE
OWNER IN ('MMIS_INNOVATION', 'MMIS_HD', 'SENYI', 'WANGHAI', 'GK_INNOVATION', 'SCM_INNOVATION')
GROUP BY
OWNER, OBJECT_TYPE
ORDER BY
OWNER, OBJECT_TYPE;
6:达梦数据库查看会话
sql
--查看数据库会话
SELECT * FROM V$SESSIONS;
7:达梦数据库查看阻塞
sql
--查看数据库阻塞
select id,wait_for_id,wait_time,thrd_id from v$trxwait;
8:达梦数据库查看慢sql
sql
--最近1000条慢SQL
SELECT * FROM V$LONG_EXEC_SQLS;
--系统启动累计最慢SQL
SELECT * FROM V$V$SYSTEM_LONG_EXEC_SQLS;
9:达梦数据库查看死锁
sql
--查看死锁记录
SELECT * FROM V$DEADLOCK_HISTORY;
3、达梦高级运维SQL
1:达梦数据库查看表空间使用情况
sql
--查看表空间使用情况
SELECT
(SELECT MAX(NAME) FROM V$TABLESPACE WHERE ID=GROUP_ID) AS "表空间名称",
PATH "数据文件",
TO_CHAR(TOTAL_SIZE*PAGE/1024/1024) AS "总大小(MB)",
TO_CHAR(FREE_SIZE*PAGE/1024/1024) AS "空闲大小(MB)",
(TO_CHAR(100 - FREE_SIZE*100/TOTAL_SIZE))||'%' AS "使用率(%)",
CASE AUTO_EXTEND WHEN '0' THEN '未开启' WHEN '1' THEN '开启' END AS "自动扩展",
MAX_SIZE AS "最大可扩展大小(MB)"
FROM
V$DATAFILE;
2:达梦数据库KILL长时间会话
sql
--杀死active状态超过180秒的会话
SELECT
'SP_CLOSE_SESSION(' || SESS_ID || ');' AS kill_command,
SESS_ID,
SF_GET_SESSION_SQL(SESS_ID) AS current_sql,
DATEDIFF(SS, LAST_RECV_TIME, SYSDATE) AS active_seconds,
CLNT_IP,
USER_NAME
FROM V$SESSIONS
WHERE STATE = 'ACTIVE'
AND DATEDIFF(SS, LAST_RECV_TIME, SYSDATE) > 180 -- 超过180秒
ORDER BY active_seconds DESC;
3:达梦数据库定位阻塞会话和阻塞信息
sql
--查看会话阻塞和被阻塞会话信息
SELECT SESS_ID, USER_NAME, CLNT_IP, SQL_TEXT, STATE
FROM V$SESSIONS
WHERE TRX_ID = <查到的WAIT_FOR_ID>;
-- 被阻塞的会话信息
WAIT_SESS.SESS_ID AS 被阻塞会话ID,
WAIT_SESS.SQL_TEXT AS 被阻塞最后执行的SQL,
WAIT_SESS.STATE AS 被阻塞会话状态,
-- 阻塞源会话信息
HOLD_SESS.SESS_ID AS 阻塞源会话ID,
HOLD_SESS.SQL_TEXT AS 阻塞源最后执行的SQL,
HOLD_SESS.STATE AS 阻塞源会话状态,
-- 阻塞详情
TRXWAIT.WAIT_TIME AS 已等待时间毫秒
FROM
V$TRXWAIT TRXWAIT
LEFT JOIN V$SESSIONS WAIT_SESS ON WAIT_SESS.TRX_ID = TRXWAIT.ID
LEFT JOIN V$SESSIONS HOLD_SESS ON HOLD_SESS.TRX_ID = TRXWAIT.WAIT_FOR_ID
ORDER BY
TRXWAIT.WAIT_TIME DESC;
4:达梦数据库查看表数据信息
sql
--达梦数据库查看表数据量大小和表数据量
SELECT OWNER,
TABLE_NAME,
TABLESPACE_NAME,
STATUS,
NUM_ROWS ,
TABLE_USED_SPACE(OWNER, TABLE_NAME) * PAGE() / 1024 / 1024 AS "SIZE_MB"
FROM ALL_TABLES
WHERE OWNER NOT IN ('SYS',
'SYSAUDITOR',
'SYSSSO',
'CTISYS')
5:达梦数据库统计信息更新
sql
--按表更新统计信息
DBMS_STATS.GATHER_TABLE_STATS(
'模式名', -- 对象所属的模式名
'表名', -- 目标表名
NULL, -- 分区名,NULL表示整个表
100, -- 估算百分比(1-100),100为精确统计[reference:2]
FALSE, -- 是否聚合所有分区的统计信息,FALSE表示否[reference:3]
'FOR ALL COLUMNS SIZE AUTO' -- 指定收集哪些列的统计信息,AUTO让系统自动判断
);
--按模式更新统计信息
DBMS_STATS.GATHER_SCHEMA_STATS(
'模式名', -- 目标模式名
100, -- 估算百分比(1-100)
TRUE, -- 是否强制重新分析,即使统计信息是最新的
'FOR ALL COLUMNS SIZE AUTO' -- 收集所有列的统计信息
);
6:达梦数据库ET性能分析工具
sql
--开启会话监控
alter session set 'MONITOR_SQL_EXEC'=1;
--创建测试表并写入数据
CREATE TABLE T1 AS SELECT LEVEL c1,LEVEL||'abc' c2 FROM dual
CONNECT BY LEVEL<=10000;
--执行查询
SELECT * FROM T1 WHERE c2 LIKE '5000%';
--ET查看各部分耗时
ET(执行号);
--EXPLAIN查看执行计划
EXPLAIN SELECT * FROM T1 WHERE c2 LIKE '5000%';
--添加索引优化
CREATE INDEX idx_c2_t1 ON T1(c2);


执行添加索引后执行计划
