作为数据库DBA运维人员,经常需要查询和监控数据库的运行情况,定位某些问题,为此我们整理出部分常用运维SQL,帮助大家更好的使用达梦数据库。本次整理出数据库、表和索引等相关维护SQL供大家参考。
一、数据库信息查询
1.1、查看数据库信息(是否开启归档等):
查询数据库是否开启归档(Y表示开启归档)
select t.name, t.arch_mode from V$DATABASE t;
其他数据库信息也可在此视图查询,用来区分是否集群环境等。包含数据库名,最后启动时间、DSC集群节点数、主备节点等:
select * from V$DATABASE t;
1.2、查询实例信息
查询数据库实例启动状态:
select name, status$ from v$instance;
其他实例信息包含实例名、状态、DSC集群节点、主备集群等也可在此视图中查询:
select * from V$INSTANCE;
1.3、查询license信息
查询license信息,EXPIRED_DATE表示过期时间。License到期后,数据库将自动关闭。
select * from V$LICENSE;
1.4、归档配置查询
查询v$dm_arch_ini动态视图可获取归档目录等配置信息,也可以查看dmarch.ini配置文件。
select * from v$dm_arch_ini;
二、当前模式/用户/会话信息查询
2.1、查看当前用户
查看当前的连接用户,如下三个语句均可查看:
select sys_context('USERENV','CURRENT_USER');
select current_user;
select user;
2.2、查看当前模式/切换当前模式
sys_context是DM提供的获取环境上下文信息的预定义函数。USERENV为系统默认的上下文名字空间,保存了用户的上下文信息,可以从此函数中获取当前用户、模式、当前会话等信息。
select sys_context('USERENV','CURRENT_SCHEMA');
使用set schema语句可以切换当前模式到其他模式(DM8新版本支持不同用户下模式的切换)。
set schema hr;
2.3、查询当前会话ID
如下两个语句都可查询当前会话ID。
select sys_context('USERENV','SID');
select sessid;
三、表相关
3.1、某模式/用户下表占用空间大小排序:
在生成环境中,如果表数据过大,可能造成查询较慢,使用此sql可查询出占用空间较大的表信息及占用大小。如果要查询某张表的空间占用,可以增加segment_name条件。
select t.segment_name,
t.segment_type,
t.tablespace_name,
t.owner,
t.bytes,
t.bytes/1024 byte_kb,
t.bytes/1024 byte_mb
from dba_segments t
where t.owner = 'DMHR' -- 用户/模式名
and t.SEGMENT_TYPE = 'TABLE'
order by t.bytes desc;
3.2、查询某个模式/用户下表的记录数:
此sql查询前需收集表的统计信息 (LAST_ANALYZED字段在DM8新版本中支持):
select t.owner, t.table_name, t.tablespace_name, t.num_rows, t.last_analyzed
from dba_tables t
where t.owner = 'DMHR' -- 用户/模式名
order by t.num_rows desc;
3.3、修改表的存储空间(表空间):
修改表的存储空间是DM8数据库的新特性;如果某张表存储的表空间已满,可以将表的存储空间(表空间)转移到另一个表空间下。如下将T_EMP迁移到MAIN表空间(注意:不要在业务繁忙时间操作;DM8表转移表空间不会导致索引失效,因此不需要手工重建该表上的索引)。
alter table t_emp move tablespace main;
3.4、查看表字段信息:
如果要查看表的列详细信息,比如列名、列类型、是否非空、列默认值等信息,可查询如下数据字典:
select t.TABLE_NAME,
t.COLUMN_NAME,
t.COLUMN_ID,
t.DATA_TYPE,
t.DATA_LENGTH,
t.DATA_PRECISION,
t.DATA_SCALE,
t.NULLABLE,
t.DATA_DEFAULT
from user_tab_columns t
where t.TABLE_NAME = 'EMPLOYEE' -- 表名
order by t.COLUMN_ID;
四、索引相关
4.1、某用户索引占用空间大小排序:
表越大,其表上索引空间占用也越大,使用如下sql可以查看索引的空间占用大小:
select t.segment_name,
t.segment_type,
t.tablespace_name,
t.bytes,
t.bytes/1024 byte_kb,
t.bytes/1024 byte_mb
from user_segments t
where t.segment_type = 'INDEX'
order by t.bytes desc;
4.2、查看索引信息:
查看某张表上的索引信息:
select t.INDEX_NAME, t.TABLE_OWNER, t.INDEX_TYPE, t.TABLE_NAME, t.UNIQUENESS, t.TABLESPACE_NAME
from user_indexes t
where t.TABLE_NAME = 'DEPARTMENT'; -- 表名
查询某张表的索引列信息:
select *
from user_ind_columns t
where t.table_name ='EMPLOYEE'; -- 表名
4.3、开启/关闭索引监控:
DM8新版本支持索引监控的功能,可以单独对某个索引开启监控,监控一段时间后,如果系统用到该索引,则索引可保留,如果索引没有使用,则可以考虑删除该索引。执行如下语句打开DMHR模式下ix_emp_empid索引的监控功能:
alter index dmhr.ix_emp_empid monitoring usage;
开启索引监控后,查询动态视图v$object_usage,可以看到索引的监控信息。其中,USED字段表示索引是否使用,YES表示已使用,NO表示未使用。
select * from v$object_usage;
索引开启监控一段时间后,可关闭其监控,避免不必要的性能消耗:
alter index dmhr.ix_emp_empid nomonitoring usage;标签:name,运维,数据库,信息,查询,索引,达梦,SQL,select From: https://blog.51cto.com/jackin/5806331