表-SYS_TABLES
📄字数 5.4K
👁️阅读量 加载中...
功能描述
SYS_TABLES系统表用于存储系统库和用户库中的所有表信息。
字段说明
序号 | 字段名 | 类型 | 说明 | V11 | V12 |
---|---|---|---|---|---|
0 | DB_ID | INTEGER | 库ID | √ | √ |
1 | USER_ID | INTEGER | 拥有者的用户ID | √ | √ |
2 | SCHEMA_ID | INTEGER | 模式ID | √ | √ |
3 | TABLE_ID | INTEGER | 表ID | √ | √ |
4 | TABLE_NAME | VARCHAR | 表名 | √ | √ |
5 | TABLE_TYPE | INTEGER | 表类型(0:堆表;1:IOT表;2:外部文件表;3:虚拟表;4:函数表;5:远程表) | √ | √ |
6 | TEMP_TYPE | INTEGER | 临时类型(0:非临时;1:局部临时表;2:全局临时表) | √ | √ |
7 | FIELD_NUM | INTEGER | 字段数 | √ | √ |
8 | PARTI_TYPE | INTEGER | 分区类型(1:range分区;2:list分区;3:hash分区;4:spatial分区) | √ | √ |
9 | PARTI_NUM | INTEGER | 分区数 | √ | √ |
10 | PARTI_KEY | VARCHAR | 分区键 | √ | √ |
11 | AUTO_PARTI_TYPE | INTEGER | 自动分区的类型(0:无;1:按年;2:按月;3:按天;4:按小时) | √ | √ |
12 | AUTO_PARTI_SPAN | INTEGER | 时段自动分区的时段长度 | √ | √ |
13 | SUBPARTI_TYPE | INTEGER | 子分区类型(1:range分区;2:list分区;3:hash分区;4:spatial分区) | √ | √ |
14 | SUBPARTI_NUM | INTEGER | 子分区数 | √ | √ |
15 | SUBPARTI_KEY | VARCHAR | 子分区键 | √ | √ |
16 | GSTO_NO | INTEGER | 全局存储号 | √ | √ |
17 | COPY_NUM | INTEGER | 副本数 | √ | √ |
18 | BLOCK_SIZE | INTEGER | 块大小(单位:K) | √ | √ |
19 | CHUNK_SIZE | INTEGER | 存贮单元大小(单位:M) | √ | √ |
20 | RECORD_NUM | BIGINT | 记录数 | √ | √ |
21 | PCTFREE | INTEGER | 块的预留置空间比例 | √ | √ |
22 | HOTSPOT_NUM | INTEGER | 插入操作的热点个数 | √ | √ |
23 | USE_CACHE | BOOLEAN | 该表的块是否使用高速缓存 | √ | √ |
24 | ONLINE | BOOLEAN | 表是否允许在线修改 | √ | √ |
25 | IS_SYS | BOOLEAN | 是否系统内建 | √ | √ |
26 | IS_ENCRY | BOOLEAN | 是否是加密表 | √ | √ |
27 | SLOW_MODIFY | BOOLEAN | 是否缓变 | √ | √ |
28 | XLS_PID | INTEGER | 安全策略ID | √ | √ |
29 | XLS_COL_NO | INTEGER | 安全策略字段 | √ | √ |
30 | XLS_COL_OPT | INTEGER | 安全字段属性(0:不隐藏; 1:隐藏) | √ | √ |
31 | ON_COMMIT_DEL | BOOLEAN | 是否在事务结束时删除数据 | √ | √ |
32 | ENA_TRANS | BOOLEAN | 是否事务支持 | √ | √ |
33 | ENA_LOGGING | BOOLEAN | 是否记redo日志 | √ | √ |
34 | REG_MODIFY | BOOLEAN | 是否记载变更日志 | √ | √ |
35 | VALID | BOOLEAN | 是否有效 | √ | √ |
36 | ACL_MASK | INTEGER | 权限掩码 | √ | √ |
37 | AUTO_PARTI_NO | INTEGER | 时段自动分区的扩展基点分区号 | √ | √ |
38 | CREATE_TIME | DATETIME | 创建时间 | √ | √ |
39 | COMMENTS | VARCHAR | 注释信息 | √ | √ |
40 | ANA_POLICY | INTEGER | 分析策略(默认为1) | √ | √ |
41 | ANA_PERIOD | INTEGER | 分析周期(默认为null,[30,1440]) | √ | √ |
42 | ANA_THRESHOLD | INTEGER | 分析阈值(默认为null,[1,100]) | √ | √ |
43 | ANA_LEVEL | INTEGER | 采样层级(默认为null,[1,6]) | √ | √ |
44 | ENCRY_ID | INTEGER | 密钥ID | × | √ |
45 | STO_ZONE | INTEGER | 存储域编号 | × | √ |
46 | CACHE_HASH_KEY | VARCHAR | HASH缓存键 | × | √ |
47 | COMPRESS_LEVEL | INTEGER | 压缩等级(0:禁用数据压缩(默认);1:启用数据压缩) | × | √ |
48 | RESERVED5 | VARCHAR | 保留字段 | √ | √ |
ACL_MASK
存储标志位 | 字段值(十进制) | 权限 |
---|---|---|
0x1 | 1 | 读取字段权限 |
0x2 | 2 | 更改字段权限 |
0x4 | 4 | 添加字段权限 |
0x8 | 8 | 删除字段权限 |
0x10 | 16 | 引用权限 |
0x20 | 32 | 执行权限 |
0x40 | 64 | 索引创建权限 |
0x80 | 128 | 对象结构修改权限 |
0x100 | 256 | 对象删除权限 |
0x200 | 512 | 触发器创建权限 |
0x400 | 1024 | 多余空间清除权限 |
0x7df | 2015 | 所有表(字段)级权限 |
0x1a0 | 416 | 所有函数或过程级权限 |
0x18f | 399 | 所有视图级权限 |
0x1a0 | 416 | 所有程序包级权限 |
0x183 | 387 | 所有序列级权限 |
0x1a0 | 416 | 所有UDT级权限 |
提示
可同时拥有多个权限,例如字段值为15时,即同时拥有读取、更改、添加和删除权限。
具体说明详见《权限管理》
ANA_POLICY
可通过以下系统包函数进行设置:
DBMS_STAT.SET_ANALYZE_SCHEME的第二个参数
DBMS_STAT.SET_ANALYZE_OPTIMIZE的第三个参数
DBMS_STAT.SET_ANALYZE_PARAM的第二个参数
- 通过SET_ANALYZE_SCHEME设置
sql
SQL> CREATE TABLE tab_ana_sch(c1 INT);
SQL> EXEC DBMS_STAT.SET_ANALYZE_SCHEME('SYSDBA.TAB_ANA_SCH', 'TIME', TRUE);
SQL> SELECT table_name, ana_policy FROM SYS_TABLES WHERE table_name='TAB_ANA_SCH';
+-------------+------------+
| TABLE_NAME | ANA_POLICY |
+-------------+------------+
| TAB_ANA_SCH | 1 |
+-------------+------------+
SQL> EXEC DBMS_STAT.SET_ANALYZE_SCHEME('SYSDBA.TAB_ANA_SCH', 'IMME', TRUE);
SQL> SELECT table_name, ana_policy FROM SYS_TABLES WHERE table_name='TAB_ANA_SCH';
+-------------+------------+
| TABLE_NAME | ANA_POLICY |
+-------------+------------+
| TAB_ANA_SCH | 3 |
+-------------+------------+
SQL> EXEC DBMS_STAT.SET_ANALYZE_SCHEME('SYSDBA.TAB_ANA_SCH', 'OPTI', TRUE);
SQL> SELECT table_name, ana_policy FROM SYS_TABLES WHERE table_name='TAB_ANA_SCH';
+-------------+------------+
| TABLE_NAME | ANA_POLICY |
+-------------+------------+
| TAB_ANA_SCH | 7 |
+-------------+------------+
- 通过SET_ANALYZE_OPTIMIZE设置
sql
SQL> CREATE TABLE tab_ana_opt(c1 INT);
SQL> EXEC DBMS_STAT.SET_ANALYZE_OPTIMIZE('SYSDBA.TAB_ANA_OPT', 40, 1);
SQL> SELECT table_name, ana_policy FROM SYS_TABLES WHERE table_name='TAB_ANA_OPT';
+-------------+------------+
| TABLE_NAME | ANA_POLICY |
+-------------+------------+
| TAB_ANA_OPT | 33 |
+-------------+------------+
SQL> EXEC DBMS_STAT.SET_ANALYZE_OPTIMIZE('SYSDBA.TAB_ANA_OPT', 40, 2);
SQL> SELECT table_name, ana_policy FROM SYS_TABLES WHERE table_name='TAB_ANA_OPT';
+-------------+------------+
| TABLE_NAME | ANA_POLICY |
+-------------+------------+
| TAB_ANA_OPT | 66 |
+-------------+------------+
SQL> EXEC DBMS_STAT.SET_ANALYZE_OPTIMIZE('SYSDBA.TAB_ANA_OPT', 40, 3);
SQL> SELECT table_name, ana_policy FROM SYS_TABLES WHERE table_name='TAB_ANA_OPT';
+-------------+------------+
| TABLE_NAME | ANA_POLICY |
+-------------+------------+
| TAB_ANA_OPT | 132 |
+-------------+------------+
- 通过SET_ANALYZE_PARAM设置
sql
SQL> CREATE TABLE tab_ana_par(c1 INT);
SQL> EXEC DBMS_STAT.SET_ANALYZE_PARAM('SYSDBA.TAB_ANA_PAR',1,1,1);
SQL> SELECT table_name, ana_policy FROM SYS_TABLES WHERE table_name='TAB_ANA_PAR';
+-------------+------------+
| TABLE_NAME | ANA_POLICY |
+-------------+------------+
| TAB_ANA_PAR | 9 |
+-------------+------------+
SQL> EXEC DBMS_STAT.SET_ANALYZE_PARAM('SYSDBA.TAB_ANA_PAR',2,1,1);
SQL> SELECT table_name, ana_policy FROM SYS_TABLES WHERE table_name='TAB_ANA_PAR';
+-------------+------------+
| TABLE_NAME | ANA_POLICY |
+-------------+------------+
| TAB_ANA_PAR | 17 |
+-------------+------------+
ANA_PERIOD
通过DBMS_STAT.SET_ANALYZE_OPTIMIZE的第二个参数设置
sql
SQL> EXEC DBMS_STAT.SET_ANALYZE_OPTIMIZE('SYSDBA.TAB_ANA_PER', 40, 2);
SQL> SELECT table_name, ANA_PERIOD FROM SYS_TABLES WHERE table_name='TAB_ANA_PER';
+-------------+------------+
| TABLE_NAME | ANA_PERIOD |
+-------------+------------+
| TAB_ANA_PER | 40 |
+-------------+------------+
ANA_THRESHOLD
通过EXEC DBMS_STAT.SET_ANALYZE_PARAM的第三个参数设置
sql
SQL> CREATE TABLE tab_ana_thr(c1 INT);
SQL> EXEC DBMS_STAT.SET_ANALYZE_PARAM('SYSDBA.TAB_ANA_THR',1,10,1);
SQL> SELECT table_name, ANA_THRESHOLD FROM SYS_TABLES WHERE table_name='TAB_ANA_THR';
+-------------+---------------+
| TABLE_NAME | ANA_THRESHOLD |
+-------------+---------------+
| TAB_ANA_THR | 10 |
+-------------+---------------+
ANA_LEVEL
通过DBMS_STAT.SET_ANALYZE_PARAM的第四个参数设置
sql
SQL> CREATE TABLE tab_ana_lev(c1 INT);
SQL> EXEC DBMS_STAT.SET_ANALYZE_PARAM('SYSDBA.TAB_ANA_LEV',1,1,5);
SQL> SELECT table_name, ANA_LEVEL FROM SYS_TABLES WHERE table_name='TAB_ANA_LEV';
+-------------+-----------+
| TABLE_NAME | ANA_LEVEL |
+-------------+-----------+
| TAB_ANA_LEV | 5 |
+-------------+-----------+
应用举例
- 查询表类型
sql
SQL> CREATE TABLE tab_heap(id INT);
-- 局部临时表信息不会被记载
SQL> CREATE TEMP TABLE tab_local_temp(id INT);
SQL> CREATE GLOBAL TEMP TABLE tab_global_temp(id INT);
SQL> SELECT table_name, table_type, temp_type FROM SYS_TABLES;
+-----------------+------------+-----------+
| TABLE_NAME | TABLE_TYPE | TEMP_TYPE |
+-----------------+------------+-----------+
| TAB_HEAP | 0 | 0 |
| TAB_GLOBAL_TEMP | 0 | 2 |
+-----------------+------------+-----------+
- 查询表所属库
sql
SQL> SELECT table_name,db_id,db_name FROM SYS_TABLES st JOIN SYS_DATABASES sd ON st.db_id=sd.db_id WHERE table_name='TAB_HEAP';
+------------+-------+---------+
| TABLE_NAME | DB_ID | DB_NAME |
+------------+-------+---------+
| TAB_HEAP | 1 | SYSTEM |
+------------+-------+---------+
- 查询表所属者
sql
SQL> SELECT table_name,user_id,user_name FROM SYS_TABLES st JOIN SYS_USERS su ON st.db_id=su.db_id AND st.user_id=su.user_id WHERE table_name='TAB_HEAP';
+------------+---------+-----------+
| TABLE_NAME | USER_ID | USER_NAME |
+------------+---------+-----------+
| TAB_HEAP | 1 | SYSDBA |
+------------+---------+-----------+
- 根据库名、模式名分组统计表个数(结果依据库实际情况而定)
sql
SQL> SELECT COUNT(*),db_name,schema_name FROM SYS_TABLES st JOIN SYS_DATABASES sd ON st.db_id=sd.db_id JOIN SYS_SCHEMAS ss ON sd.db_id=ss.db_id GROUP BY db_name,schema_name;
+-------+---------+-------------+
| EXPR1 | DB_NAME | SCHEMA_NAME |
+-------+---------+-------------+
| 3 | SYSTEM | GUEST |
| 3 | SYSTEM | SYSSSO |
| 3 | SYSTEM | SYSDBA |
| 3 | SYSTEM | SYSAUDITOR |
+-------+---------+-------------+
- 是否开启变更记载
sql
SQL> SELECT table_name,reg_modify FROM SYS_TABLES WHERE table_name='TAB_HEAP';
+------------+------------+
| TABLE_NAME | REG_MODIFY |
+------------+------------+
| TAB_HEAP | <NULL> |
+------------+------------+
- slow_modify字段举例
sql
SQL> CREATE TABLE tab_slow_modify(C1 INT);
SQL> SELECT slow_modify FROM SYS_TABLES WHERE table_name='tab_slow_modify';
+-------------+
| SLOW_MODIFY |
+-------------+
| <NULL> |
+-------------+
SQL> ALTER TABLE tab_slow_modify SET SLOW MODIFY ON NOWAIT;
SQL> SELECT slow_modify FROM SYS_TABLES WHERE table_name='tab_slow_modify';
+-------------+
| SLOW_MODIFY |
+-------------+
| T |
+-------------+
- PCTFREE字段举例
sql
-- 创表的时候设置表默认块空度为1%
SQL> CREATE TABLE tab_pctfree(A int,B varchar) PCTFREE 1;
SQL> SELECT PCTFREE FROM SYS_TABLES WHERE table_name='tab_pctfree';
+---------+
| PCTFREE |
+---------+
| 1 |
+---------+
- COMPRESS_LEVEL字段举例
sql
-- 创建默认的不压缩表
SQL> CREATE TABLE tab_nocompress(c1 INT);
SQL> SELECT table_name, compress_level FROM SYS_TABLES WHERE table_name='tab_nocompress';
+----------------+----------------+
| TABLE_NAME | COMPRESS_LEVEL |
+----------------+----------------+
| TAB_NOCOMPRESS | 0 |
+----------------+----------------+
-- 创建压缩表
SQL> CREATE TABLE tab_compress(c1 INT) COMPRESS;
SQL> SELECT table_name, compress_level FROM SYS_TABLES WHERE table_name='tab_compress';
+--------------+----------------+
| TABLE_NAME | COMPRESS_LEVEL |
+--------------+----------------+
| TAB_COMPRESS | 1 |
+--------------+----------------+
提示
在数据量很大的情况下,不压缩的表所用存储数大于压缩表所用存储数,可通过select count(*) from sys_gstores查看。