ITPub博客

首页 > 数据库 > > Gauss 100 数据库函数介绍之表函数

Gauss 100 数据库函数介绍之表函数

作者:GaussDB_数据库 时间:2020-03-02 10:25:20 0 删除 编辑

DBA_ANALYZE_TABLE

语法:

select * from table(dba_analyze_table(param1, param2));

功能:查看表的分析信息结果,包含占用总页面数,EXTENTS数,总行数,行连接数,行迁移数,平均每行的长度。

注意:

  • 在数据库参数UPPER_CASE_TABLE_NAMES值为TRUE(缺省值)情况下,数据库中的用户名、表名默认为大写,此函数中的参数是用户和表时,也必须输入大写名称,否则会报对象不存在错误。

  • 若数据库参数UPPER_CASE_TABLE_NAMES值为FALSE,或者用户通过双引号输入大小写敏感的表对象,那么函数中的参数大小写敏感,否则会报对象不存在错误。

说明:

  • param1:用户名字符串。

  • param2:表名称字符串。

  • STAT_ITEM:该列显示解析表涉及的项目的名称。

  • VALUE:该列显示对应项目的值。

示例:

select * from table(dba_analyze_table('gaussdba', 'test_t1'));

STAT_ITEM                                                        VALUE
---------------------------------------------------------------- --------------------
total pages                                                      8
total extents                                                    1
total rows                                                       8
linked rows                                                      0
mirgated rows                                                    0
average row size                                                 133

6 rows fetched.

DBA_PROC_DECODE

语法:

select * from table(dba_proc_decode(param1, param2, param3));

功能:查看存储过程,自定义函数或触发器的编译结果。按逻辑行显示。

注意:

  • 在数据库参数UPPER_CASE_TABLE_NAMES值为TRUE(缺省值)情况下,数据库中的用户名、表名默认为大写,此函数中的参数是用户和表时,也必须输入大写名称,否则会报对象不存在错误。

  • 若数据库参数UPPER_CASE_TABLE_NAMES值为FALSE,或者用户通过双引号输入大小写敏感的表对象,那么函数中的参数大小写敏感,否则会报对象不存在错误。

说明:

  • param1:用户名字符串。

  • param2:程序名称字符串。

  • param3:程序类型字符串,仅支持‘PROCEDURE’,‘FUNCTION’,‘TRIGGER’三种类型。

  • LINE_NUM:逻辑行编号。

  • LINE_TYPE:逻辑行类型。

  • LOC_LINE:逻辑行对应首个物理行号。

  • SPECIAL_DESCRIPTION:逻辑行特殊说明(目前仅提供逻辑行跳转关系说明信息)。

示例:

SQL> select * from table(dba_proc_decode('gaussdba', 'GATHER_CHANGE_STATS', 'PROCEDURE'));

LINE_NUM     LINE_TYPE                        LOC_LINE     SPECIAL_DESCRIPTION
------------ -------------------------------- ------------ ----------------------------------------------------------------
1            LINE_BEGIN                       9            except[null];end[29];
2            LINE_IF                          11           t_line[null];f_line[7];next[7];
3            LINE_SQL                         12
4            LINE_IF                          13           t_line[null];f_line[6];next[6];
5            LINE_RETURN                      14
6            LINE_END_IF                      15
7            LINE_END_IF                      16
8            LINE_PROC                        19
9            LINE_FOR                         22           next[18];
10           LINE_BEGIN                       28           except[12];end[17];
11           LINE_PROC                        29
12           LINE_EXCEPTION                   30           end[16];
13           LINE_WHEN                        31
14           LINE_NULL                        32
15           LINE_END_WHEN                    32
16           LINE_END_EXCEPTION               32
17           LINE_END                         33
18           LINE_END_LOOP                    34           loop[9];
19           LINE_FOR                         37           next[28];
20           LINE_BEGIN                       38           except[22];end[27];
21           LINE_PROC                        39
22           LINE_EXCEPTION                   40           end[26];
23           LINE_WHEN                        41
24           LINE_NULL                        42
25           LINE_END_WHEN                    42
26           LINE_END_EXCEPTION               42
27           LINE_END                         43
28           LINE_END_LOOP                    44           loop[19];
29           LINE_END                         46

29 rows fetched.

DBA_PROC_LINE

语法:

select * from table(dba_proc_line(param1, param2));

功能:查看存储过程源码。按行显示。

注意:

  • 在数据库参数UPPER_CASE_TABLE_NAMES值为TRUE(缺省值)情况下,数据库中的用户名、表名默认为大写,此函数中的参数是用户和表时,也必须输入大写名称,否则会报对象不存在错误。

  • 若数据库参数UPPER_CASE_TABLE_NAMES值为FALSE,或者用户通过双引号输入大小写敏感的表对象,那么函数中的参数大小写敏感,否则会报对象不存在错误。

说明:

  • param1:用户名字符串。

  • param2:程序名称字符串。

  • LOC_LINE:物理行号。

  • SOURCE_LINE:单个物理行对应程序源码。

示例:

SQL> select * from table(dba_proc_line('gaussdba', 'GATHER_CHANGE_STATS'));

LOC_LINE     SOURCE_LINE
------------ ----------------------------------------------------------------
1            CREATE OR REPLACE PROCEDURE GATHER_CHANGE_STATS (
2               estimate_percent NUMBER DEFAULT 30,
3               change_percent   NUMBER DEFAULT 10,
4               force            BOOLEAN DEFAULT TRUE
5            )
6            --force false: don't gather when cbo is disable
7            IS
8               cbo_enable   VARCHAR(3);
9            BEGIN
10              --check cbo flag
11              IF force = FALSE THEN
12                      SELECT VALUE INTO cbo_enable FROM SYS.V$PARAMETER WHERE NAME='CBO';
13                      IF UPPER(cbo_enable) = 'OFF' THEN
14                              RETURN;
15                      END IF;
16              END IF;
17
18              --flush modification to table
19              DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO();
20
21              --gather the table changed
22              FOR ITEM IN (SELECT A.OWNER, A.TABLE_NAME
23              FROM DBA_TABLES A, DBA_TAB_MODIFICATIONS B
24              WHERE A.PARTITIONED = 0 AND A.OWNER = B.TABLE_OWNER AND A.TABLE_NAME=B.TABLE_NAME
25                      AND( A.NUM_ROWS is null or
26                      ((NVL(B.INSERTS, 0) + NVL(B.UPDATES, 0) + NVL(B.DELETES, 0))>= (CHANGE_PERCENT * A.NUM_ROWS/100))))
27              LOOP
28                      BEGIN
29                              DBMS_STATS.GATHER_TABLE_STATS(ITEM.OWNER, ITEM.TABLE_NAME, NULL, estimate_percent);
30                      EXCEPTION
31                              WHEN OTHERS THEN
32                                NULL;
33                      END;
34              END LOOP;
35
36              --temp table without statistic will gather at the first time
37              FOR ITEM IN (SELECT OWNER, TABLE_NAME FROM DBA_TABLES WHERE PARTITIONED = 0 AND TABLE_TYPE <> 'HEAP' AND LAST_ANALYZED IS NULL) LOOP
38                      BEGIN
39                              DBMS_STATS.GATHER_TABLE_STATS(ITEM.OWNER, ITEM.TABLE_NAME, null, estimate_percent);
40                      EXCEPTION
41                              WHEN OTHERS THEN
42                                NULL;
43                      END;
44              END LOOP;
45

45 rows fetched.

GET_TAB_PARALLEL

语法:

select * from table(get_tab_parallel(param1, param2));

功能:获取表并行扫描的分组信息。

说明:

  • param1:表名字。

  • param2:并行度。

  • PART_ID:返回的表分区号,普通表返回-1。

  • BEG:返回分组信息的begin pageid。

  • END:返回的分组信息的end pageid。

示例:

SQL> select * from table(get_tab_parallel('tab1', 4));

PART_ID      BEG                  END
------------ -------------------- --------------------
-1           12884901892          12884902266
-1           12884902267          12884902641
-1           12884902642          12884903018
-1           12884903019          4393751543808

4 rows fetched.

GET_TAB_ROWS

语法:

select * from table(get_tab_rows(param1, param2,param3,param4,param5,param6));

功能:直接获取存储引擎原始row记录。

说明:

  • param1:表名字。

  • param2:表分区号,普通表该值传-1。

  • param3:scn号。

  • param4:匹配条件,无匹配条件传入NULL。

  • param5:起始pageid。

  • param6:结束pageid。

示例:

SQL> select * from table(get_tab_rows('tab1', -1, 'NULL', 1641400608411649, 12884903244,4393751543808));

C1           C2           NAME
------------ ------------ ------------------------------
0            23454        12334546
1            23454        12334546
2            23454        12334546
3            23454        12334546
4            23454        12334546
5            23454        12334546
6            23454        12334546
7            23454        12334546
8            23454        12334546
9            23454        12334546
10           23454        12334546
11           23454        12334546
12           23454        12334546
13           23454        12334546
14           23454        12334546
15           23454        12334546
...

PARALLEL_SCAN

语法:

select * from table(parallel_scan(param1,param2,param3,param4,param5));

功能:并行扫描表数据。

说明:

  • param1:表名字。

  • param2:scn号。

  • param3:起始pageid。

  • param4:结束pageid。

  • param5:表分区号,普通表传入-1。

示例:

SQL> select * from table(parallel_scan('tab1', 1641400608411649, 12884903244,4393751543808,-1));

C1           C2           NAME
------------ ------------ ------------------------------
213          23454        12334546
214          23454        12334546
215          23454        12334546
216          23454        12334546
217          23454        12334546
218          23454        12334546
219          23454        12334546
220          23454        12334546
221          23454        12334546
222          23454        12334546
223          23454        12334546
0            23454        12334546
1            23454        12334546
2            23454        12334546
3            23454        12334546
4            23454        12334546
5            23454        12334546
6            23454        12334546
7            23454        12334546
...


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959250/viewspace-3149768/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-01-06

  • 博文量
    2907
  • 访问量
    19263