There is a new feature in 11G that does not allocate segment when there is no data in the table to save space
Workaround:
1, insert a line, and then rollback will produce segment.
The method is to insert data in an empty table and then delete it, resulting in segment. When you export, you can export an empty table.
2. Set Deferred_segment_creation parameters
Show Parameter Deferred_segment_creation
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
Deferred_segment_creation Boolean TRUE
Sql> alter system set DEFERRED_SEGMENT_CREATION=FALSE;
The system has changed.
Sql> Show Parameter Deferred_segment_creation
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
Deferred_segment_creation Boolean FALSE
The parameter value defaults to True, and when it is changed to False, the segment is allocated, whether it is an empty table or a non-empty table.
Note that this value is set to have no effect on the previously imported empty table, still cannot be exported, and can only have a effect on the table that is added later. If you want to export an empty table before, you can only use the first method.
It took me a long time to find this method at last.
Check all the empty tables under the current user first
Select table_name from user_tables where num_rows=0;
Look for an empty table with the following sentence
select ' ALTER TABLE ' | | table_name| | ' allocate extent ' from User_tables where num_rows=0
Export the query results and execute the exported statements
' Altertable ' | | table_name| | ' allocateextent; '
-----------------------------------------------------------
ALTER TABLE aq$_aq$_mem_mc_h allocate extent;
ALTER TABLE Aq$_aq$_mem_mc_g allocate extent;
ALTER TABLE aq$_aq$_mem_mc_i allocate extent;
ALTER TABLE aq$_aq_prop_table_t allocate extent;
ALTER TABLE Aq$_aq_prop_table_h allocate extent;
ALTER TABLE Aq$_aq_prop_table_g allocate extent;
ALTER TABLE aq$_aq_prop_table_i allocate extent;
ALTER TABLE aq$_kupc$datapump_quetab_t allocate extent;
ALTER TABLE Aq$_kupc$datapump_quetab_h allocate extent;
ALTER TABLE Aq$_kupc$datapump_quetab_g allocate extent;
ALTER TABLE aq$_kupc$datapump_quetab_i allocate extent;
' Altertable ' | | table_name| | ' allocateextent; '
-----------------------------------------------------------
ALTER TABLE aq$_sys$service_metrics_tab_t allocate extent;
ALTER TABLE Aq$_sys$service_metrics_tab_h allocate extent;
ALTER TABLE Aq$_sys$service_metrics_tab_g allocate extent;
ALTER TABLE aq$_sys$service_metrics_tab_i allocate extent;
And then execute it again.
EXP User name/password @ database name File=/home/oracle/exp.dmp log=/home/oracle/exp_smsrun.log
Success.