问题现象
某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) 子句。
总结

推荐的生产导入命令
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》




