解决ҎQ?/p>
1、insert一行,再rollback׃生segment了?/strong>
该方法是在在I中插入数据,再删除,则生segment。导出时则可导出I?/p>
2、设|deferred_segment_creation 参数
show parameter deferred_segment_creation
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
deferred_segment_creation boolean TRUE
SQL> alter system set deferred_segment_creation=false;
pȝ已更攏V?/span>
SQL> show parameter deferred_segment_creation
NAME TYPE VALUE
----------------------------------- ----------- ------------------------------
deferred_segment_creation boolean FALSE
该参数值默认是TRUEQ当改ؓFALSEӞ无论是空表还是非IQ都分配segment?/p>
需注意的是Q该D|后对以前导入的I不生作用,仍不能导出,只能对后面新增的表生作用。如需导出之前的空表,只能用第一U方法?/p>
搞了我好久,最后查到这个方法?/p>
先查询一下当前用户下的所有空?/p>
select table_name from user_tables where NUM_ROWS=0;
用以下这句查扄?/p>
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
把查询结果导出,执行导出的语?/p>
'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;
然后再执?/p>
exp 用户?密码@数据库名 file=/home/oracle/exp.dmp log=/home/oracle/exp_smsrun.log
成功Q?/p>
SELECT bs.username
"Blocking User", bs.username "DB User",
ws.username "Waiting
User", bs.SID "SID", ws.SID "WSID",
bs.serial# "Serial#",
bs.sql_address "address",
bs.sql_hash_value "Sql hash",
bs.program "Blocking App",
ws.program "Waiting App",
bs.machine "Blocking Machine",
ws.machine "Waiting Machine",
bs.osuser "Blocking OS User",
ws.osuser "Waiting OS User",
bs.serial# "Serial#",
ws.serial# "WSerial#",
DECODE (wk.TYPE,
'MR', 'Media Recovery',
'RT', 'Redo Thread',
'UN', 'USER Name',
'TX', 'Transaction',
'TM', 'DML',
'UL', 'PL/SQL USER LOCK',
'DX', 'Distributed
Xaction',
'CF', 'Control FILE',
'IS', 'Instance State',
'FS', 'FILE SET',
'IR', 'Instance Recovery',
'ST', 'Disk SPACE
Transaction',
'TS', 'Temp Segment',
'IV', 'Library Cache Invalidation',
'LS', 'LOG
START OR Switch',
'RW', 'ROW Wait',
'SQ', 'Sequence Number',
'TE', 'Extend TABLE',
'TT', 'Temp TABLE',
wk.TYPE ) lock_type,
DECODE (hk.lmode,
0, 'None',
1,
'NULL',
2, 'ROW-S (SS)',
3,
'ROW-X (SX)',
4, 'SHARE',
5,
'S/ROW-X (SSX)',
6, 'EXCLUSIVE',
TO_CHAR (hk.lmode)
) mode_held,
DECODE
(wk.request,
0, 'None',
1,
'NULL',
2, 'ROW-S (SS)',
3,
'ROW-X (SX)',
4, 'SHARE',
5,
'S/ROW-X (SSX)',
6, 'EXCLUSIVE',
TO_CHAR (wk.request)
) mode_requested,
TO_CHAR (hk.id1) lock_id1, TO_CHAR (hk.id2) lock_id2,
DECODE
(hk.BLOCK,
0, 'NOT Blocking', /**//* Not
blocking any other processes */
1,
'Blocking', /**//* This lock blocks other processes */
2, 'Global', /**//* This lock is global, so we can't tell */
TO_CHAR (hk.BLOCK)
) blocking_others
FROM v$lock
hk, v$session bs, v$lock wk, v$session ws
WHERE hk.BLOCK = 1
AND hk.lmode != 0
AND hk.lmode != 1
AND wk.request != 0
AND wk.TYPE(+) = hk.TYPE
AND wk.id1(+) = hk.id1
AND
wk.id2(+) = hk.id2
AND hk.SID = bs.SID(+)
AND wk.SID =
ws.SID(+)
AND (bs.username IS NOT NULL)
AND (bs.username
<> 'SYSTEM')
AND (bs.username <> 'SYS')
ORDER
BY 1;
化版本的Q?/p>
SELECT SID, DECODE (BLOCK, 0, 'NO', 'YES') blocker,
DECODE (request, 0, 'NO', 'YES') waiter
FROM v$lock
WHERE
request > 0 OR BLOCK > 0
ORDER BY BLOCK DESC;