imp导入数据发现表空间被大量地消耗,详见...

tiangou 2003-10-27 06:35:32
同一数据库下有两个用户A和B,
要求两者的schema完全一样,现在A中也有数据,而B用户刚刚建立,里面什么都没有
我的做法是将A的所有对象全导出来,但不导数据和索引
然后再导出来的文件导入B用户下,这样两者的schema就保持一样

具体如下:

1、导出A的所有对象,参数文件如下:

userid=aa/aa@aaoa3
owner=A
rows=n
indexes=n
constraints=y
grants=n
log= D:\aaOA\导出\oa_exp.log
file=D:\aaOA\导出\oa_exp.dmp
direct=y
compress=n

生成的oa_exp.dmp文件有1.08M


2、导入到B对象,参数文件如下:

userid=aa/aa@aaoa3
fromuser=A
touser=B
rows=y
indexes=y
constraints=y
grants=y
log= D:\aaOA\导入\oa_imp.log
file=D:\aaOA\导出\oa_exp.dmp
ignore=y
RECALCULATE_STATISTICS=y

导入成功,但发现表空间增长了一倍,后来仔细发现1M多的文件,到数据库后成了825M,和A用户所有对象所耗的表空间相当,

不知道为什么,请高手指点,谢谢!


...全文
112 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
tiangou 2003-10-29
  • 打赏
  • 举报
回复
哦,谢谢!我好像明白为什么了,A用户对象下一共有622个表,每个表一开始就要消耗1M多的空间(我看建表语句,都是一样的,storage参数全是默认的),除此之外,很多表有主键,主键索引初始所耗的空间也是1M多,这样算来,一开始耗掉800多M也就不足为奇了!
xuke123456 2003-10-29
  • 打赏
  • 举报
回复
诸位请问:
有这样的问题又如何来解决呢?
jasoncheung 2003-10-28
  • 打赏
  • 举报
回复
compress之后,能否起到不创建和A用户一样的表空间大小呢?如果不是的话,也没什么用嘛
LGQDUCKY 2003-10-28
  • 打赏
  • 举报
回复
你可以尝试compress=y可以这种方法可用于整理数据库碎片,但不能改变
STORAGE的大小。方法也是要修改STORAGE的大小,或是从新用脚本建立表。
我的方法就是修改。DMP文件的STORAGE参数。
LGQDUCKY 2003-10-28
  • 打赏
  • 举报
回复
导入成功,但发现表空间增长了一倍,后来仔细发现1M多的文件,到数据库后成了825M,和A用户所有对象所耗的表空间相当,

当然会这样了,因为你从A用户导出的建立表的脚本,这个脚本里面的STORAGE分配空间
的数额是A用户表的数额,所有,在导进B用户时候,建立表的时候ORACLE会分别这么大的空间
来建立表。你用记事本打开备份 .dmp文件就可以清楚的知道了
tiangou 2003-10-28
  • 打赏
  • 举报
回复
to hdkkk(diablo2):
首先谢谢你答复,不过我还是有些不明白。

 表空间的创建是由系统完成的,它不属于某个用户,导出用户的对象,会将创建表空间的语句也导出来么?
“你可以尝试compress=y”,压缩有什么好处?
LGQDUCKY 2003-10-28
  • 打赏
  • 举报
回复
是的,如果没有设置STORAGE参数,将采用所在表空间的参数。
tiangou 2003-10-28
  • 打赏
  • 举报
回复
据我的理解,建表时storage参数的含义是:
  先预分配空间,也就initial参数所指定的大小,也就是64K
  接着根据minextents和next值来,分配随后的空间消耗,也就是1x1M,
也就是说一开始建表时,分配的空间也就是1M+64K

不知对不对?
tiangou 2003-10-28
  • 打赏
  • 举报
回复
to LGQDUCKY(飘) :建表时STORAGE分配空间一开始好像都不是很大,比如我取出B用户下某表的建表语句

-- Create table
create table BBS_LB
(
BIANH CHAR(14) not null,
KANWLBM CHAR(50),
SHUOM CHAR(200)
)
tablespace TS_DATA
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
pctincrease 0
);
-- Create/Recreate primary, unique and foreign key constraints
alter table BBS_LB
add constraint PK_BBS_LB primary key (BIANH)
using index
tablespace TS_INDEX
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
pctincrease 0
);

这是B用户的建表语句,这个语句是A用户导入后形成的,由PL/SQL Developer工具拉出来
其中storage参数分配也不是很多呀,怎么会一下子耗掉了那么多空间?

是不是还有些参数,上面的语句中没有写出来。

请再解释一下,谢谢!

hdkkk 2003-10-27
  • 打赏
  • 举报
回复
你可以尝试compress=y
hdkkk 2003-10-27
  • 打赏
  • 举报
回复
因为你导入的时候,.dmp文件包含创建和a相同的表空间的语句!

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧