天天看点

达梦数据库运维常用基础SQL(二)

作为数据库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、开启/关闭索引监控:

alter index dmhr.ix_emp_empid monitoring usage;      
select * from v$object_usage;      
alter index dmhr.ix_emp_empid nomonitoring usage;