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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。评论