---
title: "COPY_TABLE_STATS - OceanBase 数据库 V4.6.0 | OceanBase 文档中心"
description: COPY_TABLE_STATS COPY_TABLE_STATS 过程用于将源分区（或子分区）的统计信息复制到目标分区（或子分区）。 功能适用性 该内容仅适用于 OceanBase 数据库企业版。OceanBase 数据库社区版暂不支持。 语法 DBMS_STATS.COPY_TABLE_STATS ( ownna…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.6.0

# COPY_TABLE_STATS

更新时间：2026-07-15 15:27:39

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.6.0/zh-CN/700.reference/600.pl-reference/300.pl-oracle/1400.pl-system-package-oracle/15900.dbms-stats-oracle/4500.copy-table-stat-of-oracle-mode.md)  

`COPY_TABLE_STATS` 过程用于将源分区（或子分区）的统计信息复制到目标分区（或子分区）。

#### 功能适用性

该内容仅适用于 OceanBase 数据库企业版。OceanBase 数据库社区版暂不支持。

## 语法

```sql
DBMS_STATS.COPY_TABLE_STATS (
  ownname          VARCHAR2,
  tabname          VARCHAR2,
  srcpartname      VARCHAR2,
  dstpartname      VARCHAR2,
  scale_factor     VARCHAR2,
  flags            NUMBER DEFAULT NULL,
  force            BOOLEAN DEFAULT FALSE);

```

## 参数解释

| 参数 | 说明 |
| --- | --- |
| ownname | 指定源和目标分区（或子分区）所在表的模式（用户）名称。 |
| tabname | 指定源和目标分区（或子分区）所对应的表的名称。 |
| srcpartname | 指定要复制统计信息的源分区（或子分区）。 |
| dtspartname | 指定接收统计信息的目标分区（或子分区）。 |
| scale_factor | 在复制到目标分区（或子分区）时，用于按比例调整 nblks（块数）、nrows（行数）等统计属性的数值。 |
| flags | 默认为 `NULL`。一般用户无需设置。 |
| force | 默认为 `FALSE`。若该参数值设为 `TRUE`，即使目标分区（或子分区）当前处于锁定状态，仍会继续执行统计信息的复制操作。 |

## 异常情况

| 错误码 | 描述 |
| --- | --- |
| OBE-20000 | 表示分区名称无效。 |
| OBE-20001 | 表示源分区和目标分区类型不同。 |

## 使用说明

该过程按照以下方式更新目标分区中的最小值和最大值：

- 如果分区类型为 HASH，则目标分区的最小值和最大值与源分区的相同。
 - 如果分区类型为 LIST，则行为取决于目标分区的设置：

     - 若目标分区是 DEFAULT 分区，则：

           - 目标分区的最小值设置为源分区的最小值。
           - 目标分区的最大值设置为源分区的最大值。
     - 如果目标分区是一个 NOT DEFAULT 分区，则：

           - 目标分区的最小值设置为描述目标分区的值列表中的最小值。
           - 目标分区的最大值设置为描述目标分区的值列表中的最大值。
 - 如果分区类型为 RANGE，则：

     - 若目标分区是第一个分区，则：

           - 若目标分区的上界是 `MAXVALUE`，则：

                   - 目标分区和源分区是同一个分区，无需拷贝或更新最小值和最大值，即它的最小值和最大值不需要设置。
           - 若目标分区的上界不是 `MAXVALUE`，则：

                   - 目标分区的最大值最小值都会被设置为目标分区的上界。
     - 若目标分区不是第一个分区，则：

           - 若目标分区是单列分区键，则：

                   - 若源分区只有一个值且等于源分区的下边界，并且目标分区的上界不是 `MAXVALUE`，则目标分区的最大值和最小值都设置为目标分区的下边界。
                   - 否则：

                             - 若目标分区的上界是 `MAXVALUE`，则最大值和最小值都设置成目标分区的下边界（也就是前一个分区的上边界）。
                             - 若目标分区的上界不是 `MAXVALUE`，则最大值设置成目标分区的上边界，最小值设置成目标分区的下边界。
           - 若目标分区是多列分区键，则：

                   - 若源分区只有一个值且等于源分区的下边界，则目标分区的最大值和最小值都设置为目标分区的下边界。
                   - 否则，当前列 **C** 采用前述规则，对于后续列 **Cx**，则：

                             - **Cx-1** 在目标分区和目标分区之前的 `MAXVALUE` 相同，则目标分区的最大值设置为目标分区的上边界。
                             - 否则，目标分区列的最大值设置为目标分区上限和源分区列最大值中的较大值。

## 示例

创建一个 HASH 分区表 `test_copy_tbl1` 并执行相关的统计信息操作。

1. （可选）如果存在名为 `test_copy_tbl1` 的表，那么执行下面语句删除它。

   ```sql
   DROP TABLE test_copy_tbl1;

   ```
 2. 执行下面语句，创建一个名为 `test_copy_tbl1` 的表，包含两个整数列 `col1` 和 `col2`，并通过 HASH 函数对 `col1` 进行分区，共分为四个分区：`p1`、`p2`、`p3` 和 `p4`。

   ```sql
   CREATE TABLE test_copy_tbl1(col1 INT, col2 INT) PARTITION BY HASH(col1) (PARTITION p1, PARTITION p2, PARTITION p3, PARTITION p4);

   ```
 3. 执行下面语句，向 `test_copy_tbl1` 表中插入 10 行数据，其中 `col1` 列依次为 1 到 10，而 `col2` 列则为 2 到 11。

   ```sql
   INSERT INTO test_copy_tbl1 SELECT level, level + 1 FROM dual CONNECT BY LEVEL <= 10;

   ```

   返回结果如下：

   ```shell
   Query OK, 10 rows affected (0.060 sec)
   Records: 10  Duplicates: 0  Warnings: 0

   ```
 4. 执行下面语句，调用 `DBMS_STATS` 包中的 `gather_table_stats` 过程收集名为 `test_copy_tbl1` 的表中名为 `P1` 的分区的统计信息。`method_opt` 参数指定所有列的直方图大小为 32 桶。

   ```sql
   CALL dbms_stats.gather_table_stats('SYS','TEST_COPY_TBL1', 'P1', method_opt=>'for all columns size 32');

   ```
 5. 执行下面语句，调用 `DBMS_STATS` 包中的 `copy_table_stats` 过程，将名为 `test_copy_tbl1` 表中 `P1` 分区的统计信息按比例因子 2 复制到 `P2` 分区。

   ```sql
   CALL dbms_stats.copy_table_stats('SYS','TEST_COPY_TBL1','P1','P2', scale_factor=>2);

   ```
 6. 执行下面语句，查询视图 `all_tab_statistics`，获取名为 `TEST_COPY_TBL1` 且所有者为 `SYS` 的表的所有分区的相关统计信息，包括表名、分区名、行数、块数、平均行长度、是否锁定统计类型、统计信息是否过时以及最后分析时间。

   ```sql
   SELECT table_name, partition_name, num_rows, blocks, avg_row_len, stattype_locked locked, stale_stats, last_analyzed FROM all_tab_statistics WHERE table_name = 'TEST_COPY_TBL1' AND owner = 'SYS';

   ```

   返回结果如下：

   ```shell
   +----------------+----------------+----------+--------+-------------+--------+-------------+---------------+
   | TABLE_NAME     | PARTITION_NAME | NUM_ROWS | BLOCKS | AVG_ROW_LEN | LOCKED | STALE_STATS | LAST_ANALYZED |
   +----------------+----------------+----------+--------+-------------+--------+-------------+---------------+
   | TEST_COPY_TBL1 | NULL           |       10 |   NULL |          40 | NULL   | NO          | 08-JAN-24     |
   | TEST_COPY_TBL1 | P1             |        2 |   NULL |          40 | NULL   | NO          | 08-JAN-24     |
   | TEST_COPY_TBL1 | P2             |        4 |   NULL |          40 | NULL   | NO          | 08-JAN-24     |
   | TEST_COPY_TBL1 | P3             |     NULL |   NULL |        NULL | NULL   | NULL        | NULL          |
   | TEST_COPY_TBL1 | P4             |     NULL |   NULL |        NULL | NULL   | NULL        | NULL          |
   +----------------+----------------+----------+--------+-------------+--------+-------------+---------------+
   5 rows in set

   ```

   更多有关视图 `all_tab_statistics` 的详细信息，请参见 [ALL_TAB_STATISTICS](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005683871)。
 7. 执行下面语句，查询视图 `all_part_col_statistics`，获取名为 `TEST_COPY_TBL1` 且所有者为 `SYS` 的表的分区列统计信息，并按分区名和列名排序。

   ```sql
   SELECT * FROM all_part_col_statistics WHERE table_name = 'TEST_COPY_TBL1' AND owner = 'SYS' ORDER BY partition_name, column_name;

   ```

   返回结果如下：

   ```shell
   +-------+----------------+----------------+-------------+--------------+-----------+------------+---------+-----------+-------------+-------------+---------------+--------------+------------+-------+-------------+-----------+
   | OWNER | TABLE_NAME     | PARTITION_NAME | COLUMN_NAME | NUM_DISTINCT | LOW_VALUE | HIGH_VALUE | DENSITY | NUM_NULLS | NUM_BUCKETS | SAMPLE_SIZE | LAST_ANALYZED | GLOBAL_STATS | USER_STATS | NOTES | AVG_COL_LEN | HISTOGRAM |
   +-------+----------------+----------------+-------------+--------------+-----------+------------+---------+-----------+-------------+-------------+---------------+--------------+------------+-------+-------------+-----------+
   | SYS   | TEST_COPY_TBL1 | P1             | COL1        |            2 | 2         | 7          |     .25 |         0 |           2 |           2 | 08-JAN-24     | NO           | NO         | NULL  |          20 | FREQUENCY |
   | SYS   | TEST_COPY_TBL1 | P1             | COL2        |            2 | 3         | 8          |     .25 |         0 |           2 |           2 | 08-JAN-24     | NO           | NO         | NULL  |          20 | FREQUENCY |
   | SYS   | TEST_COPY_TBL1 | P2             | COL1        |            2 | 2         | 7          |     .25 |         0 |           2 |           2 | 08-JAN-24     | NO           | NO         | NULL  |          20 | FREQUENCY |
   | SYS   | TEST_COPY_TBL1 | P2             | COL2        |            2 | 3         | 8          |     .25 |         0 |           2 |           2 | 08-JAN-24     | NO           | NO         | NULL  |          20 | FREQUENCY |
   | SYS   | TEST_COPY_TBL1 | P3             | COL1        |         NULL | NULL      | NULL       |    NULL |      NULL |        NULL |        NULL | NULL          | NULL         | NULL       | NULL  |        NULL | NULL      |
   | SYS   | TEST_COPY_TBL1 | P3             | COL2        |         NULL | NULL      | NULL       |    NULL |      NULL |        NULL |        NULL | NULL          | NULL         | NULL       | NULL  |        NULL | NULL      |
   | SYS   | TEST_COPY_TBL1 | P4             | COL1        |         NULL | NULL      | NULL       |    NULL |      NULL |        NULL |        NULL | NULL          | NULL         | NULL       | NULL  |        NULL | NULL      |
   | SYS   | TEST_COPY_TBL1 | P4             | COL2        |         NULL | NULL      | NULL       |    NULL |      NULL |        NULL |        NULL | NULL          | NULL         | NULL       | NULL  |        NULL | NULL      |
   +-------+----------------+----------------+-------------+--------------+-----------+------------+---------+-----------+-------------+-------------+---------------+--------------+------------+-------+-------------+-----------+
   8 rows in set

   ```

   更多有关视图 `all_part_col_statistics` 的详细信息，请参见 [ALL_PART_COL_STATISTICS](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005683559)。
 8. 执行下面语句，查询视图 `all_part_histograms`，获取名为 `TEST_COPY_TBL1` 且所有者为 `SYS` 的表的分区列直方图信息，并按分区名和列名排序。

   ```sql
   SELECT * FROM all_part_histograms  WHERE table_name = 'TEST_COPY_TBL1' AND owner = 'SYS' ORDER BY partition_name, column_name;

   ```

   返回结果如下：

   ```shell
   +-------+----------------+----------------+-------------+-----------------+----------------+-----------------------+---------------------------+-----------------------+
   | OWNER | TABLE_NAME     | PARTITION_NAME | COLUMN_NAME | ENDPOINT_NUMBER | ENDPOINT_VALUE | ENDPOINT_ACTUAL_VALUE | ENDPOINT_ACTUAL_VALUE_RAW | ENDPOINT_REPEAT_COUNT |
   +-------+----------------+----------------+-------------+-----------------+----------------+-----------------------+---------------------------+-----------------------+
   | SYS   | TEST_COPY_TBL1 | P1             | COL1        |               2 |           NULL | 7                     | 7                         |                     1 |
   | SYS   | TEST_COPY_TBL1 | P1             | COL1        |               1 |           NULL | 2                     | 2                         |                     1 |
   | SYS   | TEST_COPY_TBL1 | P1             | COL2        |               2 |           NULL | 8                     | 8                         |                     1 |
   | SYS   | TEST_COPY_TBL1 | P1             | COL2        |               1 |           NULL | 3                     | 3                         |                     1 |
   | SYS   | TEST_COPY_TBL1 | P2             | COL1        |               2 |           NULL | 7                     | 7                         |                     1 |
   | SYS   | TEST_COPY_TBL1 | P2             | COL1        |               1 |           NULL | 2                     | 2                         |                     1 |
   | SYS   | TEST_COPY_TBL1 | P2             | COL2        |               2 |           NULL | 8                     | 8                         |                     1 |
   | SYS   | TEST_COPY_TBL1 | P2             | COL2        |               1 |           NULL | 3                     | 3                         |                     1 |
   +-------+----------------+----------------+-------------+-----------------+----------------+-----------------------+---------------------------+-----------------------+
   8 rows in set

   ```

   更多有关视图 `all_part_histograms` 的详细信息，请参见 [ALL_PART_HISTOGRAMS](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005683769)。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
