暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

华为GaussDB T DBMS_DIAGNOSE

墨天轮 2019-10-12
609

DBMS_DIAGNOSE

功能描述

GaussDB 100提供的用于控制函数的访问权限,非sys用户需要授予EXECUTE ON DBMS_DIAGNOSE权限才能访问。

接口介绍

  • DBMS_DIAGNOSE.DBA_IND_POS

    语法:

    DBMS_DIAGNOSE.DBA_IND_POS('column_list','column_id')

    功能:属于诊断函数,用于返回列ID在列ID集合的位置。

    说明:

    • 该函数为诊断函数,非SYS用户不能直接调用该函数。
    • 如果column_list中没有column_id,则返回0。
    • 位置从1开始计数。
    • column_list为字符串类型,是column_id的集合,ID之间以英文逗号分割。单个column_id为数值类型。数值取值范围[-9223372036854775808, 9223372036854775807]。
    • column_id为数值类型。数值取值范围[-9223372036854775808, 9223372036854775807]。

    示例:

    返回column_id在column_list的位置。

    SELECT DBMS_DIAGNOSE.DBA_IND_POS('2,3,1,0,4','4') from SYS_DUMMY; DBMS_DIAGNOSE.DBA_IND_POS('2,3,1,0,4','4') ------------------------------------------- 5 1 rows fetched.
  • DBMS_DIAGNOSE.DBA_LISTCOLS

    语法:

    DBMS_DIAGNOSE.DBA_LISTCOLS(user_name,table_name|view_name, column_list)

    功能:属于诊断函数,将用户名、表名或视图名下的列集合由列ID形式转化为列名集合的形式。

    说明:

    • 该函数为诊断函数,非SYS用户不能直接调用该函数。
    • user_name为字符串类型,必须是数据库中已经存在的用户名。
    • table_name|view_name为字符串类型,必须是数据库中在对应用户下已经存在的表名和视图名。
    • column_list为字符串类型,是列ID的集合,注意不要出现表中不存在的列。

    示例:

    返回列名集合。下面以omm用户为例,omm为数据库管理员用户。

    CREATE TABLE omm.TEST(A INT, B INT); SELECT DBMS_DIAGNOSE.DBA_LISTCOLS('omm','TEST','0,1'); DBMS_DIAGNOSE.DBA_LISTCOLS('omm','TEST','0,1') ---------------------------------------------------------------- A, B 1 rows fetched.
  • DBMS_DIAGNOSE.DBA_PARTITIONED_INDSIZE

    语法:

    DBMS_DIAGNOSE.DBA_PARTITIONED_INDSIZE(size_type,user_name,table_name,index_name)

    功能:属于诊断函数,用于返回分区表上索引的大小。

    说明:

    • 该函数为诊断函数,非SYS用户不能直接调用该函数。
    • size_type:大小类型。
      • 0:字节数。
      • 1:页面数。
      • 2:EXTENTS数。
    • user_name为字符串类型,必须是数据库中已经存在的用户名。
    • table_name为字符串类型,必须是数据库中在对应用户下已经存在的表名,注意该表必须是分区表。
    • index_name为字符串类型,可选,如果不指定将返回分区表上所有索引的累加值。
    • 仅支持统计分区表上本地(local)索引的大小,全局索引大小统计为0。

    示例:

    返回分区表上索引累加后的总大小。
    --预置创建分区表。 create table test_part_t1(f1 int, f2 real, f3 number, f4 char(30), f5 varchar(30), f6 date, f7 timestamp) PARTITION BY RANGE(f1) ( PARTITION p1 values less than(10), PARTITION p2 values less than(20), PARTITION p3 values less than(30), PARTITION p4 values less than(MAXVALUE) );
    --预置创建分区表索引。 create index idx_t1_1 on test_part_t1(f2,f3); create index idx_t1_2 on test_part_t1(f4,f5) local;
    --预置插入分区表数据。 insert into test_part_t1 values(5, 15, 28, 'abcd', 'abcd', to_date('2018/01/24', 'YYYY/MM/DD'), to_timestamp('2018-01-24 16:00:00.00', 'YYYY-MM-DD HH24:MI:SS.FF3')); insert into test_part_t1 values(6, 16, 29, '16', '29', to_date('2018/01/24', 'YYYY/MM/DD'), to_timestamp('2018-01-24 16:00:00.00', 'YYYY-MM-DD HH24:MI:SS.FF3'));
    --查询分区表上索引累加后的总大小。 SELECT DBMS_DIAGNOSE.DBA_PARTITIONED_INDSIZE(0,'omm','TEST_PART_T1'); DBMS_DIAGNOSE.DBA_PARTITIONED_INDSIZE(0,'omm','TEST_PART_T1') ------------------------------------------------------------------ 65536 1 rows fetched.
  • DBMS_DIAGNOSE.DBA_PARTITIONED_LOBSIZE

    语法:

    DBMS_DIAGNOSE.DBA_PARTITIONED_LOBSIZE(size_type,user_name,table_name,column_id)

    功能:属于诊断函数,用于返回分区表上LOB列segment的大小。

    说明:

    • 该函数为诊断函数,非SYS用户不能直接调用该函数。
    • size_type:大小类型。
      • 0:字节数。
      • 1:页面数。
      • 2:EXTENTS数。
    • user_name为字符串类型,必须是数据库中已经存在的用户名。
    • table_name为字符串类型,必须是数据库中在对应用户下已经存在的表名,该表必须是分区表。
    • column_id为整型,列的ID值,可选,如果不指定将返回分区表上所有LOB列的累加值;指定情况下必须为LOB列所在列ID。
    • 默认lob数据如果消耗的存储空间不超过4000字节(含12-14字节的额外开销),则lob采用inline模式,将数据存储在heap segment中,不存储在lob segment中,因此本函数统计的结果,不包含inline模式存储的lob数据。

    示例:

    返回分区表上LOB列累加后的总大小。

    --预置创建分区表。 create table test_part_t1(f1 int, f2 real, f3 number, f4 char(30), f5 varchar(30), f6 date, f7 timestamp,f8 clob) PARTITION BY RANGE(f1) ( PARTITION p1 values less than(10), PARTITION p2 values less than(20), PARTITION p3 values less than(30), PARTITION p4 values less than(MAXVALUE) );
    --预置创建分区表索引。 create index idx_t1_1 on test_part_t1(f2,f3); create index idx_t1_2 on test_part_t1(f4,f5) local;
    --预置插入分区表数据。 insert into test_part_t1 values(5, 15, 28, 'abcd', 'abcd', to_date('2018/01/24', 'YYYY/MM/DD'), to_timestamp('2018-01-24 16:00:00.00', 'YYYY-MM-DD HH24:MI:SS.FF3'),'xxx'); insert into test_part_t1 values(6, 16, 29, '16', '29', to_date('2018/01/24', 'YYYY/MM/DD'), to_timestamp('2018-01-24 16:00:00.00', 'YYYY-MM-DD HH24:MI:SS.FF3'),'yyy');
    --查询分区表上LOB列累加后的总大小。 SELECT DBMS_DIAGNOSE.DBA_PARTITIONED_LOBSIZE(0,'omm','TEST_PART_T1'); DBMS_DIAGNOSE.DBA_PARTITIONED_LOBSIZE(0,'omm','TEST_PART_T1') ------------------------------------------------------------------ 0 1 rows fetched.
  • DBMS_DIAGNOSE.DBA_PARTITIONED_TABSIZE

    语法:

    DBMS_DIAGNOSE.DBA_PARTITIONED_TABSIZE(size_type,user_name,table_name)

    功能:属于诊断函数,用于返回分区表上的大小。

    说明:

    • 该函数为诊断函数,非SYS用户不能直接调用该函数。
    • size_type:大小类型。
      • 0,字节数。
      • 1,页面数。
      • 2,EXTENTS数。
    • user_name为字符串类型,必须是数据库中已经存在的用户名。
    • table_name为字符串类型,必须是数据库中在对应用户下已经存在的表名,该表必须是分区表。

    示例:

    返回分区表的大小。

    --预置创建分区表。 create table test_part_t1(f1 int, f2 real, f3 number, f4 char(30), f5 varchar(30), f6 date, f7 timestamp) PARTITION BY RANGE(f1) ( PARTITION p1 values less than(10), PARTITION p2 values less than(20), PARTITION p3 values less than(30), PARTITION p4 values less than(MAXVALUE) );
    --预置创建分区表索引。 create index idx_t1_1 on test_part_t1(f2,f3); create index idx_t1_2 on test_part_t1(f4,f5) local;
    --预置插入分区表数据。 insert into test_part_t1 values(5, 15, 28, 'abcd', 'abcd', to_date('2018/01/24', 'YYYY/MM/DD'), to_timestamp('2018-01-24 16:00:00.00', 'YYYY-MM-DD HH24:MI:SS.FF3')); insert into test_part_t1 values(6, 16, 29, '16', '29', to_date('2018/01/24', 'YYYY/MM/DD'), to_timestamp('2018-01-24 16:00:00.00', 'YYYY-MM-DD HH24:MI:SS.FF3'));
    --返回分区表的大小。 select DBMS_DIAGNOSE.DBA_PARTITIONED_TABSIZE(0,'omm','TEST_PART_T1'); DBMS_DIAGNOSE.DBA_PARTITIONED_TABSIZE(0,'omm','TEST_PART_T1') ------------------------------------------------------------------- 65536 1 rows fetched.
  • DBMS_DIAGNOSE.DBA_SEGSIZE

    语法:

    DBMS_DIAGNOSE.DBA_SEGSIZE(size_type,table_entry)

    功能:属于诊断函数,用于返回普通表的大小。

    说明:

    • 该函数为诊断函数,非SYS用户不能直接调用该函数。
    • size_type:大小类型。
      • 0:字节数。
      • 1:页面数。
      • 2:EXTENTS数。
    • table_entry:普通表的入口entry,需要查询系统表SYS_TABLES才能获取。

    示例:

    返回普通表的大小。

    --预置创建普通表。 CREATE TABLE TEST(A INT, B INT);
    --插入数据。 INSERT INTO TEST VALUES(1,1);
    --查询表大小。 SELECT DBMS_DIAGNOSE.DBA_SEGSIZE(0, T.ENTRY) FROM SYS_TABLES T WHERE T.NAME = 'TEST'; DBMS_DIAGNOSE.DBA_SEGSIZE(0, T.ENTRY) -------------------------------------- 65536 1 rows fetched.
  • DBMS_DIAGNOSE.DBA_SPACE_NAME

    语法:

    DBMS_DIAGNOSE.DBA_SPACE_NAME(space_id)

    功能:属于诊断函数,用于返回表空间ID所在的表名。

    说明:

    • 该函数为诊断函数,非SYS用户不能直接调用该函数。
    • 该函数返回表空间ID所在的表名,表空间ID不存在的时候会报错。
    • space_id:表空间ID。

    示例:

    用于返回表空间ID所在的表名。

    SELECT DBMS_DIAGNOSE.DBA_SPACE_NAME(0); DBMS_DIAGNOSE.DBA_SPACE_NAME(0) ---------------------------------------------------------------- SYSTEM 1 rows fetched.
  • DBMS_DIAGNOSE.DBA_SPCSIZE

    语法:

    DBMS_DIAGNOSE.DBA_SPCSIZE(space_id,size_type_name)

    功能:属于诊断函数,用于返回表空间大小。

    说明:

    • 该函数为诊断函数,非SYS用户不能直接调用该函数。
    • space_id:表空间ID。
    • size_type_name:大小类型。
      • 'PAGE':每一个页面的大小,单位是字节,一般默认是8K。
      • 'TOTAL':总字节大小。
      • 'USED':已使用的大小。

    示例:

    返回表空间大小。

    SELECT DBMS_DIAGNOSE.DBA_SPCSIZE(0,'TOTAL'); DBMS_DIAGNOSE.DBA_SPCSIZE(0,'TOTAL') -------------------------------------- 134217728 1 rows fetched.
  • DBMS_DIAGNOSE.DBA_TABTYPE

    语法:

    DBMS_DIAGNOSE.DBA_TABTYPE(table_type_id)

    功能:属于诊断函数,用于返回表类型ID对应的表类型名。

    说明:

    • 该函数为诊断函数,非SYS用户不能直接调用该函数。
    • 如果表类型ID不存在且不为NULL,将返回UNKNOWN_TYPE。
    • table_type_id为表类型ID:
      • 0:HEAP,普通表(堆表)
      • 1:IOT,索引组织表
      • 2:TRANS_TEMP,事务型临时表
      • 3:SESSION_TEMP,会话型临时表
      • 4:NOLOGGING,无日志表
      • 5:EXTERNAL,外部表

    示例:

    返回表类型ID对应的表类型名。

    SELECT DBMS_DIAGNOSE.DBA_TABTYPE(3); DBMS_DIAGNOSE.DBA_TABTYPE(3) ---------------------------------------------------------------- SESSION_TEMP 1 rows fetched.
  • DBMS_DIAGNOSE.DBA_USER_NAME

    语法:

    DBMS_DIAGNOSE.DBA_USER_NAME(user_id)

    功能:属于诊断函数,用于返回用户ID对应的用户名。

    说明:

    • 该函数为诊断函数,非SYS用户不能直接调用该函数 。
    • 如果用户ID不存在,会返回用户不存在的报错信息。
    • user_id为整数类型。

    示例:

    返回用户ID对应的用户名。

    select DBMS_DIAGNOSE.dba_user_name(1); DBMS_DIAGNOSE.DBA_USER_NAME(1) ---------------------------------------------------------------- PUBLIC 1 rows fetched.
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论