问题是这样的:我们建立了一个ORACLE数据库,三个表数据空间,对应三个索引表空间,也应时说表数据与索引数据是分开存放的不同的表空间的。问题是:
现在在其中一个表空间中,有一个表,在最近几天内所占空间突然无故疯狂增大。4月14号,那个表有202万多条数据,占空间0.7G左右,4月14号以后,每当这个表增加10万多条数据,其所占表空间增加将近1G!!请问,出现这种情况,是什么原因造成的?????有高手请指教!! 谢谢!!
现在在其中一个表空间中,有一个表,在最近几天内所占空间突然无故疯狂增大。4月14号,那个表有202万多条数据,占空间0.7G左右,4月14号以后,每当这个表增加10万多条数据,其所占表空间增加将近1G!!请问,出现这种情况,是什么原因造成的?????有高手请指教!! 谢谢!!
解决方案 »
- 急:关于bulk collect
- oracle sql语句如何判断序列是否存在?
- oracle访问Sql server表问题。。。
- 请问大家这个sql语句怎么写呢
- oracle9i dedicated server->mts模式?
- ora-00381错误,oracle 9i中修改db_block_buffers数据库启动不起来
- 求助指导写一个oracle存储过程
- 如何在PL/SQL中建立一个每10分钟运行一次的存储过程!
- to_date()涵数的用法
- 存储过程中的'IN'和'KEY'有什么区别呢?
- oracle 几千万条数据 查询 有什么优化的方法没有,谢谢
- [500分]怎么实现oracle单向数据同步A主机上的数据库--->B主机上的数据库?要求达到每秒更新!
create table DW.F_PURCHASESTAT_DETAILS
(
OCCUR_DATE VARCHAR2(8),
ARRIVAL_DATE VARCHAR2(8),
ORDER_NO VARCHAR2(20),
LINE_NO VARCHAR2(20),
RELEASE_NO VARCHAR2(20),
RECEIPT_NO VARCHAR2(20),
INVOICE_NO VARCHAR2(20),
CSITECODE VARCHAR2(20),
CINVITEMCODE VARCHAR2(25),
CSUPPLIERCODE VARCHAR2(20),
CASSORTMENTCODE VARCHAR2(20),
CMANUFACTURERCODE VARCHAR2(20),
QTY_ARRIVED NUMBER,
QTY_INVOICED NUMBER,
QTY_ESTIMATED NUMBER,
AMT_ARRIVED NUMBER,
AMT_INVOICED NUMBER,
AMT_ESTIMATED NUMBER
)
tablespace DW_DATA
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Create/Recreate indexes
create index DW.F_PURSTAT_RECEIPT_OCCURDATE on DW.F_PURCHASESTAT_DETAILS (OCCUR_DATE)
tablespace DW_INDX
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
create index DW.INX_F_PURSTAT_DS_CASSORTCODE on DW.F_PURCHASESTAT_DETAILS (CASSORTMENTCODE)
tablespace DW_INDX
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
create index DW.INX_F_PURSTAT_DS_CINVITEMCODE on DW.F_PURCHASESTAT_DETAILS (CINVITEMCODE)
tablespace DW_INDX
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
create index DW.INX_F_PURSTAT_DS_CMANUCODE on DW.F_PURCHASESTAT_DETAILS (CMANUFACTURERCODE)
tablespace DW_INDX
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
create index DW.INX_F_PURSTAT_DS_CSITECODE on DW.F_PURCHASESTAT_DETAILS (CSITECODE)
tablespace DW_INDX
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);没有定长字段,也没有大字段。
as
v_ETL_TASK_ID INTEGER;
v_SUCCEED_FLAG CHAR(1);
v_ETL_ALL_FLAG CHAR(1);
v_TableOwner VARCHAR2(30);
v_FactTableName VARCHAR2(30);
v_TableName VARCHAR2(30);
v_TmpDate VARCHAR2(8);
v_MinDate VARCHAR2(8);
v_MaxDate VARCHAR2(8);
v_TerminalDate VARCHAR2(8);
v_Qty_Arrived NUMBER;
v_Qty_Invoiced NUMBER;
v_Counter INTEGER;
cursor cur is
select /*+NO_MERGE(r) NO_MERGE(i) NO_MERGE(t)*/ distinct
to_char(min(t.invoice_date),'yyyymm') invoiced_date,
to_char(r.arrival_date,'yyyymm') arrival_date,
r.order_no order_no,
r.line_no line_no,
r.release_no release_no,
r.receipt_no receipt_no,
--t.invoice_no invoice_no,
i.contract contract,
i.part_no part_no,
bi.pkg_purchasestat_api.Get_Vendor_No(r.order_no) vendor_no,
bi.pkg_purchasestat_api.Get_Assortment(i.contract,i.part_no,bi.pkg_purchasestat_api.Get_Vendor_No(r.order_no)) assortmentcode,
bi.pkg_purchasestat_api.Get_Manufacturer_ID(r.order_no,r.line_no,r.release_no) manufacturecode
from
ods.purchase_receipt_tab r,
ods.purchase_order_invoice_tab i,
ods.invoice_tab t
where r.order_no = i.order_no(+)
and r.line_no = i.line_no(+)
and r.release_no = i.release_no(+)
and r.receipt_no = i.receipt_no(+)
and i.ap_invoice_no = t.invoice_no(+)
and t.rowstate <> 'Cancelled'
and r.rowstate <> 'Cancelled'
and (i.part_no like '1%' or i.part_no like '2%')
and r.arrival_date is not null
--and t.party_type='SUPPLIER'
--and r.order_no = '300461'
group by
to_char(r.arrival_date,'yyyymm'),
r.order_no,
r.line_no,
r.release_no,
r.receipt_no,
--t.invoice_no,
i.contract,
i.part_no,
bi.pkg_purchasestat_api.Get_Vendor_No(r.order_no),
bi.pkg_purchasestat_api.Get_Assortment(i.contract,i.part_no,bi.pkg_purchasestat_api.Get_Vendor_No(r.order_no)),
bi.pkg_purchasestat_api.Get_Manufacturer_ID(r.order_no,r.line_no,r.release_no);
cursor cur_noinvoice is
select
to_char(prs.order_date,'yyyymm') order_date,
to_char(prs.real_arrival_date,'yyyymm') arrival_date,
prs.order_no,
prs.line_no,
prs.release_no,
prs.receipt_no,
prs.contract,
prs.part_no,
prs.vendor_no,
bi.pkg_purchasestat_api.Get_Assortment(prs.contract,prs.part_no,prs.vendor_no) assortmentcode,
bi.pkg_purchasestat_api.Get_Manufacturer_ID(prs.order_no,prs.line_no,prs.release_no) manufacturecode
from ods.purchase_receipt_statistics prs
where not exists (
select 1 from ods.purchase_order_invoice_tab poit
where poit.order_no = prs.order_no
and poit.line_no = prs.line_no
and poit.release_no = prs.release_no
and poit.receipt_no = prs.receipt_no
);
begin
BI.DISABLETABLEALLINDEX('DW.F_PURCHASESTAT_DETAILS');
delete from DW.F_PURCHASESTAT_DETAILS
where OCCUR_DATE = p_month;
commit;
从多表关联往一个表里插入数据,因为where条件的问题,可能会让临时表空间急剧增长你可以优化再检查优化一下你的sql语句看看是不是这方面的原因
select /*+NO_MERGE(r) NO_MERGE(i) NO_MERGE(t)*/
.....
....
from .....请问这有影响 吗?
NOLOGGING
DATAFILE 'D:\oracle\oradata\alcan\DW_DATA.ORA' SIZE 1024M REUSE
AUTOEXTEND
ON NEXT 512M MAXSIZE 32767M EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO ;
COMMIT;
CREATE TABLESPACE "DW_INDX"
NOLOGGING
DATAFILE 'D:\oracle\oradata\alcan\DW_INDX.ORA' SIZE 1024M REUSE
AUTOEXTEND
ON NEXT 512M MAXSIZE 32767M EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO ;
COMMIT;
楼主是先插入提交再查询,然后删除提交,频繁的重复操作会占用大量的表空间的,建议更改程序或每隔一段时间TRUNCATE TABLE,否则会一直空间猛涨的