统计信息导出功能主要用于将表的统计信息导出到一张指定的用户表中保存下来,而导入功能主要作用是将指定用户表中的统计信息导入到当前统计信息内部表中,省去重新收集到的过程。
例如,在进行数据库迁移时,可以把大表的统计信息导出到指定用户表中一起做数据迁移,而当数据迁移成功之后就可以直接将之前保存统计信息的用户表中数据导入到新库对应的统计信息内部表中。
统计信息用户表
统计信息用户表主要用于保存内部表收集的统计信息,具体的表结构及相关解释见下表。
| 字段 | 数据类型 | 表级统计信息 TYPE='T' | 列级统计信息 TYPE='C' |
|---|---|---|---|
| STATID | VARCHAR2(30) | User Settable | User Settable |
| TYPE | CHAR(1) | Table | Column |
| VERSION | NUMBER | 预留字段 | 预留字段 |
| FLAGS | NUMBER | 预留字段 | 预留字段 |
| C1 | VARCHAR2(30) | Table Name | Table Name |
| C2 | VARCHAR2(30) | Partition Name | Partition Name |
| C3 | VARCHAR2(30) | Subpartition Name | Subpartition Name |
| C4 | VARCHAR2(30) | 预留字段 | Column Name |
| C5 | VARCHAR2(30) | Owner | Owner |
| C6 | VARCHAR2(30) | 预留字段 | 预留字段 |
| N1 | NUMBER | Num Rows | Num Distinct |
| N2 | NUMBER | Blocks | Density |
| N3 | NUMBER | Average Row Length | 预留字段 |
| N4 | NUMBER | Sample Size | Sample Size |
| N5 | NUMBER | 预留字段 | Num Nulls |
| N6 | NUMBER | 预留字段 | Lower Value |
| N7 | NUMBER | 预留字段 | High Value |
| N8 | NUMBER | 预留字段 | Average Column Length |
| N9 | NUMBER | 预留字段 | 预留字段 |
| N10 | NUMBER | 预留字段 | Endpoint Number |
| N11 | NUMBER | 预留字段 | Endpoint Value |
| N12 | NUMBER | 预留字段 | ENDPOINT_REPEAT_COUNT |
| N13 | NUMBER | 预留字段 | 预留字段 |
| D1 | DATE | Last Analyzed | Last Analyzed |
| T1 | TIMESTAMP(6) WITH TIME ZONE | 预留字段 | 预留字段 |
| R1 | RAW(32) | 预留字段 | Lower RAW Value |
| R2 | RAW(32) | 预留字段 | High RAW Value |
| R3 | RAW(32) | 预留字段 | ENDPOINT_ACTUAL_VALUE_RAW |
| CH1 | VARCHAR2(1000) | 预留字段 | 预留字段 |
| CH1 | CLOB | 预留字段 | 预留字段 |
| BH1 | BLOB | 预留字段 | 预留字段 |
| OB_SPEC1 | NUMBER | OB Macro Block CNT | OB LLC Bitmap Size |
| OB_SPEC2 | NUMBER | OB Micro Block CNT | 预留字段 |
| OB_SPEC3 | VARCHAR2(4096) | 预留字段 | OB LLC Bitmap(ND Synopsis) |
DBMS_STATS 包提供了存储过程 create_stat_table 和 drop_stat_table 来创建和删除统计信息用户表,定义如下:
PROCEDURE create_stat_table(
ownname VARCHAR2,
stattab VARCHAR2,
tblspace VARCHAR2 DEFAULT NULL,
global_temporary BOOLEAN DEFAULT FALSE
);
PROCEDURE drop_stat_table(
ownname VARCHAR2,
stattab VARCHAR2
);
参数解释如下表所示。
| 参数 | 解释 |
|---|---|
| ownname | 用户名。如果用户名设置为 NULL,会默认使用当前登录用户名。 |
| stattab | 指定创建的统计信息用户表名称。 |
| tblspace | 表组名称。 |
| global_temporary | 该参数暂未实现,不可用。 |
导出功能
目前支持如下三种导出统计信息的方式:
使用存储过程
export_table_stats导出表级的统计信息。使用存储过程
export_column_stats导出列级的统计信息。使用存储过程
export_schema_stats导出 Schema下的所有表的统计信息。使用存储过程
export_index_stats导出索引统计信息.
具体的存储过程定义如下:
PROCEDURE export_table_stats (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2,
statid VARCHAR2 DEFAULT NULL,
cascade BOOLEAN DEFAULT TRUE,
statown VARCHAR2 DEFAULT NULL,
stat_category VARCHAR2 DEFAULT DEFAULT_STAT_CATEGORY
);
PROCEDURE export_column_stats (
ownname VARCHAR2,
tabname VARCHAR2,
colname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2,
statid VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL
);
PROCEDURE export_schema_stats (
ownname VARCHAR2,
stattab VARCHAR2,
statid VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL
);
PROCEDURE export_index_stats (
ownname VARCHAR2,
indname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2,
statid VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL,
tabname VARCHAR2 DEFAULT NULL
);
参数解释如下表所示。
| 参数 | 解释 |
|---|---|
| ownname | 用户名。如果用户名设置为 NULL,会默认使用当前登录的用户名。 |
| tabname | 表名。 |
| indname | 索引名。 |
| partname | 分区名。 |
| colname | 列名。 |
| cascade | 是否一并导出列级的统计信息。默认为 TRUE。 |
| stattab | 指定导出统计信息用户表的表名。 |
| statid | 该参数暂未实现,不可用。 |
| statown | 指定导出统计信息用户表的用户名。 |
| stat_category | 该参数暂未实现,不可用。 |
导入功能
目前支持如下三种导出统计信息的方式:
使用存储过程
import_table_stats导入表级的统计信息。使用存储过程
import_column_stats导入列级的统计信息。使用存储过程
import_schema_stats导入 Schema下所有表的统计信息。使用存储过程
import_index_stats导入索引统计信息。
具体的存储过程定义如下:
PROCEDURE import_table_stats (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2,
statid VARCHAR2 DEFAULT NULL,
cascade BOOLEAN DEFAULT TRUE,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT FALSE,
force BOOLEAN DEFAULT FALSE,
stat_category VARCHAR2 DEFAULT DEFAULT_STAT_CATEGORY
);
PROCEDURE import_column_stats (
ownname VARCHAR2,
tabname VARCHAR2,
colname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2,
statid VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT FALSE,
force BOOLEAN DEFAULT FALSE
);
PROCEDURE import_schema_stats (
ownname VARCHAR2,
stattab VARCHAR2,
statid VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT FALSE,
force BOOLEAN DEFAULT FALSE
);
PROCEDURE import_index_stats (
ownname VARCHAR2,
indname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2,
statid VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT FALSE,
force BOOLEAN DEFAULT FALSE,
tabname VARCHAR2 DEFAULT NULL
);
参数解释如下表所示。
| 参数 | 解释 |
|---|---|
| ownname | 用户名。如果用户名设置为 NULL,会默认使用当前登录的用户名。 |
| tabname | 表名。 |
| indname | 索引名。 |
| partname | 分区名。 |
| colname | 列名。 |
| cascade | 是否一并导出列级的统计信息。默认为 TRUE。 |
| stattab | 指定导出统计信息用户表的表名。 |
| statid | 该参数暂未实现,不可用。 |
| statown | 指定导出统计信息用户表的用户名。 |
| stat_category | 该参数暂未实现,不可用。 |
| no_invalidate | 该参数暂未实现,不可用。 |
| force | 是否强制删除,并忽略锁的状态。默认为 FALSE。 |
示例
创建用户
test的统计信息用户表test_stat。CALL dbms_stats.create_stat_table('test', 'test_stat');将用户
test的tbl1表的统计信息导出到test_stat中。CALL dbms_stats.export_table_stats('test', 'tbl1', stattab=>'tbl1_stat', statown=>'test');将用户
test的test_stat表的统计信息导入到用户test1的表tbl1中。CALL dbms_stats.import_table_stats('test1', 'tbl1', stattab=>'test_stat', statown=>'test');删除用户
test统计信息用户表test_stat。CALL dbms_stats.drop_stat_table('test', 'test_stat');




