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

Oracle 表结构迁移,空间暴涨了 20GB?这个坑你踩过吗?

原创 陈举超 15小时前
8

问题现象

某Oracle 11.2.0.4 数据库,用户 CJC01 下有多个分区表,一共包含2837 个分区。使用 expdp CONTENT=METADATA_ONLY 仅导出表结构,导出文件只有204 KB。但通过 impdp 导入到新用户 CJC02 后,目标表空间瞬间占用 20 多 GB,而实际并未导入任何业务数据。

检查数据库参数:

SQL> show parameter deferred_segment_creation;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
deferred_segment_creation            boolean     TRUE

延迟段创建明明是 TRUE,为什么导入空分区还会占用这么大空间?

问题原因

根本原因:
源库中已经分配了段的分区,其 DDL 中携带了 STORAGE(INITIAL 8388608) 和 SEGMENT CREATION IMMEDIATE 子句。
Data Pump 导出元数据时将这些存储属性原样写入 dump 文件,导入时 Oracle 会为这些分区立即重建段并分配 8MB 初始区。

具体逻辑:
在 DEFERRED_SEGMENT_CREATION=TRUE 时,创建分区表默认所有分区延迟创建段。
一旦向某个分区插入数据,该分区立即分配段,也就是从SEGMENT CREATION DEFERRED变为SEGMENT CREATION IMMEDIATE,默认初始区为 8MB(由隐藏参数 _partition_large_extents=TRUE 控制)。
expdp CONTENT=METADATA_ONLY 导出时,有数据的分区在 DDL 中会带上 STORAGE(INITIAL 8388608) 子句。
impdp 默认带有这些存储属性,导致目标库中这些分区立即分配 8MB,与目标库的 DEFERRED_SEGMENT_CREATION 参数无关。
环境 2837 个分区中大部分有数据,因此总占用 ≈ 有数据的分区数 × 8MB ≈ 20 多 GB。

分析过程

下面通过一个完整的实验复现并解决该问题。

1. 环境准备

-- 使用 sysdba 连接
sqlplus / as sysdba

-- 确认延迟段创建参数
SHOW PARAMETER DEFERRED_SEGMENT_CREATION;
-- 应返回 TRUE

-- 创建表空间
CREATE TABLESPACE TBS_CJC01
DATAFILE '/u01/app/oracle/oradata/cjc/cjc01_data01.dbf'
SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED;

CREATE TABLESPACE TBS_CJC02
DATAFILE '/u01/app/oracle/oradata/cjc/cjc02_data01.dbf'
SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED;

-- 创建用户,密码均为 1
CREATE USER CJC01 IDENTIFIED BY 1
DEFAULT TABLESPACE TBS_CJC01
QUOTA UNLIMITED ON TBS_CJC01;

CREATE USER CJC02 IDENTIFIED BY 1
DEFAULT TABLESPACE TBS_CJC02
QUOTA UNLIMITED ON TBS_CJC02;

GRANT CONNECT, RESOURCE, DBA TO CJC01, CJC02;

-- 创建目录对象
CREATE OR REPLACE DIRECTORY cjc_dir AS '/home/oracle/dump';
GRANT READ, WRITE ON DIRECTORY cjc_dir TO CJC01, CJC02;

2.在 CJC01 创建 10 个分区的测试表

CONN CJC01/1

CREATE TABLE CJC01.PART_TAB (
  id NUMBER,
  created_date DATE,
  data VARCHAR2(100)
)
PARTITION BY RANGE (created_date) (
  PARTITION p_000 VALUES LESS THAN (TO_DATE('2023-01-01','YYYY-MM-DD')),
  PARTITION p_001 VALUES LESS THAN (TO_DATE('2023-02-01','YYYY-MM-DD')),
  PARTITION p_002 VALUES LESS THAN (TO_DATE('2023-03-01','YYYY-MM-DD')),
  PARTITION p_003 VALUES LESS THAN (TO_DATE('2023-04-01','YYYY-MM-DD')),
  PARTITION p_004 VALUES LESS THAN (TO_DATE('2023-05-01','YYYY-MM-DD')),
  PARTITION p_005 VALUES LESS THAN (TO_DATE('2023-06-01','YYYY-MM-DD')),
  PARTITION p_006 VALUES LESS THAN (TO_DATE('2023-07-01','YYYY-MM-DD')),
  PARTITION p_007 VALUES LESS THAN (TO_DATE('2023-08-01','YYYY-MM-DD')),
  PARTITION p_008 VALUES LESS THAN (TO_DATE('2023-09-01','YYYY-MM-DD')),
  PARTITION p_009 VALUES LESS THAN (MAXVALUE)
);

确认所有分区均为延迟创建:

SELECT partition_name, segment_created
FROM dba_tab_partitions
WHERE table_owner = 'CJC01'
AND table_name = 'PART_TAB'
ORDER BY partition_name;

PARTITION_NAME                 SEGM
------------------------------ ----
P_000                          NO
P_001                          NO
P_002                          NO
P_003                          NO
P_004                          NO
P_005                          NO
P_006                          NO
P_007                          NO
P_008                          NO
P_009                          NO

10 rows selected.

3. 向其中 3 个分区插入数据

INSERT INTO CJC01.PART_TAB VALUES (1, TO_DATE('2023-01-15','YYYY-MM-DD'), 'data1');
INSERT INTO CJC01.PART_TAB VALUES (2, TO_DATE('2023-04-15','YYYY-MM-DD'), 'data2');
INSERT INTO CJC01.PART_TAB VALUES (3, TO_DATE('2023-07-15','YYYY-MM-DD'), 'data3');
COMMIT;

再次查看分区段状态:

SELECT partition_name, segment_created, initial_extent/1024/1024 AS initial_mb
FROM dba_tab_partitions
WHERE table_owner = 'CJC01'
AND table_name = 'PART_TAB'
ORDER BY partition_name;
-- 预期:p_001、p_004、p_007 的 SEGMENT_CREATED='YES',INITIAL_MB=8;其余为 'NO'

PARTITION_NAME                 SEGM INITIAL_MB
------------------------------ ---- ----------
P_000                          NO
P_001                          YES           8
P_002                          NO
P_003                          NO
P_004                          YES           8
P_005                          NO
P_006                          NO
P_007                          YES           8
P_008                          NO
P_009                          NO

10 rows selected.

4.查看源表 DDL(关键)

SET LONG 1000000
SET PAGESIZE 0
SELECT DBMS_METADATA.GET_DDL('TABLE', 'PART_TAB', 'CJC01') FROM dual;

在输出中可以看到:

  CREATE TABLE "CJC01"."PART_TAB"
   (    "ID" NUMBER,
        "CREATED_DATE" DATE,
        "DATA" VARCHAR2(100)
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_CJC01"
  PARTITION BY RANGE ("CREATED_DATE")
 (PARTITION "P_000"  VALUES LESS THAN (TO_DATE(' 2023-01-01 00:00:00', 'SYYYY-MM
-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_CJC01" ,
 PARTITION "P_001"  VALUES LESS THAN (TO_DATE(' 2023-02-01 00:00:00', 'SYYYY-MM-
DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 8388608 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_CJC01" ,
 PARTITION "P_002"  VALUES LESS THAN (TO_DATE(' 2023-03-01 00:00:00', 'SYYYY-MM-
DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_CJC01" ,
 PARTITION "P_003"  VALUES LESS THAN (TO_DATE(' 2023-04-01 00:00:00', 'SYYYY-MM-
DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_CJC01" ,
 PARTITION "P_004"  VALUES LESS THAN (TO_DATE(' 2023-05-01 00:00:00', 'SYYYY-MM-
DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 8388608 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_CJC01" ,
 PARTITION "P_005"  VALUES LESS THAN (TO_DATE(' 2023-06-01 00:00:00', 'SYYYY-MM-
DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_CJC01" ,
 PARTITION "P_006"  VALUES LESS THAN (TO_DATE(' 2023-07-01 00:00:00', 'SYYYY-MM-
DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_CJC01" ,
 PARTITION "P_007"  VALUES LESS THAN (TO_DATE(' 2023-08-01 00:00:00', 'SYYYY-MM-
DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 8388608 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_CJC01" ,
 PARTITION "P_008"  VALUES LESS THAN (TO_DATE(' 2023-09-01 00:00:00', 'SYYYY-MM-
DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_CJC01" ,
 PARTITION "P_009"  VALUES LESS THAN (MAXVALUE) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_CJC01" )

分区定义P_001、P_004、P_007末尾出现 SEGMENT CREATION IMMEDIATE
分区 P_001、P_004、P_007 的定义中包含 STORAGE (INITIAL 8388608 NEXT 1048576 …)
这证明:有数据的分区会在 DDL 中携带 8MB 初始区存储子句,导出时被完整写入 dump 文件。

5.导出 CJC01 表结构

expdp CJC01/1 DIRECTORY=cjc_dir \
DUMPFILE=cjc01_metadata.dmp \
CONTENT=METADATA_ONLY \
LOGFILE=expdp_metadata.log
[oracle@cjc-db-02 dump]$ expdp CJC01/1 DIRECTORY=cjc_dir \
> DUMPFILE=cjc01_metadata.dmp \
> CONTENT=METADATA_ONLY \
> LOGFILE=expdp_metadata.log

Export: Release 11.2.0.4.0 - Production on Fri Sep 11 17:33:00 2026

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "CJC01"."SYS_EXPORT_SCHEMA_01":  CJC01/******** DIRECTORY=cjc_dir DUMPFILE=cjc01_metadata.dmp CONTENT=METADATA_ONLY LOGFILE=expdp_metadata.log
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Master table "CJC01"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for CJC01.SYS_EXPORT_SCHEMA_01 is:
  /home/oracle/dump/cjc01_metadata.dmp
Job "CJC01"."SYS_EXPORT_SCHEMA_01" successfully completed at Fri Sep 11 17:33:07 2026 elapsed 0 00:00:07
[oracle@cjc-db-02 dump]$ ls -lrth
total 208K
-rw-r----- 1 oracle oinstall 204K Sep 11 17:33 cjc01_metadata.dmp
-rw-r--r-- 1 oracle oinstall 1.4K Sep 11 17:33 expdp_metadata.log

6.第一次导入(不加 TRANSFORM,复现膨胀)

– 确认 CJC02 表空间初始占用

CONN / as sysdba
SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024,2) AS used_mb
FROM dba_segments
WHERE tablespace_name = 'TBS_CJC02'
GROUP BY tablespace_name;
no rows selected
impdp CJC02/1 DIRECTORY=cjc_dir \
DUMPFILE=cjc01_metadata.dmp \
REMAP_SCHEMA=CJC01:CJC02 \
REMAP_TABLESPACE=TBS_CJC01:TBS_CJC02 \
LOGFILE=impdp_bad.log
[oracle@cjc-db-02 dump]$ impdp CJC02/1 DIRECTORY=cjc_dir \
> DUMPFILE=cjc01_metadata.dmp \
> REMAP_SCHEMA=CJC01:CJC02 \
> REMAP_TABLESPACE=TBS_CJC01:TBS_CJC02 \
> LOGFILE=impdp_bad.log

Import: Release 11.2.0.4.0 - Production on Fri Sep 11 17:34:14 2026

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "CJC02"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "CJC02"."SYS_IMPORT_FULL_01":  CJC02/******** DIRECTORY=cjc_dir DUMPFILE=cjc01_metadata.dmp REMAP_SCHEMA=CJC01:CJC02 REMAP_TABLESPACE=TBS_CJC01:TBS_CJC02 LOGFILE=impdp_bad.log
Processing object type SCHEMA_EXPORT/USER
ORA-31684: Object type USER:"CJC02" already exists
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Job "CJC02"."SYS_IMPORT_FULL_01" completed with 1 error(s) at Fri Sep 11 17:34:15 2026 elapsed 0 00:00:01

验证膨胀:

SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024,2) AS used_mb
FROM dba_segments
WHERE tablespace_name = 'TBS_CJC02'
GROUP BY tablespace_name;
-- 预期:约 24MB(3 个有数据的分区 × 8MB)
TABLESPACE_NAME                   USED_MB
------------------------------ ----------
TBS_CJC02                              24
SELECT partition_name, segment_created, initial_extent/1024/1024 AS initial_mb
FROM dba_tab_partitions
WHERE table_owner = 'CJC02'
AND table_name = 'PART_TAB'
ORDER BY partition_name;
PARTITION_NAME                 SEGM INITIAL_MB
------------------------------ ---- ----------
P_000                          NO
P_001                          YES           8
P_002                          NO
P_003                          NO
P_004                          YES           8
P_005                          NO
P_006                          NO
P_007                          YES           8
P_008                          NO
P_009                          NO

10 rows selected.

– 预期:p_001、p_004、p_007 的 SEGMENT_CREATED=‘YES’,INITIAL_MB=8;其余为 ‘NO’
结论:
即使目标库 DEFERRED_SEGMENT_CREATION=TRUE,源库中已有段的分区在导入时仍会立即创建段并分配 8MB 初始区。生产环境 2837 个分区中大部分有数据,因此总膨胀 ≈ 有数据的分区数 × 8MB,达到 20 多 GB。

7.清理 CJC02,使用 TRANSFORM 重新导入

CONN / as sysdba

DROP USER CJC02 CASCADE;
DROP TABLESPACE TBS_CJC02 INCLUDING CONTENTS AND DATAFILES;

CREATE TABLESPACE TBS_CJC02
DATAFILE '/u01/app/oracle/oradata/cjc/cjc02_data01.dbf'
SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED;

CREATE USER CJC02 IDENTIFIED BY 1
DEFAULT TABLESPACE TBS_CJC02
QUOTA UNLIMITED ON TBS_CJC02;

GRANT CONNECT, RESOURCE, DBA TO CJC02;
GRANT READ, WRITE ON DIRECTORY cjc_dir TO CJC02;
impdp CJC02/1 DIRECTORY=cjc_dir \
DUMPFILE=cjc01_metadata.dmp \
REMAP_SCHEMA=CJC01:CJC02 \
REMAP_TABLESPACE=TBS_CJC01:TBS_CJC02 \
TRANSFORM=SEGMENT_ATTRIBUTES:N:TABLE \
TRANSFORM=STORAGE:N:TABLE \
LOGFILE=impdp_good.log
[oracle@cjc-db-02 dump]$ impdp CJC02/1 DIRECTORY=cjc_dir \
> DUMPFILE=cjc01_metadata.dmp \
> REMAP_SCHEMA=CJC01:CJC02 \
> REMAP_TABLESPACE=TBS_CJC01:TBS_CJC02 \
> TRANSFORM=SEGMENT_ATTRIBUTES:N:TABLE \
> TRANSFORM=STORAGE:N:TABLE \
> LOGFILE=impdp_good.log

Import: Release 11.2.0.4.0 - Production on Fri Sep 11 17:35:41 2026

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "CJC02"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "CJC02"."SYS_IMPORT_FULL_01":  CJC02/******** DIRECTORY=cjc_dir DUMPFILE=cjc01_metadata.dmp REMAP_SCHEMA=CJC01:CJC02 REMAP_TABLESPACE=TBS_CJC01:TBS_CJC02 TRANSFORM=SEGMENT_ATTRIBUTES:N:TABLE TRANSFORM=STORAGE:N:TABLE LOGFILE=impdp_good.log
Processing object type SCHEMA_EXPORT/USER
ORA-31684: Object type USER:"CJC02" already exists
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Job "CJC02"."SYS_IMPORT_FULL_01" completed with 1 error(s) at Fri Sep 11 17:35:42 2026 elapsed 0 00:00:01

验证空间正常:

SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024,2) AS used_mb
FROM dba_segments
WHERE tablespace_name = 'TBS_CJC02'
GROUP BY tablespace_name;
no rows selected
SELECT partition_name, segment_created
FROM dba_tab_partitions
WHERE table_owner = 'CJC02'
AND table_name = 'PART_TAB'
ORDER BY partition_name;
-- 预期:所有分区 SEGMENT_CREATED='NO'(延迟段创建重新生效)

PARTITION_NAME                 SEGM
------------------------------ ----
P_000                          NO
P_001                          NO
P_002                          NO
P_003                          NO
P_004                          NO
P_005                          NO
P_006                          NO
P_007                          NO
P_008                          NO
P_009                          NO

10 rows selected.

查看目标表 DDL:

CONN CJC02/1
SET LONG 1000000
SET PAGESIZE 0
SELECT DBMS_METADATA.GET_DDL('TABLE', 'PART_TAB', 'CJC02') FROM dual;
  CREATE TABLE "CJC02"."PART_TAB"
   (    "ID" NUMBER,
        "CREATED_DATE" DATE,
        "DATA" VARCHAR2(100)
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_CJC02"
  PARTITION BY RANGE ("CREATED_DATE")
 (PARTITION "P_000"  VALUES LESS THAN (TO_DATE(' 2023-01-01 00:00:00', 'SYYYY-MM
-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_CJC02" ,
 PARTITION "P_001"  VALUES LESS THAN (TO_DATE(' 2023-02-01 00:00:00', 'SYYYY-MM-
DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_CJC02" ,
 PARTITION "P_002"  VALUES LESS THAN (TO_DATE(' 2023-03-01 00:00:00', 'SYYYY-MM-
DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_CJC02" ,
 PARTITION "P_003"  VALUES LESS THAN (TO_DATE(' 2023-04-01 00:00:00', 'SYYYY-MM-
DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_CJC02" ,
 PARTITION "P_004"  VALUES LESS THAN (TO_DATE(' 2023-05-01 00:00:00', 'SYYYY-MM-
DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_CJC02" ,
 PARTITION "P_005"  VALUES LESS THAN (TO_DATE(' 2023-06-01 00:00:00', 'SYYYY-MM-
DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_CJC02" ,
 PARTITION "P_006"  VALUES LESS THAN (TO_DATE(' 2023-07-01 00:00:00', 'SYYYY-MM-
DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_CJC02" ,
 PARTITION "P_007"  VALUES LESS THAN (TO_DATE(' 2023-08-01 00:00:00', 'SYYYY-MM-
DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_CJC02" ,
 PARTITION "P_008"  VALUES LESS THAN (TO_DATE(' 2023-09-01 00:00:00', 'SYYYY-MM-
DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_CJC02" ,
 PARTITION "P_009"  VALUES LESS THAN (MAXVALUE) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TBS_CJC02" )

输出中不再包含 SEGMENT CREATION IMMEDIATE 和 STORAGE(INITIAL 8388608) 子句。

总结

图片.png

推荐的生产导入命令

impdp CJC02/1 DIRECTORY=cjc_dir \
DUMPFILE=cjc01_metadata.dmp \
REMAP_SCHEMA=CJC01:CJC02 \
REMAP_TABLESPACE=TBS_CJC01:TBS_CJC02 \
TRANSFORM=SEGMENT_ATTRIBUTES:N:TABLE \
TRANSFORM=STORAGE:N:TABLE \
LOGFILE=impdp_good.log

验证语句汇总
– 查看表空间使用量

SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024,2) AS used_mb
FROM dba_segments
WHERE tablespace_name = 'TBS_CJC02'
GROUP BY tablespace_name;

– 查看分区段创建情况

SELECT partition_name, segment_created, initial_extent/1024/1024 AS initial_mb
FROM dba_tab_partitions
WHERE table_owner = 'CJC02'
AND table_name = 'PART_TAB'
ORDER BY partition_name;

– 查看源表 DDL(确认存储子句)

SET LONG 1000000
SET PAGESIZE 0
SELECT DBMS_METADATA.GET_DDL('TABLE', 'PART_TAB', 'CJC01') FROM dual;

一句话总结: 迁移表结构时,务必加上 TRANSFORM=SEGMENT_ATTRIBUTES:N:TABLE 和 TRANSFORM=STORAGE:N:TABLE,否则源库中有数据的分区会将其 8MB 初始区属性带到目标库,导致空间暴涨。

欢迎关注我的公众号《IT小Chen

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

评论