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

分布式数据库学习Note66:OceanBase社区版中,导入导出功能如何使用?

统计信息导出功能主要用于将表的统计信息导出到一张指定的用户表中保存下来,而导入功能主要作用是将指定用户表中的统计信息导入到当前统计信息内部表中,省去重新收集到的过程。

例如,在进行数据库迁移时,可以把大表的统计信息导出到指定用户表中一起做数据迁移,而当数据迁移成功之后就可以直接将之前保存统计信息的用户表中数据导入到新库对应的统计信息内部表中。

统计信息用户表

统计信息用户表主要用于保存内部表收集的统计信息,具体的表结构及相关解释见下表。

字段数据类型表级统计信息 TYPE='T'列级统计信息 TYPE='C'
STATIDVARCHAR2(30)User SettableUser Settable
TYPECHAR(1)TableColumn
VERSIONNUMBER预留字段预留字段
FLAGSNUMBER预留字段预留字段
C1VARCHAR2(30)Table NameTable Name
C2VARCHAR2(30)Partition NamePartition Name
C3VARCHAR2(30)Subpartition NameSubpartition Name
C4VARCHAR2(30)预留字段Column Name
C5VARCHAR2(30)OwnerOwner
C6VARCHAR2(30)预留字段预留字段
N1NUMBERNum RowsNum Distinct
N2NUMBERBlocksDensity
N3NUMBERAverage Row Length预留字段
N4NUMBERSample SizeSample Size
N5NUMBER预留字段Num Nulls
N6NUMBER预留字段Lower Value
N7NUMBER预留字段High Value
N8NUMBER预留字段Average Column Length
N9NUMBER预留字段预留字段
N10NUMBER预留字段Endpoint Number
N11NUMBER预留字段Endpoint Value
N12NUMBER预留字段ENDPOINT_REPEAT_COUNT
N13NUMBER预留字段预留字段
D1DATELast AnalyzedLast Analyzed
T1TIMESTAMP(6) WITH TIME ZONE预留字段预留字段
R1RAW(32)预留字段Lower RAW Value
R2RAW(32)预留字段High RAW Value
R3RAW(32)预留字段ENDPOINT_ACTUAL_VALUE_RAW
CH1VARCHAR2(1000)预留字段预留字段
CH1CLOB预留字段预留字段
BH1BLOB预留字段预留字段
OB_SPEC1NUMBEROB Macro Block CNTOB LLC Bitmap Size
OB_SPEC2NUMBEROB Micro Block CNT预留字段
OB_SPEC3VARCHAR2(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

示例

  1. 创建用户 test 的统计信息用户表 test_stat

    CALL dbms_stats.create_stat_table('test', 'test_stat');
    
  2. 将用户 test 的 tbl1 表的统计信息导出到 test_stat 中。

    CALL dbms_stats.export_table_stats('test', 'tbl1', stattab=>'tbl1_stat', statown=>'test');
    
  3. 将用户 test 的 test_stat 表的统计信息导入到用户 test1 的表 tbl1 中。

    CALL dbms_stats.import_table_stats('test1', 'tbl1', stattab=>'test_stat', statown=>'test');
    
  4. 删除用户 test 统计信息用户表 test_stat

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

评论